
    j                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d	gZ G d
 d	e          ZdS )    N)Tensor)constraints)TransformedDistribution)AffineTransformExpTransform)Uniform)broadcast_alleuler_constant)_NumberGumbelc            	            e Zd ZdZej        ej        dZej        Z	 dde	e
z  de	e
z  dedz  ddf fdZd fd		Zd
 Zede	fd            Zede	fd            Zede	fd            Zede	fd            Zd Z xZS )r   a  
    Samples from a Gumbel Distribution.

    Examples::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Gumbel(torch.tensor([1.0]), torch.tensor([2.0]))
        >>> m.sample()  # sample from Gumbel distribution with loc=1, scale=2
        tensor([ 1.0124])

    Args:
        loc (float or Tensor): Location parameter of the distribution
        scale (float or Tensor): Scale parameter of the distribution
    locscaleNr   r   validate_argsreturnc                    t          ||          \  | _        | _        t          j        | j        j                  }t          |t                    r5t          |t                    r t          |j	        d|j
        z
  |          }nOt          t          j        | j        |j	                  t          j        | j        d|j
        z
            |          }t                      j        t          dt          j        | j                             t                      j        t          || j                   g}t!                                          |||           d S )N   )r   r   r   )r	   r   r   torchfinfodtype
isinstancer   r   tinyeps	full_liker   invr   	ones_likesuper__init__)selfr   r   r   r   	base_dist
transforms	__class__s          d/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/torch/distributions/gumbel.pyr   zGumbel.__init__%   s)     -S%88$*DHN++c7## 	
5'(B(B 	
A	MWWWII%*55!ei-88+  I NN%/$**E*E)EFFFNNDJ;777	

 	JmLLLLL    c                     |                      t          |          }| j                            |          |_        | j                            |          |_        t                                          ||          S )N)	_instance)_get_checked_instancer   r   expandr   r   )r    batch_shaper'   newr#   s       r$   r)   zGumbel.expand=   s^    ((;;(//+..J%%k22	ww~~kS~999r%   c                     | j         r|                     |           | j        |z
  | j        z  }||                                z
  | j                                        z
  S N)_validate_args_validate_sampler   r   explog)r    valueys      r$   log_probzGumbel.log_probD   sW     	)!!%(((X+AEEGGtz~~////r%   c                 0    | j         | j        t          z  z   S r-   )r   r   r
   r    s    r$   meanzGumbel.meanJ   s    x$*~555r%   c                     | j         S r-   )r   r6   s    r$   modezGumbel.modeN   s	    xr%   c                 T    t           j        t          j        d          z  | j        z  S )N   )mathpisqrtr   r6   s    r$   stddevzGumbel.stddevR   s    $)A,,&$*44r%   c                 6    | j                             d          S )N   )r?   powr6   s    r$   variancezGumbel.varianceV   s    {q!!!r%   c                 J    | j                                         dt          z   z   S )Nr   )r   r1   r
   r6   s    r$   entropyzGumbel.entropyZ   s    z~~1~#566r%   r-   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   floatboolr   r)   r4   propertyr7   r9   r?   rC   rE   __classcell__)r#   s   @r$   r   r      s         *.9MNNOG &*	M Me^M ~M d{	M
 
M M M M M M0: : : : : :0 0 0 6f 6 6 6 X6 f    X 5 5 5 5 X5 "& " " " X"7 7 7 7 7 7 7r%   )r<   r   r   torch.distributionsr   ,torch.distributions.transformed_distributionr   torch.distributions.transformsr   r   torch.distributions.uniformr   torch.distributions.utilsr	   r
   torch.typesr   __all__r    r%   r$   <module>rZ      s            + + + + + + P P P P P P H H H H H H H H / / / / / / C C C C C C C C       *J7 J7 J7 J7 J7$ J7 J7 J7 J7 J7r%   