Ë
    P/æj[  ã                   ój   — 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y)é    N)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logitsÚNegativeBinomialc                   óN  ‡ — 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j0                  «       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Úlogitsc                 óÔ  •— |d u |d u k(  rt        d«      ‚|�Dt        ||«      \  | _        | _        | j                  j	                  | j                  «      | _        nCt        ||«      \  | _        | _        | j                  j	                  | j
                  «      | _        |�| j                  n| j
                  | _        | j                  j                  «       }t        ‰| �%  ||¬«       y )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         €úh/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/distributions/negative_binomial.pyr   zNegativeBinomial.__init__&   s×   ø€ Ø�TˆM˜v¨˜~Ò.ÜØMóð ð Ðô ˜k¨5Ó1ñØÔ Ø”
à#×/Ñ/×7Ñ7¸¿
¹
ÓCˆDÕô
 ˜k¨6Ó2ñØÔ Ø”à#×/Ñ/×7Ñ7¸¿¹ÓDˆDÔà$)Ð$5�d—j’j¸4¿;¹;ˆŒØ—k‘k×&Ñ&Ó(ˆÜ‰Ñ˜°MÐÕBó    c                 óæ  •— | j                  t        |«      }t        j                  |«      }| j                  j                  |«      |_        d| j                  v r1| j                  j                  |«      |_        |j                  |_        d| j                  v r1| j                  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ˆÜ—j‘j Ó-ˆØ×*Ñ*×1Ñ1°+Ó>ˆŒØ�d—m‘mÑ#ØŸ
™
×)Ñ)¨+Ó6ˆCŒIØŸ™ˆCŒJØ�t—}‘}Ñ$ØŸ™×+Ñ+¨KÓ8ˆCŒJØŸ™ˆCŒJÜÔ Ñ-¨kÈÐ-ÔOØ!×0Ñ0ˆÔØˆ
r   c                 ó:   —  | j                   j                  |i |¤ŽS ©N)r   r&   )r   ÚargsÚkwargss      r   Ú_newzNegativeBinomial._newJ   s   € Øˆt�{‰{�‰ Ð/¨Ñ/Ð/r   c                 óZ   — | j                   t        j                  | j                  «      z  S r(   )r   r    Úexpr   ©r   s    r   ÚmeanzNegativeBinomial.meanM   s    € à×Ñ¤%§)¡)¨D¯K©KÓ"8Ñ8Ð8r   c                 ó’   — | j                   dz
  | j                  j                  «       z  j                  «       j	                  d¬«      S )Né   r   )Úmin)r   r   r-   ÚfloorÚclampr.   s    r   ÚmodezNegativeBinomial.modeQ   s:   € à×!Ñ! AÑ%¨¯©¯©Ó):Ñ:×AÑAÓC×IÑIÈcÐIÓRÐRr   c                 ó\   — | j                   t        j                  | j                   «      z  S r(   )r/   r    Úsigmoidr   r.   s    r   ÚvariancezNegativeBinomial.varianceU   s    € à�y‰yœ5Ÿ=™=¨$¯+©+¨Ó6Ñ6Ð6r   c                 ó0   — t        | j                  d¬«      S ©NT)Ú	is_binary)r   r   r.   s    r   r   zNegativeBinomial.logitsY   s   € ä˜tŸz™z°TÔ:Ð:r   c                 ó0   — t        | j                  d¬«      S r:   )r   r   r.   s    r   r   zNegativeBinomial.probs]   s   € ä˜tŸ{™{°dÔ;Ð;r   c                 ó6   — | j                   j                  «       S r(   )r   r   r.   s    r   Úparam_shapezNegativeBinomial.param_shapea   s   € à�{‰{×ÑÓ!Ð!r   c                 ó–   — t         j                  j                  | j                  t        j                  | j
                   «      d¬«      S )NF)ÚconcentrationÚrater   )r    ÚdistributionsÚGammar   r-   r   r.   s    r   Ú_gammazNegativeBinomial._gammae   s@   € ô ×"Ñ"×(Ñ(Ø×*Ñ*Ü—‘˜DŸK™K˜<Ó(Øð )ó 
ð 	
r   c                 ó¸   — t        j                  «       5  | j                  j                  |¬«      }t        j                  |«      cd d d «       S # 1 sw Y   y xY w)N)Úsample_shape)r    Úno_gradrD   ÚsampleÚpoisson)r   rF   rA   s      r   rH   zNegativeBinomial.samplen   sC   € Ü�]‰]‹_ñ 	'Ø—;‘;×%Ñ%°<Ð%Ó@ˆDÜ—=‘= Ó&÷	'÷ 	'ò 	'ús   •1AÁAc                 óâ  — | j                   r| j                  |«       | j                  t        j                  | j
                   «      z  |t        j                  | j
                  «      z  z   }t        j                  | j                  |z   «       t        j                  d|z   «      z   t        j                  | j                  «      z   }|j                  | 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Ñ 0´1·<±<Ø�[‰[ˆLó4
ñ !
à”A—L‘L §¡Ó-Ñ-ñ!.Ðô
 �\‰\˜$×*Ñ*¨UÑ2Ó3Ð3Ü�l‰l˜3 ™;Ó'ñ(ä�l‰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Ñ2°1Ó5Ø/�×/Ñ/°°SÓ9Ø×"Ñ"ñ€Oð
 ×-Ñ-€GõCõ,ò0ð ñ9ó ð9ð ñSó ðSð ñ7ó ð7ð ñ;ó ð;ð ñ<ó ð<ð ñ"ó ð"ð ñ
ó ð
ð #- %§*¡*£,ó 'ö
9r   )r    Útorch.nn.functionalÚnnÚ
functionalrL   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r   r   Ú__all__r	   © r   r   ú<module>rh      s6   ðã ß Ð Ý +Ý 9÷ó ð Ð
€ôv9�|õ v9r   