§
    Ÿ²Åjâ  ã                   ór   — d dl Z d dlmc mZ d dlmZ d dlmZ d dl	m
Z
mZmZmZ dgZ G d„ de¦  «        ZdS )é    N)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logitsÚNegativeBinomialc                   óX  ‡ — e Zd ZdZ ej        d¦  «         ej        dd¦  «        ej        dœZej	        Z
dˆ fd„	Zdˆ fd„	Zd	„ Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z ej        ¦   «         fd„Zd„ Zˆ xZS )r	   ao  
    Creates a Negative Binomial distribution, i.e. distribution
    of the number of successful independent and identical Bernoulli trials
    before :attr:`total_count` failures are achieved. The probability
    of success of each Bernoulli trial is :attr:`probs`.

    Args:
        total_count (float or Tensor): non-negative number of negative Bernoulli
            trials to stop, although the distribution is still valid for real
            valued count
        probs (Tensor): Event probabilities of success in the half open interval [0, 1)
        logits (Tensor): Event log-odds for probabilities of success
    r   ç        ç      ð?)Útotal_countÚprobsÚlogitsNc                 óæ  •— |d u |d u k    rt          d¦  «        ‚|�Bt          ||¦  «        \  | _        | _        | j                             | j        ¦  «        | _        nAt          ||¦  «        \  | _        | _        | j                             | j        ¦  «        | _        |�| j        n| j        | _        | j                             ¦   «         }t          ¦   «          	                    ||¬¦  «         d S )Nz;Either `probs` or `logits` must be specified, but not both.©Úvalidate_args)
Ú
ValueErrorr   r   r   Útype_asr   Ú_paramÚsizeÚsuperÚ__init__)Úselfr   r   r   r   Úbatch_shapeÚ	__class__s         €úVC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/negative_binomial.pyr   zNegativeBinomial.__init__&   sô   ø€ Ø�TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð Ðõ ˜k¨5Ñ1Ô1ñØÔ Ø”
à#Ô/×7Ò7¸¼
ÑCÔCˆDÔÐõ
 ˜k¨6Ñ2Ô2ñØÔ Ø”à#Ô/×7Ò7¸¼ÑDÔDˆDÔà$)Ð$5�d”j�j¸4¼;ˆŒØ”k×&Ò&Ñ(Ô(ˆÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBó    c                 óà  •— |                       t          |¦  «        }t          j        |¦  «        }| j                             |¦  «        |_        d| j        v r+| j                             |¦  «        |_        |j        |_        d| j        v r+| j	                             |¦  «        |_	        |j	        |_        t          t          |¦  «                             |d¬¦  «         | j        |_        |S )Nr   r   Fr   )Ú_get_checked_instancer	   ÚtorchÚSizer   ÚexpandÚ__dict__r   r   r   r   r   Ú_validate_args)r   r   Ú	_instanceÚnewr   s       €r   r"   zNegativeBinomial.expand<   sÎ   ø€ Ø×(Ò(Õ)9¸9ÑEÔEˆÝ”j Ñ-Ô-ˆØÔ*×1Ò1°+Ñ>Ô>ˆŒØ�d”mÐ#Ð#Øœ
×)Ò)¨+Ñ6Ô6ˆCŒIØœˆCŒJØ�t”}Ð$Ð$Øœ×+Ò+¨KÑ8Ô8ˆCŒJØœˆCŒJÝÕ Ñ$Ô$×-Ò-¨kÈÐ-ÑOÔOÐOØ!Ô0ˆÔØˆ
r   c                 ó&   —  | j         j        |i |¤ŽS ©N)r   r&   )r   ÚargsÚkwargss      r   Ú_newzNegativeBinomial._newJ   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r   c                 óD   — | j         t          j        | j        ¦  «        z  S r(   )r   r    Úexpr   ©r   s    r   ÚmeanzNegativeBinomial.meanM   s   € àÔ¥%¤)¨D¬KÑ"8Ô"8Ñ8Ð8r   c                 ó–   — | j         dz
  | j                             ¦   «         z                       ¦   «                              d¬¦  «        S )Né   r   )Úmin)r   r   r-   ÚfloorÚclampr.   s    r   ÚmodezNegativeBinomial.modeQ   s>   € àÔ! AÑ%¨¬¯ªÑ):Ô):Ñ:×AÒAÑCÔC×IÒIÈcÐIÑRÔRÐRr   c                 óF   — | j         t          j        | j         ¦  «        z  S r(   )r/   r    Úsigmoidr   r.   s    r   ÚvariancezNegativeBinomial.varianceU   s   € àŒy�5œ=¨$¬+¨Ñ6Ô6Ñ6Ð6r   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r   r   r.   s    r   r   zNegativeBinomial.logitsY   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r   c                 ó.   — t          | j        d¬¦  «        S r:   )r   r   r.   s    r   r   zNegativeBinomial.probs]   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r   c                 ó4   — | j                              ¦   «         S r(   )r   r   r.   s    r   Úparam_shapezNegativeBinomial.param_shapea   s   € àŒ{×ÒÑ!Ô!Ð!r   c                 ó€   — t           j                             | j        t          j        | j         ¦  «        d¬¦  «        S )NF)ÚconcentrationÚrater   )r    ÚdistributionsÚGammar   r-   r   r.   s    r   Ú_gammazNegativeBinomial._gammae   s>   € õ Ô"×(Ò(ØÔ*Ý”˜DœK˜<Ñ(Ô(Øð )ñ 
ô 
ð 	
r   c                 óº   — t          j        ¦   «         5  | j                             |¬¦  «        }t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )N)Úsample_shape)r    Úno_gradrD   ÚsampleÚpoisson)r   rF   rA   s      r   rH   zNegativeBinomial.samplen   s—   € ÝŒ]‰_Œ_ð 	'ð 	'Ø”;×%Ò%°<Ð%Ñ@Ô@ˆDÝ”= Ñ&Ô&ð	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ”/AÁAÁAc                 ó¤  — | j         r|                      |¦  «         | j        t          j        | j         ¦  «        z  |t          j        | j        ¦  «        z  z   }t          j        | j        |z   ¦  «         t          j        d|z   ¦  «        z   t          j        | j        ¦  «        z   }|                     | j        |z   dk    d¦  «        }||z
  S )Nr   r   )	r$   Ú_validate_sampler   ÚFÚ
logsigmoidr   r    ÚlgammaÚmasked_fill)r   ÚvalueÚlog_unnormalized_probÚlog_normalizations       r   Úlog_probzNegativeBinomial.log_probs   sß   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(à $Ô 0µ1´<ØŒ[ˆLñ4
ô 4
ñ !
à•A”L ¤Ñ-Ô-Ñ-ñ!.Ðõ
 Œ\˜$Ô*¨UÑ2Ñ3Ô3Ð3ÝŒl˜3 ™;Ñ'Ô'ñ(åŒl˜4Ô+Ñ,Ô,ñ-ð 	ð .×9Ò9ØÔ˜uÑ$¨Ò+¨Sñ
ô 
Ðð %Ð'8Ñ8Ð8r   )NNNr(   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úgreater_than_eqÚhalf_open_intervalÚrealÚarg_constraintsÚnonnegative_integerÚsupportr   r"   r+   Úpropertyr/   r5   r8   r   r   r   r>   rD   r    r!   rH   rS   Ú__classcell__)r   s   @r   r	   r	      sª  ø€ € € € € ðð ð 3�{Ô2°1Ñ5Ô5Ø/�Ô/°°SÑ9Ô9ØÔ"ðð €Oð
 Ô-€GðCð Cð Cð Cð Cð Cð,ð ð ð ð ð ð0ð 0ð 0ð ð9ð 9ñ „Xð9ð ðSð Sñ „XðSð ð7ð 7ñ „Xð7ð ð;ð ;ñ „]ð;ð ð<ð <ñ „]ð<ð ð"ð "ñ „Xð"ð ð
ð 
ñ „]ð
ð #- %¤*¡,¤,ð 'ð 'ð 'ð 'ð
9ð 9ð 9ð 9ð 9ð 9ð 9r   )r    Útorch.nn.functionalÚnnÚ
functionalrL   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r   r   Ú__all__r	   © r   r   ú<module>rh      sÑ   ðà €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð Ð
€ðv9ð v9ð v9ð v9ð v9�|ñ v9ô v9ð v9ð v9ð v9r   