Ë
    óÍ:jD  ã                   ó~   — 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
 d dlmZmZ dgZd	„ Z G d
„ de«      Zy)é    )ÚOptionalÚUnionN)ÚTensor)Úconstraints)ÚExponentialFamily)Úbroadcast_all)Ú_NumberÚ_sizeÚGammac                 ó,   — t        j                  | «      S ©N)ÚtorchÚ_standard_gamma)Úconcentrations    ún/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/distributions/gamma.pyr   r      s   € Ü× Ñ  Ó/Ð/ó    c            	       ó\  ‡ — e Zd ZdZej
                  ej
                  dœZej                  ZdZ	dZ
edefd„«       Zedefd„«       Zedefd„«       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 ej.                  «       fdedefd„Zd„ Zd„ Zedeeef   fd„«       Zd„ Zd„ Zˆ xZ S )r   aS  
    Creates a Gamma distribution parameterized by shape :attr:`concentration` and :attr:`rate`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Gamma(torch.tensor([1.0]), torch.tensor([1.0]))
        >>> m.sample()  # Gamma distributed with concentration=1 and rate=1
        tensor([ 0.1046])

    Args:
        concentration (float or Tensor): shape parameter of the distribution
            (often referred to as alpha)
        rate (float or Tensor): rate parameter of the distribution
            (often referred to as beta), rate = 1 / scale
    ©r   ÚrateTr   Úreturnc                 ó4   — | j                   | j                  z  S r   r   ©Úselfs    r   Úmeanz
Gamma.mean-   s   € à×!Ñ! D§I¡IÑ-Ð-r   c                 óZ   — | j                   dz
  | j                  z  j                  d¬«      S )Né   r   ©Úmin)r   r   Úclampr   s    r   Úmodez
Gamma.mode1   s*   € à×#Ñ# aÑ'¨4¯9©9Ñ4×;Ñ;ÀÐ;ÓBÐBr   c                 óR   — | j                   | j                  j                  d«      z  S )Né   )r   r   Úpowr   s    r   ÚvariancezGamma.variance5   s    € à×!Ñ! D§I¡I§M¡M°!Ó$4Ñ4Ð4r   Nr   r   Úvalidate_argsc                 óø   •— t        ||«      \  | _        | _        t        |t        «      r%t        |t        «      rt        j                  «       }n| j                  j                  «       }t        ‰| �%  ||¬«       y )N©r%   )
r   r   r   Ú
isinstancer	   r   ÚSizeÚsizeÚsuperÚ__init__)r   r   r   r%   Úbatch_shapeÚ	__class__s        €r   r,   zGamma.__init__9   s_   ø€ ô )6°mÀTÓ(JÑ%ˆÔ˜DœIÜ�m¤WÔ-´*¸TÄ7Ô2KÜŸ*™*›,‰Kà×,Ñ,×1Ñ1Ó3ˆKÜ‰Ñ˜°MÐÕBr   c                 ó*  •— | j                  t        |«      }t        j                  |«      }| j                  j                  |«      |_        | j                  j                  |«      |_        t        t        |�#  |d¬«       | j                  |_	        |S )NFr'   )
Ú_get_checked_instancer   r   r)   r   Úexpandr   r+   r,   Ú_validate_args)r   r-   Ú	_instanceÚnewr.   s       €r   r1   zGamma.expandF   sy   ø€ Ø×(Ñ(¬°	Ó:ˆÜ—j‘j Ó-ˆØ ×.Ñ.×5Ñ5°kÓBˆÔØ—9‘9×#Ñ# KÓ0ˆŒÜŒe�SÑ" ;¸eÐ"ÔDØ!×0Ñ0ˆÔØˆ
r   Úsample_shapec                 ó6  — | j                  |«      }t        | j                  j                  |«      «      | j                  j                  |«      z  }|j                  «       j                  t        j                  |j                  «      j                  ¬«       |S )Nr   )Ú_extended_shaper   r   r1   r   ÚdetachÚclamp_r   ÚfinfoÚdtypeÚtiny)r   r5   ÚshapeÚvalues       r   ÚrsamplezGamma.rsampleO   s   € Ø×$Ñ$ \Ó2ˆÜ × 2Ñ 2× 9Ñ 9¸%Ó @ÓAÀDÇIÁI×DTÑDTØóE
ñ 
ˆð 	�‰‹×ÑÜ—‘˜EŸK™KÓ(×-Ñ-ð 	ô 	
ð ˆr   c                 ó¸  — t        j                  || j                  j                  | j                  j                  ¬«      }| j
                  r| j                  |«       t        j                  | j                  | j                  «      t        j                  | j                  dz
  |«      z   | j                  |z  z
  t        j                  | j                  «      z
  S )N)r;   Údevicer   )
r   Ú	as_tensorr   r;   rA   r2   Ú_validate_sampleÚxlogyr   Úlgamma©r   r>   s     r   Úlog_probzGamma.log_probY   s¢   € Ü—‘ ¨T¯Y©Y¯_©_ÀTÇYÁY×EUÑEUÔVˆØ×ÒØ×!Ñ! %Ô(ä�K‰K˜×*Ñ*¨D¯I©IÓ6Ü�k‰k˜$×,Ñ,¨qÑ0°%Ó8ñ9à�i‰i˜%Ññ ô �l‰l˜4×-Ñ-Ó.ñ/ð	
r   c                 óú   — | j                   t        j                  | j                  «      z
  t        j                  | j                   «      z   d| j                   z
  t        j
                  | j                   «      z  z   S )Ng      ð?)r   r   Úlogr   rE   Údigammar   s    r   ÚentropyzGamma.entropyd   sf   € à×ÑÜ�i‰i˜Ÿ	™	Ó"ñ#ä�l‰l˜4×-Ñ-Ó.ñ/ð �T×'Ñ'Ñ'¬5¯=©=¸×9KÑ9KÓ+LÑLñMð	
r   c                 ó:   — | j                   dz
  | j                   fS ©Nr   r   r   s    r   Ú_natural_paramszGamma._natural_paramsl   s   € à×"Ñ" QÑ&¨¯©¨
Ð3Ð3r   c                 óˆ   — t        j                  |dz   «      |dz   t        j                  |j                  «        «      z  z   S rM   )r   rE   rI   Ú
reciprocal)r   ÚxÚys      r   Ú_log_normalizerzGamma._log_normalizerp   s4   € Ü�|‰|˜A ™EÓ" a¨!¡e¬u¯y©y¸!¿,¹,».¸Ó/IÑ%IÑIÐIr   c                 óª   — | j                   r| j                  |«       t        j                  j	                  | j
                  | j                  |z  «      S r   )r2   rC   r   ÚspecialÚgammaincr   r   rF   s     r   Úcdfz	Gamma.cdfs   s?   € Ø×ÒØ×!Ñ! %Ô(Ü�}‰}×%Ñ% d×&8Ñ&8¸$¿)¹)ÀeÑ:KÓLÐLr   r   )!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpositiveÚarg_constraintsÚnonnegativeÚsupportÚhas_rsampleÚ_mean_carrier_measureÚpropertyr   r   r    r$   r   Úfloatr   Úboolr,   r1   r   r)   r
   r?   rG   rK   ÚtuplerN   rS   rW   Ú__classcell__)r.   s   @r   r   r      s7  ø„ ñð$ %×-Ñ-Ø×$Ñ$ñ€Oð ×%Ñ%€GØ€KØÐàð.�fò .ó ð.ð ðC�fò Có ðCð ð5˜&ò 5ó ð5ð )-ñ	Cà˜V U˜]Ñ+ðCð �F˜E�MÑ"ðCð   ‘~ð	Cð
 
õCõð -7¨E¯J©J«Lñ  Eð ¸Vó ò	
ò
ð ð4  v¨v ~Ñ!6ò 4ó ð4òJöMr   )Útypingr   r   r   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   Útorch.typesr	   r
   Ú__all__r   r   © r   r   ú<module>rn      s9   ðç "ã Ý Ý +Ý <Ý 3ß &ð ˆ)€ò0ôcMÐõ cMr   