
    ȅi                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S	/r " S
 S	\5      rg)    N)Tensor)constraints)TransformedDistribution)AffineTransformExpTransform)Uniform)broadcast_alleuler_constant)_NumberGumbelc            	         ^  \ rS rSrSr\R                  \R                  S.r\R                  r	 SS\
\-  S\
\-  S\S-  SS4U 4S	 jjjrSU 4S
 jjrS r\S\
4S j5       r\S\
4S j5       r\S\
4S j5       r\S\
4S j5       rS rSrU =r$ )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                   > [        X5      u  U l        U l        [        R                  " U R                  R
                  5      n[        U[        5      (       a8  [        U[        5      (       a#  [        UR                  SUR                  -
  US9nO`[        [        R                  " U R                  UR                  5      [        R                  " U R                  SUR                  -
  5      US9n[        5       R                  [        S[        R                  " U R                  5      * S9[        5       R                  [        XR                  * S9/n[         TU ]E  XVUS9  g )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          T/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributions/gumbel.pyr    Gumbel.__init__%   s      -S8$*DHHNN+c7##
5'(B(B

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

 	mL    c                    > U R                  [        U5      nU R                  R                  U5      Ul        U R                  R                  U5      Ul        [
        TU ]  XS9$ )N)	_instance)_get_checked_instancer   r   expandr   r   )r!   batch_shaper)   newr$   s       r%   r+   Gumbel.expand=   sP    ((;((//+.JJ%%k2	w~k~99r'   c                     U R                   (       a  U R                  U5        U R                  U-
  U R                  -  nX"R	                  5       -
  U R                  R                  5       -
  $ N)_validate_args_validate_sampler   r   explog)r!   valueys      r%   log_probGumbel.log_probD   sN    !!%(XX+EEGtzz~~///r'   c                 B    U R                   U R                  [        -  -   $ r0   )r   r   r
   r!   s    r%   meanGumbel.meanJ   s    xx$**~555r'   c                     U R                   $ r0   )r   r:   s    r%   modeGumbel.modeN   s    xxr'   c                 j    [         R                  [         R                  " S5      -  U R                  -  $ )N   )mathpisqrtr   r:   s    r%   stddevGumbel.stddevR   s"    $))A,&$**44r'   c                 8    U R                   R                  S5      $ )N   )rE   powr:   s    r%   varianceGumbel.varianceV   s    {{q!!r'   c                 J    U R                   R                  5       S[        -   -   $ )Nr   )r   r4   r
   r:   s    r%   entropyGumbel.entropyZ   s    zz~~1~#566r'   r0   )__name__
__module____qualname____firstlineno____doc__r   realpositivearg_constraintssupportr   floatboolr    r+   r7   propertyr;   r>   rE   rJ   rM   __static_attributes____classcell__)r$   s   @r%   r   r      s     *..9M9MNOG &*	Me^M ~M d{	M
 
M M0:0 6f 6 6 f   5 5 5 "& " "7 7r'   )rB   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>re      s8       + P H / C  *J7$ J7r'   