Ë
    P/æjC"  ã                   óˆ   — 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y)
é    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j4                  «       fd„Z ej4                  «       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   Tc                 ó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          €úk/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/distributions/continuous_bernoulli.pyr   zContinuousBernoulli.__init__5   sú   ø€ ð �TˆM˜v¨˜~Ò.ÜØMóð ð ÐÜ" 5¬&Ó1ˆIÜ)¨%Ó0‰MˆTŒZð Ð(Ø×+Ñ+¨GÑ4×:Ñ:¸4¿:¹:ÓF×JÑJÔLÜ$Ð%MÓNÐNÜ$ T§Z¡ZÓ0ˆD�Jä" 6¬6Ó2ˆ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.expandP   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_regiona   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   Úwherer9   r   r   Ú	ones_liker8   s    r%   Ú
_cut_probszContinuousBernoulli._cut_probsf   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;   r6   Ú
zeros_likeÚger<   ÚlogÚabsÚlog1pÚpowr   Úmathr9   )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   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 )Nr@   rA   r?   gUUUUUUÕ?glÁlÁÖ?rB   )r=   r   rG   rE   r   rH   r;   r9   )r    rJ   ÚmusrN   rO   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 r/   )r   ÚsqrtÚvariancer8   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 )NrA   r@   rB   r?   gUUUUUUµ?g±?gg¼jVÁ?)r=   r   rH   rG   rE   r   r;   r9   )r    rJ   ÚvarsrN   rO   s        r%   rV   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   r8   s    r%   r   zContinuousBernoulli.logits™   s   € ä˜tŸz™z°TÔ:Ð:r&   c                 óB   — t        t        | j                  d¬«      «      S r[   )r   r	   r   r8   s    r%   r   zContinuousBernoulli.probs�   s   € äœ?¨4¯;©;À$ÔGÓHÐHr&   c                 ó6   — | j                   j                  «       S r/   )r   r   r8   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   rb   rc   Ú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
ri   Úreturnc                 óÆ   — | j                  |«      }t        j                  || j                  j                  | j                  j
                  ¬«      }| j                  |«      S ra   )rd   r   re   r   rb   rc   rg   rh   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   rP   )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 )NrA   r@   g        )r+   rs   r=   r   rH   r;   r9   r6   rC   rD   r<   )r    rt   rJ   Ú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 )Nr@   rA   )r=   r   r;   r9   rG   rE   )r    rt   rJ   s      r%   rg   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 r/   )r   rG   r   rE   rS   rP   )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 r/   )r   r8   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                  |«      dz
  «      «      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?   r4   rA   rB   g      8@é   g     €¦@)r   r5   r6   r   r7   r;   r<   rE   rF   ÚexprH   )r    rN   Úout_unst_regÚcut_nat_paramsrM   rO   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œUŸY™Y¤u§y¡y°Ó'@À3Ñ'FÓGÓHÌ5Ï9É9Ü�I‰I�nÓ%óL
ñ 
ˆð �q‘œ5Ÿ9™9 Q¨›?¨TÑ1Ñ1´E·I±I¸aÀ³OÀfÑ4LÑLˆÜ�{‰{˜<¨°6Ó:Ð:r&   )NN)gV-²�ïß?gÕxé&1à?Nr/   )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealr   ÚsupportÚ_mean_carrier_measureÚhas_rsampler   r*   r2   r9   r=   rP   ÚpropertyrS   rW   rV   r   r   r   r_   r   r   rl   r   ÚTensorro   ru   ry   rg   r~   r€   r†   Ú__classcell__)r$   s   @r%   r   r      s>  ø„ ñð2 !,× 9Ñ 9À[×EUÑEUÑV€OØ×'Ñ'€GØÐØ€Kð KOõCõ6ò0ò
ò

òNð( ñIó ðIð ñ)ó ð)ð ñJó ðJð ñ;ó ð;ð ñIó ðIð ñ"ó ð"ð #- %§*¡*£,ó  ð -7¨E¯J©J«Lñ  Eð ¸U¿\¹\ó ò

ò
ò 

ò
ð ñó ðö;r&   )rI   Ú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;r&   