U
    9%eo                     @   sj   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gZG dd de	ZdS )	    N)Number)infnan)constraints)Distribution)broadcast_allCauchyc                       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 )r   aB  
    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-deterinistic")
        >>> 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                    sN   t ||\| _| _t|tr0t|tr0t }n
| j }t j	||d d S )Nvalidate_args)
r   r	   r
   
isinstancer   torchSizesizesuper__init__)selfr	   r
   r   batch_shape	__class__ Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/distributions/cauchy.pyr   "   s
    

zCauchy.__init__c                    sR   |  t|}t|}| j||_| j||_tt|j|dd | j	|_	|S )NFr   )
Z_get_checked_instancer   r   r   r	   expandr
   r   r   _validate_args)r   r   Z	_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   mean3   s       zCauchy.meanc                 C   s   | j S N)r	   r!   r   r   r   mode9   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   variance=   s       zCauchy.variancec                 C   s*   |  |}| j| }| j|| j  S r#   )r    r	   r   Zcauchy_r
   )r   Zsample_shapeshapeZepsr   r   r   rsampleC   s    
zCauchy.rsamplec                 C   s@   | j r| | ttj | j  || j | j d   S )N   )r   _validate_samplemathlogpir
   r	   log1pr   valuer   r   r   log_probH   s    
zCauchy.log_probc                 C   s0   | j r| | t|| j | j tj d S Ng      ?)r   r)   r   atanr	   r
   r*   r,   r.   r   r   r   cdfQ   s    
z
Cauchy.cdfc                 C   s    t tj|d  | j | j S r1   )r   tanr*   r,   r
   r	   r.   r   r   r   icdfV   s    zCauchy.icdfc                 C   s   t dt j | j  S )N   )r*   r+   r,   r
   r!   r   r   r   entropyY   s    zCauchy.entropy)N)N)__name__
__module____qualname____doc__r   realZpositiveZarg_constraintsZsupportZhas_rsampler   r   propertyr"   r$   r%   r   r   r'   r0   r3   r5   r7   __classcell__r   r   r   r   r      s"   	


	)r*   numbersr   r   r   r   Ztorch.distributionsr   Z torch.distributions.distributionr   Ztorch.distributions.utilsr   __all__r   r   r   r   r   <module>   s   