Ë
    f^(h¤"  ã                   óŒ   — 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 dgZ G d	„ de«      Zy)
é    N)ÚTensor)Úconstraints)ÚExponentialFamily)Úbroadcast_allÚclamp_probsÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_NumberÚ_sizeÚContinuousBernoullic                   óÌ  ‡ — e Zd ZdZej
                  ej                  dœZej
                  ZdZ	dZ
	 d	 dˆ 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j4                  fd„«       Z ej4                  «       fd„Z ej4                  «       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   TÚreturnc                 óF  •— |d u |d u k(  rt        d«      ‚|�€t        |t        «      }t        |«      \  | _        |�A| j
                  d   j                  | j                  «      j                  «       st        d«      ‚t        | j                  «      | _        n"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©Ú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          €úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributions/continuous_bernoulli.pyr!   zContinuousBernoulli.__init__6   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.expandQ   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   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_regionb   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_probsg   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Ò'}Ò'}@)r?   r   r=   r8   Ú
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_normn   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 )NrB   rC   rA   gUUUUUUÕ?glÁlÁÖ?rD   )r?   r   rI   rG   r   rJ   r=   r;   )r"   rL   ÚmusrP   rQ   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 r1   )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 )NrC   rB   rD   rA   gUUUUUUµ?g±?gg¼jVÁ?)r?   r   rJ   rI   rG   r   r=   r;   )r"   rL   ÚvarsrP   rQ   s        r'   rX   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 r1   )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   rd   re   Ú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
rk   c                 óÆ   — | j                  |«      }t        j                  || j                  j                  | j                  j
                  ¬«      }| j                  |«      S rc   )rf   r   rg   r   rd   re   ri   rj   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)r-   Ú_validate_sampler   r   r   rR   )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 )NrC   rB   g        )r-   rt   r?   r   rJ   r=   r;   r8   rE   rF   r>   )r"   ru   rL   Ú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 )NrB   rC   )r?   r   r=   r;   rI   rG   )r"   ru   rL   s      r'   ri   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 r1   )r   rI   r   rG   rU   rR   )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 r1   )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   rA   r6   rD   g      8@é   g     €¦@)r   r7   r8   r   r9   r=   r>   rG   rH   ÚspecialÚexpm1rJ   )r"   rP   Úout_unst_regÚcut_nat_paramsrO   rQ   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à?N)r   Nr1   )'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler!   r,   r4   r;   r?   rR   Úpropertyr   rU   rY   rX   r   r   r   r   r   ra   rn   r   rp   rv   rz   ri   r   Útupler�   rˆ   Ú__classcell__)r&   s   @r'   r   r      s  ø„ ñð4 !,× 9Ñ 9À[×EUÑEUÑV€OØ×'Ñ'€GØÐØ€Kð KOðCà	õCõ6ò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(   )rK   r   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   r   r   r	   r
   Útorch.nn.functionalr   Útorch.typesr   r   Ú__all__r   © r(   r'   ú<module>rœ      s@   ðã ã Ý Ý +Ý <÷õ õ Aß &ð !Ð
!€ôY;Ð+õ Y;r(   