ó
    EñiR$  ã                   ó�   • S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
JrJr  S SKJr  S SKJrJrJr  S/r " S	 S\5      rg)
é    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                   ó2  ^ • \ rS rSrSr\R                  \R                  S.r\R                  r	Sr
Sr    S"S\\-  S-  S\\-  S-  S	\\\4   S
\S-  SS4
U 4S jjjrS#U 4S jjrS rS rS rS r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\R>                  4S j5       r \R>                  " 5       4S jr!\R>                  " 5       4S\"S\4S jjr#S r$S r%S r&S r'\S\\   4S j5       r(S  r)S!r*U =r+$ )$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   TNr   r   ÚlimsÚvalidate_argsÚreturnc                 óv  >• US L US L :X  a  [        S5      eUb†  [        U[        5      n[        U5      u  U l        UbF  U R
                  S   R                  U R                  5      R                  5       (       d  [        S5      e[        U R                  5      U l        O0Uc  [        S5      e[        U[        5      n[        U5      u  U l
        Ub  U R                  OU R                  U l        U(       a  [        R                  " 5       nOU R                  R                  5       nX0l        [         TU ]E  XdS9  g )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          €Úe/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributions/continuous_bernoulli.pyr%   ÚContinuousBernoulli.__init__7   s
  ø€ ð �TˆM˜v¨˜~Ó.ÜØMóð ð ÑÜ" 5¬'Ó2ˆIä)¨%Ó0‰MˆTŒZð Ñ(Ø×+Ñ+¨GÑ4×:Ñ:¸4¿:¹:ÓF×JÑJ×LÑLÜ$Ð%MÓNÐNä$ T§Z¡ZÓ0ˆD�Jà‰~Ü$Ð%BÓCÐCÜ" 6¬7Ó3ˆIä*¨6Ó2‰NˆTŒ[Ø$)Ñ$5�d—j’j¸4¿;¹;ˆŒÞÜŸ*š*›,‰KàŸ+™+×*Ñ*Ó,ˆKØŒ
Ü‰Ñ˜ÐÒBó    c                 óÌ  >• U R                  [        U5      nU R                  Ul        [        R                  " U5      nSU R
                  ;   a1  U R                  R                  U5      Ul        UR                  Ul        SU R
                  ;   a1  U R                  R                  U5      Ul	        UR                  Ul        [        [        U]/  USS9  U R                  Ul        U$ )Nr   r   Fr   )Ú_get_checked_instancer   r#   r    r!   Ú__dict__r   Úexpandr   r   r$   r%   Ú_validate_args)r&   r(   Ú	_instanceÚnewr)   s       €r*   r0   ÚContinuousBernoulli.expand[   s±   ø€ Ø×(Ñ(Ô)<¸iÓHˆØ—J‘JˆŒ	Ü—j’j Ó-ˆØ�d—m‘mÓ#ØŸ
™
×)Ñ)¨+Ó6ˆCŒIØŸ™ˆCŒJØ�t—}‘}Ó$ØŸ™×+Ñ+¨KÓ8ˆCŒJØŸ™ˆCŒJÜÔ! 3Ñ0°ÈEÐ0ÑRØ!×0Ñ0ˆÔØˆ
r,   c                 ó:   • U R                   R                  " U0 UD6$ ©N)r   r3   )r&   ÚargsÚkwargss      r*   Ú_newÚContinuousBernoulli._newi   s   € Ø�{‰{�Š Ð/¨Ñ/Ð/r,   c                 óà   • [         R                  " [         R                  " U R                  U R                  S   5      [         R
                  " U R                  U R                  S   5      5      $ )Nr   é   )r    ÚmaxÚler   r#   Úgt©r&   s    r*   Ú_outside_unstable_regionÚ,ContinuousBernoulli._outside_unstable_regionl   sG   € Ü�yŠyÜ�HŠH�T—Z‘Z §¡¨A¡Ó/´·²¸$¿*¹*ÀdÇjÁjÐQRÁmÓ1Tó
ð 	
r,   c                 ó¾   • [         R                  " U R                  5       U R                  U R                  S   [         R
                  " U R                  5      -  5      $ )Nr   )r    ÚwhererA   r   r#   Ú	ones_liker@   s    r*   Ú
_cut_probsÚContinuousBernoulli._cut_probsq   sC   € Ü�{Š{Ø×)Ñ)Ó+Ø�J‰JØ�J‰J�q‰MœEŸOšO¨D¯J©JÓ7Ñ7ó
ð 	
r,   c           	      óf  • U R                  5       n[        R                  " [        R                  " US5      U[        R                  " U5      5      n[        R                  " [        R
                  " US5      U[        R                  " U5      5      n[        R                  " [        R                  " [        R                  " U* 5      [        R                  " U5      -
  5      5      [        R                  " [        R                  " US5      [        R                  " SU-  5      [        R                  " SU-  S-
  5      5      -
  n[        R                  " U R                  S-
  S5      n[        R                  " S5      SSU-  -   U-  -   n[        R                  " U R                  5       XF5      $ )zLcomputes the log normalizing constant as a function of the 'probs' parameterç      à?g       Àç       @ç      ð?é   gUUUUUUõ?gÒ'}Ò'}@)rF   r    rD   r>   Ú
zeros_likeÚgerE   ÚlogÚabsÚlog1pÚpowr   ÚmathrA   )r&   Ú	cut_probsÚcut_probs_below_halfÚcut_probs_above_halfÚlog_normÚxÚtaylors          r*   Ú_cont_bern_log_normÚ'ContinuousBernoulli._cont_bern_log_normx   s9  € à—O‘OÓ%ˆ	Ü$Ÿ{š{Ü�HŠH�Y Ó$ i´×1AÒ1AÀ)Ó1Ló 
Ðô  %Ÿ{š{Ü�HŠH�Y Ó$ i´·²ÀÓ1Kó 
Ðô —9’9Ü�IŠI”e—k’k 9 *Ó-´·	²	¸)Ó0DÑDÓEó
ä�KŠKÜ�HŠH�Y Ó$Ü�KŠK˜Ð3Ñ3Ó4Ü�IŠI�cÐ0Ñ0°3Ñ6Ó7ó
ñ
ˆô �IŠI�d—j‘j 3Ñ&¨Ó*ˆÜ—’˜#“ )¨l¸QÑ.>Ñ">À!Ñ!CÑCˆÜ�{Š{˜4×8Ñ8Ó:¸HÓMÐMr,   c                 óJ  • U R                  5       nUSU-  S-
  -  S[        R                  " U* 5      [        R                  " U5      -
  -  -   nU R                  S-
  nSSS[        R
                  " US5      -  -   U-  -   n[        R                  " U R                  5       X$5      $ )NrJ   rK   rI   gUUUUUUÕ?glÁlÁÖ?rL   )rF   r    rQ   rO   r   rR   rD   rA   )r&   rT   ÚmusrX   rY   s        r*   ÚmeanÚContinuousBernoulli.meanŒ   s–   € à—O‘OÓ%ˆ	Ø˜3 ™?¨SÑ0Ñ1°CÜ�KŠK˜˜
Ó#¤e§i¢i°	Ó&:Ñ:ñ5
ñ 
ˆð �J‰J˜ÑˆØ˜	 K´%·)²)¸A¸q³/Ñ$AÑAÀQÑFÑFˆÜ�{Š{˜4×8Ñ8Ó:¸CÓHÐHr,   c                 óB   • [         R                  " U R                  5      $ r6   )r    ÚsqrtÚvariancer@   s    r*   ÚstddevÚContinuousBernoulli.stddev–   s   € ä�zŠz˜$Ÿ-™-Ó(Ð(r,   c                 ó¨  • U R                  5       nXS-
  -  [        R                  " SSU-  -
  S5      -  S[        R                  " [        R                  " U* 5      [        R                  " U5      -
  S5      -  -   n[        R                  " U R
                  S-
  S5      nSSSU-  -
  U-  -
  n[        R                  " U R                  5       X$5      $ )NrK   rJ   rL   rI   gUUUUUUµ?g±?gg¼jVÁ?)rF   r    rR   rQ   rO   r   rD   rA   )r&   rT   ÚvarsrX   rY   s        r*   rb   ÚContinuousBernoulli.varianceš   s¸   € à—O‘OÓ%ˆ	Ø¨™OÑ,¬u¯yªyØ�#˜	‘/Ñ! 1ó0
ñ 
à”%—)’)œEŸKšK¨¨
Ó3´e·i²iÀ	Ó6JÑJÈAÓNÑNñOˆô �IŠI�d—j‘j 3Ñ&¨Ó*ˆØ˜z¨M¸AÑ,=Ñ=ÀÑBÑBˆÜ�{Š{˜4×8Ñ8Ó:¸DÓIÐIr,   c                 ó*   • [        U R                  SS9$ ©NT)Ú	is_binary)r
   r   r@   s    r*   r   ÚContinuousBernoulli.logits¤   s   € ä˜tŸz™z°TÑ:Ð:r,   c                 ó<   • [        [        U R                  SS95      $ ri   )r   r	   r   r@   s    r*   r   ÚContinuousBernoulli.probs¨   s   € äœ?¨4¯;©;À$ÑGÓHÐHr,   c                 ó6   • U R                   R                  5       $ r6   )r   r"   r@   s    r*   Úparam_shapeÚContinuousBernoulli.param_shape¬   s   € à�{‰{×ÑÓ!Ð!r,   c                 ó   • U R                  U5      n[        R                  " X R                  R                  U R                  R
                  S9n[        R                  " 5          U R                  U5      sS S S 5        $ ! , (       d  f       g = f©N)ÚdtypeÚdevice)Ú_extended_shaper    Úrandr   rs   rt   Úno_gradÚicdf©r&   Úsample_shapeÚshapeÚus       r*   ÚsampleÚContinuousBernoulli.sample°   sT   € Ø×$Ñ$ \Ó2ˆÜ�JŠJ�u§J¡J×$4Ñ$4¸T¿Z¹Z×=NÑ=NÑOˆÜ�]Š]�_Ø—9‘9˜Q“<÷ �_�_ús   Á$A?Á?
Brz   c                 óÀ   • U R                  U5      n[        R                  " X R                  R                  U R                  R
                  S9nU R                  U5      $ rr   )ru   r    rv   r   rs   rt   rx   ry   s       r*   ÚrsampleÚContinuousBernoulli.rsample¶   sD   € Ø×$Ñ$ \Ó2ˆÜ�JŠJ�u§J¡J×$4Ñ$4¸T¿Z¹Z×=NÑ=NÑOˆØ�y‰y˜‹|Ðr,   c                 ó®   • U R                   (       a  U R                  U5        [        U R                  U5      u  p![	        X!SS9* U R                  5       -   $ )NÚnone)Ú	reduction)r1   Ú_validate_sampler   r   r   rZ   )r&   Úvaluer   s      r*   Úlog_probÚContinuousBernoulli.log_prob»   sN   € Ø××Ø×!Ñ! %Ô(Ü% d§k¡k°5Ó9‰ˆä-¨fÀvÑNÐNØ×&Ñ&Ó(ñ)ð	
r,   c           
      ó6  • U R                   (       a  U R                  U5        U R                  5       n[        R                  " X!5      [        R                  " SU-
  SU-
  5      -  U-   S-
  SU-  S-
  -  n[        R
                  " U R                  5       X15      n[        R
                  " [        R                  " US5      [        R                  " U5      [        R
                  " [        R                  " US5      [        R                  " U5      U5      5      $ )NrK   rJ   g        )r1   r…   rF   r    rR   rD   rA   r>   rM   rN   rE   )r&   r†   rT   ÚcdfsÚunbounded_cdfss        r*   ÚcdfÚContinuousBernoulli.cdfÄ   sÚ   € Ø××Ø×!Ñ! %Ô(Ø—O‘OÓ%ˆ	ä�IŠI�iÓ'¬%¯)ª)°C¸)±OÀSÈ5Á[Ó*QÑQØñàñð �9‰_˜sÑ"ñ	$ˆô
 Ÿš T×%BÑ%BÓ%DÀdÓRˆÜ�{Š{Ü�HŠH�U˜CÓ Ü×Ò˜UÓ#Ü�KŠKœŸš ¨Ó,¬e¯oªo¸eÓ.DÀnÓUó
ð 	
r,   c           	      ó>  • U R                  5       n[        R                  " U R                  5       [        R                  " U* USU-  S-
  -  -   5      [        R                  " U* 5      -
  [        R
                  " U5      [        R                  " U* 5      -
  -  U5      $ )NrJ   rK   )rF   r    rD   rA   rQ   rO   )r&   r†   rT   s      r*   rx   ÚContinuousBernoulli.icdfÔ   s‡   € Ø—O‘OÓ%ˆ	Ü�{Š{Ø×)Ñ)Ó+ä—’˜Y˜J¨°#¸	±/ÀCÑ2GÑ)HÑHÓIÜ—+’+˜y˜jÓ)ñ*ô �yŠy˜Ó#¤e§k¢k°9°*Ó&=Ñ=ñ	?ð
 ó
ð 	
r,   c                 óÎ   • [         R                  " U R                  * 5      n[         R                  " U R                  5      nU R                  X-
  -  U R                  5       -
  U-
  $ r6   )r    rQ   r   rO   r^   rZ   )r&   Ú
log_probs0Ú
log_probs1s      r*   ÚentropyÚContinuousBernoulli.entropyà   sU   € Ü—[’[ $§*¡* Ó-ˆ
Ü—Y’Y˜tŸz™zÓ*ˆ
à�I‰I˜Ñ0Ñ1Ø×&Ñ&Ó(ñ)àñð	
r,   c                 ó   • U R                   4$ r6   )r   r@   s    r*   Ú_natural_paramsÚ#ContinuousBernoulli._natural_paramsé   s   € à—‘ˆ~Ðr,   c                 óÄ  • [         R                  " [         R                  " XR                  S   S-
  5      [         R                  " XR                  S   S-
  5      5      n[         R
                  " X!U R                  S   S-
  [         R                  " U5      -  5      n[         R                  " [         R                  " [         R                  R                  U5      5      5      [         R                  " [         R                  " U5      5      -
  nSU-  [         R                  " US5      S-  -   [         R                  " US5      S-  -
  n[         R
                  " X$U5      $ )zLcomputes the log normalizing constant as a function of the natural parameterr   rI   r<   rL   g      8@é   g     €¦@)r    r=   r>   r#   r?   rD   rE   rO   rP   ÚspecialÚexpm1rR   )r&   rX   Úout_unst_regÚcut_nat_paramsrW   rY   s         r*   Ú_log_normalizerÚ#ContinuousBernoulli._log_normalizerî   sú   € ä—y’yÜ�HŠH�QŸ
™
 1™¨Ñ+Ó,¬e¯hªh°q¿*¹*ÀQ¹-È#Ñ:MÓ.Nó
ˆô ŸšØ˜dŸj™j¨™m¨cÑ1´U·_²_ÀQÓ5GÑGó
ˆô —9’9Ü�IŠI”e—m‘m×)Ñ)¨.Ó9Ó:ó
ä�IŠI”e—i’i Ó/Ó0ñ1ˆð �q‘œ5Ÿ9š9 Q¨›?¨TÑ1Ñ1´E·I²I¸aÀ³OÀfÑ4LÑLˆÜ�{Š{˜<°6Ó:Ð:r,   )r#   r   r   r   )NN)gV-²�ïß?gÕxé&1à?Nr6   ),Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler   r   ÚtupleÚfloatÚboolr%   r0   r9   rA   rF   rZ   Úpropertyr^   rc   rb   r   r   r   r    r!   ro   r}   r   r€   r‡   rŒ   rx   r“   r–   rž   Ú__static_attributes__Ú__classcell__)r)   s   @r*   r   r      sÙ  ø† ñð6 !,× 9Ñ 9À[×EUÑEUÑV€OØ×'Ñ'€GØÐØ€Kð )-Ø)-Ø$2Ø%)ñ"Cà˜‰ Ñ%ð"Cð ˜‘ $Ñ&ð"Cð �E˜5�LÑ!ð	"Cð
 ˜d‘{ð"Cð 
÷"Cð "C÷Hò0ò
ò

òNð( ðI�fó Ió ðIð ð)˜ó )ó ð)ð ðJ˜&ó Jó ðJð ð;˜ó ;ó ð;ð ðI�vó Ió ðIð ð"˜UŸZ™Zó "ó ð"ð #(§*¢*£,ô  ð -2¯JªJ«Lñ  Eð ¸Võ ò

ò
ò 

ò
ð ð  v¡ó ó ð÷;ð ;r,   )rS   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·      sC   ðã ã Ý Ý +Ý <÷õ õ Aß .Ñ .ð !Ð
!€ôd;Ð+õ d;r,   