Ë
    f^(hÔ  ã                   óx   — d dl Z d dlZd dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ dgZ G d„ de«      Zy)	é    N)ÚinfÚnanÚTensor)Úconstraints)ÚDistribution)Úbroadcast_all)Ú_NumberÚ_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efd„«       Zedefd„«       Zedefd	„«       Z ej$                  «       fd
ede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        €úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributions/cauchy.pyr   zCauchy.__init__%   sW   ø€ Ü,¨S°%Ó8ÑˆŒ�$”*Ü�cœ7Ô#¬
°5¼'Ô(BÜŸ*™*›,‰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   Úreturnc                 ó¨   — 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_shapec                 ó®   — | j                  |«      }| j                  j                  |«      j                  «       }| j                  || j                  z  z   S r.   )r)   r   r"   Úcauchy_r   )r   r2   Ú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    r:   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 rC   )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/   r1   r   r   r
   r7   rA   rE   rH   rK   Ú__classcell__)r   s   @r   r   r      sÂ   ø„ ñð" *×.Ñ.¸×9MÑ9MÑN€OØ×Ñ€GØ€KõCõð ð
�fò 
ó ð
ð
 ð�fò ó ðð ð
˜&ò 
ó ð
ð
 -7¨E¯J©J«Lñ + Eð +¸Vó +ò

òKò
Jö8r   )r;   r   r   r   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   Útorch.typesr	   r
   Ú__all__r   © r   r   ú<module>r]      s4   ðã ã ß "Ñ "Ý +Ý 9Ý 3ß &ð ˆ*€ôN8ˆ\õ N8r   