§
    Ÿ²Åjè  ã                   ór   — d dl 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gZd„ Z G d	„ de¦  «        ZdS )
é    )ÚNumberN)Úconstraints)ÚExponentialFamily)Úbroadcast_all)Ú_sizeÚGammac                 ó*   — t          j        | ¦  «        S ©N)ÚtorchÚ_standard_gamma)Úconcentrations    úJC:\Projects\Historical\venv\Lib\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„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zdˆ fd	„	Zdˆ fd
„	Z ej        ¦   «         fdedej        fd„Zd„ Zd„ Ze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   c                 ó    — | j         | j        z  S r
   r   ©Úselfs    r   Úmeanz
Gamma.mean+   s   € àÔ! D¤IÑ-Ð-r   c                 óN   — | j         dz
  | j        z                       d¬¦  «        S )Né   r   ©Úmin)r   r   Úclampr   s    r   Úmodez
Gamma.mode/   s(   € àÔ# aÑ'¨4¬9Ñ4×;Ò;ÀÐ;ÑBÔBÐBr   c                 óF   — | j         | j                             d¦  «        z  S )Né   )r   r   Úpowr   s    r   ÚvariancezGamma.variance3   s   € àÔ! D¤I§M¢M°!Ñ$4Ô$4Ñ4Ð4r   Nc                 ó6  •— t          ||¦  «        \  | _        | _        t          |t          ¦  «        r)t          |t          ¦  «        rt          j        ¦   «         }n| j                             ¦   «         }t          ¦   «          	                    ||¬¦  «         d S )N©Úvalidate_args)
r   r   r   Ú
isinstancer   r   ÚSizeÚsizeÚsuperÚ__init__)r   r   r   r#   Úbatch_shapeÚ	__class__s        €r   r(   zGamma.__init__7   sƒ   ø€ Ý(5°mÀTÑ(JÔ(JÑ%ˆÔ˜DœIÝ�m¥VÑ,Ô,ð 	4µ¸DÅ&Ñ1IÔ1Ið 	4Ýœ*™,œ,ˆKˆKàÔ,×1Ò1Ñ3Ô3ˆKÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBr   c                 óN  •— |                       t          |¦  «        }t          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   r-   zGamma.expand?   sŠ   ø€ Ø×(Ò(­°	Ñ:Ô:ˆÝ”j Ñ-Ô-ˆØ Ô.×5Ò5°kÑBÔBˆÔØ”9×#Ò# KÑ0Ô0ˆŒÝ�e�SÑÔ×"Ò" ;¸eÐ"ÑDÔDÐDØ!Ô0ˆÔØˆ
r   Úsample_shapeÚreturnc                 ó<  — |                       |¦  «        }t          | j                             |¦  «        ¦  «        | j                             |¦  «        z  }|                     ¦   «                              t          j        |j	        ¦  «        j
        ¬¦  «         |S )Nr   )Ú_extended_shaper   r   r-   r   ÚdetachÚclamp_r   ÚfinfoÚdtypeÚtiny)r   r1   ÚshapeÚvalues       r   ÚrsamplezGamma.rsampleH   s‘   € Ø×$Ò$ \Ñ2Ô2ˆÝ Ô 2× 9Ò 9¸%Ñ @Ô @ÑAÔAÀDÄI×DTÒDTØñE
ô E
ñ 
ˆð 	�Š‰Œ×ÒÝ”˜EœKÑ(Ô(Ô-ð 	ñ 	
ô 	
ð 	
ð ˆr   c                 óT  — t          j        || j        j        | j        j        ¬¦  «        }| j        r|                      |¦  «         t          j        | j        | j        ¦  «        t          j        | j        dz
  |¦  «        z   | j        |z  z
  t          j	        | j        ¦  «        z
  S )N)r8   Údevicer   )
r   Ú	as_tensorr   r8   r>   r.   Ú_validate_sampleÚxlogyr   Úlgamma©r   r;   s     r   Úlog_probzGamma.log_probR   s›   € Ý” ¨T¬Y¬_ÀTÄYÔEUÐVÑVÔVˆØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(åŒK˜Ô*¨D¬IÑ6Ô6ÝŒk˜$Ô,¨qÑ0°%Ñ8Ô8ñ9àŒi˜%Ññ õ Œ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   rB   Údigammar   s    r   ÚentropyzGamma.entropy]   s[   € àÔÝŒi˜œ	Ñ"Ô"ñ#åŒl˜4Ô-Ñ.Ô.ñ/ð �TÔ'Ñ'­5¬=¸Ô9KÑ+LÔ+LÑLñMð	
r   c                 ó&   — | j         dz
  | j         fS ©Nr   r   r   s    r   Ú_natural_paramszGamma._natural_paramse   s   € àÔ" QÑ&¨¬¨
Ð3Ð3r   c                 óŒ   — t          j        |dz   ¦  «        |dz   t          j        |                     ¦   «          ¦  «        z  z   S rJ   )r   rB   rF   Ú
reciprocal)r   ÚxÚys      r   Ú_log_normalizerzGamma._log_normalizeri   s8   € ÝŒ|˜A ™EÑ"Ô" a¨!¡e­u¬y¸!¿,º,¹.¼.¸Ñ/IÔ/IÑ%IÑIÐIr   c                 ó”   — | j         r|                      |¦  «         t          j                             | j        | j        |z  ¦  «        S r
   )r.   r@   r   ÚspecialÚgammaincr   r   rC   s     r   Úcdfz	Gamma.cdfl   sC   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(ÝŒ}×%Ò% dÔ&8¸$¼)ÀeÑ:KÑLÔLÐLr   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpositiveÚarg_constraintsÚnonnegativeÚsupportÚhas_rsampleÚ_mean_carrier_measureÚpropertyr   r   r    r(   r-   r   r%   r   ÚTensorr<   rD   rH   rK   rP   rT   Ú__classcell__)r*   s   @r   r   r      sƒ  ø€ € € € € ðð ð" %Ô-ØÔ$ðð €Oð Ô%€GØ€KØÐàð.ð .ñ „Xð.ð ðCð Cñ „XðCð ð5ð 5ñ „Xð5ðCð Cð Cð Cð Cð Cðð ð ð ð ð ð -7¨E¬J©L¬Lð ð  Eð ¸U¼\ð ð ð ð ð	
ð 	
ð 	
ð
ð 
ð 
ð ð4ð 4ñ „Xð4ðJð Jð JðMð Mð Mð Mð Mð Mð Mr   )Únumbersr   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   Útorch.typesr   Ú__all__r   r   © r   r   ú<module>ri      sÉ   ðà Ð Ð Ð Ð Ð à €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð ð ˆ)€ð0ð 0ð 0ð]Mð ]Mð ]Mð ]Mð ]MÐñ ]Mô ]Mð ]Mð ]Mð ]Mr   