
    kh                     |    d dl Z d dlZd dlmZ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y)	    N)infnanTensor)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efd       Ze
defd       Ze
defd       Zd fd	Zd fd		Z ej$                         fd
ede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scaleTreturnc                     | j                   j                  t        j                        }t        || j
                  dk  <   |S )Nmemory_format   )r   clonetorchcontiguous_formatr   r   selfms     X/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torch/distributions/studentT.pymeanzStudentT.mean)   s2    HHNN)@)@NA$''Q,    c                     | j                   S N)r   )r   s    r   modezStudentT.mode/   s    xxr   c                    | j                   j                  t        j                        }| j                  | j                   dkD     j                  d      | j                   | j                   dkD     z  | j                   | j                   dkD     dz
  z  || j                   dkD  <   t        || j                   dk  | j                   dkD  z  <   t        || j                   dk  <   |S )Nr      r   )r   r   r   r   r   powr   r   r   s     r   variancezStudentT.variance3   s    GGMM(?(?M@JJtww{#''*ggdggk"#wwtww{#a') 	
$''A+
 -0477a<DGGaK
()$''Q,r   c                     t        |||      \  | _        | _        | _        t	        | j                        | _        | j                  j                         }t        | !  ||       y )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__?   sN    (5b#u(E%4:$'']
ggllnMBr   c                    | j                  t        |      }t        j                  |      }| j                  j                  |      |_        | j                  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.expandE   s    ((9=jj-,((//+.JJ%%k2	JJ%%k2	h%k%G!00
r   sample_shapec                 H   | j                  |      }t        || j                  j                  | j                  j                        }| j
                  j                  |      }|t        j                  || j                  z        z  }| j                  | j                  |z  z   S )N)dtypedevice)_extended_shaper	   r   r8   r9   r)   rsampler   rsqrtr   r   )r   r6   shapeXZYs         r   r;   zStudentT.rsampleP   sx     $$\2U$''--OJJ|,AK((xx$**q.((r   c                 :   | j                   r| j                  |       || j                  z
  | j                  z  }| j                  j	                         d| j
                  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      ?      ?g      g       @)r3   _validate_sampler   r   logr   mathpir   lgammalog1p)r   valueyr?   s       r   log_probzStudentT.log_prob^   s    !!%(TXX+JJNNDGGKKM!"DHHTWW%%& ll3=)* ll3$''C-01	2 	
 tww}%AsFTWW4D(EEIIr   c                    t        j                  d| j                  z        t        j                  d      z   t        j                  d| j                  dz   z        z
  }| j                  j                         d| j                  dz   z  t        j                  d| j                  dz   z        t        j                  d| j                  z        z
  z  z   d| j                  j                         z  z   |z   S )NrB   r   )r   rH   r   rF   r   rE   digamma)r   lbetas     r   entropyzStudentT.entropyk   s    LLtww'kk#ll3$''A+./0 	 JJNNww{}}SDGGaK01EMM#-4PPRR DGGKKM!	"
 	
r   )g        rC   Nr    )__name__
__module____qualname____doc__r   positiverealarg_constraintssupporthas_rsamplepropertyr   r   r!   r%   r,   r2   r   r1   r   r;   rL   rP   __classcell__)r.   s   @r   r   r      s    $ ""%%O
 GKf  
 f   	& 	 	C	 -7EJJL )E )V )J
r   )rF   r   r   r   r   torch.distributionsr   r    torch.distributions.distributionr   torch.distributions.utilsr	   r
   torch.typesr   __all__r    r   r   <module>rb      s4      " " 1 9 E  ,i
| i
r   