
    [Th                     t    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	  S SK
JrJr  S/r " S S\5      rg)	    N)Tensor)constraints)ExponentialFamily)_standard_normalbroadcast_all)_Number_sizeNormalc                     ^  \ rS rSrSr\R                  \R                  S.r\R                  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U 4S jjrSU 4S jj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   4S j5       rS rSr U =r!$ )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                     U R                   $ Nr   selfs    R/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributions/normal.pymeanNormal.mean&       xx    c                     U R                   $ r   r   r   s    r   modeNormal.mode*   r   r   c                     U R                   $ r   )r   r   s    r   stddevNormal.stddev.   s    zzr   c                 8    U R                   R                  S5      $ N   )r   powr   s    r   varianceNormal.variance2   s    {{q!!r   c                   > [        X5      u  U l        U l        [        U[        5      (       a+  [        U[        5      (       a  [
        R                  " 5       nOU R                  R                  5       n[        TU ]%  XCS9  g )Nvalidate_args)
r   r   r   
isinstancer   torchSizesizesuper__init__)r   r   r   r(   batch_shape	__class__s        r   r.   Normal.__init__6   sY    ,S8$*c7##
5'(B(B**,K((--/KBr   c                 &  > U R                  [        U5      n[        R                  " U5      nU R                  R                  U5      Ul        U R                  R                  U5      Ul        [        [        U]#  USS9  U R                  Ul	        U$ )NFr'   )
_get_checked_instancer
   r*   r+   r   expandr   r-   r.   _validate_args)r   r/   	_instancenewr0   s       r   r4   Normal.expand>   st    ((;jj-((//+.JJ%%k2	fc#Ku#E!00
r   c                    U R                  U5      n[        R                  " 5          [        R                  " U R                  R                  U5      U R                  R                  U5      5      sS S S 5        $ ! , (       d  f       g = fr   )_extended_shaper*   no_gradnormalr   r4   r   )r   sample_shapeshapes      r   sampleNormal.sampleG   sO    $$\2]]_<< 6

8I8I%8PQ __s   A	A::
Br=   c                     U R                  U5      n[        X R                  R                  U R                  R                  S9nU R                  X0R
                  -  -   $ )N)dtypedevice)r:   r   r   rB   rC   r   )r   r=   r>   epss       r   rsampleNormal.rsampleL   sD    $$\2uHHNN488??Sxx#

***r   c                    U R                   (       a  U R                  U5        U R                  S-  n[        U R                  [        5      (       a   [
        R                  " U R                  5      OU R                  R                  5       nXR                  -
  S-  * SU-  -  U-
  [
        R                  " [
        R                  " S[
        R                  -  5      5      -
  $ r!   )
r5   _validate_sampler   r)   r   mathlogr   sqrtpi)r   valuevar	log_scales       r   log_probNormal.log_probQ   s    !!%(jj!m $**g.. HHTZZ ! 	 xxA%&!c'2hhtyyTWW-./	
r   c                     U R                   (       a  U R                  U5        SS[        R                  " XR                  -
  U R
                  R                  5       -  [        R                  " S5      -  5      -   -  $ )N      ?   r"   )	r5   rH   r*   erfr   r   
reciprocalrI   rK   r   rM   s     r   cdf
Normal.cdfa   s^    !!%(		588+tzz/D/D/FFSTUVV
 	
r   c                     U R                   U R                  [        R                  " SU-  S-
  5      -  [        R
                  " S5      -  -   $ )Nr"   rT   )r   r   r*   erfinvrI   rK   rW   s     r   icdfNormal.icdfh   s8    xx$**u||AIM'BBTYYq\QQQr   c                     SS[         R                  " S[         R                  -  5      -  -   [        R                  " U R                  5      -   $ )NrS   r"   )rI   rJ   rL   r*   r   r   s    r   entropyNormal.entropyk   s5    S488AK000599TZZ3HHHr   c                     U R                   U R                  R                  S5      -  SU R                  R                  S5      R                  5       -  4$ )Nr"   g      )r   r   r#   rV   r   s    r   _natural_paramsNormal._natural_paramsn   s>    4::>>!,,dTZZ^^A5F5Q5Q5S.STTr   c                     SUR                  S5      -  U-  S[        R                  " [        R                  * U-  5      -  -   $ )Ng      пr"   rS   )r#   r*   rJ   rI   rL   )r   xys      r   _log_normalizerNormal._log_normalizerr   s7    quuQx!#cEIItwwhl,C&CCCr   r   )"__name__
__module____qualname____firstlineno____doc__r   realpositivearg_constraintssupporthas_rsample_mean_carrier_measurepropertyr   r   r   r   r$   r.   r4   r*   r+   r?   r	   rE   rP   rX   r\   r_   tuplerb   rg   __static_attributes____classcell__)r0   s   @r   r
   r
      s#   " *..9M9MNOGKf   f      "& " "C #(**, R
 -2JJL +E +V +

 
RI Uvv~!6 U UD Dr   )rI   r*   r   torch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   r   torch.typesr   r	   __all__r
    r   r   <module>r~      s4       + < E & *dD dDr   