§
    Ÿ²ÅjsN  ã                   óœ  — d Z ddlZg d¢Z G d„ d¦  «        Z G d„ de¦  «        Zd„ Z G d	„ d
ee¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z	 G d„ de¦  «        Z
 G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d e¦  «        Z G d!„ d"e¦  «        Z G d#„ d$e¦  «        Z G d%„ d&e¦  «        Z G d'„ d(e¦  «        Z G d)„ d*e¦  «        Z G d+„ d,e¦  «        Z G d-„ d.e¦  «        Z G d/„ d0e¦  «        Z G d1„ d2e¦  «        Z G d3„ d4e¦  «        Z G d5„ d6e¦  «        Z G d7„ d8e¦  «        Z e¦   «         ZeZ eZ! e	¦   «         Z" e
¦   «         Z# ed¦  «        Z$ ed9¦  «        Z%eZ& e¦   «         Z' e!e'd9¦  «        Z( ed:¦  «        Z) ed:¦  «        Z*eZ+eZ,eZ-eZ. ed:d;¦  «        Z/eZ0eZ1 e¦   «         Z2 e¦   «         Z3 e¦   «         Z4 e¦   «         Z5 e¦   «         Z6 e¦   «         Z7 e¦   «         Z8 e¦   «         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„ Z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                 ó   — t           ‚)z“
        Returns a byte tensor of ``sample_shape + batch_shape`` indicating
        whether each event in value satisfies this constraint.
        )ÚNotImplementedError©ÚselfÚvalues     úPC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/constraints.pyÚcheckzConstraint.check[   s
   € õ
 "Ð!ó    c                 ó0   — | j         j        dd …         dz   S )Né   z())Ú	__class__Ú__name__©r&   s    r(   Ú__repr__zConstraint.__repr__b   s   € ØŒ~Ô& q r rÔ*¨TÑ1Ð1r*   N)r.   Ú
__module__Ú__qualname__Ú__doc__Úis_discreteÚ	event_dimr)   r0   © r*   r(   r   r   I   sH   € € € € € ðð ð €KØ€Ið"ð "ð "ð2ð 2ð 2ð 2ð 2r*   r   c                   ój   ‡ — e Zd ZdZeedœˆ fd„
Zed„ ¦   «         Zed„ ¦   «         Zeedœd„Z	d„ Z
ˆ x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.
    ©r4   r5   c                ód   •— || _         || _        t          ¦   «                              ¦   «          d S ©N)Ú_is_discreteÚ
_event_dimÚsuperÚ__init__)r&   r4   r5   r-   s      €r(   r?   z_Dependent.__init__t   s.   ø€ Ø'ˆÔØ#ˆŒÝ‰Œ×ÒÑÔÐÐÐr*   c                 óJ   — | j         t          u rt          d¦  «        ‚| j         S )Nz,.is_discrete cannot be determined statically)r<   ÚNotImplementedr$   r/   s    r(   r4   z_Dependent.is_discretey   s(   € àÔ¥Ð.Ð.Ý%Ð&TÑUÔUÐUØÔ Ð r*   c                 óJ   — | j         t          u rt          d¦  «        ‚| j         S )Nz*.event_dim cannot be determined statically)r=   rA   r$   r/   s    r(   r5   z_Dependent.event_dim   s&   € àŒ?�nÐ,Ð,Ý%Ð&RÑSÔSÐSØŒÐr*   c                ód   — |t           u r| j        }|t           u r| j        }t          ||¬¦  «        S )z‡
        Support for syntax to customize static attributes::

            constraints.dependent(is_discrete=True, event_dim=1)
        r9   )rA   r<   r=   r8   )r&   r4   r5   s      r(   Ú__call__z_Dependent.__call__…   s<   € ð �.Ð(Ð(ØÔ+ˆKØ�Ð&Ð&ØœˆIÝ k¸YÐGÑGÔGÐGr*   c                 ó    — t          d¦  «        ‚)Nz1Cannot determine validity of dependent constraint)Ú
ValueError©r&   Úxs     r(   r)   z_Dependent.check‘   s   € ÝÐLÑMÔMÐMr*   )r.   r1   r2   r3   rA   r?   Úpropertyr4   r5   rD   r)   Ú__classcell__©r-   s   @r(   r8   r8   f   sÄ   ø€ € € € € ðð ð '5Àð ð ð ð ð ð ð ð
 ð!ð !ñ „Xð!ð
 ðð ñ „Xðð
 '5Àð 
Hð 
Hð 
Hð 
Hð 
HðNð Nð Nð Nð Nð Nð Nr*   r8   c                 ó,   — t          | t          ¦  «        S )aÒ  
    Checks if ``constraint`` is a ``_Dependent`` object.

    Args:
        constraint : A ``Constraint`` object.

    Returns:
        ``bool``: True if ``constraint`` can be refined to the type ``_Dependent``, False otherwise.

    Examples:
        >>> import torch
        >>> from torch.distributions import Bernoulli
        >>> from torch.distributions.constraints import is_dependent

        >>> dist = Bernoulli(probs = torch.tensor([0.6], requires_grad=True))
        >>> constraint1 = dist.arg_constraints["probs"]
        >>> constraint2 = dist.arg_constraints["logits"]

        >>> for constraint in [constraint1, constraint2]:
        >>>     if is_dependent(constraint):
        >>>         continue
    )Ú
isinstancer8   )Ú
constraints    r(   r   r   •   s   € õ. �j¥*Ñ-Ô-Ð-r*   c                   ó4   ‡ — e Zd ZdZ	 deedœˆ fd„Zd„ Zˆ x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.
    Nr9   c                óf   •— t          ¦   «                              |¦  «         || _        || _        d S r;   )r>   r?   r<   r=   )r&   Úfnr4   r5   r-   s       €r(   r?   z_DependentProperty.__init__È   s0   ø€ õ 	‰Œ×Ò˜ÑÔÐØ'ˆÔØ#ˆŒˆˆr*   c                 ó:   — t          || j        | j        ¬¦  «        S )zÄ
        Support for syntax to customize static attributes::

            @constraints.dependent_property(is_discrete=True, event_dim=1)
            def support(self):
                ...
        r9   )rP   r<   r=   )r&   rR   s     r(   rD   z_DependentProperty.__call__Ï   s'   € õ "Ø˜DÔ-¸¼ð
ñ 
ô 
ð 	
r*   r;   )r.   r1   r2   r3   rA   r?   rD   rJ   rK   s   @r(   rP   rP   ¯   sj   ø€ € € € € ðð ð2 ð$Ø&4Àð$ð $ð $ð $ð $ð $ð $ð

ð 

ð 

ð 

ð 

ð 

ð 

r*   rP   c                   óZ   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Z	ˆ x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                 óÐ   •— t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|dk    sJ ‚|| _        || _        t          ¦   «                              ¦   «          d S ©Nr   )rM   r   ÚintÚbase_constraintÚreinterpreted_batch_ndimsr>   r?   )r&   rY   rZ   r-   s      €r(   r?   z_IndependentConstraint.__init__ã   sm   ø€ Ý˜/­:Ñ6Ô6Ð6Ð6Ð6ÝÐ3µSÑ9Ô9Ð9Ð9Ð9Ø(¨AÒ-Ð-Ð-Ð-Ø.ˆÔØ)BˆÔ&Ý‰Œ×ÒÑÔÐÐÐr*   c                 ó   — | j         j        S r;   )rY   r4   r/   s    r(   r4   z"_IndependentConstraint.is_discreteë   s   € àÔ#Ô/Ð/r*   c                 ó*   — | j         j        | j        z   S r;   )rY   r5   rZ   r/   s    r(   r5   z _IndependentConstraint.event_dimï   s   € àÔ#Ô-°Ô0NÑNÐNr*   c                 ó’  — | j                              |¦  «        }|                     ¦   «         | j        k     r;| j         j        | j        z   }t          d|› d|                     ¦   «         › �¦  «        ‚|                     |j        d |                     ¦   «         | j        z
  …         dz   ¦  «        }|                     d¦  «        }|S )NzExpected value.dim() >= z	 but got ©éÿÿÿÿr_   )	rY   r)   ÚdimrZ   r5   rF   ÚreshapeÚshapeÚall)r&   r'   ÚresultÚexpecteds       r(   r)   z_IndependentConstraint.checkó   s¾   € ØÔ%×+Ò+¨EÑ2Ô2ˆØ�:Š:‰<Œ<˜$Ô8Ò8Ð8ØÔ+Ô5¸Ô8VÑVˆHÝØK¨8ÐKÐK¸e¿iºi¹k¼kÐKÐKñô ð ð —’ØŒLÐH˜6Ÿ:š:™<œ<¨$Ô*HÑHÐHÔIÈEÑQñ
ô 
ˆð —’˜B‘”ˆØˆr*   c                 ój   — | j         j        dd …         › dt          | j        ¦  «        › d| j        › d�S )Nr,   ú(z, ú))r-   r.   ÚreprrY   rZ   r/   s    r(   r0   z_IndependentConstraint.__repr__   s=   € Ø”.Ô)¨!¨"¨"Ô-ÐoÐoµ°TÔ5IÑ0JÔ0JÐoÐoÈdÔNlÐoÐoÐoÐor*   )r.   r1   r2   r3   r?   rI   r4   r5   r)   r0   rJ   rK   s   @r(   rU   rU   Ü   s    ø€ € € € € ðð ðð ð ð ð ð ð0ð 0ñ „Xð0ð ðOð Oñ „XðOðð ð ðpð pð pð pð pð pð pr*   rU   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_Booleanz/
    Constrain to the two values `{0, 1}`.
    Tc                 ó   — |dk    |dk    z  S )Nr   r,   r6   r%   s     r(   r)   z_Boolean.check  s   € Ø˜’
˜u¨šzÑ*Ð*r*   N)r.   r1   r2   r3   r4   r)   r6   r*   r(   rk   rk     s4   € € € € € ðð ð €Kð+ð +ð +ð +ð +r*   rk   c                   ó    — e Zd ZdZdZdZd„ ZdS )Ú_OneHotz'
    Constrain to one-hot vectors.
    Tr,   c                 óœ   — |dk    |dk    z  }|                      d¦  «                             d¦  «        }|                     d¦  «        |z  S )Nr   r,   r_   )ÚsumÚeqrc   )r&   r'   Ú
is_booleanÚis_normalizeds       r(   r)   z_OneHot.check  sH   € Ø˜q’j U¨a¢ZÑ0ˆ
ØŸ	š	 "™œ×(Ò(¨Ñ+Ô+ˆØ�~Š~˜bÑ!Ô! MÑ1Ð1r*   N)r.   r1   r2   r3   r4   r5   r)   r6   r*   r(   rn   rn     s9   € € € € € ðð ð €KØ€Ið2ð 2ð 2ð 2ð 2r*   rn   c                   ó2   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_IntegerIntervalzH
    Constrain to an integer interval `[lower_bound, upper_bound]`.
    Tc                 ód   •— || _         || _        t          ¦   «                              ¦   «          d S r;   ©Úlower_boundÚupper_boundr>   r?   ©r&   rx   ry   r-   s      €r(   r?   z_IntegerInterval.__init__$  ó/   ø€ Ø&ˆÔØ&ˆÔÝ‰Œ×ÒÑÔÐÐÐr*   c                 óD   — |dz  dk    | j         |k    z  || j        k    z  S ©Nr,   r   ©rx   ry   r%   s     r(   r)   z_IntegerInterval.check)  s,   € à�Q‰Y˜!Š^ Ô 0°EÒ 9Ñ:¸eÀtÔGWÒ>WÑXð	
r*   c                 óZ   — | j         j        dd …         }|d| j        › d| j        › d�z  }|S ©Nr,   ú(lower_bound=z, upper_bound=rh   ©r-   r.   rx   ry   ©r&   Ú
fmt_strings     r(   r0   z_IntegerInterval.__repr__.  óC   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØØO˜DÔ,ÐOÐO¸DÔ<LÐOÐOÐOñ	
ˆ
ð Ðr*   ©	r.   r1   r2   r3   r4   r?   r)   r0   rJ   rK   s   @r(   ru   ru     sg   ø€ € € € € ðð ð €Kðð ð ð ð ð

ð 
ð 
ð
ð ð ð ð ð ð r*   ru   c                   ó2   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_IntegerLessThanzA
    Constrain to an integer interval `(-inf, upper_bound]`.
    Tc                 óV   •— || _         t          ¦   «                              ¦   «          d S r;   ©ry   r>   r?   ©r&   ry   r-   s     €r(   r?   z_IntegerLessThan.__init__=  ó'   ø€ Ø&ˆÔÝ‰Œ×ÒÑÔÐÐÐr*   c                 ó,   — |dz  dk    || j         k    z  S r}   ©ry   r%   s     r(   r)   z_IntegerLessThan.checkA  ó   € Ø˜‘	˜Q’ 5¨DÔ,<Ò#<Ñ=Ð=r*   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S ©Nr,   z(upper_bound=rh   ©r-   r.   ry   rƒ   s     r(   r0   z_IntegerLessThan.__repr__D  ó4   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØÐ9 dÔ&6Ð9Ð9Ð9Ñ9ˆ
ØÐr*   r†   rK   s   @r(   rˆ   rˆ   6  óg   ø€ € € € € ðð ð €Kðð ð ð ð ð>ð >ð >ðð ð ð ð ð ð r*   rˆ   c                   ó2   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_IntegerGreaterThanz@
    Constrain to an integer interval `[lower_bound, inf)`.
    Tc                 óV   •— || _         t          ¦   «                              ¦   «          d S r;   ©rx   r>   r?   ©r&   rx   r-   s     €r(   r?   z_IntegerGreaterThan.__init__Q  rŒ   r*   c                 ó,   — |dz  dk    || j         k    z  S r}   ©rx   r%   s     r(   r)   z_IntegerGreaterThan.checkU  r�   r*   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S ©Nr,   r�   rh   ©r-   r.   rx   rƒ   s     r(   r0   z_IntegerGreaterThan.__repr__X  r“   r*   r†   rK   s   @r(   r–   r–   J  r”   r*   r–   c                   ó   — e Zd ZdZd„ ZdS )Ú_RealzF
    Trivially constrain to the extended real line `[-inf, inf]`.
    c                 ó   — ||k    S r;   r6   r%   s     r(   r)   z_Real.checkc  s   € Ø˜Š~Ðr*   N)r.   r1   r2   r3   r)   r6   r*   r(   r    r    ^  s-   € € € € € ðð ðð ð ð ð r*   r    c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_GreaterThanz=
    Constrain to a real half line `(lower_bound, inf]`.
    c                 óV   •— || _         t          ¦   «                              ¦   «          d S r;   r˜   r™   s     €r(   r?   z_GreaterThan.__init__l  rŒ   r*   c                 ó   — | j         |k     S r;   r›   r%   s     r(   r)   z_GreaterThan.checkp  s   € ØÔ %Ò'Ð'r*   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S r�   rž   rƒ   s     r(   r0   z_GreaterThan.__repr__s  r“   r*   ©r.   r1   r2   r3   r?   r)   r0   rJ   rK   s   @r(   r£   r£   g  ó`   ø€ € € € € ðð ðð ð ð ð ð(ð (ð (ðð ð ð ð ð ð r*   r£   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_GreaterThanEqz=
    Constrain to a real half line `[lower_bound, inf)`.
    c                 óV   •— || _         t          ¦   «                              ¦   «          d S r;   r˜   r™   s     €r(   r?   z_GreaterThanEq.__init__~  rŒ   r*   c                 ó   — | j         |k    S r;   r›   r%   s     r(   r)   z_GreaterThanEq.check‚  s   € ØÔ 5Ò(Ð(r*   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S r�   rž   rƒ   s     r(   r0   z_GreaterThanEq.__repr__…  r“   r*   r§   rK   s   @r(   rª   rª   y  s`   ø€ € € € € ðð ðð ð ð ð ð)ð )ð )ðð ð ð ð ð ð r*   rª   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú	_LessThanz>
    Constrain to a real half line `[-inf, upper_bound)`.
    c                 óV   •— || _         t          ¦   «                              ¦   «          d S r;   rŠ   r‹   s     €r(   r?   z_LessThan.__init__�  rŒ   r*   c                 ó   — || j         k     S r;   rŽ   r%   s     r(   r)   z_LessThan.check”  s   € Ø�tÔ'Ò'Ð'r*   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S r‘   r’   rƒ   s     r(   r0   z_LessThan.__repr__—  r“   r*   r§   rK   s   @r(   r¯   r¯   ‹  r¨   r*   r¯   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú	_IntervalzD
    Constrain to a real interval `[lower_bound, upper_bound]`.
    c                 ód   •— || _         || _        t          ¦   «                              ¦   «          d S r;   rw   rz   s      €r(   r?   z_Interval.__init__¢  r{   r*   c                 ó0   — | j         |k    || j        k    z  S r;   r~   r%   s     r(   r)   z_Interval.check§  s   € ØÔ  EÒ)¨e°tÔ7GÒ.GÑHÐHr*   c                 óZ   — | j         j        dd …         }|d| j        › d| j        › d�z  }|S r€   r‚   rƒ   s     r(   r0   z_Interval.__repr__ª  r…   r*   r§   rK   s   @r(   r´   r´   �  sc   ø€ € € € € ðð ðð ð ð ð ð
Ið Ið Iðð ð ð ð ð ð r*   r´   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_HalfOpenIntervalzD
    Constrain to a real interval `[lower_bound, upper_bound)`.
    c                 ód   •— || _         || _        t          ¦   «                              ¦   «          d S r;   rw   rz   s      €r(   r?   z_HalfOpenInterval.__init__·  r{   r*   c                 ó0   — | j         |k    || j        k     z  S r;   r~   r%   s     r(   r)   z_HalfOpenInterval.check¼  s   € ØÔ  EÒ)¨e°dÔ6FÒ.FÑGÐGr*   c                 óZ   — | j         j        dd …         }|d| j        › d| j        › d�z  }|S r€   r‚   rƒ   s     r(   r0   z_HalfOpenInterval.__repr__¿  r…   r*   r§   rK   s   @r(   r¹   r¹   ²  sc   ø€ € € € € ðð ðð ð ð ð ð
Hð Hð Hðð ð ð ð ð ð r*   r¹   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_Simplexz€
    Constrain to the unit simplex in the innermost (rightmost) dimension.
    Specifically: `x >= 0` and `x.sum(-1) == 1`.
    r,   c                 ó”   — t          j        |dk    d¬¦  «        |                     d¦  «        dz
                       ¦   «         dk     z  S )Nr   r_   ©r`   r,   ç�íµ ÷Æ°>)Útorchrc   rp   Úabsr%   s     r(   r)   z_Simplex.checkÏ  s@   € ÝŒy˜ !š¨Ð,Ñ,Ô,°·²¸2±´ÀÑ1B×0GÒ0GÑ0IÔ0IÈDÒ0PÑQÐQr*   N©r.   r1   r2   r3   r5   r)   r6   r*   r(   r¾   r¾   Ç  s9   € € € € € ðð ð
 €IðRð Rð Rð Rð Rr*   r¾   c                   ó&   — e Zd ZdZdZdZd„ Zd„ ZdS )Ú_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                 ó   — || _         d S r;   rŽ   )r&   ry   s     r(   r?   z_Multinomial.__init__ß  s   € Ø&ˆÔÐÐr*   c                 óv   — |dk                          d¬¦  «        |                     d¬¦  «        | j        k    z  S )Nr   r_   rÀ   )rc   rp   ry   rG   s     r(   r)   z_Multinomial.checkâ  s3   € Ø�Q’�|Š| ˆ|Ñ#Ô# q§u¢u° u¡}¤}¸Ô8HÒ'HÑIÐIr*   N)r.   r1   r2   r3   r4   r5   r?   r)   r6   r*   r(   rÆ   rÆ   Ó  sM   € € € € € ðð ð €KØ€Ið'ð 'ð 'ðJð Jð Jð Jð Jr*   rÆ   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_LowerTriangularz8
    Constrain to lower-triangular square matrices.
    é   c                 ó®   — |                      ¦   «         }||k                         |j        d d…         dz   ¦  «                             d¦  «        d         S )Néþÿÿÿr^   r_   r   )ÚtrilÚviewrb   Úmin)r&   r'   Ú
value_trils      r(   r)   z_LowerTriangular.checkí  sK   € Ø—Z’Z‘\”\ˆ
Ø˜eÒ#×)Ò)¨%¬+°c°r°cÔ*:¸UÑ*BÑCÔC×GÒGÈÑKÔKÈAÔNÐNr*   NrÄ   r6   r*   r(   rÊ   rÊ   æ  s9   € € € € € ðð ð €IðOð Oð Oð Oð Or*   rÊ   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_LowerCholeskyzP
    Constrain to lower-triangular square matrices with positive diagonals.
    rË   c                 ó   — |                      ¦   «         }||k                         |j        d d…         dz   ¦  «                             d¦  «        d         }|                     dd¬¦  «        dk                         d¦  «        d         }||z  S )NrÍ   r^   r_   r   )Údim1Údim2)rÎ   rÏ   rb   rÐ   Údiagonal)r&   r'   rÑ   r   Úpositive_diagonals        r(   r)   z_LowerCholesky.checkù  s‰   € Ø—Z’Z‘\”\ˆ
à˜5Ò ×&Ò& u¤{°3°B°3Ô'7¸%Ñ'?Ñ@Ô@×DÒDÀRÑHÔHÈÔKð 	ð #Ÿ^š^°¸"˜^Ñ=Ô=ÀÒA×FÒFÀrÑJÔJÈ1ÔMÐØÐ"3Ñ3Ð3r*   NrÄ   r6   r*   r(   rÓ   rÓ   ò  s4   € € € € € ðð ð €Ið4ð 4ð 4ð 4ð 4r*   rÓ   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_CorrCholeskyz}
    Constrain to lower-triangular square matrices with positive diagonals and each
    row vector being of unit length.
    rË   c                 óš  — t          j        |j        ¦  «        j        |                     d¦  «        z  dz  }t           j                             |                     ¦   «         d¬¦  «        }|dz
                       ¦   «          	                    |¦  «         
                    d¬¦  «        }t          ¦   «                              |¦  «        |z  S )Nr_   é
   rÀ   ç      ð?)rÂ   ÚfinfoÚdtypeÚepsÚsizeÚlinalgÚnormÚdetachrÃ   Úlerc   rÓ   r)   )r&   r'   ÚtolÚrow_normÚunit_row_norms        r(   r)   z_CorrCholesky.check  s¤   € åŒK˜œÑ$Ô$Ô(¨5¯:ª:°b©>¬>Ñ9¸BÑ>ð 	õ ”<×$Ò$ U§\¢\¡^¤^¸Ð$Ñ<Ô<ˆØ! C™×,Ò,Ñ.Ô.×1Ò1°#Ñ6Ô6×:Ò:¸rÐ:ÑBÔBˆÝÑÔ×%Ò% eÑ,Ô,¨}Ñ<Ð<r*   NrÄ   r6   r*   r(   rÚ   rÚ     s4   € € € € € ðð ð
 €Ið=ð =ð =ð =ð =r*   rÚ   c                   ó   — e Zd ZdZdZd„ ZdS )Ú_Squarez'
    Constrain to square matrices.
    rË   c                 óž   — t          j        |j        d d…         |j        d         |j        d         k    t           j        |j        ¬¦  «        S )NrÍ   r_   )rá   Ú
fill_valuerß   Údevice)rÂ   Úfullrb   Úboolrí   r%   s     r(   r)   z_Square.check  sG   € ÝŒzØ”˜S˜b˜SÔ!Øœ Bœ¨5¬;°r¬?Ò:Ý”*Ø”<ð	
ñ 
ô 
ð 	
r*   NrÄ   r6   r*   r(   rê   rê     s4   € € € € € ðð ð €Ið
ð 
ð 
ð 
ð 
r*   rê   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú
_Symmetricz1
    Constrain to Symmetric square matrices.
    c                 óö   •— t          ¦   «                              |¦  «        }|                     ¦   «         s|S t          j        ||j        d¬¦  «                             d¦  «                             d¦  «        S )NrÁ   )ÚatolrÍ   r_   )r>   r)   rc   rÂ   ÚiscloseÚmT)r&   r'   Úsquare_checkr-   s      €r(   r)   z_Symmetric.check)  sg   ø€ Ý‘w”w—}’} UÑ+Ô+ˆØ×ÒÑ!Ô!ð 	 ØÐÝŒ}˜U E¤H°4Ð8Ñ8Ô8×<Ò<¸RÑ@Ô@×DÒDÀRÑHÔHÐHr*   ©r.   r1   r2   r3   r)   rJ   rK   s   @r(   rñ   rñ   $  sK   ø€ € € € € ðð ðIð Ið Ið Ið Ið Ið Ið Ið Ir*   rñ   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_PositiveSemidefinitez6
    Constrain to positive-semidefinite matrices.
    c                 óü   •— t          ¦   «                              |¦  «        }|                     ¦   «         s|S t          j                             |¦  «                             d¦  «                             d¦  «        S )Nr   r_   )r>   r)   rc   rÂ   râ   ÚeigvalshÚge©r&   r'   Ú	sym_checkr-   s      €r(   r)   z_PositiveSemidefinite.check5  s`   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×$Ò$ UÑ+Ô+×.Ò.¨qÑ1Ô1×5Ò5°bÑ9Ô9Ð9r*   r÷   rK   s   @r(   rù   rù   0  óB   ø€ € € € € ðð ð:ð :ð :ð :ð :ð :ð :ð :ð :r*   rù   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_PositiveDefinitez2
    Constrain to positive-definite matrices.
    c                 óà   •— t          ¦   «                              |¦  «        }|                     ¦   «         s|S t          j                             |¦  «        j                             d¦  «        S rW   )r>   r)   rc   rÂ   râ   Úcholesky_exÚinforq   rý   s      €r(   r)   z_PositiveDefinite.checkA  sU   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×'Ò'¨Ñ.Ô.Ô3×6Ò6°qÑ9Ô9Ð9r*   r÷   rK   s   @r(   r  r  <  rÿ   r*   r  c                   óV   ‡ — e Zd ZdZdˆ fd„	Zed„ ¦   «         Zed„ ¦   «         Zd„ Zˆ x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                 óh  •— t          d„ |D ¦   «         ¦  «        sJ ‚t          |¦  «        | _        |€dgt          | j        ¦  «        z  }t          |¦  «        | _        t          | j        ¦  «        t          | j        ¦  «        k    sJ ‚|| _        t          ¦   «                              ¦   «          d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r;   ©rM   r   ©Ú.0Úcs     r(   ú	<genexpr>z _Cat.__init__.<locals>.<genexpr>P  ó,   è è € Ð;Ð;°•:˜a¥Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;r*   r,   )rc   ÚlistÚcseqÚlenÚlengthsr`   r>   r?   )r&   r  r`   r  r-   s       €r(   r?   z_Cat.__init__O  sŸ   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ý˜‘J”JˆŒ	Øˆ?Ø�c�C ¤	™NœNÑ*ˆGÝ˜G‘}”}ˆŒÝ�4”<Ñ Ô ¥C¨¬	¡N¤NÒ2Ð2Ð2Ð2ØˆŒÝ‰Œ×ÒÑÔÐÐÐr*   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r;   ©r4   r
  s     r(   r  z#_Cat.is_discrete.<locals>.<genexpr>[  ó$   è è € Ð4Ð4 Q�1”=Ð4Ð4Ð4Ð4Ð4Ð4r*   ©Úanyr  r/   s    r(   r4   z_Cat.is_discreteY  ó!   € åÐ4Ð4¨$¬)Ð4Ñ4Ô4Ñ4Ô4Ð4r*   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r;   ©r5   r
  s     r(   r  z!_Cat.event_dim.<locals>.<genexpr>_  s$   è è € Ð2Ð2 1�1”;Ð2Ð2Ð2Ð2Ð2Ð2r*   )Úmaxr  r/   s    r(   r5   z_Cat.event_dim]  s!   € åÐ2Ð2¨¬	Ð2Ñ2Ô2Ñ2Ô2Ð2r*   c                 ó†  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚g }d}t          | j        | j        ¦  «        D ]N\  }}|                     | j         ||¦  «        }|                     |                     |¦  «        ¦  «         ||z   }ŒOt          j        || j         ¦  «        S rW   )	r`   Úzipr  r  ÚnarrowÚappendr)   rÂ   r   )r&   r'   ÚchecksÚstartÚconstrÚlengthÚvs          r(   r)   z
_Cat.checka  s¸   € Ø—	’	‘”ˆ|˜tœxÐ5Ð5Ò5Ð5¨%¯)ª)©+¬+Ò5Ð5Ð5Ð5Ð5Ð5ØˆØˆÝ! $¤)¨T¬\Ñ:Ô:ð 	#ð 	#‰NˆF�FØ—’˜TœX u¨fÑ5Ô5ˆAØ�MŠM˜&Ÿ,š, q™/œ/Ñ*Ô*Ð*Ø˜F‘NˆEˆEÝŒy˜ ¤Ñ*Ô*Ð*r*   )r   N©
r.   r1   r2   r3   r?   rI   r4   r5   r)   rJ   rK   s   @r(   r  r  H  sŒ   ø€ € € € € ðð ðð ð ð ð ð ð ð5ð 5ñ „Xð5ð ð3ð 3ñ „Xð3ð+ð +ð +ð +ð +ð +ð +r*   r  c                   óV   ‡ — e Zd ZdZdˆ fd„	Zed„ ¦   «         Zed„ ¦   «         Zd„ Zˆ x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                 ó´   •— t          d„ |D ¦   «         ¦  «        sJ ‚t          |¦  «        | _        || _        t	          ¦   «                              ¦   «          d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r;   r	  r
  s     r(   r  z"_Stack.__init__.<locals>.<genexpr>t  r  r*   )rc   r  r  r`   r>   r?   )r&   r  r`   r-   s      €r(   r?   z_Stack.__init__s  sV   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ý˜‘J”JˆŒ	ØˆŒÝ‰Œ×ÒÑÔÐÐÐr*   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r;   r  r
  s     r(   r  z%_Stack.is_discrete.<locals>.<genexpr>{  r  r*   r  r/   s    r(   r4   z_Stack.is_discretey  r  r*   c                 óh   — t          d„ | j        D ¦   «         ¦  «        }| j        |z   dk     r|dz  }|S )Nc              3   ó$   K  — | ]}|j         V — Œd S r;   r  r
  s     r(   r  z#_Stack.event_dim.<locals>.<genexpr>  s$   è è € Ð1Ð1 !�!”+Ð1Ð1Ð1Ð1Ð1Ð1r*   r   r,   )r  r  r`   )r&   r`   s     r(   r5   z_Stack.event_dim}  s?   € åÐ1Ð1 t¤yÐ1Ñ1Ô1Ñ1Ô1ˆØŒ8�c‰>˜AÒÐØ�1‰HˆCØˆ
r*   c                 óR  ‡ ‡— ‰                      ¦   «          ‰ j         cxk    r‰                      ¦   «         k     sn J ‚ˆ ˆfd„t          ‰                     ‰ j         ¦  «        ¦  «        D ¦   «         }t          j        d„ t          |‰ j        ¦  «        D ¦   «         ‰ j         ¦  «        S )Nc                 óF   •— g | ]}‰                      ‰j        |¦  «        ‘ŒS r6   )Úselectr`   )r  Úir&   r'   s     €€r(   ú
<listcomp>z _Stack.check.<locals>.<listcomp>†  s)   ø€ ÐMÐMÐM¨Aˆe�lŠl˜4œ8 QÑ'Ô'ÐMÐMÐMr*   c                 ó>   — g | ]\  }}|                      |¦  «        ‘ŒS r6   )r)   )r  r&  r$  s      r(   r4  z _Stack.check.<locals>.<listcomp>ˆ  s&   € ÐAÐAÐA¡  FˆV�\Š\˜!‰_Œ_ÐAÐAÐAr*   )r`   Úrangerá   rÂ   r   r  r  )r&   r'   Úvss   `` r(   r)   z_Stack.check„  s¤   øø€ Ø—	’	‘”ˆ|˜tœxÐ5Ð5Ò5Ð5¨%¯)ª)©+¬+Ò5Ð5Ð5Ð5Ð5Ð5ØMÐMÐMÐMÐMµ°u·z²zÀ$Ä(Ñ7KÔ7KÑ1LÔ1LÐMÑMÔMˆÝŒ{ØAÐA­c°"°d´iÑ.@Ô.@ÐAÑAÔAÀ4Ä8ñ
ô 
ð 	
r*   )r   r'  rK   s   @r(   r)  r)  l  sŒ   ø€ € € € € ðð ðð ð ð ð ð ð ð5ð 5ñ „Xð5ð ðð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
r*   r)  r,   g        rÝ   )<r3   rÂ   Ú__all__r   r8   r   rI   rP   rU   rk   rn   ru   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   r6   r*   r(   ú<module>r9     sé  ððð ðB €€€ð ð  ð  €ðF2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð:,Nð ,Nð ,Nð ,Nð ,N�ñ ,Nô ,Nð ,Nð^.ð .ð .ð4*
ð *
ð *
ð *
ð *
˜ :ñ *
ô *
ð *
ðZ%pð %pð %pð %pð %p˜Zñ %pô %pð %pðP+ð +ð +ð +ð +ˆzñ +ô +ð +ð2ð 2ð 2ð 2ð 2ˆjñ 2ô 2ð 2ðð ð ð ð �zñ ô ð ð2ð ð ð ð �zñ ô ð ð(ð ð ð ð ˜*ñ ô ð ð(ð ð ð ð ˆJñ ô ð ðð ð ð ð �:ñ ô ð ð$ð ð ð ð �Zñ ô ð ð$ð ð ð ð �
ñ ô ð ð$ð ð ð ð �
ñ ô ð ð*ð ð ð ð ˜
ñ ô ð ð*	Rð 	Rð 	Rð 	Rð 	Rˆzñ 	Rô 	Rð 	RðJð Jð Jð Jð J�:ñ Jô Jð Jð&	Oð 	Oð 	Oð 	Oð 	O�zñ 	Oô 	Oð 	Oð4ð 4ð 4ð 4ð 4�Zñ 4ô 4ð 4ð"=ð =ð =ð =ð =�Jñ =ô =ð =ð"
ð 
ð 
ð 
ð 
ˆjñ 
ô 
ð 
ð 	Ið 	Ið 	Ið 	Ið 	I�ñ 	Iô 	Ið 	Ið	:ð 	:ð 	:ð 	:ð 	:˜Jñ 	:ô 	:ð 	:ð	:ð 	:ð 	:ð 	:ð 	:˜
ñ 	:ô 	:ð 	:ð!+ð !+ð !+ð !+ð !+ˆ:ñ !+ô !+ð !+ðH
ð 
ð 
ð 
ð 
ˆZñ 
ô 
ð 
ðB ˆJ‰LŒL€	Ø'Ð Ø$€Ø
ˆ(‰*Œ*€Ø
ˆ'‰)Œ)€Ø)Ð)¨!Ñ,Ô,Ð Ø&Ð& qÑ)Ô)Ð Ø#Ð Ø€u�w„w€Øˆk˜$ Ñ"Ô"€Øˆ<˜ÑÔ€Øˆn˜SÑ!Ô!€Ø€Ø €Ø€	Ø€Ø�	˜#˜sÑ#Ô#€Ø€Ø&Ð Ø
ˆ(‰*Œ*€Ø#Ð#Ñ%Ô%Ð Ø�Ñ!Ô!€Ø�‘”€Ø	ˆ‰Œ€ØˆJ‰LŒL€	Ø-Ð-Ñ/Ô/Ð Ø%Ð%Ñ'Ô'Ð Ø
€Ø€€€r*   