§
    ®˜ºhbT  ã                   óÊ  — d dl mZmZm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! G d9„ d:e¦  «        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Z0eZ1eZ2 ed<d=¦  «        Z3eZ4eZ5 e¦   «         Z6 e¦   «         Z7 e¦   «         Z8 e¦   «         Z9 e¦   «         Z: e¦   «         Z; e¦   «         Z< e ¦   «         Z=e!Z>e"Z?dS )>é    )ÚAnyÚCallableÚOptionalN) Ú
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ÚMixtureSameFamilyConstraintÚ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     úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/distributions/constraints.pyÚcheckzConstraint.checka   s
   € õ
 "Ð!ó    c                 ó0   — | j         j        dd …         dz   S )Né   z())Ú	__class__Ú__name__©r*   s    r,   Ú__repr__zConstraint.__repr__h   s   € ØŒ~Ô& q r rÔ*¨TÑ1Ð1r.   N)r2   Ú
__module__Ú__qualname__Ú__doc__Úis_discreteÚ	event_dimr-   r4   © r.   r,   r   r   O   sH   € € € € € ðð ð €KØ€Ið"ð "ð "ð2ð 2ð 2ð 2ð 2r.   r   c                   óv   ‡ — e Zd ZdZeedœˆ fd„
Zedefd„¦   «         Zede	f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.
    ©r8   r9   c                ód   •— || _         || _        t          ¦   «                              ¦   «          d S ©N)Ú_is_discreteÚ
_event_dimÚsuperÚ__init__)r*   r8   r9   r1   s      €r,   rC   z_Dependent.__init__z   s.   ø€ Ø'ˆÔØ#ˆŒÝ‰Œ×ÒÑÔÐÐÐr.   Úreturnc                 óJ   — | j         t          u rt          d¦  «        ‚| j         S )Nz,.is_discrete cannot be determined statically)r@   ÚNotImplementedr(   r3   s    r,   r8   z_Dependent.is_discrete   s(   € àÔ¥Ð.Ð.Ý%Ð&TÑUÔUÐUØÔ Ð r.   c                 óJ   — | j         t          u rt          d¦  «        ‚| j         S )Nz*.event_dim cannot be determined statically)rA   rF   r(   r3   s    r,   r9   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)
        r=   )rF   r@   rA   r<   )r*   r8   r9   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.   )r2   r5   r6   r7   rF   rC   ÚpropertyÚboolr8   Úintr9   rI   r-   Ú__classcell__©r1   s   @r,   r<   r<   l   sÜ   ø€ € € € € ðð ð '5Àð ð ð ð ð ð ð ð
 ð!˜Tð !ð !ð !ñ „Xð!ð
 ð˜3ð ð ð ñ „Xðð
 '5Àð 
Hð 
Hð 
Hð 
Hð 
HðNð Nð Nð Nð Nð Nð Nr.   r<   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
    )Ú
isinstancer<   )Ú
constraints    r,   r   r   ›   s   € õ. �j¥*Ñ-Ô-Ð-r.   c            
       ó”   ‡ — e Zd ZdZ	 deedœdeedef                  dee         dee	         ddfˆ fd	„Z
dedef         dd f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.
    Nr=   Úfn.r8   r9   rD   c                óf   •— t          ¦   «                              |¦  «         || _        || _        d S r?   )rB   rC   r@   rA   )r*   rX   r8   r9   r1   s       €r,   rC   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): ...
        r=   )rW   r@   rA   )r*   rX   s     r,   rI   z_DependentProperty.__call__Ú   s'   € õ "Ø˜DÔ-¸¼ð
ñ 
ô 
ð 	
r.   r?   )r2   r5   r6   r7   rF   r   r   r   rO   rP   rC   rI   rQ   rR   s   @r,   rW   rW   µ   sË   ø€ € € € € ðð ð6 ,0ð	$ð '5Ø#1ð	$ð 	$ð 	$à�X˜c 3˜hÔ'Ô(ð	$ð ˜d”^ð		$ð
 ˜C”=ð	$ð 
ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð	
˜8 C¨ HÔ-ð 	
Ð2Fð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r.   rW   c                   óf   ‡ — e Zd ZdZˆ fd„Zedefd„¦   «         Zedef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   )rT   r   rP   Úbase_constraintÚreinterpreted_batch_ndimsrB   rC   )r*   r_   r`   r1   s      €r,   rC   z_IndependentConstraint.__init__í   sm   ø€ Ý˜/­:Ñ6Ô6Ð6Ð6Ð6ÝÐ3µSÑ9Ô9Ð9Ð9Ð9Ø(¨AÒ-Ð-Ð-Ð-Ø.ˆÔØ)BˆÔ&Ý‰Œ×ÒÑÔÐÐÐr.   rD   c                 ó   — | j         j        S r?   ©r_   r8   r3   s    r,   r8   z"_IndependentConstraint.is_discreteõ   ó   € àÔ#Ô/Ð/r.   c                 ó*   — | j         j        | j        z   S r?   )r_   r9   r`   r3   s    r,   r9   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 )NúExpected value.dim() >= ú	 but got ©éÿÿÿÿri   )	r_   r-   Údimr`   r9   rK   Ú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 )Nr0   ú(z, ú))r1   r2   Úreprr_   r`   r3   s    r,   r4   z_IndependentConstraint.__repr__
  s=   € Ø”.Ô)¨!¨"¨"Ô-ÐoÐoµ°TÔ5IÑ0JÔ0JÐoÐoÈdÔNlÐoÐoÐoÐor.   ©r2   r5   r6   r7   rC   rN   rO   r8   rP   r9   r-   r4   rQ   rR   s   @r,   r\   r\   æ   sº   ø€ € € € € ðð ðð ð ð ð ð ð0˜Tð 0ð 0ð 0ñ „Xð0ð ðO˜3ð Oð Oð Oñ „XðOðð ð ðpð pð pð pð pð pð pr.   r\   c                   óf   ‡ — e Zd ZdZˆ fd„Zedefd„¦   «         Zedefd„¦   «         Z	d„ Z
d„ Zˆ xZS )r   aš  
    Constraint for the :class:`~torch.distribution.MixtureSameFamily`
    distribution that adds back the rightmost batch dimension before
    performing the validity check with the component distribution
    constraint.

    Args:
        base_constraint: The ``Constraint`` object of
            the component distribution of
            the :class:`~torch.distribution.MixtureSameFamily` distribution.
    c                 ó„   •— t          |t          ¦  «        sJ ‚|| _        t          ¦   «                              ¦   «          d S r?   )rT   r   r_   rB   rC   )r*   r_   r1   s     €r,   rC   z$MixtureSameFamilyConstraint.__init__  s=   ø€ Ý˜/­:Ñ6Ô6Ð6Ð6Ð6Ø.ˆÔÝ‰Œ×ÒÑÔÐÐÐr.   rD   c                 ó   — | j         j        S r?   rb   r3   s    r,   r8   z'MixtureSameFamilyConstraint.is_discrete   rc   r.   c                 ó   — | j         j        S r?   )r_   r9   r3   s    r,   r9   z%MixtureSameFamilyConstraint.event_dim$  s   € àÔ#Ô-Ð-r.   c                 ó²  — |                      d| j        z
  ¦  «        }| j                             |¦  «        }|                     ¦   «         | j        k     r,t          d| j        › d|                     ¦   «         › �¦  «        ‚|                     ¦   «         | j        z
  }|                     |j        d|…         dz   ¦  «        }|                     d¦  «        }|S )z˜
        Check validity of ``value`` as a possible outcome of sampling
        the :class:`~torch.distribution.MixtureSameFamily` distribution.
        ri   rf   rg   Nrh   )	Ú	unsqueezer9   r_   r-   rj   rK   rk   rl   rm   )r*   r+   Úunsqueezed_valuern   Únum_dim_to_keeps        r,   r-   z!MixtureSameFamilyConstraint.check(  sÅ   € ð
 !Ÿ?š?¨2°´Ñ+>Ñ?Ô?ÐØÔ%×+Ò+Ð,<Ñ=Ô=ˆØ�9Š9‰;Œ;˜œÒ'Ð'ÝØQ¨4¬>ÐQÐQÀEÇIÂIÁKÄKÐQÐQñô ð ð  Ÿ)š)™+œ+¨¬Ñ6ˆØ—’ ¤Ð-=¨oÐ-=Ô >ÀÑ FÑGÔGˆØ—’˜B‘”ˆØˆr.   c                 óJ   — | j         j        › dt          | j        ¦  «        › d�S )Nrq   rr   )r1   r2   rs   r_   r3   s    r,   r4   z$MixtureSameFamilyConstraint.__repr__8  s)   € Ø”.Ô)ÐIÐI­D°Ô1EÑ,FÔ,FÐIÐIÐIÐIr.   rt   rR   s   @r,   r   r     sµ   ø€ € € € € ð
ð 
ðð ð ð ð ð
 ð0˜Tð 0ð 0ð 0ñ „Xð0ð ð.˜3ð .ð .ð .ñ „Xð.ðð ð ð Jð Jð Jð Jð Jð Jð Jr.   r   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   r0   r:   r)   s     r,   r-   z_Boolean.checkC  s   € Ø˜’
˜u¨šzÑ*Ð*r.   N)r2   r5   r6   r7   r8   r-   r:   r.   r,   r   r   <  s4   € € € € € ðð ð €Kð+ð +ð +ð +ð +r.   r   c                   ó    — e Zd ZdZdZdZd„ ZdS )Ú_OneHotz'
    Constrain to one-hot vectors.
    Tr0   c                 óœ   — |dk    |dk    z  }|                      d¦  «                             d¦  «        }|                     d¦  «        |z  S )Nr   r0   ri   )ÚsumÚeqrm   )r*   r+   Ú
is_booleanÚis_normalizeds       r,   r-   z_OneHot.checkO  sH   € Ø˜q’j U¨a¢ZÑ0ˆ
ØŸ	š	 "™œ×(Ò(¨Ñ+Ô+ˆØ�~Š~˜bÑ!Ô! MÑ1Ð1r.   N)r2   r5   r6   r7   r8   r9   r-   r:   r.   r,   r‚   r‚   G  s9   € € € € € ðð ð €KØ€Ið2ð 2ð 2ð 2ð 2r.   r‚   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_boundrB   rC   ©r*   rŒ   r�   r1   s      €r,   rC   z_IntegerInterval.__init__\  ó/   ø€ Ø&ˆÔØ&ˆÔÝ‰Œ×ÒÑÔÐÐÐr.   c                 óD   — |dz  dk    | j         |k    z  || j        k    z  S ©Nr0   r   ©rŒ   r�   r)   s     r,   r-   z_IntegerInterval.checka  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 ©Nr0   ú(lower_bound=z, upper_bound=rr   ©r1   r2   rŒ   r�   ©r*   Ú
fmt_strings     r,   r4   z_IntegerInterval.__repr__f  óC   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØØO˜DÔ,ÐOÐO¸DÔ<LÐOÐOÐOñ	
ˆ
ð Ðr.   ©	r2   r5   r6   r7   r8   rC   r-   r4   rQ   rR   s   @r,   r‰   r‰   U  sg   ø€ € € € € ðð ð €Kðð ð ð ð ð

ð 
ð 
ð
ð ð ð ð ð ð r.   r‰   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?   ©r�   rB   rC   ©r*   r�   r1   s     €r,   rC   z_IntegerLessThan.__init__u  ó'   ø€ Ø&ˆÔÝ‰Œ×ÒÑÔÐÐÐr.   c                 ó,   — |dz  dk    || j         k    z  S r‘   ©r�   r)   s     r,   r-   z_IntegerLessThan.checky  ó   € Ø˜‘	˜Q’ 5¨DÔ,<Ò#<Ñ=Ð=r.   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S ©Nr0   z(upper_bound=rr   ©r1   r2   r�   r—   s     r,   r4   z_IntegerLessThan.__repr__|  ó4   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØÐ9 dÔ&6Ð9Ð9Ð9Ñ9ˆ
ØÐr.   rš   rR   s   @r,   rœ   rœ   n  ó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?   ©rŒ   rB   rC   ©r*   rŒ   r1   s     €r,   rC   z_IntegerGreaterThan.__init__‰  r    r.   c                 ó,   — |dz  dk    || j         k    z  S r‘   ©rŒ   r)   s     r,   r-   z_IntegerGreaterThan.check�  r£   r.   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S ©Nr0   r•   rr   ©r1   r2   rŒ   r—   s     r,   r4   z_IntegerGreaterThan.__repr__�  r§   r.   rš   rR   s   @r,   rª   rª   ‚  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?   r:   r)   s     r,   r-   z_Real.check›  s   € Ø˜Š~Ðr.   N)r2   r5   r6   r7   r-   r:   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,   rC   z_GreaterThan.__init__¤  r    r.   c                 ó   — | j         |k     S r?   r¯   r)   s     r,   r-   z_GreaterThan.check¨  s   € ØÔ %Ò'Ð'r.   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S r±   r²   r—   s     r,   r4   z_GreaterThan.__repr__«  r§   r.   ©r2   r5   r6   r7   rC   r-   r4   rQ   rR   s   @r,   r·   r·   Ÿ  ó`   ø€ € € € € ðð ðð ð ð ð ð(ð (ð (ðð ð ð ð ð ð 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,   rC   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,   r4   z_GreaterThanEq.__repr__½  r§   r.   r»   rR   s   @r,   r¾   r¾   ±  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,   rC   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,   r4   z_LessThan.__repr__Ï  r§   r.   r»   rR   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?   r‹   rŽ   s      €r,   rC   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,   r4   z_Interval.__repr__â  r™   r.   r»   rR   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?   r‹   rŽ   s      €r,   rC   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,   r4   z_HalfOpenInterval.__repr__÷  r™   r.   r»   rR   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`.
    r0   c                 ó”   — t          j        |dk    d¬¦  «        |                     d¦  «        dz
                       ¦   «         dk     z  S )Nr   ri   ©rj   r0   ç�íµ ÷Æ°>)Útorchrm   r„   Úabsr)   s     r,   r-   z_Simplex.check  s@   € ÝŒy˜ !š¨Ð,Ñ,Ô,°·²¸2±´ÀÑ1B×0GÒ0GÑ0IÔ0IÈDÒ0PÑQÐQr.   N©r2   r5   r6   r7   r9   r-   r:   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``.
    Tr0   c                 ó   — || _         d S r?   r¢   )r*   r�   s     r,   rC   z_Multinomial.__init__  s   € Ø&ˆÔÐÐr.   c                 óv   — |dk                          d¬¦  «        |                     d¬¦  «        | j        k    z  S )Nr   ri   rÔ   )rm   r„   r�   rL   s     r,   r-   z_Multinomial.check  s3   € Ø�Q’�|Š| ˆ|Ñ#Ô# q§u¢u° u¡}¤}¸Ô8HÒ'HÑIÐIr.   N)r2   r5   r6   r7   r8   r9   rC   r-   r:   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éþÿÿÿrh   ri   r   )ÚtrilÚviewrl   Ú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Ø   r:   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á   rh   ri   r   )Údim1Údim2)râ   rã   rl   rä   Údiagonal)r*   r+   rå   r   Úpositive_diagonals        r,   r-   z_LowerCholesky.check1  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Ø   r:   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 )Nri   é
   rÔ   ç      ð?)rÖ   ÚfinfoÚdtypeÚepsÚsizeÚlinalgÚnormÚdetachr×   Úlerm   rç   r-   )r*   r+   ÚtolÚrow_normÚunit_row_norms        r,   r-   z_CorrCholesky.checkC  s¤   € åŒK˜œÑ$Ô$Ô(¨5¯:ª:°b©>¬>Ñ9¸BÑ>ð 	õ ”<×$Ò$ U§\¢\¡^¤^¸Ð$Ñ<Ô<ˆØ! C™×,Ò,Ñ.Ô.×1Ò1°#Ñ6Ô6×:Ò:¸rÐ:ÑBÔBˆÝÑÔ×%Ò% eÑ,Ô,¨}Ñ<Ð<r.   NrØ   r:   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á   ri   )rõ   Ú
fill_valueró   Údevice)rÖ   Úfullrl   rO   r  r)   s     r,   r-   z_Square.checkS  sG   € ÝŒzØ”˜S˜b˜SÔ!Øœ Bœ¨5¬;°r¬?Ò:Ý”*Ø”<ð	
ñ 
ô 
ð 	
r.   NrØ   r:   r.   r,   rþ   rþ   L  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á   ri   )rB   r-   rm   rÖ   ÚiscloseÚmT)r*   r+   Úsquare_checkr1   s      €r,   r-   z_Symmetric.checka  sg   ø€ Ý‘w”w—}’} UÑ+Ô+ˆØ×ÒÑ!Ô!ð 	 ØÐÝŒ}˜U E¤H°4Ð8Ñ8Ô8×<Ò<¸RÑ@Ô@×DÒDÀRÑHÔHÐHr.   ©r2   r5   r6   r7   r-   rQ   rR   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   ri   )rB   r-   rm   rÖ   rö   ÚeigvalshÚge©r*   r+   Ú	sym_checkr1   s      €r,   r-   z_PositiveSemidefinite.checkm  s`   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×$Ò$ UÑ+Ô+×.Ò.¨qÑ1Ô1×5Ò5°bÑ9Ô9Ð9r.   r
  rR   s   @r,   r  r  h  ó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 r^   )rB   r-   rm   rÖ   rö   Úcholesky_exÚinfor…   r  s      €r,   r-   z_PositiveDefinite.checky  sU   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×'Ò'¨Ñ.Ô.Ô3×6Ò6°qÑ9Ô9Ð9r.   r
  rR   s   @r,   r  r  t  r  r.   r  c                   ób   ‡ — e Zd ZdZd	ˆ fd„	Zedefd„¦   «         Zedef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?   ©rT   r   ©Ú.0Úcs     r,   ú	<genexpr>z _Cat.__init__.<locals>.<genexpr>ˆ  ó,   è è € Ð;Ð;°•:˜a¥Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;r.   r0   )rm   ÚlistÚcseqÚlenÚlengthsrj   rB   rC   )r*   r#  rj   r%  r1   s       €r,   rC   z_Cat.__init__‡  sŸ   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ý˜‘J”JˆŒ	Øˆ?Ø�c�C ¤	™NœNÑ*ˆGÝ˜G‘}”}ˆŒÝ�4”<Ñ Ô ¥C¨¬	¡N¤NÒ2Ð2Ð2Ð2ØˆŒÝ‰Œ×ÒÑÔÐÐÐr.   rD   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r?   ©r8   r  s     r,   r   z#_Cat.is_discrete.<locals>.<genexpr>“  ó$   è è € Ð4Ð4 Q�1”=Ð4Ð4Ð4Ð4Ð4Ð4r.   ©Úanyr#  r3   s    r,   r8   z_Cat.is_discrete‘  ó!   € åÐ4Ð4¨$¬)Ð4Ñ4Ô4Ñ4Ô4Ð4r.   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r?   ©r9   r  s     r,   r   z!_Cat.event_dim.<locals>.<genexpr>—  s$   è è € Ð2Ð2 1�1”;Ð2Ð2Ð2Ð2Ð2Ð2r.   )Úmaxr#  r3   s    r,   r9   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 r^   )	rj   Úzipr#  r%  ÚnarrowÚappendr-   rÖ   r   )r*   r+   ÚchecksÚstartÚconstrÚlengthÚvs          r,   r-   z
_Cat.check™  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©r2   r5   r6   r7   rC   rN   rO   r8   rP   r9   r-   rQ   rR   s   @r,   r  r  €  s¤   ø€ € € € € ðð ðð ð ð ð ð ð ð5˜Tð 5ð 5ð 5ñ „Xð5ð ð3˜3ð 3ð 3ð 3ñ „Xð3ð+ð +ð +ð +ð +ð +ð +r.   r  c                   ób   ‡ — e Zd ZdZdˆ fd„	Zedefd„¦   «         Zedef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>¬  r!  r.   )rm   r"  r#  rj   rB   rC   )r*   r#  rj   r1   s      €r,   rC   z_Stack.__init__«  sV   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ý˜‘J”JˆŒ	ØˆŒÝ‰Œ×ÒÑÔÐÐÐr.   rD   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*  r3   s    r,   r8   z_Stack.is_discrete±  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   r0   )r0  r#  rj   )r*   rj   s     r,   r9   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 r:   )Úselectrj   )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 r:   )r-   )r  r9  r7  s      r,   rG  z _Stack.check.<locals>.<listcomp>À  s&   € ÐAÐAÐA¡  FˆV�\Š\˜!‰_Œ_ÐAÐAÐAr.   )rj   Úrangerõ   rÖ   r#   r2  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:  rR   s   @r,   r<  r<  ¤  s¤   ø€ € € € € ðð ðð ð ð ð ð ð ð5˜Tð 5ð 5ð 5ñ „Xð5ð ð˜3ð ð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
r.   r<  r0   g        rñ   )@Útypingr   r   r   rÖ   Ú__all__r   r<   r   rN   rW   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   r   r#   r:   r.   r,   ú<module>rM     s7  ðð +Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ð ðD €€€ð!ð !ð !€ðH2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð:,Nð ,Nð ,Nð ,Nð ,N�ñ ,Nô ,Nð ,Nð^.ð .ð .ð4.
ð .
ð .
ð .
ð .
˜ :ñ .
ô .
ð .
ðb%pð %pð %pð %pð %p˜Zñ %pô %pð %pðP+Jð +Jð +Jð +Jð +J *ñ +Jô +Jð +Jð\+ð +ð +ð +ð +ˆ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.   