
    9i                         S SK r S SKJrJ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)OptionalUnion)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\
\\4   S\
\\4   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          Z/var/www/html/land-doc-ocr/venv/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                  [        -  -   $ r2   )r   r   r   r#   s    r'   meanGumbel.meanJ   s    xx$**~555r)   c                     U R                   $ r2   )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   )rG   powr<   s    r'   varianceGumbel.varianceV   s    {{q!!r)   c                 J    U R                   R                  5       S[        -   -   $ )Nr   )r   r6   r   r<   s    r'   entropyGumbel.entropyZ   s    zz~~1~#566r)   r2   )__name__
__module____qualname____firstlineno____doc__r   realpositivearg_constraintssupportr   r   floatr   boolr"   r-   r9   propertyr=   r@   rG   rL   rO   __static_attributes____classcell__)r&   s   @r'   r   r      s     *..9M9MNOG )-	M65=!M VU]#M  ~	M
 
M M0:0 6f 6 6 f   5 5 5 "& " "7 7r)   )rD   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>rh      s;     "   + P H / C  *I7$ I7r)   