§
    ŠŠtjš  ã                   óŒ   — 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 )
é    N)Ú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z  dz  deez  dz  dedz  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<|€t          d¦  «        ‚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.zlogits is unexpectedly None©r   )Ú
ValueErrorÚ
isinstancer   r   r   ÚAssertionErrorr   Ú_paramÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Ú	is_scalarÚbatch_shapeÚ	__class__s         €ú[/var/www/html/CA-Chatbot/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àˆ~Ý$Ð%BÑCÔCÐCÝ" 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.expandJ   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._newW   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r$   c                 ó   — | j         S r-   ©r   ©r   s    r#   ÚmeanzBernoulli.meanZ   s
   € àŒzÐr$   c                 ór   — | j         dk                         | j         ¦  «        }t          || j         dk    <   |S )Ng      à?)r   Útor   )r   Úmodes     r#   r7   zBernoulli.mode^   s4   € à”
˜cÒ!×%Ò% d¤jÑ1Ô1ˆÝ"%ˆˆTŒZ˜3ÒÑØˆr$   c                 ó&   — | j         d| j         z
  z  S )Né   r2   r3   s    r#   ÚvariancezBernoulli.varianced   s   € àŒz˜Q ¤™^Ñ,Ð,r$   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r
   r   r3   s    r#   r   zBernoulli.logitsh   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r$   c                 ó.   — t          | j        d¬¦  «        S r<   )r	   r   r3   s    r#   r   zBernoulli.probsl   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r$   c                 ó4   — | j                              ¦   «         S r-   )r   r   r3   s    r#   Úparam_shapezBernoulli.param_shapep   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.samplet   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_proby   sN   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý% d¤k°5Ñ9Ô9‰ˆ�Ý0°¸È&ÐQÑQÔQÐQÐQr$   c                 ó:   — t          | j        | j        d¬¦  «        S rI   )r   r   r   r3   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)éÿÿÿÿ)r9   )	r   Úaranger   rS   rT   Ú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   r3   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   Úboolr   r(   r0   Úpropertyr4   r7   r:   r   r   r   r   r   r@   rG   rN   rP   r[   Útupler^   rc   Ú__classcell__)r"   s   @r#   r   r      sp  ø€ € € € € ðð ð* !,Ô 9À[ÔEUÐVÐV€OØÔ!€GØ ÐØÐð )-Ø)-Ø%)ð	Cð Cà˜‰ Ñ%ðCð ˜‘ $Ñ&ðCð ˜d‘{ð	Cð
 
ðCð Cð Cð Cð Cð Cð6ð ð ð ð ð ð0ð 0ð 0ð ð�fð ð ð ñ „Xðð ð�fð ð ð ñ „Xðð
 ð-˜&ð -ð -ð -ñ „Xð-ð ð;˜ð ;ð ;ð ;ñ „]ð;ð ð<�vð <ð <ð <ñ „]ð<ð ð"˜UœZð "ð "ð "ñ „Xð"ð #- %¤*¡,¤,ð =ð =ð =ð =ð
Rð Rð Rð
ð 
ð 
ð
ð ð ð ð ð*  v¤ð *ð *ð *ñ „Xð*ð)ð )ð )ð )ð )ð )ð )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>rz      sý   ðð €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ˆ-€ð})ð })ð })ð })ð })Ð!ñ })ô })ð })ð })ð })r$   