§
    ŠŠtjR$  ã                   ó˜   — d dl 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mZ d dlmZ d dlmZmZmZ dgZ G d	„ de¦  «        ZdS )
é    N)ÚTensor)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚclamp_probsÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_NumberÚ_sizeÚNumberÚContinuousBernoullic                   ó  ‡ — 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eef         d
edz  ddf
ˆ fd„Zd"ˆ fd„	Zd„ Zd„ Z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  ej        ¦   «         fde!defd„Z"d„ Z#d„ Z$d„ Z%d„ Z&edee         f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à?r   r   ÚlimsÚvalidate_argsÚreturnc                 ó¬  •— |d u |d u k    rt          d¦  «        ‚|��t          |t          ¦  «        }t          |¦  «        \  | _        |�F| j        d                              | j        ¦  «                             ¦   «         st          d¦  «        ‚t          | j        ¦  «        | _        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.r   z&The parameter probs has invalid valueszlogits is unexpectedly None©r   )Ú
ValueErrorÚ
isinstancer   r   r   Úarg_constraintsÚcheckÚallr   ÚAssertionErrorr   Ú_paramÚtorchÚSizeÚsizeÚ_limsÚsuperÚ__init__)Úselfr   r   r   r   Ú	is_scalarÚbatch_shapeÚ	__class__s          €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributions/continuous_bernoulli.pyr%   zContinuousBernoulli.__init__7   sF  ø€ ð �TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð ÐÝ" 5­'Ñ2Ô2ˆ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àˆ~Ý$Ð%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          |¦  «        }| 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.expand[   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   r2   )r&   ÚargsÚkwargss      r*   Ú_newzContinuousBernoulli._newi   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_regionl   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_liker=   s    r*   Ú
_cut_probszContinuousBernoulli._cut_probsq   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Ò'}Ò'}@)rB   r    r@   r;   Ú
zeros_likeÚgerA   Ú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_normx   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 )NrE   rF   rD   gUUUUUUÕ?glÁlÁÖ?rG   )rB   r    rL   rJ   r   rM   r@   r>   )r&   rO   ÚmusrS   rT   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 r4   )r    ÚsqrtÚvariancer=   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 )NrF   rE   rG   rD   gUUUUUUµ?g±?gg¼jVÁ?)rB   r    rM   rL   rJ   r   r@   r>   )r&   rO   ÚvarsrS   rT   s        r*   r[   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   r=   s    r*   r   zContinuousBernoulli.logits¤   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r+   c                 óH   — t          t          | j        d¬¦  «        ¦  «        S r`   )r   r	   r   r=   s    r*   r   zContinuousBernoulli.probs¨   s   € å�?¨4¬;À$ÐGÑGÔGÑHÔHÐHr+   c                 ó4   — | j                              ¦   «         S r4   )r   r"   r=   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   rg   rh   Ú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:rn   c                 ó¬   — |                       |¦  «        }t          j        || j        j        | j        j        ¬¦  «        }|                      |¦  «        S rf   )ri   r    rj   r   rg   rh   rl   rm   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)r0   Ú_validate_sampler   r   r   rU   )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 )NrF   rE   g        )r0   rw   rB   r    rM   r@   r>   r;   rH   rI   rA   )r&   rx   rO   Ú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 )NrE   rF   )rB   r    r@   r>   rL   rJ   )r&   rx   rO   s      r*   rl   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 r4   )r    rL   r   rJ   rX   rU   )r&   Ú
log_probs0Ú
log_probs1s      r*   ÚentropyzContinuousBernoulli.entropyà   sV   € Ý”[ $¤* Ñ-Ô-ˆ
Ý”Y˜tœzÑ*Ô*ˆ
àŒI˜ jÑ0Ñ1Ø×&Ò&Ñ(Ô(ñ)àñð	
r+   c                 ó   — | j         fS r4   )r   r=   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   rD   r9   rG   g      8@é   g     €¦@)r    r:   r;   r#   r<   r@   rA   rJ   rK   ÚspecialÚexpm1rM   )r&   rS   Úout_unst_regÚcut_nat_paramsrR   rT   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   Nr4   )*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler   r   ÚtupleÚfloatÚboolr%   r/   r7   r>   rB   rU   ÚpropertyrX   r\   r[   r   r   r   r    r!   rd   rq   r   rs   ry   r}   rl   r‚   r„   r‹   Ú__classcell__)r)   s   @r*   r   r      s  ø€ € € € € ðð ð6 !,Ô 9À[ÔEUÐVÐV€OØÔ'€GØÐØ€Kð )-Ø)-Ø$2Ø%)ð"Cð "Cà˜‰ Ñ%ð"Cð ˜‘ $Ñ&ð"Cð �E˜5�LÔ!ð	"Cð
 ˜d‘{ð"Cð 
ð"Cð "Cð "Cð "Cð "Cð "CðHð ð ð ð ð ð0ð 0ð 0ð
ð 
ð 
ð

ð 
ð 
ðNð Nð Nð( ðI�fð Ið Ið Iñ „XðIð ð)˜ð )ð )ð )ñ „Xð)ð ðJ˜&ð Jð Jð Jñ „XðJð ð;˜ð ;ð ;ð ;ñ „]ð;ð ðI�vð Ið Ið Iñ „]ðIð ð"˜UœZð "ð "ð "ñ „Xð"ð #- %¤*¡,¤,ð  ð  ð  ð  ð -7¨E¬J©L¬Lð ð  Eð ¸Vð ð ð ð ð

ð 
ð 
ð
ð 
ð 
ð 

ð 

ð 

ð
ð 
ð 
ð ð  v¤ð ð ð ñ „Xðð;ð ;ð ;ð ;ð ;ð ;ð ;r+   )rN   r    r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   r   r   r	   r
   Útorch.nn.functionalr   Útorch.typesr   r   r   Ú__all__r   © r+   r*   ú<module>r¡      s  ðà €€€à €€€Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð !Ð
!€ðd;ð d;ð d;ð d;ð d;Ð+ñ d;ô d;ð d;ð d;ð d;r+   