§
    Ÿ²Åj	  ã                   ó`   — 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gZ	 G d„ de¦  «        Z
dS )é    )ÚNumberN)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚPoissonc                   óØ   ‡ — e Zd ZdZdej        iZej        Ze	d„ ¦   «         Z
e	d„ ¦   «         Ze	d„ ¦   «         Zdˆ fd„	Zdˆ fd„	Z ej        ¦   «         fd	„Zd
„ Ze	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
    Úratec                 ó   — | j         S ©N©r	   ©Úselfs    úLC:\Projects\Historical\venv\Lib\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   Nc                 óþ   •— t          |¦  «        \  | _        t          |t          ¦  «        rt	          j        ¦   «         }n| j                             ¦   «         }t          ¦   «                              ||¬¦  «         d S )N©Úvalidate_args)	r   r	   Ú
isinstancer   ÚtorchÚSizeÚsizeÚsuperÚ__init__)r   r	   r   Úbatch_shapeÚ	__class__s       €r   r    zPoisson.__init__/   sg   ø€ Ý$ TÑ*Ô*‰ˆŒÝ�d�FÑ#Ô#ð 	+Ýœ*™,œ,ˆKˆKàœ)Ÿ.š.Ñ*Ô*ˆ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.expand7   sq   ø€ Ø×(Ò(­°)Ñ<Ô<ˆÝ”j Ñ-Ô-ˆØ”9×#Ò# KÑ0Ô0ˆŒÝ�g�sÑÔ×$Ò$ [ÀÐ$Ñ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.sample?   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_probD   sb   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý# D¤I¨uÑ5Ô5‰ˆˆeØ�{Š{˜4Ñ Ô  4Ñ'¨5°1©9×*<Ò*<Ñ*>Ô*>Ñ>Ð>r   c                 ó6   — t          j        | j        ¦  «        fS r   )r   Úlogr	   r   s    r   Ú_natural_paramszPoisson._natural_paramsJ   s   € å”	˜$œ)Ñ$Ô$Ð&Ð&r   c                 ó*   — t          j        |¦  «        S r   )r   Úexp)r   Úxs     r   Ú_log_normalizerzPoisson._log_normalizerN   s   € ÝŒy˜‰|Œ|Ðr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚnonnegativeÚarg_constraintsÚnonnegative_integerÚsupportÚpropertyr   r   r   r    r%   r   r   r/   r6   r9   r=   Ú__classcell__)r"   s   @r   r   r      s+  ø€ € € € € ðð ð$ ˜{Ô6Ð7€OØÔ-€Gàðð ñ „Xðð ð!ð !ñ „Xð!ð ðð ñ „XððCð Cð Cð Cð Cð Cðð ð ð ð ð ð #- %¤*¡,¤,ð :ð :ð :ð :ð
?ð ?ð ?ð ð'ð 'ñ „Xð'ðð ð ð ð ð ð r   )Únumbersr   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   Ú__all__r   © r   r   ú<module>rN      sž   ðà Ð Ð Ð Ð Ð à €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ˆ+€ðBð Bð Bð Bð BÐñ Bô Bð Bð Bð Br   