
    }Yh                         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dS )
    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j                    fdZ ej                    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    l/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/normal.pymeanzNormal.mean'   	    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r   c                 6    | j                             d          S N   )r   powr   s    r   variancezNormal.variance3   s    {q!!!r   Nr   r   validate_argsc                 6   t          ||          \  | _        | _        t          |t                    r)t          |t                    rt          j                    }n| j                                        }t                      	                    ||           d S )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   s      -S%88$*c7## 	*
5'(B(B 	**,,KK(--//KMBBBBBr   c                 N   |                      t          |          }t          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   s    ((;;j--(//+..J%%k22	fc##Ku#EEE!0
r   c                    |                      |          }t          j                    5  t          j        | j                            |          | j                            |                    cd d d            S # 1 swxY w Y   d S r   )_extended_shaper'   no_gradnormalr   r0   r   )r   sample_shapeshapes      r   samplezNormal.sampleM   s    $$\22]__ 	R 	R< 6 6
8I8I%8P8PQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs   AA;;A?A?r8   c                     |                      |          }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   sE    $$\22uDHN48?SSSx#
***r   c                 |   | j         r|                     |           | j        dz  }t          | j        t                    rt          j        | j                  n| 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!m $*g.."DHTZ   !! 	 txA%&!c'2htyTW--../	
r   c                     | j         r|                     |           ddt          j        || j        z
  | 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   sh     	)!!%(((	548+tz/D/D/F/FFSTUV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   s5    x$*u|AIM'B'BBTYq\\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   s3    S48AK000059TZ3H3HHHr   c                     | j         | j                            d          z  d| j                            d                                          z  fS )Nr    g      )r   r   r!   rN   r   s    r   _natural_paramszNormal._natural_paramst   sA    4:>>!,,,dTZ^^A5F5F5Q5Q5S5S.STTr   c                     d|                     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   s8    quuQxx!#cEItwhl,C,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      s^        " *.9MNNOGKf    X f    X     X "& " " " X" )-	C C65=!C VU]#C  ~	C
 
C C C C C C      #-%*,, R R R R
 -7EJLL + +E +V + + + +

 
 
 
 
 
R R RI I I Uvv~!6 U U U XUD D D D D D 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      s     " " " " " " " "        + + + + + + < < < < < < E E E E E E E E & & & & & & & & *iD iD iD iD iD iD iD iD iD iDr   