L izddlmZmZddlZddlmZddlmZddlmZddl m Z m Z m Z m Z dgZdZGd deZy) )OptionalUnionN)Tensor) constraints) Distribution) broadcast_all lazy_propertylogits_to_probsprobs_to_logitsBinomialcX|jd|z|jdz dz S)Nr)minmax)clamp)xs b/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/distributions/binomial.py_clamp_by_zerors+ GGGNQ Q /1 44c eZdZdZej ej ejdZdZ dde e e fde e de e de ed df fd Zdfd Zd Zej$dd dZed e fdZed e fdZed e fdZed e fdZed e fdZed ej8fdZej8fdZdZdZ ddZ!xZ"S)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_countprobslogitsTNrrr validate_argsreturnc|du|duk(r td|Dt||\|_|_|jj |j|_nG|Jt||\|_|_|jj |j |_| |jn |j |_|j j}t|%||y)Nz;Either `probs` or `logits` must be specified, but not both.r) ValueErrorrrrtype_asr_paramsizesuper__init__)selfrrrr batch_shape __class__s rr$zBinomial.__init__7s TMv~ .M   k51   #//77 CD % %%k62   #//77 DD $)$5djj4;; kk&&(  MBrc|jt|}tj|}|jj ||_d|j vr1|jj ||_|j|_d|j vr1|jj ||_ |j|_tt|/|d|j|_ |S)NrrFr) _get_checked_instancer torchSizerexpand__dict__rr!rr#r$_validate_args)r%r& _instancenewr's rr,zBinomial.expandTs((9=jj- **11+> dmm # ))+6CICJ t}} $++K8CJCJ h%k%G!00 rc:|jj|i|SN)r!r0)r%argskwargss r_newz Binomial._newbst{{///rr) is_discrete event_dimcBtjd|jS)Nr)rinteger_intervalrr%s rsupportzBinomial.supportes++At/?/?@@rc4|j|jzSr2rrr:s rmeanz Binomial.meanis$**,,rc|jdz|jzjj|jS)Nr)rrfloorrr:s rmodez Binomial.modems9!!A%3::<BBtGWGWBXXrcT|j|jzd|jz zSNr@r=r:s rvariancezBinomial.varianceqs$$**,DJJ??rc0t|jdSNT) is_binary)r rr:s rrzBinomial.logitsustzzT::rc0t|jdSrG)r rr:s rrzBinomial.probsyst{{d;;rc6|jjSr2)r!r"r:s r param_shapezBinomial.param_shape}s{{!!rc|j|}tj5tj|jj ||j j |cdddS#1swYyxYwr2)_extended_shaper*no_gradbinomialrr,r)r% sample_shapeshapes rsamplezBinomial.samplesa$$\2 ]]_ >>  ''. 0A0A%0H   s AA88Bc |jr|j|tj|jdz}tj|dz}tj|j|z dz}|jt |j z|jtjtjtj|j  zz|z }||j z|z |z |z SrD) r._validate_sampler*lgammarrrlog1pexpabs)r%valuelog_factorial_nlog_factorial_klog_factorial_nmknormalize_terms rlog_probzBinomial.log_probs     ! !% (,,t'7'7!';<,,uqy1!LL)9)9E)AA)EF   ~dkk: :UYY $++8N7N-O!PP Q   DKK / 14E E V rc(t|jj}|jj|k(s t d|j |j d}tj||zjd S)Nz5Inhomogeneous total count not supported by `entropy`.Fr) intrrrNotImplementedErrorr^enumerate_supportr*rWsum)r%rr^s rentropyzBinomial.entropys$**..01 ##%4%G ==!7!7!>?8$x/44Q777rct|jj}|jj|k(s t dt j d|z|jj|jj}|jddt|jzz}|r|jd|jz}|S)Nz?Inhomogeneous total count not supported by `enumerate_support`.r@)dtypedevice))r@)r`rrrrar*aranger!rfrgviewlen _batch_shaper,)r%r,rvaluess rrbzBinomial.enumerate_supports$**..01 ##%4%Q  O4;;#4#4T[[=O=O UTC0A0A,B%BBC ]]54+<+<#<=F r)r@NNNr2)T)#__name__ __module__ __qualname____doc__rnonnegative_integer unit_intervalrealarg_constraintshas_enumerate_supportrrr`rboolr$r,r5dependent_propertyr;propertyr>rBrEr rrr*r+rKrRr^rdrb __classcell__)r's@rr r s0#66**""O !+,"&#'(, C63;'CC C  ~ C  C: 0$[##BACA-f--YfYY@&@@;;;rs:" +9 ,5 Z|Zr