
    9j                         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de	e
z  de	e
z  dedz  ddf 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scaleNr   r   validate_argsreturnc                    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   )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/media/conek/DATA/Code/OCR/venv/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.expand=   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_probD   sP    !!%(XX+AEEGtzz~~///r%   c                 B    | j                   | j                  t        z  z   S r-   )r   r   r
   r    s    r$   meanzGumbel.meanJ   s    xx$**~555r%   c                     | j                   S r-   )r   r6   s    r$   modezGumbel.modeN   s    xxr%   c                 h    t         j                  t        j                  d      z  | j                  z  S )N   )mathpisqrtr   r6   s    r$   stddevzGumbel.stddevR   s"    $))A,&$**44r%   c                 8    | j                   j                  d      S )N   )r?   powr6   s    r$   variancezGumbel.varianceV   s    {{q!!r%   c                 J    | j                   j                         dt        z   z   S )Nr   )r   r1   r
   r6   s    r$   entropyzGumbel.entropyZ   s    zz~~1~#566r%   r-   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   floatboolr   r)   r4   propertyr7   r9   r?   rC   rE   __classcell__)r#   s   @r$   r   r      s     *..9M9MNOG &*	Me^M ~M d{	M
 
M0: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>rZ      s8       + P H / C  *J7$ J7r%   