§
    ®˜ºh  ã                   óœ   — d dl mZmZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZ d	gZ G d
„ d	e	¦  «        ZdS )é    )ÚOptionalÚUnionN)ÚnanÚTensor)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_NumberÚNumberÚ	Bernoullic            	       óÞ  ‡ — e Zd ZdZej        ej        dœZej        Z	dZ
dZ	 	 	 ddeeeef                  deeeef                  dee         d	dfˆ fd
„Zdˆ fd„	Zd„ Zed	efd„¦   «         Zed	efd„¦   «         Zed	efd„¦   «         Zed	efd„¦   «         Zed	efd„¦   «         Zed	ej        fd„¦   «         Z ej        ¦   «         fd„Zd„ Zd„ Z dd„Z!ed	e"e         fd„¦   «         Z#d„ Z$ˆ xZ%S )r   aˆ  
    Creates a Bernoulli distribution parameterized by :attr:`probs`
    or :attr:`logits` (but not both).

    Samples are binary (0 or 1). They take the value `1` with probability `p`
    and `0` with probability `1 - p`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Bernoulli(torch.tensor([0.3]))
        >>> m.sample()  # 30% chance 1; 70% chance 0
        tensor([ 0.])

    Args:
        probs (Number, Tensor): the probability of sampling `1`
        logits (Number, Tensor): the log-odds of sampling `1`
        validate_args (bool, optional): whether to validate arguments, None by default
    )ÚprobsÚlogitsTr   Nr   r   Úvalidate_argsÚreturnc                 óÂ  •— |d u |d u k    rt          d¦  «        ‚|�,t          |t          ¦  «        }t          |¦  «        \  | _        n/|€J ‚t          |t          ¦  «        }t          |¦  «        \  | _        |�| j        n| j        | _        |rt          j        ¦   «         }n| j         	                    ¦   «         }t          ¦   «                              ||¬¦  «         d S )Nz;Either `probs` or `logits` must be specified, but not both.©r   )Ú
ValueErrorÚ
isinstancer   r	   r   r   Ú_paramÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Ú	is_scalarÚbatch_shapeÚ	__class__s         €úe/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/distributions/bernoulli.pyr   zBernoulli.__init__/   sâ   ø€ ð �TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð ÐÝ" 5­'Ñ2Ô2ˆIÝ)¨%Ñ0Ô0‰MˆTŒZˆZàÐ%Ð%Ð%Ý" 6­7Ñ3Ô3ˆIÝ*¨6Ñ2Ô2‰NˆTŒ[Ø$)Ð$5�d”j�j¸4¼;ˆŒØð 	-Ýœ*™,œ,ˆKˆKàœ+×*Ò*Ñ,Ô,ˆKÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBó    c                 ó¢  •— |                       t          |¦  «        }t          j        |¦  «        }d| j        v r+| j                             |¦  «        |_        |j        |_        d| j        v r+| j                             |¦  «        |_        |j        |_        t          t          |¦  «         
                    |d¬¦  «         | j        |_        |S )Nr   r   Fr   )Ú_get_checked_instancer   r   r   Ú__dict__r   Úexpandr   r   r   r   Ú_validate_args)r    r"   Ú	_instanceÚnewr#   s       €r$   r)   zBernoulli.expandG   s´   ø€ Ø×(Ò(­°IÑ>Ô>ˆÝ”j Ñ-Ô-ˆØ�d”mÐ#Ð#Øœ
×)Ò)¨+Ñ6Ô6ˆCŒIØœˆCŒJØ�t”}Ð$Ð$Øœ×+Ò+¨KÑ8Ô8ˆCŒJØœˆCŒJÝ�i˜ÑÔ×&Ò& {À%Ð&ÑHÔHÐHØ!Ô0ˆÔØˆ
r%   c                 ó&   —  | j         j        |i |¤ŽS ©N)r   r,   )r    ÚargsÚkwargss      r$   Ú_newzBernoulli._newT   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r%   c                 ó   — | j         S r.   ©r   ©r    s    r$   ÚmeanzBernoulli.meanW   s
   € àŒzÐr%   c                 ór   — | j         dk                         | j         ¦  «        }t          || j         dk    <   |S )Ng      à?)r   Útor   )r    Úmodes     r$   r8   zBernoulli.mode[   s4   € à”
˜cÒ!×%Ò% d¤jÑ1Ô1ˆÝ"%ˆˆTŒZ˜3ÒÑØˆr%   c                 ó&   — | j         d| j         z
  z  S )Né   r3   r4   s    r$   ÚvariancezBernoulli.variancea   s   € àŒz˜Q ¤™^Ñ,Ð,r%   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r   r   r4   s    r$   r   zBernoulli.logitse   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r%   c                 ó.   — t          | j        d¬¦  «        S r=   )r   r   r4   s    r$   r   zBernoulli.probsi   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r%   c                 ó4   — | j                              ¦   «         S r.   )r   r   r4   s    r$   Úparam_shapezBernoulli.param_shapem   s   € àŒ{×ÒÑ!Ô!Ð!r%   c                 óÞ   — |                       |¦  «        }t          j        ¦   «         5  t          j        | j                             |¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r.   )Ú_extended_shaper   Úno_gradÚ	bernoullir   r)   )r    Úsample_shapeÚshapes      r$   ÚsamplezBernoulli.sampleq   s¢   € Ø×$Ò$ \Ñ2Ô2ˆÝŒ]‰_Œ_ð 	=ð 	=Ý”? 4¤:×#4Ò#4°UÑ#;Ô#;Ñ<Ô<ð	=ð 	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   ©,A"Á"A&Á)A&c                 ó�   — | j         r|                      |¦  «         t          | j        |¦  «        \  }}t	          ||d¬¦  «         S ©NÚnone)Ú	reduction)r*   Ú_validate_sampler	   r   r   )r    Úvaluer   s      r$   Úlog_probzBernoulli.log_probv   sN   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý% d¤k°5Ñ9Ô9‰ˆ�Ý0°¸È&ÐQÑQÔQÐQÐQr%   c                 ó:   — t          | j        | j        d¬¦  «        S rJ   )r   r   r   r4   s    r$   ÚentropyzBernoulli.entropy|   s$   € Ý/ØŒK˜œ¨vð
ñ 
ô 
ð 	
r%   c                 óô   — t          j        d| j        j        | j        j        ¬¦  «        }|                     ddt          | j        ¦  «        z  z   ¦  «        }|r|                     d| j        z   ¦  «        }|S )Né   )ÚdtypeÚdevice)éÿÿÿÿ)r:   )	r   Úaranger   rT   rU   ÚviewÚlenÚ_batch_shaper)   )r    r)   Úvaluess      r$   Úenumerate_supportzBernoulli.enumerate_support�   sn   € Ý”˜a t¤{Ô'8ÀÄÔASÐTÑTÔTˆØ—’˜U T­C°Ô0AÑ,BÔ,BÑ%BÑBÑCÔCˆØð 	>Ø—]’] 5¨4Ô+<Ñ#<Ñ=Ô=ˆFØˆr%   c                 ó6   — t          j        | j        ¦  «        fS r.   )r   Úlogitr   r4   s    r$   Ú_natural_paramszBernoulli._natural_paramsˆ   s   € å”˜DœJÑ'Ô'Ð)Ð)r%   c                 óN   — t          j        t          j        |¦  «        ¦  «        S r.   )r   Úlog1pÚexp)r    Úxs     r$   Ú_log_normalizerzBernoulli._log_normalizerŒ   s   € ÝŒ{�5œ9 Q™<œ<Ñ(Ô(Ð(r%   )NNNr.   )T)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealÚarg_constraintsÚbooleanÚsupportÚhas_enumerate_supportÚ_mean_carrier_measurer   r   r   r   Úboolr   r)   r1   Úpropertyr5   r8   r;   r
   r   r   r   r   rA   rH   rO   rQ   r\   Útupler_   rd   Ú__classcell__)r#   s   @r$   r   r      sz  ø€ € € € € ðð ð( !,Ô 9À[ÔEUÐVÐV€OØÔ!€GØ ÐØÐð 26Ø26Ø(,ð	Cð Cà˜˜f f˜nÔ-Ô.ðCð ˜˜v v˜~Ô.Ô/ðCð   ”~ð	Cð
 
ðCð Cð Cð Cð Cð Cð0ð ð ð ð ð ð0ð 0ð 0ð ð�fð ð ð ñ „Xðð ð�fð ð ð ñ „Xðð
 ð-˜&ð -ð -ð -ñ „Xð-ð ð;˜ð ;ð ;ð ;ñ „]ð;ð ð<�vð <ð <ð <ñ „]ð<ð ð"˜UœZð "ð "ð "ñ „Xð"ð #- %¤*¡,¤,ð =ð =ð =ð =ð
Rð Rð Rð
ð 
ð 
ð
ð ð ð ð ð*  v¤ð *ð *ð *ñ „Xð*ð)ð )ð )ð )ð )ð )ð )r%   )Útypingr   r   r   r   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr	   r
   r   r   Útorch.nn.functionalr   Útorch.typesr   r   Ú__all__r   © r%   r$   ú<module>r|      s  ðà "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ˆ-€ðx)ð x)ð x)ð x)ð x)Ð!ñ x)ô x)ð x)ð x)ð x)r%   