
    [Th                     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    T/var/www/auris/envauris/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\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\R2                  4S j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__5   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.expandK   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._newY   s    {{///r   r   )is_discrete	event_dimc                 D    [         R                  " SU R                  5      $ )Nr   )r   integer_intervalr   r#   s    r   supportBinomial.support\   s    ++At/?/?@@r   returnc                 4    U R                   U R                  -  $ r2   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.moded   s9    !!A%3::<BBtGWGWBXXr   c                 T    U R                   U R                  -  SU R                  -
  -  $ NrD   r@   r;   s    r   varianceBinomial.varianceh   s$    $**,DJJ??r   c                 *    [        U R                  SS9$ NT)	is_binary)r	   r   r;   s    r   r   Binomial.logitsl   s    tzzT::r   c                 *    [        U R                  SS9$ rM   )r   r   r;   s    r   r   Binomial.probsp   s    t{{d;;r   c                 6    U R                   R                  5       $ r2   )r   r    r;   s    r   param_shapeBinomial.param_shapet   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r2   )_extended_shaper)   no_gradbinomialr   r+   r   )r#   sample_shapeshapes      r   sampleBinomial.samplex   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-
  $ rI   )
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   NotImplementedErrorrh   enumerate_supportr)   ra   sum)r#   r   rh   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`.rD   )dtypedevice))rD   )rk   r   r   r   rl   r)   aranger   rr   rs   viewlen_batch_shaper+   )r#   r+   r   valuess       r   rm   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   )rD   NNNr2   )T)!__name__
__module____qualname____firstlineno____doc__r   nonnegative_integerunit_intervalrealarg_constraintshas_enumerate_supportr"   r+   r5   dependent_propertyr<   propertyr   rA   rF   rJ   r   r   r   r)   r*   rS   r[   rh   ro   rm   __static_attributes____classcell__)r%   s   @r   r
   r
      s8   0 #66**""O
 !C,0 ##BA CA -f - - Yf Y Y @& @ @ ; ; ; <v < < "UZZ " " #(**, 
(8 r   )r)   r   torch.distributionsr    torch.distributions.distributionr   torch.distributions.utilsr   r   r   r	   __all__r   r
    r   r   <module>r      s7      + 9  ,5
S| Sr   