
    sgc                     x    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y)	    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                     | j                   j                  t        j                        }t        || j
                  dk  <   |S )Nmemory_format   )r   clonetorchcontiguous_formatr   r   selfms     O/var/www/html/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.variance2   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   r0   zStudentT.expandD   s    ((9=jj-,((//+.JJ%%k2	JJ%%k2	h%k%G!00
r   sample_shapereturnc                 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   r7   r8   r'   rsampler   rsqrtr   r   )r   r4   shapeXZYs         r   r:   zStudentT.rsampleO   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       @)r1   _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 )NrA   r   )r   rG   r   rE   r   rD   digamma)r   lbetas     r   entropyzStudentT.entropyj   s    LLtww'kk#ll3$''A+./0 	 JJNNww{}}SDGGaK01EMM#-4PPRR DGGKKM!	"
 	
r   )g        rB   Nr   )__name__
__module____qualname____doc__r   positiverealarg_constraintssupporthas_rsamplepropertyr   r   r#   r*   r0   r   r/   r
   Tensorr:   rK   rO   __classcell__)r,   s   @r   r   r      s    " ""%%O
 GK 
   	 	C	 -7EJJL )E )U\\ )J
r   )rE   r   r   r   torch.distributionsr   r    torch.distributions.distributionr   torch.distributions.utilsr   r	   torch.typesr
   __all__r    r   r   <module>rb      s1       1 9 E  ,h
| h
r   