
    IЦiu                     ^    S SK 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)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    [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/distributions/binomial.py_clamp_by_zeror      s+    GGGNQQ/144    c                   `  ^  \ rS rSrSr\R                  \R                  \R                  S.r	Sr
SU 4S jjrSU 4S jjrS r\R                  " SSS	9S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\R2                  " 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logitsTc                   > 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        OB[        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.validate_args)

ValueErrorr   r   r   type_asr   _paramsizesuper__init__)selfr   r   r   r   batch_shape	__class__s         r   r!   Binomial.__init__3   s    TMv~.M   k1 
#//77

CD
 k2 #//77DD$)$5djj4;;kk&&(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.expandI   s    ((9=jj-**11+>dmm#

))+6CICJt}}$++K8CJCJh%k%G!00
r   c                 :    U R                   R                  " U0 UD6$ N)r   r.   )r"   argskwargss      r   _newBinomial._newW   s    {{///r   r   )is_discrete	event_dimc                 D    [         R                  " SU R                  5      $ )Nr   )r   integer_intervalr   r"   s    r   supportBinomial.supportZ   s    ++At/?/?@@r   c                 4    U R                   U R                  -  $ r1   r   r   r:   s    r   meanBinomial.mean^   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.modeb   s9    !!A%3::<BBtGWGWBXXr   c                 T    U R                   U R                  -  SU R                  -
  -  $ NrB   r>   r:   s    r   varianceBinomial.variancef   s$    $**,DJJ??r   c                 *    [        U R                  SS9$ NT)	is_binary)r   r   r:   s    r   r   Binomial.logitsj   s    tzzT::r   c                 *    [        U R                  SS9$ rK   )r   r   r:   s    r   r   Binomial.probsn   s    t{{d;;r   c                 6    U R                   R                  5       $ r1   )r   r   r:   s    r   param_shapeBinomial.param_shaper   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r1   )_extended_shaper(   no_gradbinomialr   r*   r   )r"   sample_shapeshapes      r   sampleBinomial.samplev   sV    $$\2]]_>>  ''.

0A0A%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-
  $ rG   )
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!';<,,uqy1!LL)9)9E)AA)EF ~dkk::UYY		$++8N7N-O!PPQ 	 KK/14E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   NotImplementedErrorrf   enumerate_supportr(   r_   sum)r"   r   rf   s      r   entropyBinomial.entropy   s    $**..01##%4%G  ==!7!7!>?8$x/44Q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`.rB   )dtypedevice))rB   )ri   r   r   r   rj   r(   aranger   rp   rq   viewlen_batch_shaper*   )r"   r*   r   valuess       r   rk   Binomial.enumerate_support   s    $**..01##%4%Q  O4;;#4#4T[[=O=O
 UTC0A0A,B%BBC]]54+<+<#<=Fr   )r   r   r   r   )rB   NNNr1   )T) __name__
__module____qualname____firstlineno____doc__r   nonnegative_integerunit_intervalrealarg_constraintshas_enumerate_supportr!   r*   r4   dependent_propertyr;   propertyr?   rD   rH   r   r   r   rQ   r(   r)   rY   rf   rm   rk   __static_attributes____classcell__)r$   s   @r   r	   r	      s   . #66**""O
 !C,0 ##BA CA - - Y Y @ @ ; ; < < " " #(**, 
(8 r   )r(   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   r   r   r   __all__r   r	    r   r   <module>r      s4     + 9  ,5
R| Rr   