§
    Ÿ²Å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dS )
é    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ÚscaleTNc                 ó6  •— t          ||¦  «        \  | _        | _        t          |t          ¦  «        r)t          |t          ¦  «        rt          j        ¦   «         }n| j                             ¦   «         }t          ¦   «          	                    ||¬¦  «         d S )N©Úvalidate_args)
r   r   r   Ú
isinstancer   ÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Úbatch_shapeÚ	__class__s        €úKC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/cauchy.pyr   zCauchy.__init__%   s}   ø€ Ý,¨S°%Ñ8Ô8ÑˆŒ�$”*Ý�c�6Ñ"Ô"ð 	*¥z°%½Ñ'@Ô'@ð 	*Ýœ*™,œ,ˆKˆKàœ(Ÿ-š-™/œ/ˆKÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBó    c                 óN  •— |                       t          |¦  «        }t          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-   s†   ø€ Ø×(Ò(­°Ñ;Ô;ˆÝ”j Ñ-Ô-ˆØ”(—/’/ +Ñ.Ô.ˆŒØ”J×%Ò% kÑ2Ô2ˆŒ	Ý�f�cÑÔ×#Ò# K¸uÐ#ÑEÔEÐEØ!Ô0ˆÔØˆ
r   c                 óˆ   — t          j        |                      ¦   «         t          | j        j        | j        j        ¬¦  «        S ©N)ÚdtypeÚdevice)r   ÚfullÚ_extended_shaper   r   r$   r%   ©r   s    r   ÚmeanzCauchy.mean6   ó8   € åŒzØ× Ò Ñ"Ô"¥C¨t¬x¬~ÀdÄhÄoð
ñ 
ô 
ð 	
r   c                 ó   — | j         S ©N)r   r(   s    r   ÚmodezCauchy.mode<   s	   € àŒxˆr   c                 óˆ   — t          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        z  z   S r,   )r'   r   r!   Úcauchy_r   )r   r0   ÚshapeÚepss       r   ÚrsamplezCauchy.rsampleF   sH   € Ø×$Ò$ \Ñ2Ô2ˆØŒh�lŠl˜5Ñ!Ô!×)Ò)Ñ+Ô+ˆØŒx˜# ¤
Ñ*Ñ*Ð*r   c                 óü   — | j         r|                      |¦  «         t          j        t          j        ¦  «         | j                             ¦   «         z
  || j        z
  | j        z  dz                       ¦   «         z
  S )Né   )r   Ú_validate_sampleÚmathÚlogÚpir   r   Úlog1p©r   Úvalues     r   Úlog_probzCauchy.log_probK   ss   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(åŒX•d”gÑÔÐØŒj�nŠnÑÔñà˜œÑ! T¤ZÑ/°AÑ5×<Ò<Ñ>Ô>ñ?ð	
r   c                 ó¢   — | j         r|                      |¦  «         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   sK   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(ÝŒz˜5 4¤8Ñ+¨t¬zÑ9Ñ:Ô:½T¼WÑDÀsÑJÐJr   c                 ój   — t          j        t          j        |dz
  z  ¦  «        | j        z  | j        z   S rB   )r   Útanr:   r<   r   r   r>   s     r   ÚicdfzCauchy.icdfY   s+   € ÝŒy�œ E¨C¡KÑ0Ñ1Ô1°D´JÑ>ÀÄÑIÐIr   c                 óx   — t          j        dt           j        z  ¦  «        | j                             ¦   «         z   S )Né   )r:   r;   r<   r   r(   s    r   ÚentropyzCauchy.entropy\   s)   € ÝŒx˜�DœG™Ñ$Ô$ t¤z§~¢~Ñ'7Ô'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
      sV  ø€ € € € € ðð ð  *Ô.¸Ô9MÐNÐN€OØÔ€GØ€KðCð Cð Cð Cð Cð Cðð ð ð ð ð ð ð
ð 
ñ „Xð
ð
 ðð ñ „Xðð ð
ð 
ñ „Xð
ð
 -7¨E¬J©L¬Lð +ð + Eð +¸U¼\ð +ð +ð +ð +ð

ð 
ð 
ðKð Kð Kð
Jð Jð Jð8ð 8ð 8ð 8ð 8ð 8ð 8r   )r:   Únumbersr   r   r   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   Útorch.typesr	   Ú__all__r
   © r   r   ú<module>r^      sÐ   ðà €€€Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð ð ˆ*€ðM8ð M8ð M8ð M8ð M8ˆ\ñ M8ô M8ð M8ð M8ð M8r   