§
    Ÿ²Åjë  ã                   ó„   — d dl mZ d dlZd dl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gZ G d	„ de¦  «        ZdS )
é    )ÚNumberN)Únan)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logitsÚ	Bernoullic                   óB  ‡ — e Zd ZdZej        ej        dœZej        Z	dZ
dZdˆ fd„	Zdˆ fd„	Zd„ Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z ej        ¦   «         fd„Zd„ Zd„ Zdd„Zed„ ¦   «         Zd„ Zˆ xZS )r   a1  
    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`
    )ÚprobsÚlogitsTr   Nc                 óº  •— |d u |d u k    rt          d¦  «        ‚|�,t          |t          ¦  «        }t          |¦  «        \  | _        n+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.©Úvalidate_args)Ú
ValueErrorÚ
isinstancer   r   r   r   Ú_paramÚtorchÚSizeÚsizeÚsuperÚ__init__)Úselfr   r   r   Ú	is_scalarÚbatch_shapeÚ	__class__s         €úNC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/bernoulli.pyr   zBernoulli.__init__,   sÔ   ø€ Ø�TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð ÐÝ" 5­&Ñ1Ô1ˆIÝ)¨%Ñ0Ô0‰MˆTŒZˆZå" 6­6Ñ2Ô2ˆ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.expand>   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._newK   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r    c                 ó   — | j         S r)   ©r   ©r   s    r   ÚmeanzBernoulli.meanN   s
   € àŒzÐr    c                 ór   — | j         dk                         | j         ¦  «        }t          || j         dk    <   |S )Ng      à?)r   Útor   )r   Úmodes     r   r3   zBernoulli.modeR   s4   € à”
˜cÒ!×%Ò% d¤jÑ1Ô1ˆÝ"%ˆˆTŒZ˜3ÒÑØˆr    c                 ó&   — | j         d| j         z
  z  S )Né   r.   r/   s    r   ÚvariancezBernoulli.varianceX   s   € àŒz˜Q ¤™^Ñ,Ð,r    c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r
   r   r/   s    r   r   zBernoulli.logits\   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r    c                 ó.   — t          | j        d¬¦  «        S r8   )r	   r   r/   s    r   r   zBernoulli.probs`   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r    c                 ó4   — | j                              ¦   «         S r)   )r   r   r/   s    r   Úparam_shapezBernoulli.param_shaped   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.sampleh   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_probm   sN   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý% d¤k°5Ñ9Ô9‰ˆ�Ý0°¸È&ÐQÑQÔQÐQÐQr    c                 ó:   — t          | j        | j        d¬¦  «        S rE   )r   r   r   r/   s    r   ÚentropyzBernoulli.entropys   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)éÿÿÿÿ)r5   )	r   Úaranger   rO   rP   ÚviewÚlenÚ_batch_shaper$   )r   r$   Úvaluess      r   Úenumerate_supportzBernoulli.enumerate_supportx   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   r/   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,   Úpropertyr0   r3   r6   r   r   r   r<   r   r   rC   rJ   rL   rW   rZ   r_   Ú__classcell__)r   s   @r   r   r      sÅ  ø€ € € € € ðð ð$ !,Ô 9À[ÔEUÐVÐV€OØÔ!€GØ ÐØÐðCð Cð Cð Cð Cð Cð$ð ð ð ð ð ð0ð 0ð 0ð ðð ñ „Xðð ðð ñ „Xðð
 ð-ð -ñ „Xð-ð ð;ð ;ñ „]ð;ð ð<ð <ñ „]ð<ð ð"ð "ñ „Xð"ð #- %¤*¡,¤,ð =ð =ð =ð =ð
Rð Rð Rð
ð 
ð 
ð
ð ð ð ð ð*ð *ñ „Xð*ð)ð )ð )ð )ð )ð )ð )r    )Únumbersr   r   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   r   r	   r
   Útorch.nn.functionalr   Ú__all__r   © r    r   ú<module>rt      sï   ðà Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @ð ˆ-€ðp)ð p)ð p)ð p)ð p)Ð!ñ p)ô p)ð p)ð p)ð p)r    