
    rh                         d dl Z d dlmZm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)OptionalUnion)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
ef   de	e
ef   dee   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          m/var/www/html/ai-insurance-compliance-backend/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   r8   s    r&   modezGumbel.modeN   s    xxr'   c                 h    t         j                  t        j                  d      z  | j                  z  S )N   )mathpisqrtr   r8   s    r&   stddevzGumbel.stddevR   s"    $))A,&$**44r'   c                 8    | j                   j                  d      S )N   )rA   powr8   s    r&   variancezGumbel.varianceV   s    {{q!!r'   c                 J    | j                   j                         dt        z   z   S )Nr   )r   r3   r   r8   s    r&   entropyzGumbel.entropyZ   s    zz~~1~#566r'   r/   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupportr   r   floatr   boolr!   r+   r6   propertyr9   r;   rA   rE   rG   __classcell__)r%   s   @r&   r   r      s     *..9M9MNOG )-	M65=!M VU]#M  ~	M
 
M0:0 6f 6 6 f   5 5 5 "& " "7r'   )r>   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>r]      s;     "   + P H / C  *I7$ I7r'   