L iDddlmZmZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZmZmZmZmZdd lmZmZmZd d gZGd d eZGd d e Zy))OptionalUnionN)Tensor) constraints) Distribution)TransformedDistribution)SigmoidTransform) broadcast_all clamp_probs lazy_propertylogits_to_probsprobs_to_logits)_Number_sizeNumberLogitRelaxedBernoulliRelaxedBernoullic PeZdZdZej ej dZej Z dde de e e e fde e e e fde e ddf fd Zdfd Zd Zede fd Zede fd Zedej,fdZej,fdede fdZdZxZS)ra Creates a LogitRelaxedBernoulli distribution parameterized by :attr:`probs` or :attr:`logits` (but not both), which is the logit of a RelaxedBernoulli distribution. Samples are logits of values in (0, 1). See [1] for more details. Args: temperature (Tensor): relaxation temperature probs (Number, Tensor): the probability of sampling `1` logits (Number, Tensor): the log-odds of sampling `1` [1] The Concrete Distribution: A Continuous Relaxation of Discrete Random Variables (Maddison et al., 2017) [2] Categorical Reparametrization with Gumbel-Softmax (Jang et al., 2017) probslogitsN temperaturerr validate_argsreturnc||_|du|duk(r td|#t|t}t |\|_n&|Jt|t}t |\|_| |j n |j |_|rtj}n|jj}t|1||y)Nz;Either `probs` or `logits` must be specified, but not both.r) r ValueError isinstancerr rr_paramtorchSizesizesuper__init__)selfrrrr is_scalar batch_shape __class__s k/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/distributions/relaxed_bernoulli.pyr$zLogitRelaxedBernoulli.__init__.s' TMv~ .M   "5'2I)%0MTZ% %%"673I*62NT[$)$5djj4;; **,K++**,K MBc|jt|}tj|}|j|_d|j vr1|j j||_|j |_d|j vr1|jj||_ |j|_tt|/|d|j|_ |S)NrrFr) _get_checked_instancerr r!r__dict__rexpandrrr#r$_validate_argsr%r' _instancenewr(s r)r.zLogitRelaxedBernoulli.expandHs(()> Jjj- ** dmm # ))+6CICJ t}} $++K8CJCJ #S2;e2T!00 r*c:|jj|i|SN)rr2)r%argskwargss r)_newzLogitRelaxedBernoulli._newVst{{///r*c0t|jdSNT) is_binary)rrr%s r)rzLogitRelaxedBernoulli.logitsYstzzT::r*c0t|jdSr9)r rr;s r)rzLogitRelaxedBernoulli.probs]st{{d;;r*c6|jjSr4)rr"r;s r) param_shapez!LogitRelaxedBernoulli.param_shapeas{{!!r* sample_shapecz|j|}t|jj|}tt j ||j |j}|j| jz |jz| jz |jz S)N)dtypedevice) _extended_shaper rr.r randrArBloglog1pr)r%r?shaperuniformss r)rsamplezLogitRelaxedBernoulli.rsamplees$$\2DJJ--e45 JJuEKK E  LLNxi..0 0599; >5&AQ Q    r*c(|jr|j|t|j|\}}||j |j z }|j j |zd|jjzz S)N) r/_validate_sampler rmulrrEexprF)r%valuerdiffs r)log_probzLogitRelaxedBernoulli.log_probosy     ! !% (%dkk59  $"2"233##%,q488:3C3C3E/EEEr*NNNr4)__name__ __module__ __qualname____doc__r unit_intervalrealarg_constraintssupportrrrrboolr$r.r7r rrpropertyr r!r>rrIrQ __classcell__r(s@r)rrs&!, 9 9[EUEUVOG 2626(, CCffn-.Cvv~./ C  ~ C  C4 0;;;>> # xdoctest: +IGNORE_WANT("non-deterministic") >>> m = RelaxedBernoulli(torch.tensor([2.2]), ... torch.tensor([0.1, 0.2, 0.3, 0.99])) >>> m.sample() tensor([ 0.2951, 0.3442, 0.8918, 0.9021]) Args: temperature (Tensor): relaxation temperature probs (Number, Tensor): the probability of sampling `1` logits (Number, Tensor): the log-odds of sampling `1` rT base_distNrrrrrcTt|||}t| |t|y)Nr)rr#r$r )r%rrrrr`r(s r)r$zRelaxedBernoulli.__init__s+*+ufE  $4$6mTr*cR|jt|}t| ||S)N)r1)r,rr#r.r0s r)r.zRelaxedBernoulli.expands)(()99Ew~kS~99r*c.|jjSr4)r`rr;s r)rzRelaxedBernoulli.temperatures~~)))r*c.|jjSr4)r`rr;s r)rzRelaxedBernoulli.logitss~~$$$r*c.|jjSr4)r`rr;s r)rzRelaxedBernoulli.probss~~###r*rRr4)rSrTrUrVrrWrXrYrZ has_rsampler__annotations__rrrrr[r$r.r\rrrr]r^s@r)rrws(!, 9 9[EUEUVO''GK$$ 2626(, UUffn-.Uvv~./ U  ~ U  U:*V**%%%$v$$r*)typingrrr rtorch.distributionsr torch.distributions.distributionr,torch.distributions.transformed_distributionrtorch.distributions.transformsr torch.distributions.utilsr r r r r torch.typesrrr__all__rrr*r)rqsW" +9P;/. #$6 7]FL]F@2$.2$r*