Ë
    P/æjÃ  ã                   ó|   — d dl Z d dlmZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ dgZ G d	„ de	«      Zy)
é    N)ÚNumber)ÚinfÚnan)Úconstraints)ÚDistribution)Úbroadcast_all)Ú_sizeÚCauchyc                   ó  ‡ — e Zd ZdZej
                  ej                  dœZej
                  ZdZ	dˆ fd„	Z
dˆ fd„	Zed„ «       Zed„ «       Zed„ «       Z ej"                  «       fd	ed
ej&                  fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r
   aC  
    Samples from a Cauchy (Lorentz) distribution. The distribution of the ratio of
    independent normally distributed random variables with means `0` follows a
    Cauchy distribution.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Cauchy(torch.tensor([0.0]), torch.tensor([1.0]))
        >>> m.sample()  # sample from a Cauchy distribution with loc=0 and scale=1
        tensor([ 2.3214])

    Args:
        loc (float or Tensor): mode or median of the distribution.
        scale (float or Tensor): half width at half maximum.
    )ÚlocÚscaleTc                 óø   •— t        ||«      \  | _        | _        t        |t        «      r%t        |t        «      rt        j                  «       }n| j                  j                  «       }t        ‰| �%  ||¬«       y )N©Úvalidate_args)
r   r   r   Ú
isinstancer   ÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Úbatch_shapeÚ	__class__s        €ú]/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/distributions/cauchy.pyr   zCauchy.__init__%   sW   ø€ Ü,¨S°%Ó8ÑˆŒ�$”*Ü�cœ6Ô"¤z°%¼Ô'@ÜŸ*™*›,‰KàŸ(™(Ÿ-™-›/ˆKÜ‰Ñ˜°MÐÕBó    c                 ó*  •— | j                  t        |«      }t        j                  |«      }| j                  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Cauchy.expand-   st   ø€ Ø×(Ñ(¬°Ó;ˆÜ—j‘j Ó-ˆØ—(‘(—/‘/ +Ó.ˆŒØ—J‘J×%Ñ% kÓ2ˆŒ	ÜŒf�cÑ# K¸uÐ#ÔEØ!×0Ñ0ˆÔØˆ
r   c                 ó¨   — t        j                  | j                  «       t        | j                  j
                  | j                  j                  ¬«      S ©N)ÚdtypeÚdevice)r   ÚfullÚ_extended_shaper   r   r$   r%   ©r   s    r   ÚmeanzCauchy.mean6   ó5   € ä�z‰zØ× Ñ Ó"¤C¨t¯x©x¯~©~ÀdÇhÁhÇoÁoô
ð 	
r   c                 ó   — | j                   S ©N)r   r(   s    r   ÚmodezCauchy.mode<   s   € à�x‰xˆr   c                 ó¨   — t        j                  | j                  «       t        | j                  j
                  | j                  j                  ¬«      S r#   )r   r&   r'   r   r   r$   r%   r(   s    r   ÚvariancezCauchy.variance@   r*   r   Úsample_shapeÚreturnc                 ó®   — | j                  |«      }| j                  j                  |«      j                  «       }| j                  || j                  z  z   S r,   )r'   r   r!   Úcauchy_r   )r   r0   ÚshapeÚepss       r   ÚrsamplezCauchy.rsampleF   sE   € Ø×$Ñ$ \Ó2ˆØ�h‰h�l‰l˜5Ó!×)Ñ)Ó+ˆØ�x‰x˜# §
¡
Ñ*Ñ*Ð*r   c                 ó  — | j                   r| j                  |«       t        j                  t        j                  «       | j
                  j                  «       z
  || j                  z
  | j
                  z  dz  j                  «       z
  S )Né   )r   Ú_validate_sampleÚmathÚlogÚpir   r   Úlog1p©r   Úvalues     r   Úlog_probzCauchy.log_probK   sl   € Ø×ÒØ×!Ñ! %Ô(ä�X‰X”d—g‘gÓÐØ�j‰j�n‰nÓñà˜Ÿ™Ñ! T§Z¡ZÑ/°AÑ5×<Ñ<Ó>ñ?ð	
r   c                 óÂ   — | j                   r| j                  |«       t        j                  || j                  z
  | j
                  z  «      t        j                  z  dz   S ©Ng      à?)r   r9   r   Úatanr   r   r:   r<   r>   s     r   Úcdfz
Cauchy.cdfT   sH   € Ø×ÒØ×!Ñ! %Ô(Ü�z‰z˜5 4§8¡8Ñ+¨t¯z©zÑ9Ó:¼T¿W¹WÑDÀsÑJÐJr   c                 óˆ   — t        j                  t        j                  |dz
  z  «      | j                  z  | j
                  z   S rB   )r   Útanr:   r<   r   r   r>   s     r   ÚicdfzCauchy.icdfY   s0   € Ü�y‰yœŸ™ E¨C¡KÑ0Ó1°D·J±JÑ>ÀÇÁÑIÐIr   c                 ó„   — t        j                  dt         j                  z  «      | j                  j                  «       z   S )Né   )r:   r;   r<   r   r(   s    r   ÚentropyzCauchy.entropy\   s)   € Ü�x‰x˜œDŸG™G™Ó$ t§z¡z§~¡~Ó'7Ñ7Ð7r   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚrealÚpositiveÚarg_constraintsÚsupportÚhas_rsampler   r   Úpropertyr)   r-   r/   r   r   r	   ÚTensorr6   r@   rD   rG   rJ   Ú__classcell__)r   s   @r   r
   r
      s±   ø„ ñð  *×.Ñ.¸×9MÑ9MÑN€OØ×Ñ€GØ€KõCõð ñ
ó ð
ð
 ñó ðð ñ
ó ð
ð
 -7¨E¯J©J«Lñ + Eð +¸U¿\¹\ó +ò

òKò
Jö8r   )r:   Únumbersr   r   r   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   Útorch.typesr	   Ú__all__r
   © r   r   ú<module>r^      s4   ðã Ý ã ß Ý +Ý 9Ý 3Ý ð ˆ*€ôM8ˆ\õ M8r   