§
    Ÿ²Åj5#  ã                   ó�   — d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ dgZ G d	„ de¦  «        ZdS )
é    N)ÚNumber)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚclamp_probsÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_sizeÚContinuousBernoullic                   ó’  ‡ — 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d
„ Z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 ej        ¦   «         fdedej        fd„Zd„ Zd„ Z d„ Z!d„ Z"ed„ ¦   «         Z#d„ Z$ˆ xZ%S )r   aÕ  
    Creates a continuous Bernoulli distribution parameterized by :attr:`probs`
    or :attr:`logits` (but not both).

    The distribution is supported in [0, 1] and parameterized by 'probs' (in
    (0,1)) or 'logits' (real-valued). Note that, unlike the Bernoulli, 'probs'
    does not correspond to a probability and 'logits' does not correspond to
    log-odds, but the same names are used due to the similarity with the
    Bernoulli. See [1] for more details.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = ContinuousBernoulli(torch.tensor([0.3]))
        >>> m.sample()
        tensor([ 0.2538])

    Args:
        probs (Number, Tensor): (0,1) valued parameters
        logits (Number, Tensor): real valued parameters whose sigmoid matches 'probs'

    [1] The continuous Bernoulli: fixing a pervasive error in variational
    autoencoders, Loaiza-Ganem G and Cunningham JP, NeurIPS 2019.
    https://arxiv.org/abs/1907.06845
    )ÚprobsÚlogitsr   TN©gV-²�ïß?gÕxé&1à?c                 óŠ  •— |d u |d u k    rt          d¦  «        ‚|��t          |t          ¦  «        }t          |¦  «        \  | _        |�F| j        d                              | j        ¦  «                             ¦   «         st          d¦  «        ‚t          | j        ¦  «        | _        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.r   z&The parameter probs has invalid values©Úvalidate_args)Ú
ValueErrorÚ
isinstancer   r   r   Úarg_constraintsÚcheckÚallr   r   Ú_paramÚtorchÚSizeÚsizeÚ_limsÚsuperÚ__init__)Úselfr   r   Úlimsr   Ú	is_scalarÚbatch_shapeÚ	__class__s          €úYC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/continuous_bernoulli.pyr    zContinuousBernoulli.__init__5   s2  ø€ ð �TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð ÐÝ" 5­&Ñ1Ô1ˆIÝ)¨%Ñ0Ô0‰MˆTŒZð Ð(ØÔ+¨GÔ4×:Ò:¸4¼:ÑFÔF×JÒJÑLÔLð OÝ$Ð%MÑNÔNÐNÝ$ T¤ZÑ0Ô0ˆDŒJˆJå" 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          |¦  «        }| j        |_        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   r   Ú__dict__r   Úexpandr   r   r   r    Ú_validate_args)r!   r$   Ú	_instanceÚnewr%   s       €r&   r+   zContinuousBernoulli.expandP   s¿   ø€ Ø×(Ò(Õ)<¸iÑHÔHˆØ”JˆŒ	Ý”j Ñ-Ô-ˆØ�d”mÐ#Ð#Øœ
×)Ò)¨+Ñ6Ô6ˆCŒIØœˆCŒJØ�t”}Ð$Ð$Øœ×+Ò+¨KÑ8Ô8ˆCŒJØœˆCŒJÝÕ! 3Ñ'Ô'×0Ò0°ÈEÐ0ÑRÔRÐRØ!Ô0ˆÔØˆ
r'   c                 ó&   —  | j         j        |i |¤ŽS ©N)r   r.   )r!   ÚargsÚkwargss      r&   Ú_newzContinuousBernoulli._new^   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r'   c                 ó¸   — t          j        t          j        | j        | j        d         ¦  «        t          j        | j        | j        d         ¦  «        ¦  «        S )Nr   é   )r   ÚmaxÚler   r   Úgt©r!   s    r&   Ú_outside_unstable_regionz,ContinuousBernoulli._outside_unstable_regiona   sD   € ÝŒyÝŒH�T”Z ¤¨A¤Ñ/Ô/µ´¸$¼*ÀdÄjÐQRÄmÑ1TÔ1Tñ
ô 
ð 	
r'   c                 ó¦   — t          j        |                      ¦   «         | j        | j        d         t          j        | j        ¦  «        z  ¦  «        S )Nr   )r   Úwherer:   r   r   Ú	ones_liker9   s    r&   Ú
_cut_probszContinuousBernoulli._cut_probsf   sD   € ÝŒ{Ø×)Ò)Ñ+Ô+ØŒJØŒJ�qŒM�EœO¨D¬JÑ7Ô7Ñ7ñ
ô 
ð 	
r'   c           	      ó*  — |                       ¦   «         }t          j        t          j        |d¦  «        |t          j        |¦  «        ¦  «        }t          j        t          j        |d¦  «        |t          j        |¦  «        ¦  «        }t          j        t          j        t          j	        | ¦  «        t          j        |¦  «        z
  ¦  «        ¦  «        t          j        t          j        |d¦  «        t          j	        d|z  ¦  «        t          j        d|z  dz
  ¦  «        ¦  «        z
  }t          j
        | j        dz
  d¦  «        }t          j        d¦  «        dd|z  z   |z  z   }t          j        |                      ¦   «         ||¦  «        S )zLcomputes the log normalizing constant as a function of the 'probs' parameterç      à?g       Àç       @ç      ð?é   gUUUUUUõ?gÒ'}Ò'}@)r>   r   r<   r7   Ú
zeros_likeÚger=   ÚlogÚabsÚlog1pÚpowr   Úmathr:   )r!   Ú	cut_probsÚcut_probs_below_halfÚcut_probs_above_halfÚlog_normÚxÚtaylors          r&   Ú_cont_bern_log_normz'ContinuousBernoulli._cont_bern_log_normm   sV  € à—O’OÑ%Ô%ˆ	Ý$œ{ÝŒH�Y Ñ$Ô$ iµÔ1AÀ)Ñ1LÔ1Lñ 
ô  
Ðõ  %œ{ÝŒH�Y Ñ$Ô$ iµ´ÀÑ1KÔ1Kñ 
ô  
Ðõ ”9ÝŒI•e”k 9 *Ñ-Ô-µ´	¸)Ñ0DÔ0DÑDÑEÔEñ
ô 
åŒKÝŒH�Y Ñ$Ô$ÝŒK˜Ð3Ñ3Ñ4Ô4ÝŒI�cÐ0Ñ0°3Ñ6Ñ7Ô7ñ
ô 
ñ
ˆõ ŒI�d”j 3Ñ&¨Ñ*Ô*ˆÝ”˜#‘” )¨l¸QÑ.>Ñ">À!Ñ!CÑCˆÝŒ{˜4×8Ò8Ñ:Ô:¸HÀfÑMÔMÐMr'   c                 óB  — |                       ¦   «         }|d|z  dz
  z  dt          j        | ¦  «        t          j        |¦  «        z
  z  z   }| j        dz
  }dddt          j        |d¦  «        z  z   |z  z   }t          j        |                      ¦   «         ||¦  «        S )NrA   rB   r@   gUUUUUUÕ?glÁlÁÖ?rC   )r>   r   rH   rF   r   rI   r<   r:   )r!   rK   ÚmusrO   rP   s        r&   ÚmeanzContinuousBernoulli.mean�   sŸ   € à—O’OÑ%Ô%ˆ	Ø˜3 ™?¨SÑ0Ñ1°CÝŒK˜˜
Ñ#Ô#¥e¤i°	Ñ&:Ô&:Ñ:ñ5
ñ 
ˆð ŒJ˜ÑˆØ˜	 Kµ%´)¸A¸q±/´/Ñ$AÑAÀQÑFÑFˆÝŒ{˜4×8Ò8Ñ:Ô:¸CÀÑHÔHÐHr'   c                 ó4   — t          j        | j        ¦  «        S r0   )r   ÚsqrtÚvariancer9   s    r&   ÚstddevzContinuousBernoulli.stddev‹   s   € åŒz˜$œ-Ñ(Ô(Ð(r'   c                 óš  — |                       ¦   «         }||dz
  z  t          j        dd|z  z
  d¦  «        z  dt          j        t          j        | ¦  «        t          j        |¦  «        z
  d¦  «        z  z   }t          j        | j        dz
  d¦  «        }ddd|z  z
  |z  z
  }t          j        |                      ¦   «         ||¦  «        S )NrB   rA   rC   r@   gUUUUUUµ?g±?gg¼jVÁ?)r>   r   rI   rH   rF   r   r<   r:   )r!   rK   ÚvarsrO   rP   s        r&   rW   zContinuousBernoulli.variance�   sÈ   € à—O’OÑ%Ô%ˆ	Ø˜I¨™OÑ,­u¬yØ�#˜	‘/Ñ! 1ñ0
ô 0
ñ 
à•%”)�EœK¨¨
Ñ3Ô3µe´iÀ	Ñ6JÔ6JÑJÈAÑNÔNÑNñOˆõ ŒI�d”j 3Ñ&¨Ñ*Ô*ˆØ˜z¨M¸AÑ,=Ñ=ÀÑBÑBˆÝŒ{˜4×8Ò8Ñ:Ô:¸DÀ&ÑIÔIÐIr'   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r
   r   r9   s    r&   r   zContinuousBernoulli.logits™   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r'   c                 óH   — t          t          | j        d¬¦  «        ¦  «        S r\   )r   r	   r   r9   s    r&   r   zContinuousBernoulli.probs�   s   € å�?¨4¬;À$ÐGÑGÔGÑHÔHÐHr'   c                 ó4   — | j                              ¦   «         S r0   )r   r   r9   s    r&   Úparam_shapezContinuousBernoulli.param_shape¡   s   € àŒ{×ÒÑ!Ô!Ð!r'   c                 ó  — |                       |¦  «        }t          j        || j        j        | j        j        ¬¦  «        }t          j        ¦   «         5  |                      |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S ©N)ÚdtypeÚdevice)Ú_extended_shaper   Úrandr   rc   rd   Úno_gradÚicdf©r!   Úsample_shapeÚshapeÚus       r&   ÚsamplezContinuousBernoulli.sample¥   s²   € Ø×$Ò$ \Ñ2Ô2ˆÝŒJ�u D¤JÔ$4¸T¼ZÔ=NÐOÑOÔOˆÝŒ]‰_Œ_ð 	 ð 	 Ø—9’9˜Q‘<”<ð	 ð 	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 s   ÁA6Á6A:Á=A:rj   Úreturnc                 ó¬   — |                       |¦  «        }t          j        || j        j        | j        j        ¬¦  «        }|                      |¦  «        S rb   )re   r   rf   r   rc   rd   rh   ri   s       r&   ÚrsamplezContinuousBernoulli.rsample«   sE   € Ø×$Ò$ \Ñ2Ô2ˆÝŒJ�u D¤JÔ$4¸T¼ZÔ=NÐOÑOÔOˆØ�yŠy˜‰|Œ|Ðr'   c                 óº   — | j         r|                      |¦  «         t          | j        |¦  «        \  }}t	          ||d¬¦  «         |                      ¦   «         z   S )NÚnone)Ú	reduction)r,   Ú_validate_sampler   r   r   rQ   )r!   Úvaluer   s      r&   Úlog_probzContinuousBernoulli.log_prob°   sd   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý% d¤k°5Ñ9Ô9‰ˆ�å-¨f°eÀvÐNÑNÔNÐNØ×&Ò&Ñ(Ô(ñ)ð	
r'   c           
      ó  — | j         r|                      |¦  «         |                      ¦   «         }t          j        ||¦  «        t          j        d|z
  d|z
  ¦  «        z  |z   dz
  d|z  dz
  z  }t          j        |                      ¦   «         ||¦  «        }t          j        t          j        |d¦  «        t          j        |¦  «        t          j        t          j	        |d¦  «        t          j
        |¦  «        |¦  «        ¦  «        S )NrB   rA   g        )r,   rt   r>   r   rI   r<   r:   r7   rD   rE   r=   )r!   ru   rK   ÚcdfsÚunbounded_cdfss        r&   ÚcdfzContinuousBernoulli.cdf¹   sö   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ø—O’OÑ%Ô%ˆ	åŒI�i Ñ'Ô'­%¬)°C¸)±OÀSÈ5Á[Ñ*QÔ*QÑQØñàñð �9‰_˜sÑ"ñ	$ˆõ
 œ T×%BÒ%BÑ%DÔ%DÀdÈEÑRÔRˆÝŒ{ÝŒH�U˜CÑ Ô ÝÔ˜UÑ#Ô#ÝŒK�œ ¨Ñ,Ô,­e¬o¸eÑ.DÔ.DÀnÑUÔUñ
ô 
ð 	
r'   c           	      ó:  — |                       ¦   «         }t          j        |                      ¦   «         t          j        | |d|z  dz
  z  z   ¦  «        t          j        | ¦  «        z
  t          j        |¦  «        t          j        | ¦  «        z
  z  |¦  «        S )NrA   rB   )r>   r   r<   r:   rH   rF   )r!   ru   rK   s      r&   rh   zContinuousBernoulli.icdfÉ   s”   € Ø—O’OÑ%Ô%ˆ	ÝŒ{Ø×)Ò)Ñ+Ô+å”˜Y˜J¨°#¸	±/ÀCÑ2GÑ)HÑHÑIÔIÝ”+˜y˜jÑ)Ô)ñ*õ Œy˜Ñ#Ô#¥e¤k°9°*Ñ&=Ô&=Ñ=ñ	?ð
 ñ
ô 
ð 	
r'   c                 ó²   — t          j        | j         ¦  «        }t          j        | j        ¦  «        }| j        ||z
  z  |                      ¦   «         z
  |z
  S r0   )r   rH   r   rF   rT   rQ   )r!   Ú
log_probs0Ú
log_probs1s      r&   ÚentropyzContinuousBernoulli.entropyÕ   sV   € Ý”[ $¤* Ñ-Ô-ˆ
Ý”Y˜tœzÑ*Ô*ˆ
àŒI˜ jÑ0Ñ1Ø×&Ò&Ñ(Ô(ñ)àñð	
r'   c                 ó   — | j         fS r0   )r   r9   s    r&   Ú_natural_paramsz#ContinuousBernoulli._natural_paramsÞ   s   € à”ˆ~Ðr'   c                 ó�  — t          j        t          j        || j        d         dz
  ¦  «        t          j        || j        d         dz
  ¦  «        ¦  «        }t          j        ||| j        d         dz
  t          j        |¦  «        z  ¦  «        }t          j        t          j        t           j	         
                    |¦  «        ¦  «        ¦  «        t          j        t          j        |¦  «        ¦  «        z
  }d|z  t          j        |d¦  «        dz  z   t          j        |d¦  «        dz  z
  }t          j        |||¦  «        S )zLcomputes the log normalizing constant as a function of the natural parameterr   r@   r5   rC   g      8@é   g     €¦@)r   r6   r7   r   r8   r<   r=   rF   rG   ÚspecialÚexpm1rI   )r!   rO   Úout_unst_regÚcut_nat_paramsrN   rP   s         r&   Ú_log_normalizerz#ContinuousBernoulli._log_normalizerâ   s  € å”yÝŒH�Q˜œ
 1œ¨Ñ+Ñ,Ô,­e¬h°q¸$¼*ÀQ¼-È#Ñ:MÑ.NÔ.Nñ
ô 
ˆõ œØ˜!˜dœj¨œm¨cÑ1µU´_ÀQÑ5GÔ5GÑGñ
ô 
ˆõ ”9ÝŒI•e”m×)Ò)¨.Ñ9Ô9Ñ:Ô:ñ
ô 
åŒI•e”i Ñ/Ô/Ñ0Ô0ñ1ˆð �q‘�5œ9 Q¨™?œ?¨TÑ1Ñ1µE´I¸aÀ±O´OÀfÑ4LÑLˆÝŒ{˜<¨°6Ñ:Ô:Ð:r'   )NNr   Nr0   )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler    r+   r3   r:   r>   rQ   ÚpropertyrT   rX   rW   r   r   r   r`   r   r   rm   r   ÚTensorrp   rv   rz   rh   r   r�   rˆ   Ú__classcell__)r%   s   @r&   r   r      sA  ø€ € € € € ðð ð2 !,Ô 9À[ÔEUÐVÐV€OØÔ'€GØÐØ€Kð KOðCð Cð Cð Cð Cð Cð6ð ð ð ð ð ð0ð 0ð 0ð
ð 
ð 
ð

ð 
ð 
ðNð Nð Nð( ðIð Iñ „XðIð ð)ð )ñ „Xð)ð ðJð Jñ „XðJð ð;ð ;ñ „]ð;ð ðIð Iñ „]ðIð ð"ð "ñ „Xð"ð #- %¤*¡,¤,ð  ð  ð  ð  ð -7¨E¬J©L¬Lð ð  Eð ¸U¼\ð ð ð ð ð

ð 
ð 
ð
ð 
ð 
ð 

ð 

ð 

ð
ð 
ð 
ð ðð ñ „Xðð;ð ;ð ;ð ;ð ;ð ;ð ;r'   )rJ   Únumbersr   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   r   r   r	   r
   Útorch.nn.functionalr   Útorch.typesr   Ú__all__r   © r'   r&   ú<module>r�      s  ðà €€€Ø Ð Ð Ð Ð Ð à €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð ð !Ð
!€ðX;ð X;ð X;ð X;ð X;Ð+ñ X;ô X;ð X;ð X;ð X;r'   