o
    !iH                     @   sh  d Z ddlZg dZG dd dZG dd deZdd	 ZG d
d deeZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZe ZeZ eZ!e	 Z"e
 Z#edZ$ed:Z%eZ&e Z'e!e'd:Z(ed;Z)ed;Z*eZ+eZ,eZ-eZ.ed;d<Z/eZ0eZ1e Z2e Z3e Z4e Z5e Z6e Z7e Z8e Z9eZ:eZ;dS )=a  
The following constraints are implemented:

- ``constraints.boolean``
- ``constraints.cat``
- ``constraints.corr_cholesky``
- ``constraints.dependent``
- ``constraints.greater_than(lower_bound)``
- ``constraints.greater_than_eq(lower_bound)``
- ``constraints.independent(constraint, reinterpreted_batch_ndims)``
- ``constraints.integer_interval(lower_bound, upper_bound)``
- ``constraints.interval(lower_bound, upper_bound)``
- ``constraints.less_than(upper_bound)``
- ``constraints.lower_cholesky``
- ``constraints.lower_triangular``
- ``constraints.multinomial``
- ``constraints.nonnegative``
- ``constraints.nonnegative_integer``
- ``constraints.one_hot``
- ``constraints.positive_integer``
- ``constraints.positive``
- ``constraints.positive_semidefinite``
- ``constraints.positive_definite``
- ``constraints.real_vector``
- ``constraints.real``
- ``constraints.simplex``
- ``constraints.symmetric``
- ``constraints.stack``
- ``constraints.square``
- ``constraints.symmetric``
- ``constraints.unit_interval``
    N)
Constraintbooleancatcorr_cholesky	dependentdependent_propertygreater_thangreater_than_eqindependentinteger_intervalintervalhalf_open_intervalis_dependent	less_thanlower_choleskylower_triangularmultinomialnonnegativenonnegative_integerone_hotpositivepositive_semidefinitepositive_definitepositive_integerrealreal_vectorsimplexsquarestack	symmetricunit_intervalc                   @   (   e Zd ZdZdZdZdd Zdd ZdS )	r   a  
    Abstract base class for constraints.

    A constraint object represents a region over which a variable is valid,
    e.g. within which a variable can be optimized.

    Attributes:
        is_discrete (bool): Whether constrained space is discrete.
            Defaults to False.
        event_dim (int): Number of rightmost dimensions that together define
            an event. The :meth:`check` method will remove this many dimensions
            when computing validity.
    Fr   c                 C   s   t )z
        Returns a byte tensor of ``sample_shape + batch_shape`` indicating
        whether each event in value satisfies this constraint.
        )NotImplementedErrorselfvalue r&   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/distributions/constraints.pycheckY   s   zConstraint.checkc                 C   s   | j jdd  d S )N   z())	__class____name__r$   r&   r&   r'   __repr__`      zConstraint.__repr__N)r+   
__module____qualname____doc__is_discrete	event_dimr(   r-   r&   r&   r&   r'   r   G   s    r   c                       sX   e Zd ZdZeed fdd
Zedd Zedd Zeedd	d
Z	dd Z
  ZS )
_DependentaI  
    Placeholder for variables whose support depends on other variables.
    These variables obey no simple coordinate-wise constraints.

    Args:
        is_discrete (bool): Optional value of ``.is_discrete`` in case this
            can be computed statically. If not provided, access to the
            ``.is_discrete`` attribute will raise a NotImplementedError.
        event_dim (int): Optional value of ``.event_dim`` in case this
            can be computed statically. If not provided, access to the
            ``.event_dim`` attribute will raise a NotImplementedError.
    r2   r3   c                      || _ || _t   d S N)_is_discrete
_event_dimsuper__init__r$   r2   r3   r*   r&   r'   r;   r      z_Dependent.__init__c                 C      | j tu r	td| j S )Nz,.is_discrete cannot be determined statically)r8   NotImplementedr"   r,   r&   r&   r'   r2   w      
z_Dependent.is_discretec                 C   r?   )Nz*.event_dim cannot be determined statically)r9   r@   r"   r,   r&   r&   r'   r3   }   rA   z_Dependent.event_dimc                C   s(   |t u r| j}|t u r| j}t||dS )z
        Support for syntax to customize static attributes::

            constraints.dependent(is_discrete=True, event_dim=1)
        r5   )r@   r8   r9   r4   r<   r&   r&   r'   __call__   s
   z_Dependent.__call__c                 C   s   t d)Nz1Cannot determine validity of dependent constraint)
ValueErrorr$   xr&   r&   r'   r(         z_Dependent.check)r+   r/   r0   r1   r@   r;   propertyr2   r3   rB   r(   __classcell__r&   r&   r=   r'   r4   d   s    

r4   c                 C   s
   t | tS r7   )
isinstancer4   )
constraintr&   r&   r'   r         
r   c                       s4   e Zd ZdZ	deed fddZdd Z  ZS )	_DependentPropertya  
    Decorator that extends @property to act like a `Dependent` constraint when
    called on a class and act like a property when called on an object.

    Example::

        class Uniform(Distribution):
            def __init__(self, low, high):
                self.low = low
                self.high = high
            @constraints.dependent_property(is_discrete=False, event_dim=0)
            def support(self):
                return constraints.interval(self.low, self.high)

    Args:
        fn (Callable): The function to be decorated.
        is_discrete (bool): Optional value of ``.is_discrete`` in case this
            can be computed statically. If not provided, access to the
            ``.is_discrete`` attribute will raise a NotImplementedError.
        event_dim (int): Optional value of ``.event_dim`` in case this
            can be computed statically. If not provided, access to the
            ``.event_dim`` attribute will raise a NotImplementedError.
    Nr5   c                   s   t  | || _|| _d S r7   )r:   r;   r8   r9   )r$   fnr2   r3   r=   r&   r'   r;      s   
z_DependentProperty.__init__c                 C   s   t || j| jdS )z
        Support for syntax to customize static attributes::

            @constraints.dependent_property(is_discrete=True, event_dim=1)
            def support(self):
                ...
        r5   )rL   r8   r9   )r$   rM   r&   r&   r'   rB      s   
z_DependentProperty.__call__r7   )r+   r/   r0   r1   r@   r;   rB   rH   r&   r&   r=   r'   rL      s    rL   c                       sH   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	  Z
S )_IndependentConstraintz
    Wraps a constraint by aggregating over ``reinterpreted_batch_ndims``-many
    dims in :meth:`check`, so that an event is valid only if all its
    independent entries are valid.
    c                    sB   t |tsJ t |tsJ |dksJ || _|| _t   d S Nr   )rI   r   intbase_constraintreinterpreted_batch_ndimsr:   r;   )r$   rQ   rR   r=   r&   r'   r;      s   z_IndependentConstraint.__init__c                 C   s   | j jS r7   )rQ   r2   r,   r&   r&   r'   r2      s   z"_IndependentConstraint.is_discretec                 C   s   | j j| j S r7   )rQ   r3   rR   r,   r&   r&   r'   r3      s   z _IndependentConstraint.event_dimc                 C   sp   | j |}| | jk r | j j| j }td| d|  ||jd | | j  d }|d}|S )NzExpected value.dim() >= z	 but got rT   )	rQ   r(   dimrR   r3   rC   Zreshapeshapeall)r$   r%   resultexpectedr&   r&   r'   r(      s   
z_IndependentConstraint.checkc                 C   s*   | j jdd   dt| j d| j dS )Nr)   (z, ))r*   r+   reprrQ   rR   r,   r&   r&   r'   r-      s   *z_IndependentConstraint.__repr__)r+   r/   r0   r1   r;   rG   r2   r3   r(   r-   rH   r&   r&   r=   r'   rN      s    

rN   c                   @      e Zd ZdZdZdd ZdS )_Booleanz/
    Constrain to the two values `{0, 1}`.
    Tc                 C   s   |dk|dkB S )Nr   r)   r&   r#   r&   r&   r'   r(      s   z_Boolean.checkN)r+   r/   r0   r1   r2   r(   r&   r&   r&   r'   r^          r^   c                   @   s    e Zd ZdZdZdZdd ZdS )_OneHotz'
    Constrain to one-hot vectors.
    Tr)   c                 C   s.   |dk|dkB }| dd}|d|@ S )Nr   r)   rT   )sumeqrW   )r$   r%   Z
is_booleanis_normalizedr&   r&   r'   r(      s   z_OneHot.checkN)r+   r/   r0   r1   r2   r3   r(   r&   r&   r&   r'   r`      s
    r`   c                       4   e Zd ZdZdZ fddZdd Zdd Z  ZS )	_IntegerIntervalzH
    Constrain to an integer interval `[lower_bound, upper_bound]`.
    Tc                    r6   r7   lower_boundupper_boundr:   r;   r$   rg   rh   r=   r&   r'   r;     r>   z_IntegerInterval.__init__c                 C   s    |d dk| j |k@ || jk@ S Nr)   r   rg   rh   r#   r&   r&   r'   r(     s   z_IntegerInterval.checkc                 C   .   | j jdd  }|d| j d| j d7 }|S Nr)   (lower_bound=z, upper_bound=r[   r*   r+   rg   rh   r$   Z
fmt_stringr&   r&   r'   r-     
   z_IntegerInterval.__repr__	r+   r/   r0   r1   r2   r;   r(   r-   rH   r&   r&   r=   r'   re     s    re   c                       rd   )	_IntegerLessThanzA
    Constrain to an integer interval `(-inf, upper_bound]`.
    Tc                       || _ t   d S r7   rh   r:   r;   r$   rh   r=   r&   r'   r;   %     z_IntegerLessThan.__init__c                 C   s   |d dk|| j k@ S rj   rh   r#   r&   r&   r'   r(   )     z_IntegerLessThan.checkc                 C   &   | j jdd  }|d| j d7 }|S Nr)   z(upper_bound=r[   r*   r+   rh   rp   r&   r&   r'   r-   ,     z_IntegerLessThan.__repr__rr   r&   r&   r=   r'   rs         rs   c                       rd   )	_IntegerGreaterThanz@
    Constrain to an integer interval `[lower_bound, inf)`.
    Tc                    rt   r7   rg   r:   r;   r$   rg   r=   r&   r'   r;   9  rw   z_IntegerGreaterThan.__init__c                 C   s   |d dk|| j k@ S rj   rg   r#   r&   r&   r'   r(   =  ry   z_IntegerGreaterThan.checkc                 C   rz   Nr)   rn   r[   r*   r+   rg   rp   r&   r&   r'   r-   @  r}   z_IntegerGreaterThan.__repr__rr   r&   r&   r=   r'   r   2  r~   r   c                   @   s   e Zd ZdZdd ZdS )_RealzF
    Trivially constrain to the extended real line `[-inf, inf]`.
    c                 C   s   ||kS r7   r&   r#   r&   r&   r'   r(   K  rF   z_Real.checkN)r+   r/   r0   r1   r(   r&   r&   r&   r'   r   F  s    r   c                       0   e Zd ZdZ fddZdd Zdd Z  ZS )_GreaterThanz=
    Constrain to a real half line `(lower_bound, inf]`.
    c                    rt   r7   r   r   r=   r&   r'   r;   T  rw   z_GreaterThan.__init__c                 C   s
   | j |k S r7   r   r#   r&   r&   r'   r(   X  rK   z_GreaterThan.checkc                 C   rz   r   r   rp   r&   r&   r'   r-   [  r}   z_GreaterThan.__repr__r+   r/   r0   r1   r;   r(   r-   rH   r&   r&   r=   r'   r   O  
    r   c                       r   )_GreaterThanEqz=
    Constrain to a real half line `[lower_bound, inf)`.
    c                    rt   r7   r   r   r=   r&   r'   r;   f  rw   z_GreaterThanEq.__init__c                 C   s
   | j |kS r7   r   r#   r&   r&   r'   r(   j  rK   z_GreaterThanEq.checkc                 C   rz   r   r   rp   r&   r&   r'   r-   m  r}   z_GreaterThanEq.__repr__r   r&   r&   r=   r'   r   a  r   r   c                       r   )	_LessThanz>
    Constrain to a real half line `[-inf, upper_bound)`.
    c                    rt   r7   ru   rv   r=   r&   r'   r;   x  rw   z_LessThan.__init__c                 C   s
   || j k S r7   rx   r#   r&   r&   r'   r(   |  rK   z_LessThan.checkc                 C   rz   r{   r|   rp   r&   r&   r'   r-     r}   z_LessThan.__repr__r   r&   r&   r=   r'   r   s  r   r   c                       r   )	_IntervalzD
    Constrain to a real interval `[lower_bound, upper_bound]`.
    c                    r6   r7   rf   ri   r=   r&   r'   r;     r>   z_Interval.__init__c                 C   s   | j |k|| jk@ S r7   rk   r#   r&   r&   r'   r(     r.   z_Interval.checkc                 C   rl   rm   ro   rp   r&   r&   r'   r-     rq   z_Interval.__repr__r   r&   r&   r=   r'   r     
    r   c                       r   )_HalfOpenIntervalzD
    Constrain to a real interval `[lower_bound, upper_bound)`.
    c                    r6   r7   rf   ri   r=   r&   r'   r;     r>   z_HalfOpenInterval.__init__c                 C   s   | j |k|| jk @ S r7   rk   r#   r&   r&   r'   r(     r.   z_HalfOpenInterval.checkc                 C   rl   rm   ro   rp   r&   r&   r'   r-     rq   z_HalfOpenInterval.__repr__r   r&   r&   r=   r'   r     r   r   c                   @   r]   )_Simplexz
    Constrain to the unit simplex in the innermost (rightmost) dimension.
    Specifically: `x >= 0` and `x.sum(-1) == 1`.
    r)   c                 C   s(   t j|dkdd|dd  dk @ S )Nr   rT   rU   r)   ư>)torchrW   ra   absr#   r&   r&   r'   r(     s   (z_Simplex.checkNr+   r/   r0   r1   r3   r(   r&   r&   r&   r'   r         r   c                   @   r!   )	_Multinomiala3  
    Constrain to nonnegative integer values summing to at most an upper bound.

    Note due to limitations of the Multinomial distribution, this currently
    checks the weaker condition ``value.sum(-1) <= upper_bound``. In the future
    this may be strengthened to ``value.sum(-1) == upper_bound``.
    Tr)   c                 C   s
   || _ d S r7   rx   rv   r&   r&   r'   r;     rK   z_Multinomial.__init__c                 C   s"   |dkj dd|jdd| jk@ S )Nr   rT   r   )rW   ra   rh   rD   r&   r&   r'   r(     s   "z_Multinomial.checkN)r+   r/   r0   r1   r2   r3   r;   r(   r&   r&   r&   r'   r     s    r   c                   @   r]   )_LowerTriangularz8
    Constrain to lower-triangular square matrices.
       c                 C   s.   |  }||k|jd d d dd S )NrS   rT   r   )trilviewrV   min)r$   r%   
value_trilr&   r&   r'   r(     s   &z_LowerTriangular.checkNr   r&   r&   r&   r'   r     r_   r   c                   @   r]   )_LowerCholeskyzP
    Constrain to lower-triangular square matrices with positive diagonals.
    r   c                 C   sR   |  }||k|jd d d dd }|jddddkdd }||@ S )Nr   rS   rT   r   )Zdim1Zdim2)r   r   rV   r   Zdiagonal)r$   r%   r   r   Zpositive_diagonalr&   r&   r'   r(     s
   $z_LowerCholesky.checkNr   r&   r&   r&   r'   r     r_   r   c                   @   r]   )_CorrCholeskyz}
    Constrain to lower-triangular square matrices with positive diagonals and each
    row vector being of unit length.
    r   c                 C   sZ   t |jj|d d }t jj| dd}|d  	|j
dd}t ||@ S )NrT   
   r         ?)r   ZfinfodtypeZepssizelinalgZnormdetachr   lerW   r   r(   )r$   r%   ZtolZrow_normZunit_row_normr&   r&   r'   r(     s
   z_CorrCholesky.checkNr   r&   r&   r&   r'   r     r   r   c                   @   r]   )_Squarez'
    Constrain to square matrices.
    r   c                 C   s0   t j|jd d |jd |jd kt j|jdS )Nr   rT   )r   Z
fill_valuer   device)r   fullrV   boolr   r#   r&   r&   r'   r(     s   z_Square.checkNr   r&   r&   r&   r'   r     r_   r   c                           e Zd ZdZ fddZ  ZS )
_Symmetricz1
    Constrain to Symmetric square matrices.
    c                    s6   t  |}| s|S tj||jddddS )Nr   )Zatolr   rT   )r:   r(   rW   r   iscloseZmT)r$   r%   Zsquare_checkr=   r&   r'   r(     s   z_Symmetric.checkr+   r/   r0   r1   r(   rH   r&   r&   r=   r'   r         r   c                       r   )_PositiveSemidefinitez6
    Constrain to positive-semidefinite matrices.
    c                    s0   t  |}| s|S tj|ddS )Nr   rT   )r:   r(   rW   r   r   Zeigvalshger$   r%   Z	sym_checkr=   r&   r'   r(     s   z_PositiveSemidefinite.checkr   r&   r&   r=   r'   r     r   r   c                       r   )_PositiveDefinitez2
    Constrain to positive-definite matrices.
    c                    s,   t  |}| s|S tj|jdS rO   )r:   r(   rW   r   r   Zcholesky_exinforb   r   r=   r&   r'   r(   )  s   z_PositiveDefinite.checkr   r&   r&   r=   r'   r   $  r   r   c                       sB   e Zd ZdZd fdd	Zedd Zedd	 Zd
d Z  Z	S )_Catz
    Constraint functor that applies a sequence of constraints
    `cseq` at the submatrices at dimension `dim`,
    each of size `lengths[dim]`, in a way compatible with :func:`torch.cat`.
    r   Nc                    sn   t dd |D sJ t|| _|d u rdgt| j }t|| _t| jt| jks-J || _t   d S )Nc                 s       | ]}t |tV  qd S r7   rI   r   .0cr&   r&   r'   	<genexpr>8      z _Cat.__init__.<locals>.<genexpr>r)   )rW   listcseqlenlengthsrU   r:   r;   )r$   r   rU   r   r=   r&   r'   r;   7  s   

z_Cat.__init__c                 C      t dd | jD S )Nc                 s       | ]}|j V  qd S r7   r2   r   r&   r&   r'   r   C      z#_Cat.is_discrete.<locals>.<genexpr>anyr   r,   r&   r&   r'   r2   A     z_Cat.is_discretec                 C   r   )Nc                 s   r   r7   r3   r   r&   r&   r'   r   G  r   z!_Cat.event_dim.<locals>.<genexpr>)maxr   r,   r&   r&   r'   r3   E  r   z_Cat.event_dimc                 C   s~   |   | j   kr|  k sJ  J g }d}t| j| jD ]\}}|| j ||}||| || }qt|| j S rO   )	rU   zipr   r   Znarrowappendr(   r   r   )r$   r%   Zchecksstartconstrlengthvr&   r&   r'   r(   I  s   (
z
_Cat.check)r   N
r+   r/   r0   r1   r;   rG   r2   r3   r(   rH   r&   r&   r=   r'   r   0  s    


r   c                       sB   e Zd ZdZd fdd	Zedd Zedd Zd	d
 Z  Z	S )_Stackz
    Constraint functor that applies a sequence of constraints
    `cseq` at the submatrices at dimension `dim`,
    in a way compatible with :func:`torch.stack`.
    r   c                    s4   t dd |D sJ t|| _|| _t   d S )Nc                 s   r   r7   r   r   r&   r&   r'   r   \  r   z"_Stack.__init__.<locals>.<genexpr>)rW   r   r   rU   r:   r;   )r$   r   rU   r=   r&   r'   r;   [  s   
z_Stack.__init__c                 C   r   )Nc                 s   r   r7   r   r   r&   r&   r'   r   c  r   z%_Stack.is_discrete.<locals>.<genexpr>r   r,   r&   r&   r'   r2   a  r   z_Stack.is_discretec                 C   s.   t dd | jD }| j| dk r|d7 }|S )Nc                 s   r   r7   r   r   r&   r&   r'   r   g  r   z#_Stack.event_dim.<locals>.<genexpr>r   r)   )r   r   rU   )r$   rU   r&   r&   r'   r3   e  s   z_Stack.event_dimc                    sh       j   kr  k sJ  J  fddt j D }tdd t| jD  j S )Nc                    s   g | ]	}  j|qS r&   )selectrU   )r   ir#   r&   r'   
<listcomp>n      z _Stack.check.<locals>.<listcomp>c                 S   s   g | ]	\}}| |qS r&   )r(   )r   r   r   r&   r&   r'   r   p  r   )rU   ranger   r   r   r   r   )r$   r%   vsr&   r#   r'   r(   l  s
   ( z_Stack.check)r   r   r&   r&   r=   r'   r   T  s    

r   r)   g        r   )<r1   r   __all__r   r4   r   rG   rL   rN   r^   r`   re   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r	   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   sv    !#/-(	$!

