
    קg
                         d dl Z d dlmZ d dl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gZ G d	 de          ZdS )
    N)Number)constraints)TransformedDistribution)AffineTransformExpTransform)Uniform)broadcast_alleuler_constantGumbelc                        e Zd ZdZej        ej        dZej        Zd fd	Z	d fd	Z
d Zed             Zed             Zed	             Ze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scaleNc                    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   )validate_argsr   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          V/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/distributions/gumbel.pyr   zGumbel.__init__"   s'   ,S%88$*DHN++c6"" 	z%'@'@ 	
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.expand5   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_prob<   sW     	)!!%(((X+AEEGGtz~~////r#   c                 0    | j         | j        t          z  z   S r+   )r   r   r
   r   s    r"   meanzGumbel.meanB   s    x$*~555r#   c                     | j         S r+   )r   r4   s    r"   modezGumbel.modeF   s	    xr#   c                 T    t           j        t          j        d          z  | j        z  S )N   )mathpisqrtr   r4   s    r"   stddevzGumbel.stddevJ   s    $)A,,&$*44r#   c                 6    | j                             d          S )N   )r=   powr4   s    r"   variancezGumbel.varianceN   s    {q!!!r#   c                 J    | j                                         dt          z   z   S )Nr   )r   r/   r
   r4   s    r"   entropyzGumbel.entropyR   s    z~~1~#566r#   r+   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   r'   r2   propertyr5   r7   r=   rA   rC   __classcell__)r!   s   @r"   r   r      s         *.9MNNOGM M M M M M&: : : : : :0 0 0 6 6 X6   X 5 5 X5 " " X"7 7 7 7 7 7 7r#   )r:   numbersr   r   torch.distributionsr   ,torch.distributions.transformed_distributionr   torch.distributions.transformsr   r   torch.distributions.uniformr   torch.distributions.utilsr	   r
   __all__r    r#   r"   <module>rV      s            + + + + + + P P P P P P H H H H H H H H / / / / / / C C C C C C C C *C7 C7 C7 C7 C7$ C7 C7 C7 C7 C7r#   