
    }Yh	                         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dS )
    )OptionalUnionN)Tensor)constraints)ExponentialFamily)broadcast_all)_NumberNumberPoissonc                   (    e Zd ZdZdej        iZej        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j                    fdZd Ze	dee
         fd            Zd Z xZS )r   a  
    Creates a Poisson distribution parameterized by :attr:`rate`, the rate parameter.

    Samples are nonnegative integers, with a pmf given by

    .. math::
      \mathrm{rate}^k \frac{e^{-\mathrm{rate}}}{k!}

    Example::

        >>> # xdoctest: +SKIP("poisson_cpu not implemented for 'Long'")
        >>> m = Poisson(torch.tensor([4]))
        >>> m.sample()
        tensor([ 3.])

    Args:
        rate (Number, Tensor): the rate parameter
    ratereturnc                     | j         S Nr   selfs    m/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/poisson.pymeanzPoisson.mean&   
    y    c                 4    | j                                         S r   )r   floorr   s    r   modezPoisson.mode*   s    y   r   c                     | j         S r   r   r   s    r   variancezPoisson.variance.   r   r   Nvalidate_argsc                     t          |          \  | _        t          |t                    rt	          j                    }n| j                                        }t                                          ||           d S )Nr   )	r   r   
isinstancer	   torchSizesizesuper__init__)r   r   r   batch_shape	__class__s       r   r%   zPoisson.__init__2   si    
 %T**dG$$ 	+*,,KK)..**K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Poisson.expand>   sq    (()<<j--9##K00gs$$[$FFF!0
r   c                     |                      |          }t          j                    5  t          j        | j                            |                    cd d d            S # 1 swxY w Y   d S r   )_extended_shaper!   no_gradpoissonr   r*   )r   sample_shapeshapes      r   samplezPoisson.sampleF   s    $$\22]__ 	: 	:=!1!1%!8!899	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   ,A""A&)A&c                     | j         r|                     |           t          | j        |          \  }}|                    |          |z
  |dz                                   z
  S )N   )r+   _validate_sampler   r   xlogylgamma)r   valuer   s      r   log_probzPoisson.log_probK   sb     	)!!%(((#DIu55e{{4  4'519*<*<*>*>>>r   c                 6    t          j        | j                  fS r   )r!   logr   r   s    r   _natural_paramszPoisson._natural_paramsQ   s    	$)$$&&r   c                 *    t          j        |          S r   )r!   exp)r   xs     r   _log_normalizerzPoisson._log_normalizerU   s    y||r   r   )__name__
__module____qualname____doc__r   nonnegativearg_constraintsnonnegative_integersupportpropertyr   r   r   r   r   r
   r   boolr%   r*   r!   r"   r4   r;   tupler>   rB   __classcell__)r'   s   @r   r   r      s        & {67O-Gf    X !f ! ! ! X! &    X )-
C 
CFFN#
C  ~
C 
	
C 
C 
C 
C 
C 
C      #-%*,, : : : :
? ? ? 'v ' ' ' X'      r   )typingr   r   r!   r   torch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   torch.typesr	   r
   __all__r    r   r   <module>rV      s    " " " " " " " "        + + + + + + < < < < < < 3 3 3 3 3 3 ' ' ' ' ' ' ' ' +G G G G G G G G G Gr   