Ë
    óÍ:j“#  ã                   ó    — d dl Z d dlmZ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mZ d dlmZ d dlmZmZmZ d	gZ G d
„ d	e	«      Zy)é    N)ÚOptionalÚUnion)Ú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eef      deeeef      deeef   d	ee   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   TNr   r   ÚlimsÚvalidate_argsÚreturnc                 óN  •— |d u |d u k(  rt        d«      ‚|�€t        |t        «      }t        |«      \  | _        |�A| j
                  d   j                  | j                  «      j                  «       st        d«      ‚t        | j                  «      | _        n&|€J ‚t        |t        «      }t        |«      \  | _	        |�| j                  n| j                  | _
        |rt        j                  «       }n| j                  j                  «       }|| _        t        ‰| �A  ||¬«       y )Nz;Either `probs` or `logits` must be specified, but not both.r   z&The parameter probs has invalid values©r   )Ú
ValueErrorÚ
isinstancer   r   r   Úarg_constraintsÚcheckÚallr	   r   Ú_paramÚtorchÚSizeÚsizeÚ_limsÚsuperÚ__init__)Úselfr   r   r   r   Ú	is_scalarÚbatch_shapeÚ	__class__s          €ú}/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/distributions/continuous_bernoulli.pyr%   zContinuousBernoulli.__init__7   s  ø€ ð �TˆM˜v¨˜~Ò.ÜØMóð ð ÐÜ" 5¬'Ó2ˆIÜ)¨%Ó0‰MˆTŒZð Ð(Ø×+Ñ+¨GÑ4×:Ñ:¸4¿:¹:ÓF×JÑJÔLÜ$Ð%MÓNÐNÜ$ T§Z¡ZÓ0ˆD�JàÐ%Ð%Ð%Ü" 6¬7Ó3ˆIÜ*¨6Ó2‰NˆTŒ[Ø$)Ð$5�d—j’j¸4¿;¹;ˆŒÙÜŸ*™*›,‰KàŸ+™+×*Ñ*Ó,ˆKØˆŒ
Ü‰Ñ˜°MÐÕBó    c                 óÈ  •— | j                  t        |«      }| j                  |_        t        j                  |«      }d| j
                  v r1| j                  j                  |«      |_        |j                  |_        d| j
                  v r1| j                  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.expandW   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                 ó:   —  | j                   j                  |i |¤ŽS ©N)r   r2   )r&   ÚargsÚkwargss      r*   Ú_newzContinuousBernoulli._newe   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_regionh   sG   € Ü�y‰yÜ�H‰H�T—Z‘Z §¡¨A¡Ó/´·±¸$¿*¹*ÀdÇjÁjÐQRÁmÓ1Tó
ð 	
r+   c                 óº   — t        j                  | j                  «       | j                  | j                  d   t        j
                  | j                  «      z  «      S )Nr   )r    Úwherer>   r   r#   Ú	ones_liker=   s    r*   Ú
_cut_probszContinuousBernoulli._cut_probsm   sC   € Ü�{‰{Ø×)Ñ)Ó+Ø�J‰JØ�J‰J�q‰MœEŸO™O¨D¯J©JÓ7Ñ7ó
ð 	
r+   c           	      óF  — | j                  «       }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                  | 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_normt   s;  € à—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ÀfÓMÐMr+   c                 óD  — | j                  «       }|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                  | 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‰K˜˜
Ó#¤e§i¡i°	Ó&:Ñ:ñ5
ñ 
ˆð �J‰J˜ÑˆØ˜	 K´%·)±)¸A¸q³/Ñ$AÑAÀQÑFÑFˆÜ�{‰{˜4×8Ñ8Ó:¸CÀÓHÐHr+   c                 ó@   — t        j                  | j                  «      S r4   )r    ÚsqrtÚvariancer=   s    r*   ÚstddevzContinuousBernoulli.stddev’   s   € ä�z‰z˜$Ÿ-™-Ó(Ð(r+   c                 ó   — | j                  «       }||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                  | 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©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                 ó0   — t        | j                  d¬«      S ©NT)Ú	is_binary)r   r   r=   s    r*   r   zContinuousBernoulli.logits    s   € ä˜tŸz™z°TÔ:Ð:r+   c                 óB   — t        t        | j                  d¬«      «      S r`   )r	   r   r   r=   s    r*   r   zContinuousBernoulli.probs¤   s   € äœ?¨4¯;©;À$ÔGÓHÐHr+   c                 ó6   — | j                   j                  «       S r4   )r   r"   r=   s    r*   Úparam_shapezContinuousBernoulli.param_shape¨   s   € à�{‰{×ÑÓ!Ð!r+   c                 ó  — | j                  |«      }t        j                  || j                  j                  | j                  j
                  ¬«      }t        j                  «       5  | j                  |«      cd d d «       S # 1 sw Y   y xY w©N)ÚdtypeÚdevice)Ú_extended_shaper    Úrandr   rg   rh   Úno_gradÚicdf©r&   Úsample_shapeÚshapeÚus       r*   ÚsamplezContinuousBernoulli.sample¬   sa   € Ø×$Ñ$ \Ó2ˆÜ�J‰J�u D§J¡J×$4Ñ$4¸T¿Z¹Z×=NÑ=NÔOˆÜ�]‰]‹_ñ 	 Ø—9‘9˜Q“<÷	 ÷ 	 ò 	 ús   Á&BÂB
rn   c                 óÆ   — | j                  |«      }t        j                  || j                  j                  | j                  j
                  ¬«      }| j                  |«      S rf   )ri   r    rj   r   rg   rh   rl   rm   s       r*   ÚrsamplezContinuousBernoulli.rsample²   sF   € Ø×$Ñ$ \Ó2ˆÜ�J‰J�u D§J¡J×$4Ñ$4¸T¿Z¹Z×=NÑ=NÔOˆØ�y‰y˜‹|Ðr+   c                 ó®   — | j                   r| j                  |«       t        | j                  |«      \  }}t	        ||d¬«       | j                  «       z   S )NÚnone)Ú	reduction)r0   Ú_validate_sampler   r   r   rU   )r&   Úvaluer   s      r*   Úlog_probzContinuousBernoulli.log_prob·   sR   € Ø×ÒØ×!Ñ! %Ô(Ü% d§k¡k°5Ó9‰ˆ�ä-¨f°eÀvÔNÐNØ×&Ñ&Ó(ñ)ð	
r+   c           
      ó  — | j                   r| j                  |«       | j                  «       }t        j                  ||«      t        j                  d|z
  d|z
  «      z  |z   dz
  d|z  dz
  z  }t        j
                  | 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�i Ó'¬%¯)©)°C¸)±OÀSÈ5Á[Ó*QÑQØñàñð �9‰_˜sÑ"ñ	$ˆô
 Ÿ™ T×%BÑ%BÓ%DÀdÈEÓRˆÜ�{‰{Ü�H‰H�U˜CÓ Ü×Ñ˜UÓ#Ü�K‰KœŸ™ ¨Ó,¬e¯o©o¸eÓ.DÀnÓUó
ð 	
r+   c           	      ó4  — | j                  «       }t        j                  | 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Ü—+‘+˜y˜jÓ)ñ*ô �y‰y˜Ó#¤e§k¡k°9°*Ó&=Ñ=ñ	?ð
 ó
ð 	
r+   c                 óÌ   — t        j                  | j                   «      }t        j                  | j                  «      }| j                  ||z
  z  | j                  «       z
  |z
  S r4   )r    rL   r   rJ   rX   rU   )r&   Ú
log_probs0Ú
log_probs1s      r*   ÚentropyzContinuousBernoulli.entropyÜ   sW   € Ü—[‘[ $§*¡* Ó-ˆ
Ü—Y‘Y˜tŸz™zÓ*ˆ
à�I‰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                  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‘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+   )NN)gV-²�ïß?gÕxé&1à?Nr4   ),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler   r   r   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Ü  ø„ ñð4 !,× 9Ñ 9À[×EUÑEUÑV€OØ×'Ñ'€GØÐØ€Kð 26Ø26Ø$2Ø(,ñCà˜˜f f˜nÑ-Ñ.ðCð ˜˜v v˜~Ñ.Ñ/ðCð �E˜5�LÑ!ð	Cð
   ‘~ðCð 
õCõ@ò0ò
ò

òNð( ðI�fò Ió ðIð ð)˜ò )ó ð)ð ðJ˜&ò Jó ðJð ð;˜ò ;ó ð;ð ðI�vò Ió ðIð ð"˜UŸZ™Zò "ó ð"ð #- %§*¡*£,ó  ð -7¨E¯J©J«Lñ  Eð ¸Vó ò

ò
ò 

ò
ð ð  v¡ò ó ðö;r+   )rN   Útypingr   r   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¢      sF   ðã ß "ã Ý Ý +Ý <÷õ õ Aß .Ñ .ð !Ð
!€ô^;Ð+õ ^;r+   