
    bi6                         d dl Z d dlmZm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)OptionalUnion)infnanTensor)Chi2constraints)Distribution)_standard_normalbroadcast_all)_sizeStudentTc                   T    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d	eeef   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 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     W/home/cdr/jupyterlab/.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.mode0   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.variance4   s    GGMM(?(?M@JJtww{#''*ggdggk"#wwtww{#a') 	
$''A+
 -0477a<DGGaK
()$''Q,r    Nr   r   r   validate_argsc                     t        |||      \  | _        | _        | _        t	        | j                        | _        | j                  j                         }t        | !  ||       y )Nr(   )	r   r   r   r   r   _chi2sizesuper__init__)r   r   r   r   r(   batch_shape	__class__s         r   r.   zStudentT.__init__@   sP     )6b#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newr0   s       r   r4   zStudentT.expandL   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   r:   r;   r+   rsampler   rsqrtr   r   )r   r8   shapeXZYs         r   r=   zStudentT.rsampleW   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       @)r5   _validate_sampler   r   logr   mathpir   lgammalog1p)r   valueyrA   s       r   log_probzStudentT.log_probe   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 )NrD   r   )r   rJ   r   rH   r   rG   digamma)r   lbetas     r   entropyzStudentT.entropyr   s    LLtww'kk#ll3$''A+./0 	 JJNNww{}}SDGGaK01EMM#-4PPRR DGGKKM!	"
 	
r    )g        rE   Nr"   )__name__
__module____qualname____doc__r	   positiverealarg_constraintssupporthas_rsamplepropertyr   r   r#   r'   r   floatr   boolr.   r4   r   r3   r   r=   rN   rR   __classcell__)r0   s   @r   r   r      s"   $ ""%%O
 GKf  
 f   	& 	 	 %(&)(,
C&%- 
C 65=!
C VU]#	
C
  ~
C 

C	 -7EJJL )E )V )J
r    )rH   typingr   r   r   r   r   r   torch.distributionsr   r	    torch.distributions.distributionr
   torch.distributions.utilsr   r   torch.typesr   __all__r    r    r   <module>rg      s7     "  " " 1 9 E  ,o
| o
r    