
    קg	                     l    d dl 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gZ G d de          ZdS )	    )NumberN)constraints)ExponentialFamily)broadcast_all)_sizeExponentialc                       e Zd ZdZdej        iZej        ZdZ	dZ
ed             Zed             Zed             Zed             Zd fd
	Zd fd	Z ej                    fdedej        fdZd Zd Zd Zd Ze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   c                 4    | j                                         S Nr
   
reciprocalselfs    [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/distributions/exponential.pymeanzExponential.mean!       y##%%%    c                 4    t          j        | j                  S r   )torch
zeros_liker
   r   s    r   modezExponential.mode%   s    	***r   c                 4    | j                                         S r   r   r   s    r   stddevzExponential.stddev)   r   r   c                 6    | j                             d          S )N)r
   powr   s    r   variancezExponential.variance-   s    y}}R   r   Nc                     t          |          \  | _        t          |t                    rt	          j                    n| j                                        }t                                          ||           d S )Nvalidate_args)	r   r
   
isinstancer   r   Sizesizesuper__init__)r   r
   r!   batch_shape	__class__s       r   r&   zExponential.__init__1   sa    $T**&0v&>&>TejlllDINNDTDTMBBBBBr   c                    |                      t          |          }t          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.expand6   sq    ((i@@j--9##K00k3((E(JJJ!0
r   sample_shapereturnc                     |                      |          }| j                            |                                          | j        z  S r   )_extended_shaper
   r.   exponential_)r   r/   shapes      r   rsamplezExponential.rsample>   s<    $$\22y}}U##0022TY>>r   c                     | j         r|                     |           | j                                        | j        |z  z
  S r   )r,   _validate_sampler
   logr   values     r   log_probzExponential.log_probB   s=     	)!!%(((y}}U!222r   c                 z    | j         r|                     |           dt          j        | j         |z            z
  S )N   )r,   r7   r   expr
   r9   s     r   cdfzExponential.cdfG   s?     	)!!%(((59diZ%/0000r   c                 >    t          j        |            | j        z  S r   )r   log1pr
   r9   s     r   icdfzExponential.icdfL   s    UF###di//r   c                 :    dt          j        | j                  z
  S )Ng      ?)r   r8   r
   r   s    r   entropyzExponential.entropyO   s    UYty))))r   c                     | j          fS r   )r
   r   s    r   _natural_paramszExponential._natural_paramsR   s    
}r   c                 .    t          j        |            S r   )r   r8   )r   xs     r   _log_normalizerzExponential._log_normalizerV   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+   r   r#   r   Tensorr5   r;   r?   rB   rD   rF   rI   __classcell__)r(   s   @r   r   r      s         {34O%GK& & X& + + X+ & & X& ! ! X!C C C C C C
      -7EJLL ? ?E ?U\ ? ? ? ?3 3 3
1 1 1
0 0 0* * *   X      r   )numbersr   r   torch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr   __all__r    r   r   <module>r^      s           + + + + + + < < < < < < 3 3 3 3 3 3       /I I I I I# I I I I Ir   