
    IЦi0                     t    S SK r S SKJrJr  S SKrS SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S/r " S S\5      rg)	    N)NumberReal)constraints)ExponentialFamily)_standard_normalbroadcast_all)_sizeNormalc                   t  ^  \ rS rSrSr\R                  \R                  S.r\R                  r	Sr
Sr\S 5       r\S 5       r\S 5       r\S	 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\R.                  4S jjrS rS rS rS r\S 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   c                     U R                   $ Nr   selfs    Y/var/www/html/ai-image-ml/venv/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.variance1   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__5   sY    ,S8$*c6""z%'@'@**,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newr/   s       r   r3   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   r3   r   )r   sample_shapeshapes      r   sampleNormal.sampleF   sO    $$\2]]_<< 6

8I8I%8PQ __s   A	A::
Br<   returnc                     U R                  U5      n[        X R                  R                  U R                  R                  S9nU R                  X0R
                  -  -   $ )N)dtypedevice)r9   r   r   rB   rC   r   )r   r<   r=   epss       r   rsampleNormal.rsampleK   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    )
r4   _validate_sampler   r(   r   mathlogr   sqrtpi)r   valuevar	log_scales       r   log_probNormal.log_probP   s    !!%(jj!m$.tzz4$@$@DHHTZZ djjnnFV 	 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!   )	r4   rH   r)   erfr   r   
reciprocalrI   rK   r   rM   s     r   cdf
Normal.cdf^   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.icdfe   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.entropyh   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_paramsk   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_normalizero   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-   r3   r)   r*   r>   r	   TensorrE   rP   rX   r\   r_   rb   rg   __static_attributes____classcell__)r/   s   @r   r
   r
      s      *..9M9MNOGK      " "C #(**, R
 -2JJL +E +U\\ +


RI U UD Dr   )rI   numbersr   r   r)   torch.distributionsr   torch.distributions.exp_familyr   torch.distributions.utilsr   r   torch.typesr	   __all__r
    r   r   <module>r      s4        + < E  *aD aDr   