Ë
    óÍ:jÇ  ã                   óœ   — 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          €úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/distributions/gumbel.pyr!   zGumbel.__init__%   sù   ø€ ô  -¨S°%Ó8ÑˆŒ�$”*Ü—‘˜DŸH™HŸN™NÓ+ˆÜ�cœ7Ô#¬
°5¼'Ô(BÜ §
¡
¨A°·	±	©MÈÔW‰IäÜ—‘ §¡¨%¯*©*Ó5Ü—‘ §¡¨!¨e¯i©i©-Ó8Ø+ôˆIô ‹N×ÑÜ ¬%¯/©/¸$¿*¹*Ó*EÐ)EÔFÜ‹N×ÑÜ ¨D¯J©J¨;Ô7ð	
ˆ
ô 	‰Ñ˜ J¸mÐÕ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   ø€ Ø×(Ñ(¬°Ó;ˆØ—(‘(—/‘/ +Ó.ˆŒØ—J‘J×%Ñ% kÓ2ˆŒ	Ü‰w‰~˜k°Sˆ~Ó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   € Ø×ÒØ×!Ñ! %Ô(Ø�X‰X˜Ñ §¡Ñ+ˆØ�A—E‘E“G‘˜tŸz™zŸ~™~Ó/Ñ/Ð/r'   c                 óB   — | j                   | j                  t        z  z   S r/   )r   r   r   ©r"   s    r&   ÚmeanzGumbel.meanJ   s   € à�x‰x˜$Ÿ*™*¤~Ñ5Ñ5Ð5r'   c                 ó   — | j                   S r/   )r   r8   s    r&   ÚmodezGumbel.modeN   s   € à�x‰xˆ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   € Ø�z‰z�~‰~Ó 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ñ   ø„ ñð *×.Ñ.¸×9MÑ9MÑN€OØ×Ñ€Gð )-ñ	Mà�6˜5�=Ñ!ðMð �V˜U�]Ñ#ðMð   ‘~ð	Mð
 
õMõ0:ò0ð ð6�fò 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'   