
    Vh7                         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y)    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 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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          J/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributions/gumbel.pyr   zGumbel.__init__$   s    ,S%8$*DHHNN+c7#
5'(B

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.expand7   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$   returnc                 B    | j                   | j                  t        z  z   S r,   )r   r   r
   r   s    r#   meanzGumbel.meanD   s    xx$**~555r$   c                     | j                   S r,   )r   r6   s    r#   modezGumbel.modeH   s    xxr$   c                 h    t         j                  t        j                  d      z  | j                  z  S )N   )mathpisqrtr   r6   s    r#   stddevzGumbel.stddevL   s"    $))A,&$**44r$   c                 8    | j                   j                  d      S )N   )r?   powr6   s    r#   variancezGumbel.varianceP   s    {{q!!r$   c                 J    | j                   j                         dt        z   z   S )Nr   )r   r0   r
   r6   s    r#   entropyzGumbel.entropyT   s    zz~~1~#566r$   r,   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   r(   r3   propertyr   r7   r9   r?   rC   rE   __classcell__)r"   s   @r#   r   r      s     *..9M9MNOGM&:0 6f 6 6 f   5 5 5 "& " "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>rX      s8       + P H / C  *D7$ D7r$   