
    rh
                     x    d dl mZmZ d dlZd dl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)
    )OptionalUnionN)Tensor)constraints)ExponentialFamily)broadcast_all)_Number_sizeExponentialc                   P    e Zd ZdZdej
                  iZej                  ZdZ	dZ
edefd       Zedefd       Zedefd       Zedefd	       Z	 ddeeef   dee   dd
f fdZd fd	Z ej0                         fdedefdZd Zd Zd Zd Zedee   fd       Z d Z! xZ"S )r   an  
    Creates a Exponential distribution parameterized by :attr:`rate`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Exponential(torch.tensor([1.0]))
        >>> m.sample()  # Exponential distributed with rate=1
        tensor([ 0.1046])

    Args:
        rate (float or Tensor): rate = 1 / scale of the distribution
    rateTr   returnc                 6    | j                   j                         S Nr   
reciprocalselfs    r/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/distributions/exponential.pymeanzExponential.mean#       yy##%%    c                 @    t        j                  | j                        S r   )torch
zeros_liker   r   s    r   modezExponential.mode'   s    		**r   c                 6    | j                   j                         S r   r   r   s    r   stddevzExponential.stddev+   r   r   c                 8    | j                   j                  d      S )N)r   powr   s    r   variancezExponential.variance/   s    yy}}R  r   Nvalidate_argsc                     t        |      \  | _        t        |t              rt	        j
                         n| j                  j                         }t        | !  ||       y )Nr#   )	r   r   
isinstancer	   r   Sizesizesuper__init__)r   r   r#   batch_shape	__class__s       r   r*   zExponential.__init__3   sF    
 %T*&0w&?ejjlTYY^^EUMBr   c                     | j                  t        |      }t        j                  |      }| j                  j                  |      |_        t        t        |  |d       | j                  |_        |S )NFr%   )	_get_checked_instancer   r   r'   r   expandr)   r*   _validate_args)r   r+   	_instancenewr,   s       r   r/   zExponential.expand<   s`    ((i@jj-99##K0k3(E(J!00
r   sample_shapec                     | j                  |      }| j                  j                  |      j                         | j                  z  S r   )_extended_shaper   r2   exponential_)r   r3   shapes      r   rsamplezExponential.rsampleD   s7    $$\2yy}}U#002TYY>>r   c                     | j                   r| j                  |       | j                  j                         | j                  |z  z
  S r   )r0   _validate_sampler   logr   values     r   log_probzExponential.log_probH   s7    !!%(yy}}U!222r   c                     | j                   r| j                  |       dt        j                  | j                   |z        z
  S )N   )r0   r:   r   expr   r<   s     r   cdfzExponential.cdfM   s8    !!%(599diiZ%/000r   c                 J    t        j                  |        | j                  z  S r   )r   log1pr   r<   s     r   icdfzExponential.icdfR   s    UF##dii//r   c                 F    dt        j                  | j                        z
  S )Ng      ?)r   r;   r   r   s    r   entropyzExponential.entropyU   s    UYYtyy)))r   c                     | j                    fS r   )r   r   s    r   _natural_paramszExponential._natural_paramsX   s    
}r   c                 0    t        j                  |        S r   )r   r;   )r   xs     r   _log_normalizerzExponential._log_normalizer\   s    		1"~r   r   )#__name__
__module____qualname____doc__r   positivearg_constraintsnonnegativesupporthas_rsample_mean_carrier_measurepropertyr   r   r   r   r"   r   floatr   boolr*   r/   r   r'   r
   r8   r>   rB   rE   rG   tuplerI   rL   __classcell__)r,   s   @r   r   r      s.    {334O%%GK&f & & +f + + & & & !& ! ! )-CFEM"C  ~C 
	C -7EJJL ?E ?V ?3
1
0* v  r   )typingr   r   r   r   torch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr	   r
   __all__r    r   r   <module>rc      s2    "   + < 3 & /N# Nr   