a
    MSic
                     @   sd   d dl Z d dlmZmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ G dd de
ZdS )	    N)infnan)Number)constraints)Distribution)broadcast_allc                       s   e Zd ZdZejejdZejZdZ	d fdd	Z
d fdd	Zed	d
 Zedd Zedd Ze fddZdd Zdd Zdd Zdd Z  ZS )Cauchya	  
    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::

        >>> 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                    sR   t ||\| _| _t|tr0t|tr0t }n
| j }tt	| j
||d d S )Nvalidate_args)r   r	   r
   
isinstancer   torchSizesizesuperr   __init__)selfr	   r
   r   batch_shape	__class__ V/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/distributions/cauchy.pyr      s
    

zCauchy.__init__c                    sR   |  t|}t|}| j||_| j||_tt|j|dd | j	|_	|S )NFr   )
_get_checked_instancer   r   r   r	   expandr
   r   r   _validate_args)r   r   	_instancenewr   r   r   r   '   s    
zCauchy.expandc                 C   s   t j|  t| jj| jjdS N)dtypedevice)r   full_extended_shaper   r	   r   r    r   r   r   r   mean0   s    zCauchy.meanc                 C   s   | j S N)r	   r#   r   r   r   mode4   s    zCauchy.modec                 C   s   t j|  t| jj| jjdS r   )r   r!   r"   r   r	   r   r    r#   r   r   r   variance8   s    zCauchy.variancec                 C   s*   |  |}| j| }| j|| j  S r%   )r"   r	   r   cauchy_r
   )r   sample_shapeshapeepsr   r   r   rsample<   s    
zCauchy.rsamplec                 C   sD   | j r| | ttj | j  d|| j | j d    S )N      )r   _validate_samplemathlogpir
   r	   r   valuer   r   r   log_probA   s    
zCauchy.log_probc                 C   s0   | j r| | t|| j | j tj d S Ng      ?)r   r/   r   atanr	   r
   r0   r2   r3   r   r   r   cdfF   s    
z
Cauchy.cdfc                 C   s    t tj|d  | j | j S r6   )r   tanr0   r2   r
   r	   r3   r   r   r   icdfK   s    zCauchy.icdfc                 C   s   t dt j | j  S )N   )r0   r1   r2   r
   r#   r   r   r   entropyN   s    zCauchy.entropy)N)N)__name__
__module____qualname____doc__r   realpositivearg_constraintssupporthas_rsampler   r   propertyr$   r&   r'   r   r   r,   r5   r8   r:   r<   __classcell__r   r   r   r   r      s"   	


r   )r0   Z
torch._sixr   r   numbersr   r   Ztorch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   r   r   r   r   r   <module>   s   