ó
    EñiQ  ã                   ój   • S SK r S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
  S/rS r " S S\5      rg)	é    N)ÚTensor)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logitsÚBinomialc                 óL   • U R                  SS9U -   U R                  SS9-
  S-  $ )Nr   )Úmin©Úmaxé   )Úclamp)Úxs    ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributions/binomial.pyÚ_clamp_by_zeror      s+   € à�G‰G˜ˆGˆN˜QÑ §¡¨Q  Ñ/°1Ñ4Ð4ó    c                   óÜ  ^ • \ rS rSrSr\R                  \R                  \R                  S.r	Sr
    SS\\-  S\S-  S\S-  S	\S-  S
S4
U 4S jjjrSU 4S jjrS r\R"                  " SSS9S 5       r\S
\4S j5       r\S
\4S j5       r\S
\4S j5       r\S
\4S j5       r\S
\4S j5       r\S
\R6                  4S j5       r\R6                  " 5       4S jrS rS rSS jr Sr!U =r"$ )r
   é   a­  
Creates a Binomial distribution parameterized by :attr:`total_count` and
either :attr:`probs` or :attr:`logits` (but not both). :attr:`total_count` must be
broadcastable with :attr:`probs`/:attr:`logits`.

Example::

    >>> # xdoctest: +IGNORE_WANT("non-deterministic")
    >>> m = Binomial(100, torch.tensor([0 , .2, .8, 1]))
    >>> x = m.sample()
    tensor([   0.,   22.,   71.,  100.])

    >>> m = Binomial(torch.tensor([[5.], [10.]]), torch.tensor([0.5, 0.8]))
    >>> x = m.sample()
    tensor([[ 4.,  5.],
            [ 7.,  6.]])

Args:
    total_count (int or Tensor): number of Bernoulli trials
    probs (Tensor): Event probabilities
    logits (Tensor): Event log-odds
)Útotal_countÚprobsÚlogitsTNr   r   r   Úvalidate_argsÚreturnc                 óê  >• US L US L :X  a  [        S5      eUbC  [        X5      u  U l        U l        U R                  R	                  U R                  5      U l        OPUc  [        S5      e[        X5      u  U l        U l        U R                  R	                  U R                  5      U l        Ub  U R                  OU R                  U l        U R                  R                  5       n[        TU ])  XTS9  g )Nz;Either `probs` or `logits` must be specified, but not both.zlogits is unexpectedly None©r   )Ú
ValueErrorr   r   r   Útype_asÚAssertionErrorr   Ú_paramÚsizeÚsuperÚ__init__)Úselfr   r   r   r   Úbatch_shapeÚ	__class__s         €r   r$   ÚBinomial.__init__7   sä   ø€ ð �TˆM˜v¨˜~Ó.ÜØMóð ð Ñô
 ˜kÓ1ñ	ØÔ à”
à#×/Ñ/×7Ñ7¸¿
¹
ÓCˆDÕà‰~Ü$Ð%BÓCÐCô
 ˜kÓ2ñ	ØÔ à”à#×/Ñ/×7Ñ7¸¿¹ÓDˆDÔà$)Ñ$5�d—j’j¸4¿;¹;ˆŒØ—k‘k×&Ñ&Ó(ˆÜ‰Ñ˜ÐÒBr   c                 óê  >• U R                  [        U5      n[        R                  " U5      nU R                  R                  U5      Ul        SU R                  ;   a1  U R                  R                  U5      Ul        UR                  Ul        SU R                  ;   a1  U R                  R                  U5      Ul	        UR                  Ul        [        [        U]/  USS9  U R                  Ul        U$ )Nr   r   Fr   )Ú_get_checked_instancer
   ÚtorchÚSizer   ÚexpandÚ__dict__r   r!   r   r#   r$   Ú_validate_args)r%   r&   Ú	_instanceÚnewr'   s       €r   r-   ÚBinomial.expandW   s¼   ø€ Ø×(Ñ(¬°9Ó=ˆÜ—j’j Ó-ˆØ×*Ñ*×1Ñ1°+Ó>ˆŒØ�d—m‘mÓ#ØŸ
™
×)Ñ)¨+Ó6ˆCŒIØŸ™ˆCŒJØ�t—}‘}Ó$ØŸ™×+Ñ+¨KÓ8ˆCŒJØŸ™ˆCŒJÜŒh˜Ñ% kÀÐ%ÑGØ!×0Ñ0ˆÔØˆ
r   c                 ó:   • U R                   R                  " U0 UD6$ ©N)r!   r1   )r%   ÚargsÚkwargss      r   Ú_newÚBinomial._newe   s   € Ø�{‰{�Š Ð/¨Ñ/Ð/r   r   )Úis_discreteÚ	event_dimc                 óD   • [         R                  " SU R                  5      $ )Nr   )r   Úinteger_intervalr   ©r%   s    r   ÚsupportÚBinomial.supporth   s   € ô ×+Ò+¨A¨t×/?Ñ/?Ó@Ð@r   c                 ó4   • U R                   U R                  -  $ r4   ©r   r   r=   s    r   ÚmeanÚBinomial.meanm   s   € à×Ñ $§*¡*Ñ,Ð,r   c                 ó„   • U R                   S-   U R                  -  R                  5       R                  U R                   S9$ )Né   r   )r   r   Úfloorr   r=   s    r   ÚmodeÚBinomial.modeq   s9   € à×!Ñ! AÑ%¨¯©Ñ3×:Ñ:Ó<×BÑBÀt×GWÑGWÐBÐXÐXr   c                 óT   • U R                   U R                  -  SU R                  -
  -  $ ©NrE   rA   r=   s    r   ÚvarianceÚBinomial.varianceu   s$   € à×Ñ $§*¡*Ñ,°°D·J±J±Ñ?Ð?r   c                 ó*   • [        U R                  SS9$ ©NT)Ú	is_binary)r	   r   r=   s    r   r   ÚBinomial.logitsy   s   € ä˜tŸz™z°TÑ:Ð:r   c                 ó*   • [        U R                  SS9$ rN   )r   r   r=   s    r   r   ÚBinomial.probs}   s   € ä˜tŸ{™{°dÑ;Ð;r   c                 ó6   • U R                   R                  5       $ r4   )r!   r"   r=   s    r   Úparam_shapeÚBinomial.param_shape�   s   € à�{‰{×ÑÓ!Ð!r   c                 ó  • U R                  U5      n[        R                  " 5          [        R                  " U R                  R                  U5      U R                  R                  U5      5      sS S S 5        $ ! , (       d  f       g = fr4   )Ú_extended_shaper+   Úno_gradÚbinomialr   r-   r   )r%   Úsample_shapeÚshapes      r   ÚsampleÚBinomial.sample…   sV   € Ø×$Ñ$ \Ó2ˆÜ�]Š]�_Ü—>’>Ø× Ñ ×'Ñ'¨Ó.°·
±
×0AÑ0AÀ%Ó0Hó÷ �_�_ús   §A	A:Á:
Bc           	      ó0  • U R                   (       a  U R                  U5        [        R                  " U R                  S-   5      n[        R                  " US-   5      n[        R                  " U R                  U-
  S-   5      nU R                  [        U R                  5      -  U R                  [        R                  " [        R                  " [        R                  " U R                  5      * 5      5      -  -   U-
  nXR                  -  U-
  U-
  U-
  $ rJ   )
r/   Ú_validate_sampler+   Úlgammar   r   r   Úlog1pÚexpÚabs)r%   ÚvalueÚlog_factorial_nÚlog_factorial_kÚlog_factorial_nmkÚnormalize_terms         r   Úlog_probÚBinomial.log_probŒ   sà   € Ø××Ø×!Ñ! %Ô(ÜŸ,š, t×'7Ñ'7¸!Ñ';Ó<ˆÜŸ,š, u¨q¡yÓ1ˆÜ!ŸLšL¨×)9Ñ)9¸EÑ)AÀAÑ)EÓFÐð ×Ñœ~¨d¯k©kÓ:Ñ:Ø×Ñ¤§¢¬U¯YªY¼¿	º	À$Ç+Á+Ó8NÐ7NÓ-OÓ!PÑPñQàñð 	ð —K‘KÑ /Ñ1Ð4EÑEÈÑVð	
r   c                 ó,  • [        U R                  R                  5       5      nU R                  R                  5       U:X  d  [	        S5      eU R                  U R                  S5      5      n[        R                  " U5      U-  R                  S5      * $ )Nz5Inhomogeneous total count not supported by `entropy`.Fr   )
Úintr   r   r   ÚNotImplementedErrorri   Úenumerate_supportr+   rb   Úsum)r%   r   ri   s      r   ÚentropyÚBinomial.entropy    s   € Ü˜$×*Ñ*×.Ñ.Ó0Ó1ˆØ×Ñ×#Ñ#Ó%¨Ó4Ü%ØGóð ð —=‘= ×!7Ñ!7¸Ó!>Ó?ˆÜ—’˜8Ó$ xÑ/×4Ñ4°QÓ7Ð7Ð7r   c                 ó¾  • [        U R                  R                  5       5      nU R                  R                  5       U:X  d  [	        S5      e[
        R                  " SU-   U R                  R                  U R                  R                  S9nUR                  SS[        U R                  5      -  -   5      nU(       a  UR                  SU R                  -   5      nU$ )Nz?Inhomogeneous total count not supported by `enumerate_support`.rE   )ÚdtypeÚdevice)éÿÿÿÿ)rE   )rl   r   r   r   rm   r+   Úaranger!   rs   rt   ÚviewÚlenÚ_batch_shaper-   )r%   r-   r   Úvaluess       r   rn   ÚBinomial.enumerate_supportª   s·   € Ü˜$×*Ñ*×.Ñ.Ó0Ó1ˆØ×Ñ×#Ñ#Ó%¨Ó4Ü%ØQóð ô —’Ø�‰O 4§;¡;×#4Ñ#4¸T¿[¹[×=OÑ=Oñ
ˆð —‘˜U T¬C°×0AÑ0AÓ,BÑ%BÑBÓCˆÞØ—]‘] 5¨4×+<Ñ+<Ñ#<Ó=ˆFØˆr   )r!   r   r   r   )rE   NNNr4   )T)#Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Únonnegative_integerÚunit_intervalÚrealÚarg_constraintsÚhas_enumerate_supportr   rl   Úboolr$   r-   r7   Údependent_propertyr>   ÚpropertyrB   rG   rK   r   r   r   r+   r,   rT   r\   ri   rp   rn   Ú__static_attributes__Ú__classcell__)r'   s   @r   r
   r
      s’  ø† ñð2 #×6Ñ6Ø×*Ñ*Ø×"Ñ"ñ€Oð
 !Ðð %&Ø#Ø $Ø%)ñCà˜c‘\ðCð ˜‰}ðCð ˜‘ð	Cð
 ˜d‘{ðCð 
÷Cð C÷@ò0ð ×#Ò#°ÀÑBñAó CðAð ð-�fó -ó ð-ð ðY�fó Yó ðYð ð@˜&ó @ó ð@ð ð;˜ó ;ó ð;ð ð<�vó <ó ð<ð ð"˜UŸZ™Zó "ó ð"ð #(§*¢*£,ô ò
ò(8÷ò r   )r+   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r   r	   Ú__all__r   r
   © r   r   Ú<module>r�      s9   ðó Ý Ý +Ý 9÷ó ð ˆ,€ò5ô
_ˆ|õ _r   