Ë
    f^(h	  ã                   ód   — 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	 dgZ
 G d„ de«      Zy)	é    N)ÚTensor)Úconstraints)ÚExponentialFamily)Úbroadcast_all)Ú_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ˆ 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    úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributions/poisson.pyÚmeanzPoisson.mean$   ó   € à�y‰yÐó    c                 ó6   — | j                   j                  «       S r   )r
   Úfloorr   s    r   ÚmodezPoisson.mode(   s   € à�y‰y�‰Ó Ð r   c                 ó   — | j                   S r   r   r   s    r   ÚvariancezPoisson.variance,   r   r   c                 óÊ   •— t        |«      \  | _        t        |t        «      rt	        j
                  «       }n| j                  j                  «       }t        ‰| �!  ||¬«       y )N©Úvalidate_args)	r   r
   Ú
isinstancer   ÚtorchÚSizeÚsizeÚsuperÚ__init__)r   r
   r   Úbatch_shapeÚ	__class__s       €r   r"   zPoisson.__init__0   sH   ø€ Ü$ TÓ*‰ˆŒÜ�dœGÔ$ÜŸ*™*›,‰KàŸ)™)Ÿ.™.Ó*ˆKÜ‰Ñ˜°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Poisson.expand8   s`   ø€ Ø×(Ñ(¬°)Ó<ˆÜ—j‘j Ó-ˆØ—9‘9×#Ñ# KÓ0ˆŒÜŒg�sÑ$ [ÀÐ$ÔFØ!×0Ñ0ˆÔØˆ
r   c                 óÔ   — | j                  |«      }t        j                  «       5  t        j                  | j                  j                  |«      «      cd d d «       S # 1 sw Y   y xY wr   )Ú_extended_shaper   Úno_gradÚpoissonr
   r'   )r   Úsample_shapeÚshapes      r   ÚsamplezPoisson.sample@   sK   € Ø×$Ñ$ \Ó2ˆÜ�]‰]‹_ñ 	:Ü—=‘= §¡×!1Ñ!1°%Ó!8Ó9÷	:÷ 	:ò 	:ús   ¦.AÁA'c                 ó¾   — | j                   r| j                  |«       t        | j                  |«      \  }}|j	                  |«      |z
  |dz   j                  «       z
  S )Né   )r(   Ú_validate_sampler   r
   ÚxlogyÚlgamma)r   Úvaluer
   s      r   Úlog_probzPoisson.log_probE   sS   € Ø×ÒØ×!Ñ! %Ô(Ü# D§I¡I¨uÓ5‰ˆˆeØ�{‰{˜4Ó  4Ñ'¨5°1©9×*<Ñ*<Ó*>Ñ>Ð>r   c                 óB   — t        j                  | j                  «      fS r   )r   Úlogr
   r   s    r   Ú_natural_paramszPoisson._natural_paramsK   s   € ä—	‘	˜$Ÿ)™)Ó$Ð&Ð&r   c                 ó,   — t        j                  |«      S r   )r   Úexp)r   Úxs     r   Ú_log_normalizerzPoisson._log_normalizerO   s   € Ü�y‰y˜‹|Ðr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚnonnegativeÚarg_constraintsÚnonnegative_integerÚsupportÚpropertyr   r   r   r   r"   r'   r   r   r1   r8   Útupler;   r?   Ú__classcell__)r$   s   @r   r   r      sº   ø„ ñð& ˜{×6Ñ6Ð7€OØ×-Ñ-€Gàð�fò ó ðð ð!�fò !ó ð!ð ð˜&ò ó ðõCõð #- %§*¡*£,ó :ò
?ð ð'  v¡ò 'ó ð'ör   )r   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   Útorch.typesr   Ú__all__r   © r   r   ú<module>rQ      s/   ðã Ý Ý +Ý <Ý 3Ý ð ˆ+€ôCÐõ Cr   