
    rh                         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    m/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/distributions/normal.pymeanzNormal.mean'       xx    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    zz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$*c7#
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    ((;jj-((//+.JJ%%k2	fc#Ku#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

8I8I%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uDHHNN488??Sxx#

***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    !!%(jj!m $**g. HHTZZ ! 	 txxA%&!c'2hhtyyTWW-./	
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`    !!%(		5488+tzz/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    xx$**u||AIM'BBTYYq\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    S488AK000599TZZ3H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::>>!,,dTZZ^^A5F5Q5Q5S.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    quuQx!#cEIItwwh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   " *..9M9MNOGKf   f      "& " " )-	C65=!C VU]#C  ~	C
 
C #-%**, R
 -7EJJL +E +V +

 
RI Uvv~!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   