Ë
    óÍ: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 d dlmZmZ dgZ G d	„ de	«      Zy)
é    N)ÚOptionalÚUnion)ÚTensor)Úconstraints)ÚExponentialFamily)Ú_standard_normalÚbroadcast_all)Ú_NumberÚ_sizeÚNormalc            	       ó   ‡ — e Zd ZdZej
                  ej                  dœZej
                  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	 ddeeef   deeef   dee   dd
fˆ fd„Zdˆ fd„	Z ej0                  «       fd„Z ej0                  «       fdedefd„Zd„ Zd„ Zd„ Zd„ Zede eef   fd„«       Z!d„ Z"ˆ xZ#S )r   a+  
    Creates a normal (also called Gaussian) distribution parameterized by
    :attr:`loc` and :attr:`scale`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Normal(torch.tensor([0.0]), torch.tensor([1.0]))
        >>> m.sample()  # normally distributed with loc=0 and scale=1
        tensor([ 0.1046])

    Args:
        loc (float or Tensor): mean of the distribution (often referred to as mu)
        scale (float or Tensor): standard deviation of the distribution
            (often referred to as sigma)
    )ÚlocÚscaleTr   Úreturnc                 ó   — | j                   S ©N©r   ©Úselfs    úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/distributions/normal.pyÚmeanzNormal.mean'   ó   € à�x‰xˆó    c                 ó   — | j                   S r   r   r   s    r   ÚmodezNormal.mode+   r   r   c                 ó   — | j                   S r   )r   r   s    r   ÚstddevzNormal.stddev/   s   € à�z‰zÐr   c                 ó8   — | j                   j                  d«      S ©Né   )r   Úpowr   s    r   ÚvariancezNormal.variance3   s   € à�{‰{�‰˜qÓ!Ð!r   Nr   r   Úvalidate_argsc                 óø   •— t        ||«      \  | _        | _        t        |t        «      r%t        |t        «      rt        j                  «       }n| j                  j                  «       }t        ‰| �%  ||¬«       y )N©r#   )
r	   r   r   Ú
isinstancer
   ÚtorchÚSizeÚsizeÚsuperÚ__init__)r   r   r   r#   Úbatch_shapeÚ	__class__s        €r   r+   zNormal.__init__7   sY   ø€ ô  -¨S°%Ó8ÑˆŒ�$”*Ü�cœ7Ô#¬
°5¼'Ô(BÜŸ*™*›,‰KàŸ(™(Ÿ-™-›/ˆKÜ‰Ñ˜°MÐÕBr   c                 ó*  •— | j                  t        |«      }t        j                  |«      }| j                  j                  |«      |_        | j                  j                  |«      |_        t        t        |�#  |d¬«       | j                  |_	        |S )NFr%   )
Ú_get_checked_instancer   r'   r(   r   Úexpandr   r*   r+   Ú_validate_args)r   r,   Ú	_instanceÚnewr-   s       €r   r0   zNormal.expandD   st   ø€ Ø×(Ñ(¬°Ó;ˆÜ—j‘j Ó-ˆØ—(‘(—/‘/ +Ó.ˆŒØ—J‘J×%Ñ% kÓ2ˆŒ	ÜŒf�cÑ# K¸uÐ#ÔEØ!×0Ñ0ˆÔØˆ
r   c                 ó  — | j                  |«      }t        j                  «       5  t        j                  | j                  j                  |«      | j                  j                  |«      «      cd d d «       S # 1 sw Y   y xY wr   )Ú_extended_shaper'   Úno_gradÚnormalr   r0   r   )r   Úsample_shapeÚshapes      r   ÚsamplezNormal.sampleM   s^   € Ø×$Ñ$ \Ó2ˆÜ�]‰]‹_ñ 	RÜ—<‘< §¡§¡°Ó 6¸¿
¹
×8IÑ8IÈ%Ó8PÓQ÷	R÷ 	Rò 	Rús   ¦AA8Á8Br8   c                 óÈ   — | j                  |«      }t        || j                  j                  | j                  j                  ¬«      }| j                  || j
                  z  z   S )N)ÚdtypeÚdevice)r5   r   r   r<   r=   r   )r   r8   r9   Úepss       r   ÚrsamplezNormal.rsampleR   sH   € Ø×$Ñ$ \Ó2ˆÜ˜u¨D¯H©H¯N©NÀ4Ç8Á8Ç?Á?ÔSˆØ�x‰x˜# §
¡
Ñ*Ñ*Ð*r   c                 ó¬  — | j                   r| j                  |«       | j                  dz  }t        | j                  t        «      rt        j                  | j                  «      n| j                  j                  «       }|| j                  z
  dz   d|z  z  |z
  t        j                  t        j                  dt
        j                  z  «      «      z
  S r   )
r1   Ú_validate_sampler   r&   r
   ÚmathÚlogr   ÚsqrtÚpi)r   ÚvalueÚvarÚ	log_scales       r   Úlog_probzNormal.log_probW   s©   € Ø×ÒØ×!Ñ! %Ô(à�j‰j˜!‰mˆô ˜$Ÿ*™*¤gÔ.ô �H‰H�T—Z‘ZÔ à—‘—‘Ó!ð 	ð �t—x‘xÑ AÑ%Ð&¨!¨c©'Ñ2Øñä�h‰h”t—y‘y ¤T§W¡W¡Ó-Ó.ñ/ð	
r   c                 óî   — | j                   r| j                  |«       ddt        j                  || j                  z
  | j
                  j                  «       z  t        j                  d«      z  «      z   z  S )Nç      à?é   r    )	r1   rA   r'   Úerfr   r   Ú
reciprocalrB   rD   ©r   rF   s     r   Úcdfz
Normal.cdfg   s`   € Ø×ÒØ×!Ñ! %Ô(ØØ”—	‘	˜5 4§8¡8Ñ+¨t¯z©z×/DÑ/DÓ/FÑFÌÏÉÐSTËÑUÓVÑVñ
ð 	
r   c                 ó˜   — | j                   | j                  t        j                  d|z  dz
  «      z  t	        j
                  d«      z  z   S )Nr    rL   )r   r   r'   ÚerfinvrB   rD   rO   s     r   ÚicdfzNormal.icdfn   s8   € Ø�x‰x˜$Ÿ*™*¤u§|¡|°A¸±IÀ±MÓ'BÑBÄTÇYÁYÈqÃ\ÑQÑQÐQr   c                 óš   — ddt        j                  dt         j                  z  «      z  z   t        j                  | j                  «      z   S )NrK   r    )rB   rC   rE   r'   r   r   s    r   ÚentropyzNormal.entropyq   s5   € Ø�Sœ4Ÿ8™8 A¬¯©¡KÓ0Ñ0Ñ0´5·9±9¸T¿Z¹ZÓ3HÑHÐHr   c                 óª   — | j                   | j                  j                  d«      z  d| j                  j                  d«      j                  «       z  fS )Nr    g      à¿)r   r   r!   rN   r   s    r   Ú_natural_paramszNormal._natural_paramst   s>   € à—‘˜4Ÿ:™:Ÿ>™>¨!Ó,Ñ,¨d°T·Z±Z·^±^ÀAÓ5F×5QÑ5QÓ5SÑ.SÐTÐTr   c                 ó†   — d|j                  d«      z  |z  dt        j                  t        j                   |z  «      z  z   S )Ng      Ð¿r    rK   )r!   r'   rC   rB   rE   )r   ÚxÚys      r   Ú_log_normalizerzNormal._log_normalizerx   s7   € Ø�q—u‘u˜Q“xÑ !Ñ# c¬E¯I©I´t·w±w°hÀ±lÓ,CÑ&CÑCÐCr   r   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚrealÚpositiveÚarg_constraintsÚsupportÚhas_rsampleÚ_mean_carrier_measureÚpropertyr   r   r   r   r"   r   Úfloatr   Úboolr+   r0   r'   r(   r:   r   r?   rI   rP   rS   rU   ÚtuplerW   r[   Ú__classcell__)r-   s   @r   r   r      sf  ø„ ñð" *×.Ñ.¸×9MÑ9MÑN€OØ×Ñ€GØ€KØÐàð�fò ó ðð ð�fò ó ðð ð˜ò ó ðð ð"˜&ò "ó ð"ð )-ñ	Cà�6˜5�=Ñ!ðCð �V˜U�]Ñ#ðCð   ‘~ð	Cð
 
õCõð #- %§*¡*£,ó Rð
 -7¨E¯J©J«Lñ + Eð +¸Vó +ò

ò 
òRòIð ðU  v¨v ~Ñ!6ò Uó ðUöDr   )rB   Útypingr   r   r'   r   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.distributions.utilsr   r	   Útorch.typesr
   r   Ú__all__r   © r   r   ú<module>rr      s7   ðã ß "ã Ý Ý +Ý <ß Eß &ð ˆ*€ôiDÐõ iDr   