
    [Th                     p    S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S/r " S S\	5      rg)	    N)infTensor)constraints)Normal)TransformedDistribution)AbsTransform
HalfNormalc                      ^  \ rS rSrSrS\R                  0r\R                  r	Sr
SU 4S jjrSU 4S jj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 rS rS rS rSrU =r$ )r	      a  
Creates a half-normal distribution parameterized by `scale` where::

    X ~ Normal(0, scale)
    Y = |X| ~ HalfNormal(scale)

Example::

    >>> # xdoctest: +IGNORE_WANT("non-deterministic")
    >>> m = HalfNormal(torch.tensor([1.0]))
    >>> m.sample()  # half-normal distributed with scale=1
    tensor([ 0.1046])

Args:
    scale (float or Tensor): scale of the full Normal distribution
scaleTc                 J   > [        SUSS9n[        TU ]	  U[        5       US9  g )Nr   F)validate_args)r   super__init__r   )selfr   r   	base_dist	__class__s       W/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributions/half_normal.pyr   HalfNormal.__init__%   s'    1e59	LN-P    c                 J   > U R                  [        U5      n[        TU ]  XS9$ )N)	_instance)_get_checked_instancer	   r   expand)r   batch_shaper   newr   s       r   r   HalfNormal.expand)   s&    ((Y?w~k~99r   returnc                 .    U R                   R                  $ N)r   r   r   s    r   r   HalfNormal.scale-   s    ~~###r   c                 j    U R                   [        R                  " S[        R                  -  5      -  $ N   )r   mathsqrtpir!   s    r   meanHalfNormal.mean1   s"    zzDIIa$''k222r   c                 B    [         R                  " U R                  5      $ r    )torch
zeros_liker   r!   s    r   modeHalfNormal.mode5   s    

++r   c                 f    U R                   R                  S5      SS[        R                  -  -
  -  $ Nr%      )r   powr&   r(   r!   s    r   varianceHalfNormal.variance9   s&    zz~~a ADGGO44r   c                     U R                   (       a  U R                  U5        U R                  R                  U5      [        R
                  " S5      -   n[        R                  " US:  U[        * 5      nU$ )Nr%   r   )	_validate_args_validate_sampler   log_probr&   logr,   wherer   )r   valuer9   s      r   r9   HalfNormal.log_prob=   sW    !!%(>>**51DHHQK?;;uz8cT:r   c                     U R                   (       a  U R                  U5        SU R                  R                  U5      -  S-
  $ r1   )r7   r8   r   cdf)r   r<   s     r   r?   HalfNormal.cdfD   s8    !!%(4>>%%e,,q00r   c                 D    U R                   R                  US-   S-  5      $ )Nr2   r%   )r   icdf)r   probs     r   rB   HalfNormal.icdfI   s    ~~""D1H>22r   c                 d    U R                   R                  5       [        R                  " S5      -
  $ r$   )r   entropyr&   r:   r!   s    r   rF   HalfNormal.entropyL   s"    ~~%%'$((1+55r    r    )__name__
__module____qualname____firstlineno____doc__r   positivearg_constraintsnonnegativesupporthas_rsampler   r   propertyr   r   r)   r.   r4   r9   r?   rB   rF   __static_attributes____classcell__)r   s   @r   r	   r	      s    "  4 45O%%GKQ: $v $ $ 3f 3 3 ,f , , 5& 5 51
36 6r   )r&   r,   r   r   torch.distributionsr   torch.distributions.normalr   ,torch.distributions.transformed_distributionr   torch.distributions.transformsr   __all__r	   rH   r   r   <module>r[      s0       + - P 7 .>6( >6r   