
    }Yh[                     >   U d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZ d dlZd dlmc mZ d dlmZmZ d dlmZ d dlmZmZmZmZ dZee         ed	<   g d
Zdeeef         deedf         fdZ deee!ef                  de	e         de	e         defdZ"dede!defdZ#d+dede$defdZ%dedefdZ&d+dede$defdZ' edd          Z( ed d!          Z) G d" d#ee(e)f                   Z* G d$ d%e*e(e)f         e+          Z,d,d&ed'e!defd(Z-d,d)ed'e!defd*Z.dS )-    )Sequence)update_wrapper)AnyCallableFinalGenericOptionaloverloadTypeVarUnionN)SymIntTensoris_tensor_like)_dtype_NumberDeviceNumbergox?euler_constant)broadcast_alllogits_to_probsclamp_probsprobs_to_logitslazy_propertytril_matrix_to_vecvec_to_tril_matrixvaluesreturn.c                     t          d | D                       st          d          t          d | D                       syt          t          j                              | D ]9}t          |t          j                  rt          |j        |j                   n:fd| D             }t          j	        | S t          j	        |  S )a  
    Given a list of values (possibly containing numbers), returns a list where each
    value is broadcasted based on the following rules:
      - `torch.*Tensor` instances are broadcasted as per :ref:`_broadcasting-semantics`.
      - Number instances (scalars) are upcast to tensors having
        the same size and type as the first tensor passed to `values`.  If all the
        values are scalars, then they are upcasted to scalar Tensors.

    Args:
        values (list of `Number`, `torch.*Tensor` or objects implementing __torch_function__)

    Raises:
        ValueError: if any of the values is not a `Number` instance,
            a `torch.*Tensor` instance, or an instance implementing __torch_function__
    c              3   ^   K   | ](}t          |          pt          |t                    V  )d S N)r   
isinstancer   .0vs     k/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributions/utils.py	<genexpr>z broadcast_all.<locals>.<genexpr>+   s9      KKq~a  :Jq'$:$:KKKKKK    ziInput arguments must all be instances of Number, torch.Tensor or objects implementing __torch_function__.c              3   4   K   | ]}t          |          V  d S r!   r   r#   s     r&   r'   z broadcast_all.<locals>.<genexpr>0   s*      11Q~a  111111r(   )dtyper*   devicec                 V    g | ]%}t          |          r|nt          j        |fi &S  )r   torchtensor)r$   r%   optionss     r&   
<listcomp>z!broadcast_all.<locals>.<listcomp>6   sI     
 
 
GH""BAAQ(B(B'(B(B
 
 
r(   )
all
ValueErrordictr/   get_default_dtyper"   r   r*   r,   broadcast_tensors)r   value
new_valuesr1   s      @r&   r   r      s      KKFKKKKK 
G
 
 	
 11&11111 	4"&U-D-F-F"G"G"G 	 	E%.. U[FFF
 
 
 
LR
 
 

 &
33"F++r(   shaper*   r,   c                    t           j                                        r?t          j        t          j        | ||          t          j        | ||                    S t          j        | ||                                          S )Nr+   )r/   _C_get_tracing_statenormalzerosonesemptynormal_)r:   r*   r,   s      r&   _standard_normalrC   =   s{    
 x""$$ 
|KU6:::JuE&999
 
 	
 ;uE&999AACCCr(   r8   dimc                     |dk    r| S | j         d|          dz   }|                     |                              d          S )z
    Sum out ``dim`` many rightmost dimensions of a given tensor.

    Args:
        value (Tensor): A tensor of ``.dim()`` at least ``dim``.
        dim (int): The number of rightmost dims to sum out.
    r   N)rF   )r:   reshapesum)r8   rD   required_shapes      r&   _sum_rightmostrJ   K   sI     axx[3$'%/N==((,,R000r(   Flogits	is_binaryc                 Z    |rt          j        |           S t          j        | d          S )a  
    Converts a tensor of logits into probabilities. Note that for the
    binary case, each value denotes log odds, whereas for the
    multi-dimensional case, the values along the last dimension denote
    the log probabilities (possibly unnormalized) of the events.
    rF   )rD   )r/   sigmoidFsoftmax)rK   rL   s     r&   r   r   Y   s1      %}V$$$9V$$$$r(   probsc                 r    t          j        | j                  j        }|                     |d|z
            S )a  Clamps the probabilities to be in the open interval `(0, 1)`.

    The probabilities would be clamped between `eps` and `1 - eps`,
    and `eps` would be the smallest representable positive number for the input data type.

    Args:
        probs (Tensor): A tensor of probabilities.

    Returns:
        Tensor: The clamped probabilities.

    Examples:
        >>> probs = torch.tensor([0.0, 0.5, 1.0])
        >>> clamp_probs(probs)
        tensor([1.1921e-07, 5.0000e-01, 1.0000e+00])

        >>> probs = torch.tensor([0.0, 0.5, 1.0], dtype=torch.float64)
        >>> clamp_probs(probs)
        tensor([2.2204e-16, 5.0000e-01, 1.0000e+00], dtype=torch.float64)

       )minmax)r/   finfor*   epsclamp)rQ   rW   s     r&   r   r   e   s2    , +ek
"
"
&C;;3AG;,,,r(   c                     t          |           }|r*t          j        |          t          j        |           z
  S t          j        |          S )a$  
    Converts a tensor of probabilities into logits. For the binary case,
    this denotes the probability of occurrence of the event indexed by `1`.
    For the multi-dimensional case, the values along the last dimension
    denote the probabilities of occurrence of each of the events.
    )r   r/   loglog1p)rQ   rL   
ps_clampeds      r&   r   r      sK     U##J @y$$u{J;'?'???9Z   r(   TT)contravariantR)	covariantc                       e Zd ZdZdeegef         ddfdZe	 dddde	ddfd	            Z
eddede	defd
            Z
	 ddeedf         de	ddfdZ
dS )r   z
    Used as a decorator for lazy loading of class attributes. This uses a
    non-data descriptor that calls the wrapped method to compute the property on
    first call; thereafter replacing the wrapped method into an instance
    attribute.
    wrappedr   Nc                 4    || _         t          | |           d S r!   )rb   r   selfrb   s     r&   __init__zlazy_property.__init__   s    )0tW%%%%%r(   instanceobj_typez!_lazy_property_and_property[T, R]c                     d S r!   r.   re   rg   rh   s      r&   __get__zlazy_property.__get__   s	     /2cr(   c                     d S r!   r.   rj   s      r&   rk   zlazy_property.__get__   s    ?Bsr(   z%R | _lazy_property_and_property[T, R]c                     |t          | j                  S t          j                    5  |                     |          }d d d            n# 1 swxY w Y   t	          || j        j        |           |S r!   )_lazy_property_and_propertyrb   r/   enable_gradsetattr__name__)re   rg   rh   r8   s       r&   rk   zlazy_property.__get__   s     .t|<<<   	+ 	+LL**E	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+$,/777s   AAAr!   )rq   
__module____qualname____doc__r   r]   r_   rf   r
   r   rk   r   r.   r(   r&   r   r      s         &!a 0 &T & & & & .22 22(+2	,2 2 2 X2 BBBSBABBB XB 9= ag25	0     r(   r   c                   4    e Zd ZdZdeegef         ddfdZdS )rn   zWe want lazy properties to look like multiple things.

    * property when Sphinx autodoc looks
    * lazy_property when Distribution validate_args looks
    rb   r   Nc                 <    t                               | |           d S r!   )propertyrf   rd   s     r&   rf   z$_lazy_property_and_property.__init__   s    $(((((r(   )rq   rr   rs   rt   r   r]   r_   rf   r.   r(   r&   rn   rn      sK         )!a 0 )T ) ) ) ) ) )r(   rn   matdiagc           	      :   | j         d         }t          j                                        s*|| k     s||k    rt	          d| d|  d|dz
   d          t          j        || j                  }||                    dd          |dz   z   k     }| d|f         }|S )	z
    Convert a `D x D` matrix or a batch of matrices into a (batched) vector
    which comprises of lower triangular elements from the matrix in row order.
    rF   zdiag (z) provided is outside [z, rS   z].r,   .)r:   r/   r<   r=   r4   aranger,   view)rx   ry   nr|   	tril_maskvecs         r&   r   r      s    
 		"A8&&(( PdaRii4199N$NNrNNQUNNNOOO\!CJ///FR++tax88I
c9n
CJr(   r   c                     dd|z  z    dd|z  z   dz  d| j         d         z  z   dt          |          z  |dz   z  z   dz  z   dz  }t          j        | j                  j        }t          j                                        s7t          |          |z
  |k    r!t          d| j         d          dd	z             t          |t          j                  r!t          |                                          nt          |          }|                     | j         d
d         t          j        ||f          z             }t          j        || j                  }||                    dd          |dz   z   k     }| |d|f<   |S )z
    Convert a vector or a batch of vectors into a batched `D x D`
    lower triangular matrix containing elements from the vector in row order.
    rS         rF      g      ?zThe size of last dimension is z which cannot be expressed as z3the lower triangular part of a square D x D matrix.Nr{   .)r:   absr/   rV   r*   rW   r<   r=   roundr4   r"   r   item	new_zerosSizer|   r,   r}   )r   ry   r~   rW   rx   r|   r   s          r&   r   r      sv    a$h,DLQSYr]!22QT]dQh5OOTW
W	X		
A +ci
 
 
$C8&&(( 
eAhhlS.@.@ZSYr]ZZZCD
 
 	
 &a66DaffhhE!HHA
--	#2#QF););;
<
<C\!CJ///FR++tax88ICYJr(   )F)r   )/collections.abcr   	functoolsr   typingr   r   r   r   r	   r
   r   r   r/   torch.nn.functionalnn
functionalrO   r   r   torch.overridesr   torch.typesr   r   r   r   r   float__annotations____all__tupler   intrC   rJ   boolr   r   r   r]   r_   r   rw   rn   r   r   r.   r(   r&   <module>r      s,   $ $ $ $ $ $ $ $ $ $ $ $ $ T T T T T T T T T T T T T T T T T T T T                           * * * * * * 7 7 7 7 7 7 7 7 7 7 7 7  6e 5 5 5  ,50 ,U63;5G , , , ,DDE#v+&'DFD VD 	D D D D1& 1s 1v 1 1 1 1	% 	%F 	%t 	% 	% 	% 	% 	%-v -& - - - -4
! 
!6 
!d 
!v 
! 
! 
! 
! GCt$$$GC4       GAqDM   >) ) ) ) )-1"5x ) ) ) F # f     F # f      r(   