
    9i                     z    S SK JrJr  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)
    )OptionalUnionN)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    \/var/www/html/land-doc-ocr/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S\\\4   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
\R:                  4S j5       r\R:                  " 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        OGUc   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.r   )

ValueErrorr   r   r   type_asr   _paramsizesuper__init__)selfr   r   r   r   batch_shape	__class__s         r   r%   Binomial.__init__7   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.expandT   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"   r2   )r&   argskwargss      r   _newBinomial._newb   s    {{///r   r   )is_discrete	event_dimc                 D    [         R                  " SU R                  5      $ )Nr   )r   integer_intervalr   r&   s    r   supportBinomial.supporte   s    ++At/?/?@@r   c                 4    U R                   U R                  -  $ r5   r   r   r>   s    r   meanBinomial.meani   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.modem   s9    !!A%3::<BBtGWGWBXXr   c                 T    U R                   U R                  -  SU R                  -
  -  $ NrF   rB   r>   s    r   varianceBinomial.varianceq   s$    $**,DJJ??r   c                 *    [        U R                  SS9$ NT)	is_binary)r   r   r>   s    r   r   Binomial.logitsu   s    tzzT::r   c                 *    [        U R                  SS9$ rO   )r
   r   r>   s    r   r   Binomial.probsy   s    t{{d;;r   c                 6    U R                   R                  5       $ r5   )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r5   )_extended_shaper,   no_gradbinomialr   r.   r   )r&   sample_shapeshapes      r   sampleBinomial.sample   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-
  $ rK   )
r0   _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   NotImplementedErrorrj   enumerate_supportr,   rc   sum)r&   r   rj   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`.rF   )dtypedevice))rF   )rm   r   r   r   rn   r,   aranger"   rt   ru   viewlen_batch_shaper.   )r&   r.   r   valuess       r   ro   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   )rF   NNNr5   )T)%__name__
__module____qualname____firstlineno____doc__r   nonnegative_integerunit_intervalrealarg_constraintshas_enumerate_supportr   r   rm   r   boolr%   r.   r8   dependent_propertyr?   propertyrC   rH   rL   r	   r   r   r,   r-   rU   r]   rj   rq   ro   __static_attributes____classcell__)r(   s   @r   r   r      s   0 #66**""O
 ! +,"&#'(,C63;'C C  	C
  ~C 
C C:0 ##BA CA -f - - Yf Y Y @& @ @ ; ; ; <v < < "UZZ " " #(**, 
(8 r   )typingr   r   r,   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   r	   r
   r   __all__r   r    r   r   <module>r      s:    "   + 9  ,5
Z| Zr   