§
    Ÿ²ÅjÚ  ã                   ó€   — d dl Z d dlZd dlmZ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dS )	é    N)ÚinfÚnan)ÚChi2Úconstraints)ÚDistribution)Ú_standard_normalÚbroadcast_all)Ú_sizeÚStudentTc                   óò   ‡ — e Zd ZdZej        ej        ej        dœZej        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ˆ xZS )r   a  
    Creates a Student's t-distribution parameterized by degree of
    freedom :attr:`df`, mean :attr:`loc` and scale :attr:`scale`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = StudentT(torch.tensor([2.0]))
        >>> m.sample()  # Student's t-distributed with degrees of freedom=2
        tensor([ 0.1046])

    Args:
        df (float or Tensor): degrees of freedom
        loc (float or Tensor): mean of the distribution
        scale (float or Tensor): scale of the distribution
    )ÚdfÚlocÚscaleTc                 óv   — | j                              t          j        ¬¦  «        }t          || j        dk    <   |S )N©Úmemory_formaté   )r   ÚcloneÚtorchÚcontiguous_formatr   r   ©ÚselfÚms     úMC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/studentT.pyÚmeanzStudentT.mean(   s.   € àŒH�NŠN­Ô)@ˆNÑAÔAˆÝˆˆ$Œ'�QŠ,‰Øˆó    c                 ó   — | j         S ©N)r   )r   s    r   ÚmodezStudentT.mode.   s	   € àŒxˆr   c                 ó€  — | j                              t          j        ¬¦  «        }| j        | j         dk                                  d¦  «        | j         | j         dk             z  | j         | j         dk             dz
  z  || j         dk    <   t          || j         dk    | j         dk    z  <   t          || j         dk    <   |S )Nr   é   r   )r   r   r   r   r   Úpowr   r   r   s     r   ÚvariancezStudentT.variance2   s§   € àŒG�MŠM­Ô(?ˆMÑ@Ô@ˆàŒJ�t”w ’{Ô#×'Ò'¨Ñ*Ô*ØŒg�d”g ’kÔ"ñ#àŒw�t”w ’{Ô# aÑ'ñ)ð 	
ˆ$Œ'�AŠ+‰õ
 -0ˆˆ4Œ7�aŠ<˜DœG ašKÑ
(Ñ)Ýˆˆ$Œ'�QŠ,‰Øˆr   ç        ç      ð?Nc                 óú   •— t          |||¦  «        \  | _        | _        | _        t	          | j        ¦  «        | _        | j                             ¦   «         }t          ¦   «                              ||¬¦  «         d S )N©Úvalidate_args)	r	   r   r   r   r   Ú_chi2ÚsizeÚsuperÚ__init__)r   r   r   r   r(   Úbatch_shapeÚ	__class__s         €r   r,   zStudentT.__init__>   sb   ø€ Ý(5°b¸#¸uÑ(EÔ(EÑ%ˆŒ�”˜4œ:Ý˜$œ'‘]”]ˆŒ
Ø”g—l’l‘n”nˆÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBr   c                 óÊ  •— |                       t          |¦  «        }t          j        |¦  «        }| j                             |¦  «        |_        | j                             |¦  «        |_        | j                             |¦  «        |_        | j                             |¦  «        |_        t          t          |¦  «         
                    |d¬¦  «         | j        |_        |S )NFr'   )Ú_get_checked_instancer   r   ÚSizer   Úexpandr   r   r)   r+   r,   Ú_validate_args)r   r-   Ú	_instanceÚnewr.   s       €r   r2   zStudentT.expandD   s²   ø€ Ø×(Ò(­°9Ñ=Ô=ˆÝ”j Ñ-Ô-ˆØ”—’ Ñ,Ô,ˆŒØ”(—/’/ +Ñ.Ô.ˆŒØ”J×%Ò% kÑ2Ô2ˆŒ	Ø”J×%Ò% kÑ2Ô2ˆŒ	Ý�h˜ÑÔ×%Ò% kÀÐ%ÑGÔGÐGØ!Ô0ˆÔØˆ
r   Úsample_shapeÚreturnc                 ó  — |                       |¦  «        }t          || j        j        | j        j        ¬¦  «        }| j                             |¦  «        }|t          j        || j        z  ¦  «        z  }| j	        | j
        |z  z   S )N)ÚdtypeÚdevice)Ú_extended_shaper   r   r9   r:   r)   Úrsampler   Úrsqrtr   r   )r   r6   ÚshapeÚXÚZÚYs         r   r<   zStudentT.rsampleO   su   € ð ×$Ò$ \Ñ2Ô2ˆÝ˜U¨$¬'¬-ÀÄÄÐOÑOÔOˆØŒJ×Ò˜|Ñ,Ô,ˆØ•”˜A ¤™KÑ(Ô(Ñ(ˆØŒx˜$œ* q™.Ñ(Ð(r   c                 óè  — | j         r|                      |¦  «         || j        z
  | j        z  }| j                             ¦   «         d| j                             ¦   «         z  z   dt          j        t          j        ¦  «        z  z   t          j	        d| j        z  ¦  «        z   t          j	        d| j        dz   z  ¦  «        z
  }d| j        dz   z  t          j
        |dz  | j        z  ¦  «        z  |z
  S )Nç      à?r%   g      à¿g       @)r3   Ú_validate_sampler   r   Úlogr   ÚmathÚpir   ÚlgammaÚlog1p)r   ÚvalueÚyr@   s       r   Úlog_probzStudentT.log_prob]   sã   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ø�T”XÑ ¤Ñ+ˆàŒJ�NŠNÑÔØ�D”G—K’K‘M”MÑ!ñ"à•D”H�TœWÑ%Ô%Ñ%ñ&õ Œl˜3 ¤™=Ñ)Ô)ñ*õ Œl˜3 $¤'¨C¡-Ñ0Ñ1Ô1ñ	2ð 	
ð �t”w ‘}Ñ%­¬°A°s±F¸T¼WÑ4DÑ(EÔ(EÑEÈÑIÐIr   c                 ó¬  — t          j        d| j        z  ¦  «        t          j        d¦  «        z   t          j        d| j        dz   z  ¦  «        z
  }| j                             ¦   «         d| j        dz   z  t          j        d| j        dz   z  ¦  «        t          j        d| j        z  ¦  «        z
  z  z   d| j                             ¦   «         z  z   |z   S )NrC   r   )r   rH   r   rF   r   rE   Údigamma)r   Úlbetas     r   ÚentropyzStudentT.entropyj   sÌ   € åŒL˜˜tœw™Ñ'Ô'ÝŒk˜#ÑÔñåŒl˜3 $¤'¨A¡+Ñ.Ñ/Ô/ñ0ð 	ð ŒJ�NŠNÑÔØØŒw˜‰{ñåŒ}˜S D¤G¨a¡KÑ0Ñ1Ô1µE´MÀ#ÈÌÁ-Ñ4PÔ4PÑPñRñRð �D”G—K’K‘M”MÑ!ñ	"ð
 ñð	
r   )r$   r%   Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚpositiveÚrealÚarg_constraintsÚsupportÚhas_rsampleÚpropertyr   r   r#   r,   r2   r   r1   r
   ÚTensorr<   rL   rP   Ú__classcell__)r.   s   @r   r   r      s@  ø€ € € € € ðð ð" Ô"ØÔØÔ%ðð €Oð
 Ô€GØ€Kàðð ñ „Xðð
 ðð ñ „Xðð ð	ð 	ñ „Xð	ðCð Cð Cð Cð Cð Cð	ð 	ð 	ð 	ð 	ð 	ð -7¨E¬J©L¬Lð )ð ) Eð )¸U¼\ð )ð )ð )ð )ðJð Jð Jð
ð 
ð 
ð 
ð 
ð 
ð 
r   )rF   r   r   r   Útorch.distributionsr   r   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r	   Útorch.typesr
   Ú__all__r   © r   r   ú<module>rc      sÊ   ðà €€€à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ Ð Ð Ð Ð Ð ð ˆ,€ðh
ð h
ð h
ð h
ð h
ˆ|ñ h
ô h
ð h
ð h
ð h
r   