Ë
    #täiW  ã                   ó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            	       ó0  ‡ — e Zd ZdZej
                  ej                  dœZej
                  ZdZ		 dde
ez  de
ez  dedz  ddfˆ 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ÚscaleTNr   r   Úvalidate_argsÚreturnc                 óø   •— t        ||«      \  | _        | _        t        |t        «      r%t        |t        «      rt        j                  «       }n| j                  j                  «       }t        ‰| �%  ||¬«       y )N©r   )
r   r   r   Ú
isinstancer	   ÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Úbatch_shapeÚ	__class__s        €úi/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/torch/distributions/cauchy.pyr   zCauchy.__init__&   sY   ø€ ô  -¨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.expand3   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.mean<   ó5   € ä�z‰zØ× Ñ Ó"¤C¨t¯x©x¯~©~ÀdÇhÁhÇoÁoô
ð 	
r   c                 ó   — | j                   S ©N)r   r*   s    r   ÚmodezCauchy.modeB   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.varianceF   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.rsampleL   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_probQ   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.cdfZ   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.icdf_   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.entropyb   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   ÚfloatÚboolr   r    Úpropertyr+   r/   r1   r   r   r
   r7   rA   rE   rH   rK   Ú__classcell__)r   s   @r   r   r      sý   ø„ ñð$ *×.Ñ.¸×9MÑ9MÑN€OØ×Ñ€GØ€Kð &*ñ	Cà�e‰^ðCð ˜‰~ðCð ˜d‘{ð	Cð
 
õ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ß &ð ˆ*€ôT8ˆ\õ T8r   