
    }Yh                         d dl Z d dlmZm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)OptionalUnion)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
ef         de	e
ef         dee         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          l/var/www/tools.fuzzalab.pt/emblema-extractor/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   r8   s    r&   modezGumbel.modeN   s	    xr'   c                 T    t           j        t          j        d          z  | j        z  S )N   )mathpisqrtr   r8   s    r&   stddevzGumbel.stddevR   s    $)A,,&$*44r'   c                 6    | j                             d          S )N   )rA   powr8   s    r&   variancezGumbel.varianceV   s    {q!!!r'   c                 J    | j                                         dt          z   z   S )Nr   )r   r3   r   r8   s    r&   entropyzGumbel.entropyZ   s    z~~1~#566r'   r/   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   r   floatr   boolr!   r+   r6   propertyr9   r;   rA   rE   rG   __classcell__)r%   s   @r&   r   r      s         *.9MNNOG )-	M M65=!M VU]#M  ~	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>   typingr   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>r]      s    " " " " " " " "        + + + + + + P P P P P P H H H H H H H H / / / / / / C C C C C C C C       *I7 I7 I7 I7 I7$ I7 I7 I7 I7 I7r'   