
    sg
                         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y)
    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scalec                    t        ||      \  | _        | _        t        j                  | j                  j
                        }t        |t              r6t        |t              r&t        |j                  d|j                  z
  |      }nat        t        j                  | j                  |j                        t        j                  | j                  d|j                  z
        |      }t               j                  t        dt        j                  | j                               t               j                  t        || j                         g}t         | E  |||       y )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          M/var/www/html/venv/lib/python3.12/site-packages/torch/distributions/gumbel.pyr   zGumbel.__init__"   s    ,S%8$*DHHNN+c6"z%'@

A		MWI%**5!eii-8+I N%//$***E)EFNDJJ;7	

 	JmL    c                     | j                  t        |      }| j                  j                  |      |_        | j                  j                  |      |_        t
        |   ||      S )N)	_instance)_get_checked_instancer   r   expandr   r   )r   batch_shaper%   newr!   s       r"   r'   zGumbel.expand5   sR    ((;((//+.JJ%%k2	w~kS~99r#   c                     | j                   r| j                  |       | j                  |z
  | j                  z  }||j	                         z
  | j                  j                         z
  S N)_validate_args_validate_sampler   r   explog)r   valueys      r"   log_probzGumbel.log_prob<   sP    !!%(XX+AEEGtzz~~///r#   c                 B    | j                   | j                  t        z  z   S r+   )r   r   r
   r   s    r"   meanzGumbel.meanB   s    xx$**~555r#   c                     | j                   S r+   )r   r4   s    r"   modezGumbel.modeF   s    xxr#   c                 h    t         j                  t        j                  d      z  | j                  z  S )N   )mathpisqrtr   r4   s    r"   stddevzGumbel.stddevJ   s"    $))A,&$**44r#   c                 8    | j                   j                  d      S )N   )r=   powr4   s    r"   variancezGumbel.varianceN   s    {{q!!r#   c                 J    | j                   j                         dt        z   z   S )Nr   )r   r/   r
   r4   s    r"   entropyzGumbel.entropyR   s    zz~~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     *..9M9MNOGM&:0 6 6   5 5 " "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      s5       + P H / C *C7$ C7r#   