§
    Ÿ²Åjá¤  ã                   óÞ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dlm	c m
Z d dlmZ d dlmZmZmZmZmZ d dlmZmZ g d¢Z G d„ d¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z eg ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ 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,dS )0é    N)ÚList)Úconstraints)Ú_sum_rightmostÚbroadcast_allÚlazy_propertyÚtril_matrix_to_vecÚvec_to_tril_matrix)ÚpadÚsoftplus)ÚAbsTransformÚAffineTransformÚCatTransformÚComposeTransformÚCorrCholeskyTransformÚCumulativeDistributionTransformÚExpTransformÚIndependentTransformÚLowerCholeskyTransformÚPositiveDefiniteTransformÚPowerTransformÚReshapeTransformÚSigmoidTransformÚSoftplusTransformÚTanhTransformÚSoftmaxTransformÚStackTransformÚStickBreakingTransformÚ	TransformÚidentity_transformc                   óÞ   ‡ — e Zd ZU dZdZej        ed<   ej        ed<   dˆ fd„	Zd„ Z	e
d„ ¦   «         Ze
d	„ ¦   «         Ze
d
„ ¦   «         Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   aï  
    Abstract class for invertable transformations with computable log
    det jacobians. They are primarily used in
    :class:`torch.distributions.TransformedDistribution`.

    Caching is useful for transforms whose inverses are either expensive or
    numerically unstable. Note that care must be taken with memoized values
    since the autograd graph may be reversed. For example while the following
    works with or without caching::

        y = t(x)
        t.log_abs_det_jacobian(x, y).backward()  # x will receive gradients.

    However the following will error when caching due to dependency reversal::

        y = t(x)
        z = t.inv(y)
        grad(z.sum(), [y])  # error because z is x

    Derived classes should implement one or both of :meth:`_call` or
    :meth:`_inverse`. Derived classes that set `bijective=True` should also
    implement :meth:`log_abs_det_jacobian`.

    Args:
        cache_size (int): Size of cache. If zero, no caching is done. If one,
            the latest single value is cached. Only 0 and 1 are supported.

    Attributes:
        domain (:class:`~torch.distributions.constraints.Constraint`):
            The constraint representing valid inputs to this transform.
        codomain (:class:`~torch.distributions.constraints.Constraint`):
            The constraint representing valid outputs to this transform
            which are inputs to the inverse transform.
        bijective (bool): Whether this transform is bijective. A transform
            ``t`` is bijective iff ``t.inv(t(x)) == x`` and
            ``t(t.inv(y)) == y`` for every ``x`` in the domain and ``y`` in
            the codomain. Transforms that are not bijective should at least
            maintain the weaker pseudoinverse properties
            ``t(t.inv(t(x)) == t(x)`` and ``t.inv(t(t.inv(y))) == t.inv(y)``.
        sign (int or Tensor): For bijective univariate transforms, this
            should be +1 or -1 depending on whether transform is monotone
            increasing or decreasing.
    FÚdomainÚcodomainr   c                 ó¬   •— || _         d | _        |dk    rn|dk    rd| _        nt          d¦  «        ‚t	          ¦   «                              ¦   «          d S )Nr   é   )NNzcache_size must be 0 or 1)Ú_cache_sizeÚ_invÚ_cached_x_yÚ
ValueErrorÚsuperÚ__init__)ÚselfÚ
cache_sizeÚ	__class__s     €úOC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/transforms.pyr*   zTransform.__init___   s]   ø€ Ø%ˆÔØˆŒ	Ø˜Š?ˆ?ØØ˜1Š_ˆ_Ø)ˆDÔÐåÐ8Ñ9Ô9Ð9Ý‰Œ×ÒÑÔÐÐÐó    c                 óB   — | j                              ¦   «         }d |d<   |S )Nr&   )Ú__dict__Úcopy)r+   Ústates     r.   Ú__getstate__zTransform.__getstate__j   s#   € Ø”×"Ò"Ñ$Ô$ˆØˆˆf‰Øˆr/   c                 ól   — | j         j        | j        j        k    r| j         j        S t          d¦  «        ‚)Nz:Please use either .domain.event_dim or .codomain.event_dim)r!   Ú	event_dimr"   r(   ©r+   s    r.   r6   zTransform.event_dimo   s1   € àŒ;Ô  D¤MÔ$;Ò;Ð;Ø”;Ô(Ð(ÝÐUÑVÔVÐVr/   c                 ó”   — d}| j         �|                       ¦   «         }|€(t          | ¦  «        }t          j        |¦  «        | _         |S )z{
        Returns the inverse :class:`Transform` of this transform.
        This should satisfy ``t.inv.inv is t``.
        N)r&   Ú_InverseTransformÚweakrefÚref©r+   Úinvs     r.   r=   zTransform.invu   sF   € ð ˆØŒ9Ð Ø—)’)‘+”+ˆCØˆ;Ý# DÑ)Ô)ˆCÝœ CÑ(Ô(ˆDŒIØˆ
r/   c                 ó   — t           ‚)z˜
        Returns the sign of the determinant of the Jacobian, if applicable.
        In general this only makes sense for bijective transforms.
        ©ÚNotImplementedErrorr7   s    r.   ÚsignzTransform.signƒ   s
   € õ "Ð!r/   r$   c                 óÌ   — | j         |k    r| S t          | ¦  «        j        t          j        u r t          | ¦  «        |¬¦  «        S t	          t          | ¦  «        › d�¦  «        ‚)N©r,   z.with_cache is not implemented)r%   Útyper*   r   r@   ©r+   r,   s     r.   Ú
with_cachezTransform.with_cache‹   sb   € ØÔ˜zÒ)Ð)ØˆKÝ�‰:Œ:Ô¥)Ô"4Ð4Ð4Ø•4˜‘:”:¨Ð4Ñ4Ô4Ð4Ý!¥T¨$¡Z¤ZÐ"OÐ"OÐ"OÑPÔPÐPr/   c                 ó
   — | |u S ©N© ©r+   Úothers     r.   Ú__eq__zTransform.__eq__’   s   € Ø�uˆ}Ðr/   c                 ó.   — |                       |¦  «         S rH   )rL   rJ   s     r.   Ú__ne__zTransform.__ne__•   s   € à—;’;˜uÑ%Ô%Ð%Ð%r/   c                 ó¢   — | j         dk    r|                      |¦  «        S | j        \  }}||u r|S |                      |¦  «        }||f| _        |S )z2
        Computes the transform `x => y`.
        r   )r%   Ú_callr'   )r+   ÚxÚx_oldÚy_oldÚys        r.   Ú__call__zTransform.__call__™   s\   € ð Ô˜qÒ Ð Ø—:’:˜a‘=”=Ð ØÔ'‰ˆˆuØ�ˆ:ˆ:ØˆLØ�JŠJ�q‰MŒMˆØ˜a˜4ˆÔØˆr/   c                 ó¢   — | j         dk    r|                      |¦  «        S | j        \  }}||u r|S |                      |¦  «        }||f| _        |S )z1
        Inverts the transform `y => x`.
        r   )r%   Ú_inverser'   )r+   rT   rR   rS   rQ   s        r.   Ú	_inv_callzTransform._inv_call¦   s`   € ð Ô˜qÒ Ð Ø—=’= Ñ#Ô#Ð#ØÔ'‰ˆˆuØ�ˆ:ˆ:ØˆLØ�MŠM˜!ÑÔˆØ˜a˜4ˆÔØˆr/   c                 ó   — t           ‚)zD
        Abstract method to compute forward transformation.
        r?   ©r+   rQ   s     r.   rP   zTransform._call³   ó
   € õ "Ð!r/   c                 ó   — t           ‚)zD
        Abstract method to compute inverse transformation.
        r?   ©r+   rT   s     r.   rW   zTransform._inverse¹   r[   r/   c                 ó   — t           ‚)zU
        Computes the log det jacobian `log |dy/dx|` given input and output.
        r?   ©r+   rQ   rT   s      r.   Úlog_abs_det_jacobianzTransform.log_abs_det_jacobian¿   r[   r/   c                 ó    — | j         j        dz   S )Nz())r-   Ú__name__r7   s    r.   Ú__repr__zTransform.__repr__Å   s   € ØŒ~Ô&¨Ñ-Ð-r/   c                 ó   — |S )z{
        Infers the shape of the forward computation, given the input shape.
        Defaults to preserving shape.
        rI   ©r+   Úshapes     r.   Úforward_shapezTransform.forward_shapeÈ   ó	   € ð
 ˆr/   c                 ó   — |S )z}
        Infers the shapes of the inverse computation, given the output shape.
        Defaults to preserving shape.
        rI   re   s     r.   Úinverse_shapezTransform.inverse_shapeÏ   rh   r/   ©r   ©r$   )rb   Ú
__module__Ú__qualname__Ú__doc__Ú	bijectiver   Ú
ConstraintÚ__annotations__r*   r4   Úpropertyr6   r=   rA   rF   rL   rN   rU   rX   rP   rW   r`   rc   rg   rj   Ú__classcell__©r-   s   @r.   r   r   .   s€  ø€ € € € € € ð*ð *ðX €IØÔ"Ð"Ð"Ñ"ØÔ$Ð$Ð$Ñ$ð	ð 	ð 	ð 	ð 	ð 	ðð ð ð
 ðWð Wñ „XðWð
 ðð ñ „Xðð ð"ð "ñ „Xð"ðQð Qð Qð Qðð ð ð&ð &ð &ðð ð ðð ð ð"ð "ð "ð"ð "ð "ð"ð "ð "ð.ð .ð .ðð ð ðð ð ð ð ð ð r/   r   c                   óþ   ‡ — e Zd ZdZdefˆ fd„Z ej        d¬¦  «        d„ ¦   «         Z ej        d¬¦  «        d„ ¦   «         Z	e
d„ ¦   «         Ze
d	„ ¦   «         Ze
d
„ ¦   «         Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r9   z|
    Inverts a single :class:`Transform`.
    This class is private; please instead use the ``Transform.inv`` property.
    Ú	transformc                 ód   •— t          ¦   «                              |j        ¬¦  «         || _        d S ©NrC   )r)   r*   r%   r&   )r+   rw   r-   s     €r.   r*   z_InverseTransform.__init__Ý   s,   ø€ Ý‰Œ×Ò IÔ$9ÐÑ:Ô:Ð:Ø(ˆŒ	ˆ	ˆ	r/   F©Úis_discretec                 ó,   — | j         €J ‚| j         j        S rH   )r&   r"   r7   s    r.   r!   z_InverseTransform.domainá   s   € àŒyÐ$Ð$Ð$ØŒyÔ!Ð!r/   c                 ó,   — | j         €J ‚| j         j        S rH   )r&   r!   r7   s    r.   r"   z_InverseTransform.codomainæ   s   € àŒyÐ$Ð$Ð$ØŒyÔÐr/   c                 ó,   — | j         €J ‚| j         j        S rH   )r&   rp   r7   s    r.   rp   z_InverseTransform.bijectiveë   s   € àŒyÐ$Ð$Ð$ØŒyÔ"Ð"r/   c                 ó,   — | j         €J ‚| j         j        S rH   )r&   rA   r7   s    r.   rA   z_InverseTransform.signð   s   € àŒyÐ$Ð$Ð$ØŒyŒ~Ðr/   c                 ó   — | j         S rH   )r&   r7   s    r.   r=   z_InverseTransform.invõ   s
   € àŒyÐr/   r$   c                 óR   — | j         €J ‚| j                             |¦  «        j        S rH   )r&   r=   rF   rE   s     r.   rF   z_InverseTransform.with_cacheù   s)   € ØŒyÐ$Ð$Ð$ØŒx×"Ò" :Ñ.Ô.Ô2Ð2r/   c                 ób   — t          |t          ¦  «        sdS | j        €J ‚| j        |j        k    S ©NF)Ú
isinstancer9   r&   rJ   s     r.   rL   z_InverseTransform.__eq__ý   s7   € Ý˜%Õ!2Ñ3Ô3ð 	Ø�5ØŒyÐ$Ð$Ð$ØŒy˜EœJÒ&Ð&r/   c                 óJ   — | j         j        › dt          | j        ¦  «        › d�S )Nú(ú))r-   rb   Úreprr&   r7   s    r.   rc   z_InverseTransform.__repr__  s&   € Ø”.Ô)Ð>Ð>­D°´©O¬OÐ>Ð>Ð>Ð>r/   c                 óH   — | j         €J ‚| j                              |¦  «        S rH   )r&   rX   rZ   s     r.   rU   z_InverseTransform.__call__  s&   € ØŒyÐ$Ð$Ð$ØŒy×"Ò" 1Ñ%Ô%Ð%r/   c                 óL   — | j         €J ‚| j                              ||¦  «         S rH   )r&   r`   r_   s      r.   r`   z&_InverseTransform.log_abs_det_jacobian
  s+   € ØŒyÐ$Ð$Ð$Ø”	×.Ò.¨q°!Ñ4Ô4Ð4Ð4r/   c                 ó6   — | j                              |¦  «        S rH   )r&   rj   re   s     r.   rg   z_InverseTransform.forward_shape  ó   € ØŒy×&Ò& uÑ-Ô-Ð-r/   c                 ó6   — | j                              |¦  «        S rH   )r&   rg   re   s     r.   rj   z_InverseTransform.inverse_shape  rŒ   r/   rl   )rb   rm   rn   ro   r   r*   r   Údependent_propertyr!   r"   rs   rp   rA   r=   rF   rL   rc   rU   r`   rg   rj   rt   ru   s   @r.   r9   r9   ×   se  ø€ € € € € ðð ð
) )ð )ð )ð )ð )ð )ð )ð $€[Ô#°Ð6Ñ6Ô6ð"ð "ñ 7Ô6ð"ð $€[Ô#°Ð6Ñ6Ô6ð ð  ñ 7Ô6ð ð ð#ð #ñ „Xð#ð ðð ñ „Xðð ðð ñ „Xðð3ð 3ð 3ð 3ð'ð 'ð 'ð?ð ?ð ?ð&ð &ð &ð5ð 5ð 5ð.ð .ð .ð.ð .ð .ð .ð .ð .ð .r/   r9   c                   ó  ‡ — e Zd ZdZddee         fˆ fd„Zd„ Z ej	        d¬¦  «        d„ ¦   «         Z
 ej	        d¬¦  «        d	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   ab  
    Composes multiple transforms in a chain.
    The transforms being composed are responsible for caching.

    Args:
        parts (list of :class:`Transform`): A list of transforms to compose.
        cache_size (int): Size of cache. If zero, no caching is done. If one,
            the latest single value is cached. Only 0 and 1 are supported.
    r   Úpartsc                 ó|   •‡— ‰rˆfd„|D ¦   «         }t          ¦   «                              ‰¬¦  «         || _        d S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rI   ©rF   )Ú.0Úpartr,   s     €r.   ú
<listcomp>z-ComposeTransform.__init__.<locals>.<listcomp>"  s%   ø€ ÐCÐCÐC°T�T—_’_ ZÑ0Ô0ÐCÐCÐCr/   rC   )r)   r*   r�   )r+   r�   r,   r-   s     `€r.   r*   zComposeTransform.__init__   sL   øø€ Øð 	DØCÐCÐCÐC¸UÐCÑCÔCˆEÝ‰Œ×Ò JÐÑ/Ô/Ð/ØˆŒ
ˆ
ˆ
r/   c                 óP   — t          |t          ¦  «        sdS | j        |j        k    S rƒ   )r„   r   r�   rJ   s     r.   rL   zComposeTransform.__eq__&  s)   € Ý˜%Õ!1Ñ2Ô2ð 	Ø�5ØŒz˜Uœ[Ò(Ð(r/   Frz   c                 ó‚  — | j         st          j        S | j         d         j        }| j         d         j        j        }t          | j         ¦  «        D ]8}||j        j        |j        j        z
  z  }t          ||j        j        ¦  «        }Œ9||j        k    sJ ‚||j        k    rt          j        |||j        z
  ¦  «        }|S )Nr   éÿÿÿÿ)	r�   r   Úrealr!   r"   r6   ÚreversedÚmaxÚindependent)r+   r!   r6   r•   s       r.   r!   zComposeTransform.domain+  s½   € àŒzð 	$ÝÔ#Ð#Ø”˜A”Ô%ˆà”J˜r”NÔ+Ô5ˆ	Ý˜TœZÑ(Ô(ð 	>ð 	>ˆDØ˜œÔ.°´Ô1HÑHÑHˆIÝ˜I t¤{Ô'<Ñ=Ô=ˆIˆIØ˜FÔ,Ò,Ð,Ð,Ð,Ø�vÔ'Ò'Ð'Ý Ô,¨V°YÀÔAQÑ5QÑRÔRˆFØˆr/   c                 óh  — | j         st          j        S | j         d         j        }| j         d         j        j        }| j         D ]8}||j        j        |j        j        z
  z  }t          ||j        j        ¦  «        }Œ9||j        k    sJ ‚||j        k    rt          j        |||j        z
  ¦  «        }|S )Nr™   r   )r�   r   rš   r"   r!   r6   rœ   r�   )r+   r"   r6   r•   s       r.   r"   zComposeTransform.codomain:  s·   € àŒzð 	$ÝÔ#Ð#Ø”:˜b”>Ô*ˆà”J˜q”MÔ(Ô2ˆ	Ø”Jð 	@ð 	@ˆDØ˜œÔ0°4´;Ô3HÑHÑHˆIÝ˜I t¤}Ô'>Ñ?Ô?ˆIˆIØ˜HÔ.Ò.Ð.Ð.Ð.Ø�xÔ)Ò)Ð)Ý"Ô.¨x¸ÀXÔEWÑ9WÑXÔXˆHØˆr/   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rH   ©rp   ©r”   Úps     r.   ú	<genexpr>z-ComposeTransform.bijective.<locals>.<genexpr>K  s$   è è € Ð3Ð3 1�1”;Ð3Ð3Ð3Ð3Ð3Ð3r/   )Úallr�   r7   s    r.   rp   zComposeTransform.bijectiveI  s!   € åÐ3Ð3¨¬
Ð3Ñ3Ô3Ñ3Ô3Ð3r/   c                 ó2   — d}| j         D ]}||j        z  }Œ|S ©Nr$   )r�   rA   )r+   rA   r£   s      r.   rA   zComposeTransform.signM  s*   € àˆØ”ð 	!ð 	!ˆAØ˜!œ&‘=ˆDˆDØˆr/   c                 óþ   — d }| j         �|                       ¦   «         }|€]t          d„ t          | j        ¦  «        D ¦   «         ¦  «        }t	          j        |¦  «        | _         t	          j        | ¦  «        |_         |S )Nc                 ó   — g | ]	}|j         ‘Œ
S rI   )r=   r¢   s     r.   r–   z(ComposeTransform.inv.<locals>.<listcomp>Z  s   € Ð#HÐ#HÐ#H¨a A¤EÐ#HÐ#HÐ#Hr/   )r&   r   r›   r�   r:   r;   r<   s     r.   r=   zComposeTransform.invT  sn   € àˆØŒ9Ð Ø—)’)‘+”+ˆCØˆ;Ý"Ð#HÐ#Hµ8¸D¼JÑ3GÔ3GÐ#HÑ#HÔ#HÑIÔIˆCÝœ CÑ(Ô(ˆDŒIÝ”{ 4Ñ(Ô(ˆCŒHØˆ
r/   r$   c                 óH   — | j         |k    r| S t          | j        |¬¦  «        S ry   )r%   r   r�   rE   s     r.   rF   zComposeTransform.with_cache_  s*   € ØÔ˜zÒ)Ð)ØˆKÝ ¤
°zÐBÑBÔBÐBr/   c                 ó0   — | j         D ]} ||¦  «        }Œ|S rH   )r�   )r+   rQ   r•   s      r.   rU   zComposeTransform.__call__d  s'   € Ø”Jð 	ð 	ˆDØ��Q‘”ˆAˆAØˆr/   c           	      óH  — | j         st          j        |¦  «        S |g}| j         d d…         D ]&}|                      ||d         ¦  «        ¦  «         Œ'|                     |¦  «         g }| j        j        }t          | j         |d d…         |dd …         ¦  «        D ]f\  }}}|                     t          |                     ||¦  «        ||j        j        z
  ¦  «        ¦  «         ||j	        j        |j        j        z
  z  }Œgt          j        t          j        |¦  «        S )Nr™   r$   )r�   ÚtorchÚ
zeros_likeÚappendr!   r6   Úzipr   r`   r"   Ú	functoolsÚreduceÚoperatorÚadd)r+   rQ   rT   Úxsr•   Útermsr6   s          r.   r`   z%ComposeTransform.log_abs_det_jacobiani  s'  € ØŒzð 	'ÝÔ# AÑ&Ô&Ð&ð ˆSˆØ”J˜s ˜s”Oð 	$ð 	$ˆDØ�IŠI�d�d˜2˜bœ6‘l”lÑ#Ô#Ð#Ð#Ø
�	Š	�!‰ŒˆàˆØ”KÔ)ˆ	Ý˜dœj¨"¨S¨b¨S¬'°2°a°b°b´6Ñ:Ô:ð 	Ið 	I‰JˆD�!�QØ�LŠLÝØ×-Ò-¨a°Ñ3Ô3°YÀÄÔAVÑ5Vñô ñô ð ð
 ˜œÔ0°4´;Ô3HÑHÑHˆIˆIÝÔ¥¤¨eÑ4Ô4Ð4r/   c                 óD   — | j         D ]}|                     |¦  «        }Œ|S rH   )r�   rg   ©r+   rf   r•   s      r.   rg   zComposeTransform.forward_shape~  s-   € Ø”Jð 	.ð 	.ˆDØ×&Ò& uÑ-Ô-ˆEˆEØˆr/   c                 ó^   — t          | j        ¦  «        D ]}|                     |¦  «        }Œ|S rH   )r›   r�   rj   r¸   s      r.   rj   zComposeTransform.inverse_shapeƒ  s5   € Ý˜TœZÑ(Ô(ð 	.ð 	.ˆDØ×&Ò& uÑ-Ô-ˆEˆEØˆr/   c                 ó|   — | j         j        dz   }|d                     d„ | j        D ¦   «         ¦  «        z  }|dz  }|S )Nz(
    z,
    c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rI   )rc   r¢   s     r.   r–   z-ComposeTransform.__repr__.<locals>.<listcomp>Š  s    € Ð%GÐ%GÐ%G°q a§j¢j¡l¤lÐ%GÐ%GÐ%Gr/   z
))r-   rb   Újoinr�   )r+   Ú
fmt_strings     r.   rc   zComposeTransform.__repr__ˆ  sH   € Ø”^Ô,¨yÑ8ˆ
Ø�i—n’nÐ%GÐ%G¸D¼JÐ%GÑ%GÔ%GÑHÔHÑHˆ
Ø�eÑˆ
ØÐr/   rk   rl   )rb   rm   rn   ro   r   r   r*   rL   r   rŽ   r!   r"   r   rp   rA   rs   r=   rF   rU   r`   rg   rj   rc   rt   ru   s   @r.   r   r     sr  ø€ € € € € ðð ðð ˜d 9œoð ð ð ð ð ð ð)ð )ð )ð
 $€[Ô#°Ð6Ñ6Ô6ðð ñ 7Ô6ðð $€[Ô#°Ð6Ñ6Ô6ðð ñ 7Ô6ðð ð4ð 4ñ „]ð4ð ðð ñ „]ðð ðð ñ „XððCð Cð Cð Cð
ð ð ð
5ð 5ð 5ð*ð ð ð
ð ð ð
ð ð ð ð ð ð r/   r   c                   óä   ‡ — e Zd ZdZdˆ fd„	Zdd„Z ej        d¬¦  «        d„ ¦   «         Z ej        d¬¦  «        d	„ ¦   «         Z	e
d
„ ¦   «         Ze
d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   a  
    Wrapper around another transform to treat
    ``reinterpreted_batch_ndims``-many extra of the right most dimensions as
    dependent. This has no effect on the forward or backward transforms, but
    does sum out ``reinterpreted_batch_ndims``-many of the rightmost dimensions
    in :meth:`log_abs_det_jacobian`.

    Args:
        base_transform (:class:`Transform`): A base transform.
        reinterpreted_batch_ndims (int): The number of extra rightmost
            dimensions to treat as dependent.
    r   c                 óŽ   •— t          ¦   «                              |¬¦  «         |                     |¦  «        | _        || _        d S ry   )r)   r*   rF   Úbase_transformÚreinterpreted_batch_ndims)r+   rÀ   rÁ   r,   r-   s       €r.   r*   zIndependentTransform.__init__   sB   ø€ Ý‰Œ×Ò JÐÑ/Ô/Ð/Ø,×7Ò7¸
ÑCÔCˆÔØ)BˆÔ&Ð&Ð&r/   r$   c                 óT   — | j         |k    r| S t          | j        | j        |¬¦  «        S ry   )r%   r   rÀ   rÁ   rE   s     r.   rF   zIndependentTransform.with_cache¥  s9   € ØÔ˜zÒ)Ð)ØˆKÝ#ØÔ Ô!?ÈJð
ñ 
ô 
ð 	
r/   Frz   c                 óJ   — t          j        | j        j        | j        ¦  «        S rH   )r   r�   rÀ   r!   rÁ   r7   s    r.   r!   zIndependentTransform.domain¬  s%   € åÔ&ØÔÔ&¨Ô(Fñ
ô 
ð 	
r/   c                 óJ   — t          j        | j        j        | j        ¦  «        S rH   )r   r�   rÀ   r"   rÁ   r7   s    r.   r"   zIndependentTransform.codomain²  s%   € åÔ&ØÔÔ(¨$Ô*Hñ
ô 
ð 	
r/   c                 ó   — | j         j        S rH   )rÀ   rp   r7   s    r.   rp   zIndependentTransform.bijective¸  s   € àÔ"Ô,Ð,r/   c                 ó   — | j         j        S rH   )rÀ   rA   r7   s    r.   rA   zIndependentTransform.sign¼  s   € àÔ"Ô'Ð'r/   c                 óŽ   — |                      ¦   «         | j        j        k     rt          d¦  «        ‚|                      |¦  «        S ©NúToo few dimensions on input)Údimr!   r6   r(   rÀ   rZ   s     r.   rP   zIndependentTransform._callÀ  s=   € Ø�5Š5‰7Œ7�T”[Ô*Ò*Ð*ÝÐ:Ñ;Ô;Ð;Ø×"Ò" 1Ñ%Ô%Ð%r/   c                 ó˜   — |                      ¦   «         | j        j        k     rt          d¦  «        ‚| j                             |¦  «        S rÈ   )rÊ   r"   r6   r(   rÀ   r=   r]   s     r.   rW   zIndependentTransform._inverseÅ  s@   € Ø�5Š5‰7Œ7�T”]Ô,Ò,Ð,ÝÐ:Ñ;Ô;Ð;ØÔ"×&Ò& qÑ)Ô)Ð)r/   c                 óf   — | j                              ||¦  «        }t          || j        ¦  «        }|S rH   )rÀ   r`   r   rÁ   )r+   rQ   rT   Úresults       r.   r`   z)IndependentTransform.log_abs_det_jacobianÊ  s1   € ØÔ$×9Ò9¸!¸QÑ?Ô?ˆÝ ¨Ô(FÑGÔGˆØˆr/   c                 óZ   — | j         j        › dt          | j        ¦  «        › d| j        › d�S )Nr†   z, r‡   )r-   rb   rˆ   rÀ   rÁ   r7   s    r.   rc   zIndependentTransform.__repr__Ï  s4   € Ø”.Ô)ÐjÐj­D°Ô1DÑ,EÔ,EÐjÐjÈÔIgÐjÐjÐjÐjr/   c                 ó6   — | j                              |¦  «        S rH   )rÀ   rg   re   s     r.   rg   z"IndependentTransform.forward_shapeÒ  ó   € ØÔ"×0Ò0°Ñ7Ô7Ð7r/   c                 ó6   — | j                              |¦  «        S rH   )rÀ   rj   re   s     r.   rj   z"IndependentTransform.inverse_shapeÕ  rÐ   r/   rk   rl   )rb   rm   rn   ro   r*   rF   r   rŽ   r!   r"   rs   rp   rA   rP   rW   r`   rc   rg   rj   rt   ru   s   @r.   r   r   ’  sL  ø€ € € € € ðð ðCð Cð Cð Cð Cð Cð

ð 
ð 
ð 
ð $€[Ô#°Ð6Ñ6Ô6ð
ð 
ñ 7Ô6ð
ð
 $€[Ô#°Ð6Ñ6Ô6ð
ð 
ñ 7Ô6ð
ð
 ð-ð -ñ „Xð-ð ð(ð (ñ „Xð(ð&ð &ð &ð
*ð *ð *ð
ð ð ð
kð kð kð8ð 8ð 8ð8ð 8ð 8ð 8ð 8ð 8ð 8r/   r   c                   óŽ   ‡ — e Zd ZdZdZdˆ fd„	Zej        d„ ¦   «         Zej        d„ ¦   «         Z	dd„Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zˆ xZS )r   aM  
    Unit Jacobian transform to reshape the rightmost part of a tensor.

    Note that ``in_shape`` and ``out_shape`` must have the same number of
    elements, just as for :meth:`torch.Tensor.reshape`.

    Arguments:
        in_shape (torch.Size): The input event shape.
        out_shape (torch.Size): The output event shape.
    Tr   c                 ó6  •— t          j        |¦  «        | _        t          j        |¦  «        | _        | j                             ¦   «         | j                             ¦   «         k    rt          d¦  «        ‚t          ¦   «                              |¬¦  «         d S )Nz6in_shape, out_shape have different numbers of elementsrC   )r­   ÚSizeÚin_shapeÚ	out_shapeÚnumelr(   r)   r*   )r+   rÕ   rÖ   r,   r-   s       €r.   r*   zReshapeTransform.__init__ç  s|   ø€ Ýœ
 8Ñ,Ô,ˆŒÝœ IÑ.Ô.ˆŒØŒ=×ÒÑ Ô  D¤N×$8Ò$8Ñ$:Ô$:Ò:Ð:ÝÐUÑVÔVÐVÝ‰Œ×Ò JÐÑ/Ô/Ð/Ð/Ð/r/   c                 ód   — t          j        t           j        t          | j        ¦  «        ¦  «        S rH   )r   r�   rš   ÚlenrÕ   r7   s    r.   r!   zReshapeTransform.domainî  s"   € åÔ&¥{Ô'7½¸T¼]Ñ9KÔ9KÑLÔLÐLr/   c                 ód   — t          j        t           j        t          | j        ¦  «        ¦  «        S rH   )r   r�   rš   rÙ   rÖ   r7   s    r.   r"   zReshapeTransform.codomainò  s"   € åÔ&¥{Ô'7½¸T¼^Ñ9LÔ9LÑMÔMÐMr/   r$   c                 óT   — | j         |k    r| S t          | j        | j        |¬¦  «        S ry   )r%   r   rÕ   rÖ   rE   s     r.   rF   zReshapeTransform.with_cacheö  s.   € ØÔ˜zÒ)Ð)ØˆKÝ ¤¨t¬~È*ÐUÑUÔUÐUr/   c                 ó¨   — |j         d |                     ¦   «         t          | j        ¦  «        z
  …         }|                     || j        z   ¦  «        S rH   )rf   rÊ   rÙ   rÕ   ÚreshaperÖ   )r+   rQ   Úbatch_shapes      r.   rP   zReshapeTransform._callû  sD   € Ø”gÐ< §¢¡¤­#¨d¬mÑ*<Ô*<Ñ <Ð<Ô=ˆØ�yŠy˜ t¤~Ñ5Ñ6Ô6Ð6r/   c                 ó¨   — |j         d |                     ¦   «         t          | j        ¦  «        z
  …         }|                     || j        z   ¦  «        S rH   )rf   rÊ   rÙ   rÖ   rÝ   rÕ   )r+   rT   rÞ   s      r.   rW   zReshapeTransform._inverseÿ  sD   € Ø”gÐ= §¢¡¤­#¨d¬nÑ*=Ô*=Ñ =Ð=Ô>ˆØ�yŠy˜ t¤}Ñ4Ñ5Ô5Ð5r/   c                 ó˜   — |j         d |                     ¦   «         t          | j        ¦  «        z
  …         }|                     |¦  «        S rH   )rf   rÊ   rÙ   rÕ   Ú	new_zeros)r+   rQ   rT   rÞ   s       r.   r`   z%ReshapeTransform.log_abs_det_jacobian  s=   € Ø”gÐ< §¢¡¤­#¨d¬mÑ*<Ô*<Ñ <Ð<Ô=ˆØ�{Š{˜;Ñ'Ô'Ð'r/   c                 ó@  — t          |¦  «        t          | j        ¦  «        k     rt          d¦  «        ‚t          |¦  «        t          | j        ¦  «        z
  }||d …         | j        k    r"t          d||d …         › d| j        › �¦  «        ‚|d |…         | j        z   S ©NrÉ   zShape mismatch: expected z	 but got )rÙ   rÕ   r(   rÖ   ©r+   rf   Úcuts      r.   rg   zReshapeTransform.forward_shape  s¡   € Ýˆu‰:Œ:�˜DœMÑ*Ô*Ò*Ð*ÝÐ:Ñ;Ô;Ð;Ý�%‰jŒj�3˜tœ}Ñ-Ô-Ñ-ˆØ���Œ;˜$œ-Ò'Ð'ÝØQ¨E°#°$°$¬KÐQÐQÀ$Ä-ÐQÐQñô ð ð �T�c�TŒ{˜Tœ^Ñ+Ð+r/   c                 ó@  — t          |¦  «        t          | j        ¦  «        k     rt          d¦  «        ‚t          |¦  «        t          | j        ¦  «        z
  }||d …         | j        k    r"t          d||d …         › d| j        › �¦  «        ‚|d |…         | j        z   S rã   )rÙ   rÖ   r(   rÕ   rä   s      r.   rj   zReshapeTransform.inverse_shape  s¡   € Ýˆu‰:Œ:�˜DœNÑ+Ô+Ò+Ð+ÝÐ:Ñ;Ô;Ð;Ý�%‰jŒj�3˜tœ~Ñ.Ô.Ñ.ˆØ���Œ;˜$œ.Ò(Ð(ÝØR¨E°#°$°$¬KÐRÐRÀ$Ä.ÐRÐRñô ð ð �T�c�TŒ{˜Tœ]Ñ*Ð*r/   rk   rl   )rb   rm   rn   ro   rp   r*   r   rŽ   r!   r"   rF   rP   rW   r`   rg   rj   rt   ru   s   @r.   r   r   Ù  sõ   ø€ € € € € ð	ð 	ð €Ið0ð 0ð 0ð 0ð 0ð 0ð Ô#ðMð Mñ $Ô#ðMð Ô#ðNð Nñ $Ô#ðNðVð Vð Vð Vð
7ð 7ð 7ð6ð 6ð 6ð(ð (ð (ð,ð ,ð ,ð+ð +ð +ð +ð +ð +ð +r/   r   c                   óN   — e Zd ZdZej        Zej        ZdZ	dZ
d„ Zd„ Zd„ Zd„ ZdS )	r   z8
    Transform via the mapping :math:`y = \exp(x)`.
    Tr$   c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zExpTransform.__eq__%  ó   € Ý˜%¥Ñ.Ô.Ð.r/   c                 ó*   — |                      ¦   «         S rH   )ÚexprZ   s     r.   rP   zExpTransform._call(  ó   € Ø�uŠu‰wŒwˆr/   c                 ó*   — |                      ¦   «         S rH   ©Úlogr]   s     r.   rW   zExpTransform._inverse+  rì   r/   c                 ó   — |S rH   rI   r_   s      r.   r`   z!ExpTransform.log_abs_det_jacobian.  ó   € Øˆr/   N©rb   rm   rn   ro   r   rš   r!   Úpositiver"   rp   rA   rL   rP   rW   r`   rI   r/   r.   r   r     sv   € € € € € ðð ð Ô€FØÔ#€HØ€IØ€Dð/ð /ð /ðð ð ðð ð ðð ð ð ð r/   r   c                   ó†   ‡ — e Zd ZdZej        Zej        ZdZdˆ fd„	Z	dd„Z
ed„ ¦   «         Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zˆ xZS )r   zD
    Transform via the mapping :math:`y = x^{\text{exponent}}`.
    Tr   c                 óx   •— t          ¦   «                              |¬¦  «         t          |¦  «        \  | _        d S ry   )r)   r*   r   Úexponent)r+   rö   r,   r-   s      €r.   r*   zPowerTransform.__init__:  s4   ø€ Ý‰Œ×Ò JÐÑ/Ô/Ð/Ý(¨Ñ2Ô2ÑˆŒˆˆr/   r$   c                 óH   — | j         |k    r| S t          | j        |¬¦  «        S ry   )r%   r   rö   rE   s     r.   rF   zPowerTransform.with_cache>  s*   € ØÔ˜zÒ)Ð)ØˆKÝ˜dœm¸
ÐCÑCÔCÐCr/   c                 ó4   — | j                              ¦   «         S rH   )rö   rA   r7   s    r.   rA   zPowerTransform.signC  s   € àŒ}×!Ò!Ñ#Ô#Ð#r/   c                 ó¶   — t          |t          ¦  «        sdS | j                             |j        ¦  «                             ¦   «                              ¦   «         S rƒ   )r„   r   rö   Úeqr¥   ÚitemrJ   s     r.   rL   zPowerTransform.__eq__G  sI   € Ý˜%¥Ñ0Ô0ð 	Ø�5ØŒ}×Ò ¤Ñ/Ô/×3Ò3Ñ5Ô5×:Ò:Ñ<Ô<Ð<r/   c                 ó6   — |                      | j        ¦  «        S rH   ©Úpowrö   rZ   s     r.   rP   zPowerTransform._callL  s   € Ø�uŠu�T”]Ñ#Ô#Ð#r/   c                 ó<   — |                      d| j        z  ¦  «        S r§   rý   r]   s     r.   rW   zPowerTransform._inverseO  s   € Ø�uŠu�Q˜œÑ&Ñ'Ô'Ð'r/   c                 ód   — | j         |z  |z                       ¦   «                              ¦   «         S rH   )rö   Úabsrï   r_   s      r.   r`   z#PowerTransform.log_abs_det_jacobianR  s,   € Ø” Ñ! AÑ%×*Ò*Ñ,Ô,×0Ò0Ñ2Ô2Ð2r/   c                 óT   — t          j        |t          | j        dd¦  «        ¦  «        S ©Nrf   rI   ©r­   Úbroadcast_shapesÚgetattrrö   re   s     r.   rg   zPowerTransform.forward_shapeU  ó#   € ÝÔ% e­W°T´]ÀGÈRÑ-PÔ-PÑQÔQÐQr/   c                 óT   — t          j        |t          | j        dd¦  «        ¦  «        S r  r  re   s     r.   rj   zPowerTransform.inverse_shapeX  r  r/   rk   rl   )rb   rm   rn   ro   r   ró   r!   r"   rp   r*   rF   r   rA   rL   rP   rW   r`   rg   rj   rt   ru   s   @r.   r   r   2  sõ   ø€ € € € € ðð ð Ô!€FØÔ#€HØ€Ið3ð 3ð 3ð 3ð 3ð 3ðDð Dð Dð Dð
 ð$ð $ñ „]ð$ð=ð =ð =ð
$ð $ð $ð(ð (ð (ð3ð 3ð 3ðRð Rð RðRð Rð Rð Rð Rð Rð Rr/   r   c                 ó    — t          j        | j        ¦  «        }t          j        t          j        | ¦  «        |j        d|j        z
  ¬¦  «        S ©Nç      ð?©Úminrœ   )r­   ÚfinfoÚdtypeÚclampÚsigmoidÚtinyÚeps)rQ   r  s     r.   Ú_clipped_sigmoidr  \  s<   € ÝŒK˜œÑ Ô €EÝŒ;•u”} QÑ'Ô'¨U¬Z¸SÀ5Ä9¹_ÐMÑMÔMÐMr/   c                   óN   — e Zd ZdZej        Zej        ZdZ	dZ
d„ Zd„ Zd„ Zd„ ZdS )	r   zg
    Transform via the mapping :math:`y = \frac{1}{1 + \exp(-x)}` and :math:`x = \text{logit}(y)`.
    Tr$   c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zSigmoidTransform.__eq__j  ó   € Ý˜%Õ!1Ñ2Ô2Ð2r/   c                 ó    — t          |¦  «        S rH   )r  rZ   s     r.   rP   zSigmoidTransform._callm  s   € Ý Ñ"Ô"Ð"r/   c                 óÐ   — t          j        |j        ¦  «        }|                     |j        d|j        z
  ¬¦  «        }|                     ¦   «         |                      ¦   «         z
  S r
  )r­   r  r  r  r  r  rï   Úlog1p)r+   rT   r  s      r.   rW   zSigmoidTransform._inversep  sM   € Ý”˜AœGÑ$Ô$ˆØ�GŠG˜œ
¨¨e¬i©ˆGÑ8Ô8ˆØ�uŠu‰wŒw˜1˜"Ÿš™œÑ%Ð%r/   c                 óX   — t          j        | ¦  «         t          j        |¦  «        z
  S rH   )ÚFr   r_   s      r.   r`   z%SigmoidTransform.log_abs_det_jacobianu  s!   € Ý”
˜A˜2‘”ˆ¥¤¨A¡¤Ñ.Ð.r/   N)rb   rm   rn   ro   r   rš   r!   Úunit_intervalr"   rp   rA   rL   rP   rW   r`   rI   r/   r.   r   r   a  sv   € € € € € ðð ð Ô€FØÔ(€HØ€IØ€Dð3ð 3ð 3ð#ð #ð #ð&ð &ð &ð
/ð /ð /ð /ð /r/   r   c                   óN   — e Zd ZdZej        Zej        ZdZ	dZ
d„ Zd„ Zd„ Zd„ ZdS )	r   zž
    Transform via the mapping :math:`\text{Softplus}(x) = \log(1 + \exp(x))`.
    The implementation reverts to the linear function when :math:`x > 20`.
    Tr$   c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zSoftplusTransform.__eq__ƒ  s   € Ý˜%Õ!2Ñ3Ô3Ð3r/   c                 ó    — t          |¦  «        S rH   ©r   rZ   s     r.   rP   zSoftplusTransform._call†  s   € Ý˜‰{Œ{Ðr/   c                 óz   — |                       ¦   «                              ¦   «                              ¦   «         |z   S rH   )Úexpm1Únegrï   r]   s     r.   rW   zSoftplusTransform._inverse‰  s/   € Ø��zŠz‰|Œ|×ÒÑ!Ô!×%Ò%Ñ'Ô'¨!Ñ+Ð+r/   c                 ó$   — t          | ¦  «         S rH   r!  r_   s      r.   r`   z&SoftplusTransform.log_abs_det_jacobianŒ  s   € Ý˜!˜‘”ˆ}Ðr/   Nrò   rI   r/   r.   r   r   y  sv   € € € € € ðð ð Ô€FØÔ#€HØ€IØ€Dð4ð 4ð 4ðð ð ð,ð ,ð ,ðð ð ð ð r/   r   c                   ób   — e Zd ZdZej        Z ej        dd¦  «        ZdZ	dZ
d„ Zd„ Zd„ Zd	„ Zd
S )r   a~  
    Transform via the mapping :math:`y = \tanh(x)`.

    It is equivalent to
    ```
    ComposeTransform([AffineTransform(0., 2.), SigmoidTransform(), AffineTransform(-1., 2.)])
    ```
    However this might not be numerically stable, thus it is recommended to use `TanhTransform`
    instead.

    Note that one should use `cache_size=1` when it comes to `NaN/Inf` values.

    g      ð¿r  Tr$   c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zTanhTransform.__eq__£  s   € Ý˜%¥Ñ/Ô/Ð/r/   c                 ó*   — |                      ¦   «         S rH   )ÚtanhrZ   s     r.   rP   zTanhTransform._call¦  s   € Ø�vŠv‰xŒxˆr/   c                 ó*   — t          j        |¦  «        S rH   )r­   Úatanhr]   s     r.   rW   zTanhTransform._inverse©  s   € õ Œ{˜1‰~Œ~Ðr/   c                 ó\   — dt          j        d¦  «        |z
  t          d|z  ¦  «        z
  z  S )Nç       @g       À)Úmathrï   r   r_   s      r.   r`   z"TanhTransform.log_abs_det_jacobian®  s-   € ð •d”h˜s‘m”m aÑ'­(°4¸!±8Ñ*<Ô*<Ñ<Ñ=Ð=r/   N)rb   rm   rn   ro   r   rš   r!   Úintervalr"   rp   rA   rL   rP   rW   r`   rI   r/   r.   r   r   �  s‚   € € € € € ðð ð Ô€FØ#ˆ{Ô# D¨#Ñ.Ô.€HØ€IØ€Dð0ð 0ð 0ðð ð ðð ð ð
>ð >ð >ð >ð >r/   r   c                   ó@   — e Zd ZdZej        Zej        Zd„ Z	d„ Z
d„ ZdS )r   z4
    Transform via the mapping :math:`y = |x|`.
    c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zAbsTransform.__eq__»  ré   r/   c                 ó*   — |                      ¦   «         S rH   )r  rZ   s     r.   rP   zAbsTransform._call¾  rì   r/   c                 ó   — |S rH   rI   r]   s     r.   rW   zAbsTransform._inverseÁ  rñ   r/   N)rb   rm   rn   ro   r   rš   r!   ró   r"   rL   rP   rW   rI   r/   r.   r   r   ´  s]   € € € € € ðð ð Ô€FØÔ#€Hð/ð /ð /ðð ð ðð ð ð ð r/   r   c                   óè   ‡ — e Zd ZdZdZdˆ fd„	Zed„ ¦   «         Z ej	        d¬¦  «        d„ ¦   «         Z
 ej	        d¬¦  «        d	„ ¦   «         Zdd„Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   a¤  
    Transform via the pointwise affine mapping :math:`y = \text{loc} + \text{scale} \times x`.

    Args:
        loc (Tensor or float): Location parameter.
        scale (Tensor or float): Scale parameter.
        event_dim (int): Optional size of `event_shape`. This should be zero
            for univariate random variables, 1 for distributions over vectors,
            2 for distributions over matrices, etc.
    Tr   c                 óv   •— t          ¦   «                              |¬¦  «         || _        || _        || _        d S ry   )r)   r*   ÚlocÚscaleÚ
_event_dim)r+   r6  r7  r6   r,   r-   s        €r.   r*   zAffineTransform.__init__Ò  s7   ø€ Ý‰Œ×Ò JÐÑ/Ô/Ð/ØˆŒØˆŒ
Ø#ˆŒˆˆr/   c                 ó   — | j         S rH   )r8  r7   s    r.   r6   zAffineTransform.event_dimØ  s
   € àŒÐr/   Frz   c                 óx   — | j         dk    rt          j        S t          j        t          j        | j         ¦  «        S ©Nr   ©r6   r   rš   r�   r7   s    r.   r!   zAffineTransform.domainÜ  ó0   € àŒ>˜QÒÐÝÔ#Ð#ÝÔ&¥{Ô'7¸¼ÑHÔHÐHr/   c                 óx   — | j         dk    rt          j        S t          j        t          j        | j         ¦  «        S r;  r<  r7   s    r.   r"   zAffineTransform.codomainâ  r=  r/   r$   c                 ó`   — | j         |k    r| S t          | j        | j        | j        |¬¦  «        S ry   )r%   r   r6  r7  r6   rE   s     r.   rF   zAffineTransform.with_cacheè  s;   € ØÔ˜zÒ)Ð)ØˆKÝØŒH�d”j $¤.¸Zð
ñ 
ô 
ð 	
r/   c                 óP  — t          |t          ¦  «        sdS t          | j        t          j        ¦  «        r2t          |j        t          j        ¦  «        r| j        |j        k    rdS n6| j        |j        k                         ¦   «                              ¦   «         sdS t          | j        t          j        ¦  «        r2t          |j        t          j        ¦  «        r| j        |j        k    rdS n6| j        |j        k                         ¦   «                              ¦   «         sdS dS )NFT)r„   r   r6  ÚnumbersÚNumberr¥   rû   r7  rJ   s     r.   rL   zAffineTransform.__eq__ï  s  € Ý˜%¥Ñ1Ô1ð 	Ø�5å�d”h¥¤Ñ/Ô/ð 	µJØŒI•w”~ñ5
ô 5
ð 	ð Œx˜5œ9Ò$Ð$Ø�uð %ð ”H ¤	Ò)×.Ò.Ñ0Ô0×5Ò5Ñ7Ô7ð Ø�uå�d”j¥'¤.Ñ1Ô1ð 	µjØŒK�œñ7
ô 7
ð 	ð Œz˜Uœ[Ò(Ð(Ø�uð )ð ”J %¤+Ò-×2Ò2Ñ4Ô4×9Ò9Ñ;Ô;ð Ø�uàˆtr/   c                 óÞ   — t          | j        t          j        ¦  «        r6t	          | j        ¦  «        dk    rdnt	          | j        ¦  «        dk     rdndS | j                             ¦   «         S )Nr   r$   r™   )r„   r7  rA  ÚRealÚfloatrA   r7   s    r.   rA   zAffineTransform.sign  sb   € å�d”j¥'¤,Ñ/Ô/ð 	VÝ˜dœjÑ)Ô)¨AÒ-Ð-�1�1½¸t¼zÑ9JÔ9JÈQÒ9NÐ9N°2°2ÐTUÐUØŒz�ŠÑ Ô Ð r/   c                 ó&   — | j         | j        |z  z   S rH   ©r6  r7  rZ   s     r.   rP   zAffineTransform._call  s   € ØŒx˜$œ* q™.Ñ(Ð(r/   c                 ó&   — || j         z
  | j        z  S rH   rG  r]   s     r.   rW   zAffineTransform._inverse  s   € Ø�D”H‘ ¤
Ñ*Ð*r/   c                 óú  — |j         }| j        }t          |t          j        ¦  «        r5t          j        |t          j        t          |¦  «        ¦  «        ¦  «        }n&t          j	        |¦  «                             ¦   «         }| j
        r]|                     ¦   «         d | j
         …         dz   }|                     |¦  «                             d¦  «        }|d | j
         …         }|                     |¦  «        S )N)r™   r™   )rf   r7  r„   rA  rD  r­   Ú	full_liker.  rï   r  r6   ÚsizeÚviewÚsumÚexpand)r+   rQ   rT   rf   r7  rÍ   Úresult_sizes          r.   r`   z$AffineTransform.log_abs_det_jacobian  sÒ   € Ø”ˆØ”
ˆÝ�e�Wœ\Ñ*Ô*ð 	,Ý”_ Q­¬µ°U±´Ñ(<Ô(<Ñ=Ô=ˆFˆFå”Y˜uÑ%Ô%×)Ò)Ñ+Ô+ˆFØŒ>ð 	-Ø Ÿ+š+™-œ-Ð(9¨4¬>¨/Ð(9Ô:¸UÑBˆKØ—[’[ Ñ-Ô-×1Ò1°"Ñ5Ô5ˆFØÐ+˜Tœ^˜OÐ+Ô,ˆEØ�}Š}˜UÑ#Ô#Ð#r/   c           	      ó~   — t          j        |t          | j        dd¦  «        t          | j        dd¦  «        ¦  «        S r  ©r­   r  r  r6  r7  re   s     r.   rg   zAffineTransform.forward_shape   ó;   € ÝÔ%Ø•7˜4œ8 W¨bÑ1Ô1µ7¸4¼:ÀwÐPRÑ3SÔ3Sñ
ô 
ð 	
r/   c           	      ó~   — t          j        |t          | j        dd¦  «        t          | j        dd¦  «        ¦  «        S r  rQ  re   s     r.   rj   zAffineTransform.inverse_shape%  rR  r/   ©r   r   rl   )rb   rm   rn   ro   rp   r*   rs   r6   r   rŽ   r!   r"   rF   rL   rA   rP   rW   r`   rg   rj   rt   ru   s   @r.   r   r   Å  sP  ø€ € € € € ð	ð 	ð €Ið$ð $ð $ð $ð $ð $ð ðð ñ „Xðð $€[Ô#°Ð6Ñ6Ô6ðIð Iñ 7Ô6ðIð
 $€[Ô#°Ð6Ñ6Ô6ðIð Iñ 7Ô6ðIð

ð 
ð 
ð 
ðð ð ð0 ð!ð !ñ „Xð!ð
)ð )ð )ð+ð +ð +ð$ð $ð $ð
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð 
ð 
r/   r   c                   óR   — e Zd ZdZej        Zej        ZdZ	d„ Z
d„ Zd	d„Zd„ Zd„ ZdS )
r   a¯  
    Transforms an uncontrained real vector :math:`x` with length :math:`D*(D-1)/2` into the
    Cholesky factor of a D-dimension correlation matrix. This Cholesky factor is a lower
    triangular matrix with positive diagonals and unit Euclidean norm for each row.
    The transform is processed as follows:

        1. First we convert x into a lower triangular matrix in row order.
        2. For each row :math:`X_i` of the lower triangular part, we apply a *signed* version of
           class :class:`StickBreakingTransform` to transform :math:`X_i` into a
           unit Euclidean length vector using the following steps:
           - Scales into the interval :math:`(-1, 1)` domain: :math:`r_i = \tanh(X_i)`.
           - Transforms into an unsigned domain: :math:`z_i = r_i^2`.
           - Applies :math:`s_i = StickBreakingTransform(z_i)`.
           - Transforms back into signed domain: :math:`y_i = sign(r_i) * \sqrt{s_i}`.
    Tc                 óÄ  — t          j        |¦  «        }t          j        |j        ¦  «        j        }|                     d|z   d|z
  ¬¦  «        }t          |d¬¦  «        }|dz  }d|z
                       ¦   «                              d¦  «        }|t          j	        |j
        d         |j        |j        ¬¦  «        z   }|t          |dd d…f         ddgd¬	¦  «        z  }|S )
Nr™   r$   r  ©Údiagé   )r  Údevice.r   ©Úvalue)r­   r)  r  r  r  r  r	   ÚsqrtÚcumprodÚeyerf   rZ  r
   )r+   rQ   r  ÚrÚzÚz1m_cumprod_sqrtrT   s          r.   rP   zCorrCholeskyTransform._call?  sÒ   € ÝŒJ�q‰MŒMˆÝŒk˜!œ'Ñ"Ô"Ô&ˆØ�GŠG˜˜S™ a¨#¡gˆGÑ.Ô.ˆÝ˜q rÐ*Ñ*Ô*ˆð ˆq‰DˆØ ™EŸ<š<™>œ>×1Ò1°"Ñ5Ô5Ðà•”	˜!œ' "œ+¨Q¬W¸Q¼XÐFÑFÔFÑFˆØ•Ð$ S¨#¨2¨# XÔ.°°A°¸aÐ@Ñ@Ô@Ñ@ˆØˆr/   c                 óh  — dt          j        ||z  d¬¦  «        z
  }t          |dd d…f         ddgd¬¦  «        }t          |d¬¦  «        }t          |d¬¦  «        }||                     ¦   «         z  }|                     ¦   «         |                     ¦   «                              ¦   «         z
  dz  }|S )	Nr$   r™   ©rÊ   .r   r[  rW  rY  )r­   Úcumsumr
   r   r]  r  r$  )r+   rT   Úy_cumsumÚy_cumsum_shiftedÚy_vecÚy_cumsum_vecÚtrQ   s           r.   rW   zCorrCholeskyTransform._inverseN  s®   € ð •u”| A¨¡E¨rÐ2Ñ2Ô2Ñ2ˆÝ˜x¨¨S¨b¨S¨Ô1°A°q°6ÀÐCÑCÔCÐÝ" 1¨2Ð.Ñ.Ô.ˆÝ)Ð*:ÀÐDÑDÔDˆØ�\×'Ò'Ñ)Ô)Ñ)ˆà�WŠW‰YŒY˜Ÿš™œŸš™œÑ(¨AÑ-ˆØˆr/   Nc                 ó<  — d||z                        d¬¦  «        z
  }t          |d¬¦  «        }d|                     ¦   «                              d¦  «        z  }d|t	          d|z  ¦  «        z   t          j        d¦  «        z
                       d¬¦  «        z  }||z   S )Nr$   r™   rd  éþÿÿÿrW  ç      à?r-  )re  r   rï   rM  r   r.  )r+   rQ   rT   ÚintermediatesÚ
y1m_cumsumÚy1m_cumsum_trilÚstick_breaking_logdetÚtanh_logdets           r.   r`   z*CorrCholeskyTransform.log_abs_det_jacobianZ  s�   € ð ˜!˜a™%Ÿš¨B˜Ñ/Ô/Ñ/ˆ
õ -¨Z¸bÐAÑAÔAˆØ # ×&;Ò&;Ñ&=Ô&=×&AÒ&AÀ"Ñ&EÔ&EÑ EÐØ˜A¥¨¨a©Ñ 0Ô 0Ñ0µ4´8¸C±=´=Ñ@×EÒEÈ"ÐEÑMÔMÑMˆØ$ {Ñ2Ð2r/   c                 óæ   — t          |¦  «        dk     rt          d¦  «        ‚|d         }t          dd|z  z   dz  dz   ¦  «        }||dz
  z  dz  |k    rt          d¦  «        ‚|d d…         ||fz   S )Nr$   rÉ   r™   g      Ð?rY  rm  z-Input is not a flattend lower-diagonal number)rÙ   r(   Úround)r+   rf   ÚNÚDs       r.   rg   z#CorrCholeskyTransform.forward_shapeh  s†   € åˆu‰:Œ:˜Š>ˆ>ÝÐ:Ñ;Ô;Ð;Ø�"ŒIˆÝ�4˜!˜a™%‘< CÑ'¨#Ñ-Ñ.Ô.ˆØ��A‘‰;˜!Ñ˜qÒ Ð ÝÐLÑMÔMÐMØ�S�b�SŒz˜Q ˜FÑ"Ð"r/   c                 óÊ   — t          |¦  «        dk     rt          d¦  «        ‚|d         |d         k    rt          d¦  «        ‚|d         }||dz
  z  dz  }|d d…         |fz   S )NrY  rÉ   rl  r™   zInput is not squarer$   ©rÙ   r(   )r+   rf   rv  ru  s       r.   rj   z#CorrCholeskyTransform.inverse_shaper  sr   € åˆu‰:Œ:˜Š>ˆ>ÝÐ:Ñ;Ô;Ð;Ø�Œ9˜˜bœ	Ò!Ð!ÝÐ2Ñ3Ô3Ð3Ø�"ŒIˆØ��Q‘‰K˜1ÑˆØ�S�b�SŒz˜Q˜DÑ Ð r/   rH   )rb   rm   rn   ro   r   Úreal_vectorr!   Úcorr_choleskyr"   rp   rP   rW   r`   rg   rj   rI   r/   r.   r   r   +  s…   € € € € € ðð ð Ô$€FØÔ(€HØ€Iðð ð ð
ð 
ð 
ð3ð 3ð 3ð 3ð#ð #ð #ð!ð !ð !ð !ð !r/   r   c                   óL   — e Zd ZdZej        Zej        Zd„ Z	d„ Z
d„ Zd„ Zd„ ZdS )r   a<  
    Transform from unconstrained space to the simplex via :math:`y = \exp(x)` then
    normalizing.

    This is not bijective and cannot be used for HMC. However this acts mostly
    coordinate-wise (except for the final normalization), and thus is
    appropriate for coordinate-wise optimization algorithms.
    c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zSoftmaxTransform.__eq__‰  r  r/   c                 óš   — |}||                      dd¦  «        d         z
                       ¦   «         }||                     dd¦  «        z  S )Nr™   Tr   )rœ   rë   rM  )r+   rQ   ÚlogprobsÚprobss       r.   rP   zSoftmaxTransform._callŒ  sI   € ØˆØ˜HŸLšL¨¨TÑ2Ô2°1Ô5Ñ5×:Ò:Ñ<Ô<ˆØ�u—y’y  TÑ*Ô*Ñ*Ð*r/   c                 ó.   — |}|                      ¦   «         S rH   rî   )r+   rT   r  s      r.   rW   zSoftmaxTransform._inverse‘  s   € ØˆØ�yŠy‰{Œ{Ðr/   c                 óJ   — t          |¦  «        dk     rt          d¦  «        ‚|S ©Nr$   rÉ   rx  re   s     r.   rg   zSoftmaxTransform.forward_shape•  ó%   € Ýˆu‰:Œ:˜Š>ˆ>ÝÐ:Ñ;Ô;Ð;Øˆr/   c                 óJ   — t          |¦  «        dk     rt          d¦  «        ‚|S r‚  rx  re   s     r.   rj   zSoftmaxTransform.inverse_shapeš  rƒ  r/   N)rb   rm   rn   ro   r   ry  r!   Úsimplexr"   rL   rP   rW   rg   rj   rI   r/   r.   r   r   }  s{   € € € € € ðð ð Ô$€FØÔ"€Hð3ð 3ð 3ð+ð +ð +ð
ð ð ðð ð ð
ð ð ð ð r/   r   c                   óV   — e Zd ZdZej        Zej        ZdZ	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd	S )
r   a  
    Transform from unconstrained space to the simplex of one additional
    dimension via a stick-breaking process.

    This transform arises as an iterated sigmoid transform in a stick-breaking
    construction of the `Dirichlet` distribution: the first logit is
    transformed via sigmoid to the first probability and the probability of
    everything else, and then the process recurses.

    This is bijective and appropriate for use in HMC; however it mixes
    coordinates together and is less appropriate for optimization.
    Tc                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zStickBreakingTransform.__eq__²  ó   € Ý˜%Õ!7Ñ8Ô8Ð8r/   c                 óX  — |j         d         dz   |                     |j         d         ¦  «                             d¦  «        z
  }t          ||                     ¦   «         z
  ¦  «        }d|z
                       d¦  «        }t          |ddgd¬¦  «        t          |ddgd¬¦  «        z  }|S )Nr™   r$   r   r[  )rf   Únew_onesre  r  rï   r^  r
   )r+   rQ   Úoffsetra  Ú	z_cumprodrT   s         r.   rP   zStickBreakingTransform._callµ  sš   € Ø”˜”˜q‘ 1§:¢:¨a¬g°b¬kÑ#:Ô#:×#AÒ#AÀ"Ñ#EÔ#EÑEˆÝ˜Q §¢¡¤Ñ-Ñ.Ô.ˆØ˜‘U—O’O BÑ'Ô'ˆ	Ý��A�q�6 Ð#Ñ#Ô#¥c¨)°a¸°VÀ1Ð&EÑ&EÔ&EÑEˆØˆr/   c                 ó°  — |dd d…f         }|j         d         |                     |j         d         ¦  «                             d¦  «        z
  }d|                     d¦  «        z
  }t          j        |t          j        |j        ¦  «        j        ¬¦  «        }|                     ¦   «         |                     ¦   «         z
  |                     ¦   «         z   }|S )N.r™   r$   )r  )	rf   rŠ  re  r­   r  r  r  r  rï   )r+   rT   Úy_cropr‹  ÚsfrQ   s         r.   rW   zStickBreakingTransform._inverse¼  s«   € Ø�3˜˜˜�8”ˆØ”˜”˜qŸzšz¨&¬,°rÔ*:Ñ;Ô;×BÒBÀ2ÑFÔFÑFˆØ�—’˜rÑ"Ô"Ñ"ˆõ Œ[˜¥¤¨Q¬WÑ!5Ô!5Ô!:Ð;Ñ;Ô;ˆØ�JŠJ‰LŒL˜2Ÿ6š6™8œ8Ñ# f§j¢j¡l¤lÑ2ˆØˆr/   c                 óP  — |j         d         dz   |                     |j         d         ¦  «                             d¦  «        z
  }||                     ¦   «         z
  }| t	          j        |¦  «        z   |dd d…f                              ¦   «         z                        d¦  «        }|S )Nr™   r$   .)rf   rŠ  re  rï   r  Ú
logsigmoidrM  )r+   rQ   rT   r‹  ÚdetJs        r.   r`   z+StickBreakingTransform.log_abs_det_jacobianÆ  sŠ   € Ø”˜”˜q‘ 1§:¢:¨a¬g°b¬kÑ#:Ô#:×#AÒ#AÀ"Ñ#EÔ#EÑEˆØ�—
’
‘”Ñˆà�•Q”\ !‘_”_Ñ$ q¨¨c¨r¨c¨¤{§¢Ñ'8Ô'8Ñ8×=Ò=¸bÑAÔAˆØˆr/   c                 ót   — t          |¦  «        dk     rt          d¦  «        ‚|d d…         |d         dz   fz   S ©Nr$   rÉ   r™   rx  re   s     r.   rg   z$StickBreakingTransform.forward_shapeÍ  ó>   € Ýˆu‰:Œ:˜Š>ˆ>ÝÐ:Ñ;Ô;Ð;Ø�S�b�SŒz˜U 2œY¨™]Ð,Ñ,Ð,r/   c                 ót   — t          |¦  «        dk     rt          d¦  «        ‚|d d…         |d         dz
  fz   S r”  rx  re   s     r.   rj   z$StickBreakingTransform.inverse_shapeÒ  r•  r/   N)rb   rm   rn   ro   r   ry  r!   r…  r"   rp   rL   rP   rW   r`   rg   rj   rI   r/   r.   r   r      s�   € € € € € ðð ð Ô$€FØÔ"€HØ€Ið9ð 9ð 9ðð ð ðð ð ðð ð ð-ð -ð -ð
-ð -ð -ð -ð -r/   r   c                   ó^   — e Zd ZdZ ej        ej        d¦  «        Zej        Z	d„ Z
d„ Zd„ ZdS )r   zã
    Transform from unconstrained matrices to lower-triangular matrices with
    nonnegative diagonal entries.

    This is useful for parameterizing positive definite matrices in terms of
    their Cholesky factorization.
    rY  c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   zLowerCholeskyTransform.__eq__ä  rˆ  r/   c                 ó¤   — |                      d¦  «        |                     dd¬¦  «                             ¦   «                              ¦   «         z   S ©Nr™   rl  )Údim1Údim2)ÚtrilÚdiagonalrë   Ú
diag_embedrZ   s     r.   rP   zLowerCholeskyTransform._callç  ó?   € Ø�vŠv�b‰zŒz˜AŸJšJ¨B°R˜JÑ8Ô8×<Ò<Ñ>Ô>×IÒIÑKÔKÑKÐKr/   c                 ó¤   — |                      d¦  «        |                     dd¬¦  «                             ¦   «                              ¦   «         z   S rš  )r�  rž  rï   rŸ  r]   s     r.   rW   zLowerCholeskyTransform._inverseê  r   r/   N)rb   rm   rn   ro   r   r�   rš   r!   Úlower_choleskyr"   rL   rP   rW   rI   r/   r.   r   r   Ø  st   € € € € € ðð ð %ˆ[Ô$ [Ô%5°qÑ9Ô9€FØÔ)€Hð9ð 9ð 9ðLð Lð LðLð Lð Lð Lð Lr/   r   c                   ó^   — e Zd ZdZ ej        ej        d¦  «        Zej        Z	d„ Z
d„ Zd„ ZdS )r   zN
    Transform from unconstrained matrices to positive-definite matrices.
    rY  c                 ó,   — t          |t          ¦  «        S rH   )r„   r   rJ   s     r.   rL   z PositiveDefiniteTransform.__eq__ö  s   € Ý˜%Õ!:Ñ;Ô;Ð;r/   c                 óD   —  t          ¦   «         |¦  «        }||j        z  S rH   )r   ÚmTrZ   s     r.   rP   zPositiveDefiniteTransform._callù  s#   € Ø$Õ"Ñ$Ô$ QÑ'Ô'ˆØ�1”4‰xˆr/   c                 ó‚   — t           j                             |¦  «        }t          ¦   «                              |¦  «        S rH   )r­   ÚlinalgÚcholeskyr   r=   r]   s     r.   rW   z"PositiveDefiniteTransform._inverseý  s1   € ÝŒL×!Ò! !Ñ$Ô$ˆÝ%Ñ'Ô'×+Ò+¨AÑ.Ô.Ð.r/   N)rb   rm   rn   ro   r   r�   rš   r!   Úpositive_definiter"   rL   rP   rW   rI   r/   r.   r   r   î  sl   € € € € € ðð ð %ˆ[Ô$ [Ô%5°qÑ9Ô9€FØÔ,€Hð<ð <ð <ðð ð ð/ð /ð /ð /ð /r/   r   c                   óØ   ‡ — e Zd ZU dZee         ed<   dˆ fd„	Zed„ ¦   «         Z	ed„ ¦   «         Z
dd	„Zd
„ Zd„ Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zˆ xZS )r   aá  
    Transform functor that applies a sequence of transforms `tseq`
    component-wise to each submatrix at `dim`, of length `lengths[dim]`,
    in a way compatible with :func:`torch.cat`.

    Example::

       x0 = torch.cat([torch.range(1, 10), torch.range(1, 10)], dim=0)
       x = torch.cat([x0, x0], dim=0)
       t0 = CatTransform([ExpTransform(), identity_transform], dim=0, lengths=[10, 10])
       t = CatTransform([t0, t0], dim=0, lengths=[20, 20])
       y = t(x)
    Ú
transformsr   Nc                 óŽ  •‡— t          d„ |D ¦   «         ¦  «        sJ ‚‰rˆfd„|D ¦   «         }t          ¦   «                              ‰¬¦  «         t          |¦  «        | _        |€dgt          | j        ¦  «        z  }t          |¦  «        | _        t          | j        ¦  «        t          | j        ¦  «        k    sJ ‚|| _        d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rH   ©r„   r   ©r”   rj  s     r.   r¤   z(CatTransform.__init__.<locals>.<genexpr>  ó,   è è € Ð:Ð:°•:˜a¥Ñ+Ô+Ð:Ð:Ð:Ð:Ð:Ð:r/   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rI   r“   ©r”   rj  r,   s     €r.   r–   z)CatTransform.__init__.<locals>.<listcomp>  ó%   ø€ Ð;Ð;Ð;°�A—L’L Ñ,Ô,Ð;Ð;Ð;r/   rC   r$   )r¥   r)   r*   Úlistr¬  rÙ   ÚlengthsrÊ   )r+   ÚtseqrÊ   r¶  r,   r-   s       `€r.   r*   zCatTransform.__init__  sÈ   øø€ ÝÐ:Ð:°TÐ:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Øð 	<Ø;Ð;Ð;Ð;°dÐ;Ñ;Ô;ˆDÝ‰Œ×Ò JÐÑ/Ô/Ð/Ý˜t™*œ*ˆŒØˆ?Ø�c�C ¤Ñ0Ô0Ñ0ˆGÝ˜G‘}”}ˆŒÝ�4”<Ñ Ô ¥C¨¬Ñ$8Ô$8Ò8Ð8Ð8Ð8ØˆŒˆˆr/   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rH   )r6   r°  s     r.   r¤   z)CatTransform.event_dim.<locals>.<genexpr>!  ó$   è è € Ð8Ð8 1�1”;Ð8Ð8Ð8Ð8Ð8Ð8r/   )rœ   r¬  r7   s    r.   r6   zCatTransform.event_dim  ó!   € åÐ8Ð8¨¬Ð8Ñ8Ô8Ñ8Ô8Ð8r/   c                 ó*   — t          | j        ¦  «        S rH   )rM  r¶  r7   s    r.   ÚlengthzCatTransform.length#  s   € å�4”<Ñ Ô Ð r/   r$   c                 ó^   — | j         |k    r| S t          | j        | j        | j        |¦  «        S rH   )r%   r   r¬  rÊ   r¶  rE   s     r.   rF   zCatTransform.with_cache'  s/   € ØÔ˜zÒ)Ð)ØˆKÝ˜DœO¨T¬X°t´|ÀZÑPÔPÐPr/   c                 ó¾  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        | j        k    sJ ‚g }d}t          | j        | j        ¦  «        D ]D\  }}|                     | j         ||¦  «        }|                      ||¦  «        ¦  «         ||z   }ŒEt          j	        || j         ¬¦  «        S ©Nr   rd  )
rÊ   rK  r½  r°   r¬  r¶  Únarrowr¯   r­   Úcat)r+   rQ   ÚyslicesÚstartÚtransr½  Úxslices          r.   rP   zCatTransform._call,  sÚ   € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ 4¤;Ò.Ð.Ð.Ð.ØˆØˆÝ  ¤°$´,Ñ?Ô?ð 	#ð 	#‰MˆE�6Ø—X’X˜dœh¨¨vÑ6Ô6ˆFØ�NŠN˜5˜5 ™=œ=Ñ)Ô)Ð)Ø˜F‘NˆEˆEÝŒy˜ d¤hÐ/Ñ/Ô/Ð/r/   c                 óÒ  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        | j        k    sJ ‚g }d}t          | j        | j        ¦  «        D ]N\  }}|                     | j         ||¦  «        }|                     |                     |¦  «        ¦  «         ||z   }ŒOt          j
        || j         ¬¦  «        S rÀ  )rÊ   rK  r½  r°   r¬  r¶  rÁ  r¯   r=   r­   rÂ  )r+   rT   ÚxslicesrÄ  rÅ  r½  Úyslices          r.   rW   zCatTransform._inverse7  sÞ   € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ 4¤;Ò.Ð.Ð.Ð.ØˆØˆÝ  ¤°$´,Ñ?Ô?ð 	#ð 	#‰MˆE�6Ø—X’X˜dœh¨¨vÑ6Ô6ˆFØ�NŠN˜5Ÿ9š9 VÑ,Ô,Ñ-Ô-Ð-Ø˜F‘NˆEˆEÝŒy˜ d¤hÐ/Ñ/Ô/Ð/r/   c                 ó¦  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        | j        k    sJ ‚|                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        | j        k    sJ ‚g }d}t          | j        | j        ¦  «        D ]š\  }}|                     | j         ||¦  «        }|                     | j         ||¦  «        }|                     ||¦  «        }	|j        | j        k     rt          |	| j        |j        z
  ¦  «        }	| 
                    |	¦  «         ||z   }Œ›| j         }
|
dk    r|
|                      ¦   «         z
  }
|
| j        z   }
|
dk     rt          j        ||
¬¦  «        S t          |¦  «        S rÀ  )rÊ   rK  r½  r°   r¬  r¶  rÁ  r`   r6   r   r¯   r­   rÂ  rM  )r+   rQ   rT   Ú
logdetjacsrÄ  rÅ  r½  rÆ  rÉ  Ú	logdetjacrÊ   s              r.   r`   z!CatTransform.log_abs_det_jacobianB  sÁ  € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ 4¤;Ò.Ð.Ð.Ð.Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ 4¤;Ò.Ð.Ð.Ð.Øˆ
ØˆÝ  ¤°$´,Ñ?Ô?ð 	#ð 	#‰MˆE�6Ø—X’X˜dœh¨¨vÑ6Ô6ˆFØ—X’X˜dœh¨¨vÑ6Ô6ˆFØ×2Ò2°6¸6ÑBÔBˆIØŒ ¤Ò/Ð/Ý*¨9°d´nÀuÄÑ6VÑWÔW�	Ø×Ò˜iÑ(Ô(Ð(Ø˜F‘NˆEˆEàŒhˆØ�!Š8ˆ8Ø˜Ÿš™œ‘-ˆCØ�D”NÑ"ˆØ�Š7ˆ7Ý”9˜Z¨SÐ1Ñ1Ô1Ð1å�z‘?”?Ð"r/   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rH   r¡   r°  s     r.   r¤   z)CatTransform.bijective.<locals>.<genexpr>]  rº  r/   ©r¥   r¬  r7   s    r.   rp   zCatTransform.bijective[  r»  r/   c                 ó`   — t          j        d„ | j        D ¦   «         | j        | j        ¦  «        S )Nc                 ó   — g | ]	}|j         ‘Œ
S rI   ©r!   r°  s     r.   r–   z'CatTransform.domain.<locals>.<listcomp>b  s   € Ð/Ð/Ð/˜!ˆQŒXÐ/Ð/Ð/r/   ©r   rÂ  r¬  rÊ   r¶  r7   s    r.   r!   zCatTransform.domain_  s1   € åŒØ/Ð/˜tœÐ/Ñ/Ô/°´¸4¼<ñ
ô 
ð 	
r/   c                 ó`   — t          j        d„ | j        D ¦   «         | j        | j        ¦  «        S )Nc                 ó   — g | ]	}|j         ‘Œ
S rI   ©r"   r°  s     r.   r–   z)CatTransform.codomain.<locals>.<listcomp>h  s   € Ð1Ð1Ð1˜AˆQŒZÐ1Ð1Ð1r/   rÓ  r7   s    r.   r"   zCatTransform.codomaine  s1   € åŒØ1Ð1 ¤Ð1Ñ1Ô1°4´8¸T¼\ñ
ô 
ð 	
r/   )r   Nr   rl   )rb   rm   rn   ro   r   r   rr   r*   r   r6   r½  rF   rP   rW   r`   rs   rp   r   rŽ   r!   r"   rt   ru   s   @r.   r   r     s/  ø€ € € € € € ðð ð �Y”ÐÐÑð
ð 
ð 
ð 
ð 
ð 
ð ð9ð 9ñ „]ð9ð ð!ð !ñ „]ð!ðQð Qð Qð Qð
	0ð 	0ð 	0ð	0ð 	0ð 	0ð#ð #ð #ð2 ð9ð 9ñ „Xð9ð Ô#ð
ð 
ñ $Ô#ð
ð
 Ô#ð
ð 
ñ $Ô#ð
ð 
ð 
ð 
ð 
r/   r   c                   ó²   ‡ — e Zd ZU dZee         ed<   dˆ fd„	Zdd„Zd„ Z	d„ Z
d	„ Zd
„ Zed„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zˆ xZS )r   aW  
    Transform functor that applies a sequence of transforms `tseq`
    component-wise to each submatrix at `dim`
    in a way compatible with :func:`torch.stack`.

    Example::

       x = torch.stack([torch.range(1, 10), torch.range(1, 10)], dim=1)
       t = StackTransform([ExpTransform(), identity_transform], dim=1)
       y = t(x)
    r¬  r   c                 óÚ   •‡— t          d„ |D ¦   «         ¦  «        sJ ‚‰rˆfd„|D ¦   «         }t          ¦   «                              ‰¬¦  «         t          |¦  «        | _        || _        d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rH   r¯  r°  s     r.   r¤   z*StackTransform.__init__.<locals>.<genexpr>|  r±  r/   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rI   r“   r³  s     €r.   r–   z+StackTransform.__init__.<locals>.<listcomp>~  r´  r/   rC   )r¥   r)   r*   rµ  r¬  rÊ   )r+   r·  rÊ   r,   r-   s      `€r.   r*   zStackTransform.__init__{  s{   øø€ ÝÐ:Ð:°TÐ:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Øð 	<Ø;Ð;Ð;Ð;°dÐ;Ñ;Ô;ˆDÝ‰Œ×Ò JÐÑ/Ô/Ð/Ý˜t™*œ*ˆŒØˆŒˆˆr/   r$   c                 óR   — | j         |k    r| S t          | j        | j        |¦  «        S rH   )r%   r   r¬  rÊ   rE   s     r.   rF   zStackTransform.with_cacheƒ  s+   € ØÔ˜zÒ)Ð)ØˆKÝ˜dœo¨t¬x¸ÑDÔDÐDr/   c                 ón   ‡ ‡— ˆ ˆfd„t          ‰                     ‰ j        ¦  «        ¦  «        D ¦   «         S )Nc                 óF   •— g | ]}‰                      ‰j        |¦  «        ‘ŒS rI   )ÚselectrÊ   )r”   Úir+   ra  s     €€r.   r–   z)StackTransform._slice.<locals>.<listcomp>‰  s)   ø€ ÐGÐGÐG¨!�—’˜œ 1Ñ%Ô%ÐGÐGÐGr/   )ÚrangerK  rÊ   )r+   ra  s   ``r.   Ú_slicezStackTransform._sliceˆ  s7   øø€ ØGÐGÐGÐGÐG­u°Q·V²V¸D¼HÑ5EÔ5EÑ/FÔ/FÐGÑGÔGÐGr/   c                 ó®  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        t          | j        ¦  «        k    sJ ‚g }t	          |                      |¦  «        | j        ¦  «        D ]#\  }}|                      ||¦  «        ¦  «         Œ$t          j        || j         ¬¦  «        S ©Nrd  )	rÊ   rK  rÙ   r¬  r°   rá  r¯   r­   Ústack)r+   rQ   rÃ  rÆ  rÅ  s        r.   rP   zStackTransform._call‹  sÆ   € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ¥3 t¤Ñ#7Ô#7Ò7Ð7Ð7Ð7ØˆÝ  §¢¨Q¡¤°´ÑAÔAð 	*ð 	*‰MˆF�EØ�NŠN˜5˜5 ™=œ=Ñ)Ô)Ð)Ð)ÝŒ{˜7¨¬Ð1Ñ1Ô1Ð1r/   c                 óÂ  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        t          | j        ¦  «        k    sJ ‚g }t	          |                      |¦  «        | j        ¦  «        D ]-\  }}|                     |                     |¦  «        ¦  «         Œ.t          j	        || j         ¬¦  «        S rã  )
rÊ   rK  rÙ   r¬  r°   rá  r¯   r=   r­   rä  )r+   rT   rÈ  rÉ  rÅ  s        r.   rW   zStackTransform._inverse“  sÊ   € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ¥3 t¤Ñ#7Ô#7Ò7Ð7Ð7Ð7ØˆÝ  §¢¨Q¡¤°´ÑAÔAð 	.ð 	.‰MˆF�EØ�NŠN˜5Ÿ9š9 VÑ,Ô,Ñ-Ô-Ð-Ð-ÝŒ{˜7¨¬Ð1Ñ1Ô1Ð1r/   c                 óÐ  — |                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        t          | j        ¦  «        k    sJ ‚|                      ¦   «          | j         cxk    r|                      ¦   «         k     sn J ‚|                     | j         ¦  «        t          | j        ¦  «        k    sJ ‚g }|                      |¦  «        }|                      |¦  «        }t          ||| j        ¦  «        D ]/\  }}}|                     |                     ||¦  «        ¦  «         Œ0t          j	        || j         ¬¦  «        S rã  )
rÊ   rK  rÙ   r¬  rá  r°   r¯   r`   r­   rä  )	r+   rQ   rT   rË  rÃ  rÈ  rÆ  rÉ  rÅ  s	            r.   r`   z#StackTransform.log_abs_det_jacobian›  sM  € Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ¥3 t¤Ñ#7Ô#7Ò7Ð7Ð7Ð7Ø—’‘”ˆx˜4œ8Ð-Ð-Ò-Ð- a§e¢e¡g¤gÒ-Ð-Ð-Ð-Ð-Ð-Ø�vŠv�d”hÑÔ¥3 t¤Ñ#7Ô#7Ò7Ð7Ð7Ð7Øˆ
Ø—+’+˜a‘.”.ˆØ—+’+˜a‘.”.ˆÝ%(¨°'¸4¼?Ñ%KÔ%Kð 	Jð 	JÑ!ˆF�F˜EØ×Ò˜e×8Ò8¸ÀÑHÔHÑIÔIÐIÐIÝŒ{˜:¨4¬8Ð4Ñ4Ô4Ð4r/   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rH   r¡   r°  s     r.   r¤   z+StackTransform.bijective.<locals>.<genexpr>©  rº  r/   rÏ  r7   s    r.   rp   zStackTransform.bijective§  r»  r/   c                 óT   — t          j        d„ | j        D ¦   «         | j        ¦  «        S )Nc                 ó   — g | ]	}|j         ‘Œ
S rI   rÒ  r°  s     r.   r–   z)StackTransform.domain.<locals>.<listcomp>­  s   € Ð!DÐ!DÐ!D¨q !¤(Ð!DÐ!DÐ!Dr/   ©r   rä  r¬  rÊ   r7   s    r.   r!   zStackTransform.domain«  s(   € åÔ Ð!DÐ!D°D´OÐ!DÑ!DÔ!DÀdÄhÑOÔOÐOr/   c                 óT   — t          j        d„ | j        D ¦   «         | j        ¦  «        S )Nc                 ó   — g | ]	}|j         ‘Œ
S rI   rÖ  r°  s     r.   r–   z+StackTransform.codomain.<locals>.<listcomp>±  s   € Ð!FÐ!FÐ!F° !¤*Ð!FÐ!FÐ!Fr/   rë  r7   s    r.   r"   zStackTransform.codomain¯  s(   € åÔ Ð!FÐ!F°d´oÐ!FÑ!FÔ!FÈÌÑQÔQÐQr/   rT  rl   )rb   rm   rn   ro   r   r   rr   r*   rF   rá  rP   rW   r`   rs   rp   r   rŽ   r!   r"   rt   ru   s   @r.   r   r   l  s  ø€ € € € € € ð
ð 
ð �Y”ÐÐÑðð ð ð ð ð ðEð Eð Eð Eð
Hð Hð Hð2ð 2ð 2ð2ð 2ð 2ð
5ð 
5ð 
5ð ð9ð 9ñ „Xð9ð Ô#ðPð Pñ $Ô#ðPð Ô#ðRð Rñ $Ô#ðRð Rð Rð Rð Rr/   r   c                   ój   ‡ — e Zd ZdZdZej        ZdZdˆ fd„	Z	e
d„ ¦   «         Zd„ Zd„ Zd	„ Zdd
„Zˆ xZS )r   aA  
    Transform via the cumulative distribution function of a probability distribution.

    Args:
        distribution (Distribution): Distribution whose cumulative distribution function to use for
            the transformation.

    Example::

        # Construct a Gaussian copula from a multivariate normal.
        base_dist = MultivariateNormal(
            loc=torch.zeros(2),
            scale_tril=LKJCholesky(2).sample(),
        )
        transform = CumulativeDistributionTransform(Normal(0, 1))
        copula = TransformedDistribution(base_dist, [transform])
    Tr$   r   c                 óZ   •— t          ¦   «                              |¬¦  «         || _        d S ry   )r)   r*   Údistribution)r+   rð  r,   r-   s      €r.   r*   z(CumulativeDistributionTransform.__init__Ë  s,   ø€ Ý‰Œ×Ò JÐÑ/Ô/Ð/Ø(ˆÔÐÐr/   c                 ó   — | j         j        S rH   )rð  Úsupportr7   s    r.   r!   z&CumulativeDistributionTransform.domainÏ  s   € àÔ Ô(Ð(r/   c                 ó6   — | j                              |¦  «        S rH   )rð  ÚcdfrZ   s     r.   rP   z%CumulativeDistributionTransform._callÓ  s   € ØÔ ×$Ò$ QÑ'Ô'Ð'r/   c                 ó6   — | j                              |¦  «        S rH   )rð  Úicdfr]   s     r.   rW   z(CumulativeDistributionTransform._inverseÖ  s   € ØÔ ×%Ò% aÑ(Ô(Ð(r/   c                 ó6   — | j                              |¦  «        S rH   )rð  Úlog_probr_   s      r.   r`   z4CumulativeDistributionTransform.log_abs_det_jacobianÙ  s   € ØÔ ×)Ò)¨!Ñ,Ô,Ð,r/   c                 óH   — | j         |k    r| S t          | j        |¬¦  «        S ry   )r%   r   rð  rE   s     r.   rF   z*CumulativeDistributionTransform.with_cacheÜ  s+   € ØÔ˜zÒ)Ð)ØˆKÝ.¨tÔ/@ÈZÐXÑXÔXÐXr/   rk   rl   )rb   rm   rn   ro   rp   r   r  r"   rA   r*   rs   r!   rP   rW   r`   rF   rt   ru   s   @r.   r   r   ´  s¿   ø€ € € € € ðð ð$ €IØÔ(€HØ€Dð)ð )ð )ð )ð )ð )ð ð)ð )ñ „Xð)ð(ð (ð (ð)ð )ð )ð-ð -ð -ðYð Yð Yð Yð Yð Yð Yð Yr/   r   )-r±   r.  rA  r³   r:   Útypingr   r­   Útorch.nn.functionalÚnnÚ
functionalr  Útorch.distributionsr   Útorch.distributions.utilsr   r   r   r   r	   r
   r   Ú__all__r   r9   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r/   r.   ú<module>r     sÒ  ðà Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ð -Ð -ðð ð €ð0fð fð fð fð fñ fô fð fðR;.ð ;.ð ;.ð ;.ð ;.˜	ñ ;.ô ;.ð ;.ð|wð wð wð wð w�yñ wô wð wðt &Ð% bÑ)Ô)Ð ðD8ð D8ð D8ð D8ð D8˜9ñ D8ô D8ð D8ðN@+ð @+ð @+ð @+ð @+�yñ @+ô @+ð @+ðFð ð ð ð �9ñ ô ð ð,'Rð 'Rð 'Rð 'Rð 'R�Yñ 'Rô 'Rð 'RðTNð Nð Nð
/ð /ð /ð /ð /�yñ /ô /ð /ð0ð ð ð ð ˜	ñ ô ð ð.!>ð !>ð !>ð !>ð !>�Iñ !>ô !>ð !>ðHð ð ð ð �9ñ ô ð ð"c
ð c
ð c
ð c
ð c
�iñ c
ô c
ð c
ðLO!ð O!ð O!ð O!ð O!˜Iñ O!ô O!ð O!ðd ð  ð  ð  ð  �yñ  ô  ð  ðF5-ð 5-ð 5-ð 5-ð 5-˜Yñ 5-ô 5-ð 5-ðpLð Lð Lð Lð L˜Yñ Lô Lð Lð,/ð /ð /ð /ð / 	ñ /ô /ð /ð(g
ð g
ð g
ð g
ð g
�9ñ g
ô g
ð g
ðTERð ERð ERð ERð ER�Yñ ERô ERð ERðP+Yð +Yð +Yð +Yð +Y iñ +Yô +Yð +Yð +Yð +Yr/   