§
    ŠŠtjòX  ã                   óÎ  — d dl mZ d dl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 d0„ d1e¦  «        Z G d2„ d3e¦  «        Z G d4„ d5e¦  «        Z G d6„ d7e¦  «        Z  G d8„ d9e¦  «        Z! G d:„ 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 )?é    )ÚCallable)ÚAnyN) Ú
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     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributions/constraints.pyÚcheckzConstraint.checkb   s
   € õ
 "Ð!ó    c                 ó0   — | j         j        dd …         dz   S )Né   z())Ú	__class__Ú__name__©r)   s    r+   Ú__repr__zConstraint.__repr__i   s   € ØŒ~Ô& q r rÔ*¨TÑ1Ð1r-   N)r1   Ú
__module__Ú__qualname__Ú__doc__Úis_discreteÚ	event_dimr,   r3   © r-   r+   r   r   P   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.
    ©r7   r8   c                ód   •— || _         || _        t          ¦   «                              ¦   «          d S ©N)Ú_is_discreteÚ
_event_dimÚsuperÚ__init__)r)   r7   r8   r0   s      €r+   rB   z_Dependent.__init__{   s.   ø€ Ø'ˆÔØ#ˆŒÝ‰Œ×ÒÑÔÐÐÐr-   Úreturnc                 óJ   — | j         t          u rt          d¦  «        ‚| j         S )Nz,.is_discrete cannot be determined statically)r?   ÚNotImplementedr'   r2   s    r+   r7   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)r@   rE   r'   r2   s    r+   r8   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<   )rE   r?   r@   r;   )r)   r7   r8   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-   )r1   r4   r5   r6   rE   rB   ÚpropertyÚboolr7   Úintr8   rH   r,   Ú__classcell__©r0   s   @r+   r;   r;   m   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def         dz  dedz  dedz  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.r7   r8   rC   c                óf   •— t          ¦   «                              |¦  «         || _        || _        d S r>   )rA   rB   r?   r@   )r)   rW   r7   r8   r0   s       €r+   rB   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<   )rV   r?   r@   )r)   rW   s     r+   rH   z_DependentProperty.__call__Û   s'   € õ "Ø˜DÔ-¸¼ð
ñ 
ô 
ð 	
r-   r>   )r1   r4   r5   r6   rE   r   r   rN   rO   rB   rH   rP   rQ   s   @r+   rV   rV   ¶   sË   ø€ € € € € ðð ð6 )-ð	$ð $2Ø .ð	$ð 	$ð 	$à�S˜#�XÔ Ñ%ð	$ð ˜D‘[ð		$ð
 ˜‘:ð	$ð 
ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð	
˜8 C¨ HÔ-ð 	
Ð2Fð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r-   rV   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                 óx  •— t          |t          ¦  «        s$t          dt          |¦  «        j        › �¦  «        ‚t          |t
          ¦  «        s$t          dt          |¦  «        j        › �¦  «        ‚|dk     rt          d|› �¦  «        ‚|| _        || _        t          ¦   «          	                    ¦   «          d S )Nú*base_constraint must be a Constraint, got z.reinterpreted_batch_ndims must be an int, got r   z,reinterpreted_batch_ndims must be >= 0, got )
rS   r   ÚAssertionErrorÚtyper1   rO   Úbase_constraintÚreinterpreted_batch_ndimsrA   rB   )r)   r`   ra   r0   s      €r+   rB   z_IndependentConstraint.__init__î   sÔ   ø€ Ý˜/­:Ñ6Ô6ð 	Ý Ø]½TÀ/Ñ=RÔ=RÔ=[Ð]Ð]ñô ð õ Ð3µSÑ9Ô9ð 	Ý ØkÅÐF_ÑA`ÔA`ÔAiÐkÐkñô ð ð % qÒ(Ð(Ý ØZÐ?XÐZÐZñô ð ð  /ˆÔØ)BˆÔ&Ý‰Œ×ÒÑÔÐÐÐr-   rC   c                 ó   — | j         j        S r>   ©r`   r7   r2   s    r+   r7   z"_IndependentConstraint.is_discreteÿ   ó   € àÔ#Ô/Ð/r-   c                 ó*   — | j         j        | j        z   S r>   )r`   r8   ra   r2   s    r+   r8   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 ©éÿÿÿÿrj   )	r`   r,   Údimra   r8   rJ   Ú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, ú))r0   r1   Úreprr`   ra   r2   s    r+   r3   z_IndependentConstraint.__repr__  s=   € Ø”.Ô)¨!¨"¨"Ô-ÐoÐoµ°TÔ5IÑ0JÔ0JÐoÐoÈdÔNlÐoÐoÐoÐor-   ©r1   r4   r5   r6   rB   rM   rN   r7   rO   r8   r,   r3   rP   rQ   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.distributions.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.distributions.MixtureSameFamily` distribution.
    c                 óÈ   •— t          |t          ¦  «        s$t          dt          |¦  «        j        › �¦  «        ‚|| _        t          ¦   «                              ¦   «          d S )Nr]   )rS   r   r^   r_   r1   r`   rA   rB   )r)   r`   r0   s     €r+   rB   z$MixtureSameFamilyConstraint.__init__%  sc   ø€ Ý˜/­:Ñ6Ô6ð 	Ý Ø]½TÀ/Ñ=RÔ=RÔ=[Ð]Ð]ñô ð ð  /ˆÔÝ‰Œ×ÒÑÔÐÐÐr-   rC   c                 ó   — | j         j        S r>   rc   r2   s    r+   r7   z'MixtureSameFamilyConstraint.is_discrete-  rd   r-   c                 ó   — | j         j        S r>   )r`   r8   r2   s    r+   r8   z%MixtureSameFamilyConstraint.event_dim1  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.distributions.MixtureSameFamily` distribution.
        rj   rg   rh   Nri   )	Ú	unsqueezer8   r`   r,   rk   rJ   rl   rm   rn   )r)   r*   Úunsqueezed_valuero   Únum_dim_to_keeps        r+   r,   z!MixtureSameFamilyConstraint.check5  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 )Nrr   rs   )r0   r1   rt   r`   r2   s    r+   r3   z$MixtureSameFamilyConstraint.__repr__E  s)   € Ø”.Ô)ÐIÐI­D°Ô1EÑ,FÔ,FÐIÐIÐIÐIr-   ru   rQ   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   r/   r9   r(   s     r+   r,   z_Boolean.checkP  s   € Ø˜’
˜u¨šzÑ*Ð*r-   N)r1   r4   r5   r6   r7   r,   r9   r-   r+   r€   r€   I  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.
    Tr/   c                 óœ   — |dk    |dk    z  }|                      d¦  «                             d¦  «        }|                     d¦  «        |z  S )Nr   r/   rj   )ÚsumÚeqrn   )r)   r*   Ú
is_booleanÚis_normalizeds       r+   r,   z_OneHot.check\  sH   € Ø˜q’j U¨a¢ZÑ0ˆ
ØŸ	š	 "™œ×(Ò(¨Ñ+Ô+ˆØ�~Š~˜bÑ!Ô! MÑ1Ð1r-   N)r1   r4   r5   r6   r7   r8   r,   r9   r-   r+   rƒ   rƒ   T  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_boundrA   rB   ©r)   r�   rŽ   r0   s      €r+   rB   z_IntegerInterval.__init__i  ó/   ø€ Ø&ˆÔØ&ˆÔÝ‰Œ×ÒÑÔÐÐÐr-   c                 óD   — |dz  dk    | j         |k    z  || j        k    z  S ©Nr/   r   ©r�   rŽ   r(   s     r+   r,   z_IntegerInterval.checkn  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=rs   ©r0   r1   r�   rŽ   ©r)   Ú
fmt_strings     r+   r3   z_IntegerInterval.__repr__s  óC   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØØO˜DÔ,ÐOÐO¸DÔ<LÐOÐOÐOñ	
ˆ
ð Ðr-   ©	r1   r4   r5   r6   r7   rB   r,   r3   rP   rQ   s   @r+   rŠ   rŠ   b  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Ž   rA   rB   ©r)   rŽ   r0   s     €r+   rB   z_IntegerLessThan.__init__‚  ó'   ø€ Ø&ˆÔÝ‰Œ×ÒÑÔÐÐÐr-   c                 ó,   — |dz  dk    || j         k    z  S r’   ©rŽ   r(   s     r+   r,   z_IntegerLessThan.check†  ó   € Ø˜‘	˜Q’ 5¨DÔ,<Ò#<Ñ=Ð=r-   c                 óJ   — | j         j        dd …         }|d| j        › d�z  }|S ©Nr/   z(upper_bound=rs   ©r0   r1   rŽ   r˜   s     r+   r3   z_IntegerLessThan.__repr__‰  ó4   € Ø”^Ô,¨Q¨R¨RÔ0ˆ
ØÐ9 dÔ&6Ð9Ð9Ð9Ñ9ˆ
ØÐr-   r›   rQ   s   @r+   r�   r�   {  ó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�   rA   rB   ©r)   r�   r0   s     €r+   rB   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 ©Nr/   r–   rs   ©r0   r1   r�   r˜   s     r+   r3   z_IntegerGreaterThan.__repr__�  r¨   r-   r›   rQ   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>   r9   r(   s     r+   r,   z_Real.check¨  s   € Ø˜Š~Ðr-   N)r1   r4   r5   r6   r,   r9   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+   rB   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+   r3   z_GreaterThan.__repr__¸  r¨   r-   ©r1   r4   r5   r6   rB   r,   r3   rP   rQ   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+   rB   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+   r3   z_GreaterThanEq.__repr__Ê  r¨   r-   r¼   rQ   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+   rB   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+   r3   z_LessThan.__repr__Ü  r¨   r-   r¼   rQ   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+   rB   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+   r3   z_Interval.__repr__ï  rš   r-   r¼   rQ   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+   rB   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+   r3   z_HalfOpenInterval.__repr__  rš   r-   r¼   rQ   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   rj   ©rk   r/   ç�íµ ÷Æ°>)Útorchrn   r…   Úabsr(   s     r+   r,   z_Simplex.check  s@   € ÝŒy˜ !š¨Ð,Ñ,Ô,°·²¸2±´ÀÑ1B×0GÒ0GÑ0IÔ0IÈDÒ0PÑQÐQr-   N©r1   r4   r5   r6   r8   r,   r9   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)   rŽ   s     r+   rB   z_Multinomial.__init__$  s   € Ø&ˆÔÐÐr-   c                 óv   — |dk                          d¬¦  «        |                     d¬¦  «        | j        k    z  S )Nr   rj   rÕ   )rn   r…   rŽ   rK   s     r+   r,   z_Multinomial.check'  s3   € Ø�Q’�|Š| ˆ|Ñ#Ô# q§u¢u° u¡}¤}¸Ô8HÒ'HÑIÐIr-   N)r1   r4   r5   r6   r7   r8   rB   r,   r9   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éþÿÿÿri   rj   r   )ÚtrilÚviewrm   Úmin)r)   r*   Ú
value_trils      r+   r,   z_LowerTriangular.check2  sK   € Ø—Z’Z‘\”\ˆ
Ø˜eÒ#×)Ò)¨%¬+°c°r°cÔ*:¸UÑ*BÑCÔC×GÒGÈÑKÔKÈAÔNÐNr-   NrÙ   r9   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â   ri   rj   r   )Údim1Údim2)rã   rä   rm   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Ù   r9   r-   r+   rè   rè   7  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 )Nrj   é
   rÕ   ç      ð?)r×   ÚfinfoÚdtypeÚepsÚsizeÚlinalgÚnormÚdetachrØ   Úlern   rè   r,   )r)   r*   ÚtolÚrow_normÚunit_row_norms        r+   r,   z_CorrCholesky.checkP  s¤   € åŒK˜œÑ$Ô$Ô(¨5¯:ª:°b©>¬>Ñ9¸BÑ>ð 	õ ”<×$Ò$ U§\¢\¡^¤^¸Ð$Ñ<Ô<ˆØ! C™×,Ò,Ñ.Ô.×1Ò1°#Ñ6Ô6×:Ò:¸rÐ:ÑBÔBˆÝÑÔ×%Ò% eÑ,Ô,¨}Ñ<Ð<r-   NrÙ   r9   r-   r+   rï   rï   H  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â   rj   )rö   Ú
fill_valuerô   Údevice)r×   Úfullrm   rN   r  r(   s     r+   r,   z_Square.check`  sG   € ÝŒzØ”˜S˜b˜SÔ!Øœ Bœ¨5¬;°r¬?Ò:Ý”*Ø”<ð	
ñ 
ô 
ð 	
r-   NrÙ   r9   r-   r+   rÿ   rÿ   Y  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â   rj   )rA   r,   rn   r×   ÚiscloseÚmT)r)   r*   Úsquare_checkr0   s      €r+   r,   z_Symmetric.checkn  sg   ø€ Ý‘w”w—}’} UÑ+Ô+ˆØ×ÒÑ!Ô!ð 	 ØÐÝŒ}˜U E¤H°4Ð8Ñ8Ô8×<Ò<¸RÑ@Ô@×DÒDÀRÑHÔHÐHr-   ©r1   r4   r5   r6   r,   rP   rQ   s   @r+   r  r  i  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   rj   )rA   r,   rn   r×   r÷   ÚeigvalshÚge©r)   r*   Ú	sym_checkr0   s      €r+   r,   z_PositiveSemidefinite.checkz  s`   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×$Ò$ UÑ+Ô+×.Ò.¨qÑ1Ô1×5Ò5°bÑ9Ô9Ð9r-   r  rQ   s   @r+   r  r  u  ó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 )Nr   )rA   r,   rn   r×   r÷   Úcholesky_exÚinfor†   r  s      €r+   r,   z_PositiveDefinite.check†  sU   ø€ Ý‘G”G—M’M %Ñ(Ô(ˆ	Ø�}Š}‰Œð 	ØÐÝŒ|×'Ò'¨Ñ.Ô.Ô3×6Ò6°qÑ9Ô9Ð9r-   r  rQ   s   @r+   r  r  �  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                 óò  •— t          d„ |D ¦   «         ¦  «        st          d¦  «        ‚t          |¦  «        | _        |€dgt	          | j        ¦  «        z  }t          |¦  «        | _        t	          | j        ¦  «        t	          | j        ¦  «        k    r:t          dt	          | j        ¦  «        › dt	          | j        ¦  «        › d�¦  «        ‚|| _        t          ¦   «                              ¦   «          d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r>   ©rS   r   ©Ú.0Úcs     r+   ú	<genexpr>z _Cat.__init__.<locals>.<genexpr>•  ó,   è è € Ð;Ð;°•:˜a¥Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;r-   ú1All elements of cseq must be Constraint instancesr/   z	lengths (z) must match cseq (rs   )	rn   r^   ÚlistÚcseqÚlenÚlengthsrk   rA   rB   )r)   r%  rk   r'  r0   s       €r+   rB   z_Cat.__init__”  sá   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;ð 	VÝ Ð!TÑUÔUÐUÝ˜‘J”JˆŒ	Øˆ?Ø�c�C ¤	™NœNÑ*ˆGÝ˜G‘}”}ˆŒÝˆtŒ|ÑÔ¥ D¤I¡¤Ò.Ð.Ý ØS�C ¤Ñ-Ô-ÐSÐSÅ#ÀdÄiÁ.Ä.ÐSÐSÐSñô ð ð ˆŒÝ‰Œ×ÒÑÔÐÐÐr-   rC   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r>   ©r7   r  s     r+   r!  z#_Cat.is_discrete.<locals>.<genexpr>¤  ó$   è è € Ð4Ð4 Q�1”=Ð4Ð4Ð4Ð4Ð4Ð4r-   ©Úanyr%  r2   s    r+   r7   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>   ©r8   r  s     r+   r!  z!_Cat.event_dim.<locals>.<genexpr>¨  s$   è è € Ð2Ð2 1�1”;Ð2Ð2Ð2Ð2Ð2Ð2r-   )Úmaxr%  r2   s    r+   r8   z_Cat.event_dim¦  s!   € åÐ2Ð2¨¬	Ð2Ñ2Ô2Ñ2Ô2Ð2r-   c                 óÜ  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     s/n t          d| j         › d|                      ¦   «         › d�¦  «        ‚g }d}t          | j        | j        ¦  «        D ]N\  }}|                     | j         ||¦  «        }|                     |                     |¦  «        ¦  «         ||z   }ŒOt          j	        || j         ¦  «        S )Núdim ú out of range for value with ú dimensionsr   )
rk   r^   Úzipr%  r'  ÚnarrowÚappendr,   r×   r   )r)   r*   ÚchecksÚstartÚconstrÚlengthÚvs          r+   r,   z
_Cat.checkª  sæ   € Ø—’‘”� ¤Ð6Ð6Ò6Ð6¨5¯9ª9©;¬;Ò6Ð6Ð6Ð6Ý ØV�t”xÐVÐV¸e¿iºi¹k¼kÐVÐVÐVñô ð ð ˆØˆÝ! $¤)¨T¬\Ñ:Ô:ð 	#ð 	#‰NˆF�FØ—’˜TœX u¨fÑ5Ô5ˆAØ�MŠM˜&Ÿ,š, q™/œ/Ñ*Ô*Ð*Ø˜F‘NˆEˆEÝŒy˜ ¤Ñ*Ô*Ð*r-   )r   N©r1   r4   r5   r6   rB   rM   rN   r7   rO   r8   r,   rP   rQ   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t          d¦  «        ‚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-   r#  )rn   r^   r$  r%  rk   rA   rB   )r)   r%  rk   r0   s      €r+   rB   z_Stack.__init__¿  sb   ø€ ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;ð 	VÝ Ð!TÑUÔUÐUÝ˜‘J”JˆŒ	ØˆŒÝ‰Œ×ÒÑÔÐÐÐr-   rC   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,  r2   s    r+   r7   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>   r1  r  s     r+   r!  z#_Stack.event_dim.<locals>.<genexpr>Ì  s$   è è € Ð1Ð1 !�!”+Ð1Ð1Ð1Ð1Ð1Ð1r-   r   r/   )r2  r%  rk   )r)   rk   s     r+   r8   z_Stack.event_dimÊ  s?   € åÐ1Ð1 t¤yÐ1Ñ1Ô1Ñ1Ô1ˆØŒ8�c‰>˜AÒÐØ�1‰HˆCØˆ
r-   c                 ó¨  ‡ ‡— ‰                      ¦   «          ‰ j         cxk    r‰                      ¦   «         k     s/n t          d‰ j         › d‰                      ¦   «         › d�¦  «        ‚ˆ ˆfd„t          ‰                     ‰ j         ¦  «        ¦  «        D ¦   «         }t	          j        d„ t          |‰ j        ¦  «        D ¦   «         ‰ j         ¦  «        S )Nr4  r5  r6  c                 óF   •— g | ]}‰                      ‰j        |¦  «        ‘ŒS r9   )Úselectrk   )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 r9   )r,   )r  r>  r<  s      r+   rL  z _Stack.check.<locals>.<listcomp>Ø  s&   € ÐAÐAÐA¡  FˆV�\Š\˜!‰_Œ_ÐAÐAÐAr-   )rk   r^   Úrangerö   r×   r"   r7  r%  )r)   r*   Úvss   `` r+   r,   z_Stack.checkÑ  sÓ   øø€ Ø—’‘”� ¤Ð6Ð6Ò6Ð6¨5¯9ª9©;¬;Ò6Ð6Ð6Ð6Ý ØV�t”xÐVÐV¸e¿iºi¹k¼kÐVÐVÐVñô ð ð NÐ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?  rQ   s   @r+   rA  rA  ¸  s¤   ø€ € € € € ðð ðð ð ð ð ð ð ð5˜Tð 5ð 5ð 5ñ „Xð5ð ð˜3ð ð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
r-   rA  r/   g        rò   )@Úcollections.abcr   Útypingr   r×   Ú__all__r   r;   r   rM   rV   r[   r   r€   rƒ   rŠ   r�   r«   rµ   r¸   r¿   rÄ   rÉ   rÎ   rÓ   rÛ   rß   rè   rï   rÿ   r  r  r  r  rA  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"   r9   r-   r+   ú<module>rS     s=  ðð %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ð ð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ðb.Jð .Jð .Jð .Jð .J *ñ .Jô .Jð .Jðb+ð +ð +ð +ð +ˆ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ñ 	:ô 	:ð 	:ð	:ð 	:ð 	:ð 	:ð 	:˜
ñ 	:ô 	:ð 	:ð(+ð (+ð (+ð (+ð (+ˆ:ñ (+ô (+ð (+ðV!
ð !
ð !
ð !
ð !
ˆZñ !
ô !
ð !
ðJ ˆJ‰LŒL€	Ø'Ð Ø$€Ø
ˆ(‰*Œ*€Ø
ˆ'‰)Œ)€Ø)Ð)¨!Ñ,Ô,Ð Ø&Ð& qÑ)Ô)Ð Ø#Ð Ø€u�w„w€Øˆk˜$ Ñ"Ô"€Øˆ<˜ÑÔ€Øˆn˜SÑ!Ô!€Ø€Ø €Ø€	Ø€Ø�	˜#˜sÑ#Ô#€Ø€Ø&Ð Ø
ˆ(‰*Œ*€Ø#Ð#Ñ%Ô%Ð Ø�Ñ!Ô!€Ø�‘”€Ø	ˆ‰Œ€ØˆJ‰LŒL€	Ø-Ð-Ñ/Ô/Ð Ø%Ð%Ñ'Ô'Ð Ø
€Ø€€€r-   