a
    MSicV                     @   sL   d dl mZ d dlZd dlmZ d dlmZ d dlmZ G dd deZ	dS )    )NumberN)constraints)ExponentialFamily)broadcast_allc                       s   e Zd ZdZdejiZejZe	dd Z
e	dd Ze	dd Zd fd
d	Zd fdd	Ze fddZdd Ze	dd Zdd Z  ZS )Poissona~  
    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::

        >>> m = Poisson(torch.tensor([4]))
        >>> m.sample()
        tensor([ 3.])

    Args:
        rate (Number, Tensor): the rate parameter
    ratec                 C   s   | j S Nr   self r   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/distributions/poisson.pymean   s    zPoisson.meanc                 C   s
   | j  S r   )r   floorr
   r   r   r   mode"   s    zPoisson.modec                 C   s   | j S r   r	   r
   r   r   r   variance&   s    zPoisson.varianceNc                    sB   t |\| _t|tr t }n
| j }tt| j	||d d S )Nvalidate_args)
r   r   
isinstancer   torchSizesizesuperr   __init__)r   r   r   batch_shape	__class__r   r   r   *   s
    


zPoisson.__init__c                    sD   |  t|}t|}| j||_tt|j|dd | j|_|S )NFr   )	_get_checked_instancer   r   r   r   expandr   r   _validate_args)r   r   	_instancenewr   r   r   r   2   s    
zPoisson.expandc                 C   sH   |  |}t " t| j|W  d    S 1 s:0    Y  d S r   )_extended_shaper   no_gradpoissonr   r   )r   sample_shapeshaper   r   r   sample:   s    

zPoisson.samplec                 C   s:   | j r| | t| j|\}}||| |d   S )N   )r   _validate_sampler   r   xlogylgamma)r   valuer   r   r   r   log_prob?   s    
zPoisson.log_probc                 C   s   t | jfS r   )r   logr   r
   r   r   r   _natural_paramsE   s    zPoisson._natural_paramsc                 C   s
   t |S r   )r   exp)r   xr   r   r   _log_normalizerI   s    zPoisson._log_normalizer)N)N)__name__
__module____qualname____doc__r   nonnegativearg_constraintsnonnegative_integersupportpropertyr   r   r   r   r   r   r   r'   r-   r/   r2   __classcell__r   r   r   r   r   	   s    




r   )
numbersr   r   Ztorch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   r   r   r   r   r   <module>   s
   