o
    h                     @   sr   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 deZdS )	    N)infnanTensor)constraints)Distribution)broadcast_all)_Number_size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	efd
dZed	efddZed	efddZe fded	efddZdd Zdd Zdd Zdd Z  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                    sN   t ||\| _| _t|trt|trt }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__ n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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.expandreturnc                 C      t j|  t| jj| jjdS N)dtypedevice)r   full_extended_shaper   r   r#   r$   r   r   r   r   mean6      zCauchy.meanc                 C   s   | j S N)r   r'   r   r   r   mode<   s   zCauchy.modec                 C   r!   r"   )r   r%   r&   r   r   r#   r$   r'   r   r   r   variance@   r)   zCauchy.variancesample_shapec                 C   s*   |  |}| j| }| j|| j  S r*   )r&   r   r   cauchy_r   )r   r-   shapeepsr   r   r   rsampleF   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_probK   s   
zCauchy.log_probc                 C   s0   | j r| | t|| j | j tj d S Ng      ?)r   r3   r   atanr   r   r4   r6   r8   r   r   r   cdfT   s   
 z
Cauchy.cdfc                 C   s    t tj|d  | j | j S r;   )r   tanr4   r6   r   r   r8   r   r   r   icdfY   s    zCauchy.icdfc                 C   s   t dt j | j  S )N   )r4   r5   r6   r   r'   r   r   r   entropy\   s   zCauchy.entropyr*   )__name__
__module____qualname____doc__r   realpositivearg_constraintssupporthas_rsampler   r   propertyr   r(   r+   r,   r   r   r	   r1   r:   r=   r?   rA   __classcell__r   r   r   r   r
      s$    		)r4   r   r   r   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   torch.typesr   r	   __all__r
   r   r   r   r   <module>   s   