Ë
    P/æ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,y)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Úcodomainc                 óz   •— || _         d | _        |dk(  rn|dk(  rd| _        nt        d«      ‚t        ‰| �  «        y )Nr   é   )NNzcache_size must be 0 or 1)Ú_cache_sizeÚ_invÚ_cached_x_yÚ
ValueErrorÚsuperÚ__init__)ÚselfÚ
cache_sizeÚ	__class__s     €úa/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/distributions/transforms.pyr*   zTransform.__init___   sB   ø€ Ø%ˆÔØˆŒ	Ø˜Š?ØØ˜1Š_Ø)ˆDÕäÐ8Ó9Ð9Ü‰ÑÕó    c                 óD   — | j                   j                  «       }d |d<   |S )Nr&   )Ú__dict__Úcopy)r+   Ústates     r.   Ú__getstate__zTransform.__getstate__j   s"   € Ø—‘×"Ñ"Ó$ˆØˆˆf‰Øˆr/   c                 óž   — | 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   s:   € à�;‰;× Ñ  D§M¡M×$;Ñ$;Ò;Ø—;‘;×(Ñ(Ð(ÜÐUÓVÐVr/   c                 ó�   — d}| j                   �| 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   sB   € ð ˆØ�9‰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/   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‹   sU   € Ø×Ñ˜zÒ)ØˆKÜ�‹:×Ñ¤)×"4Ñ"4Ñ4Ø”4˜“:¨Ô4Ð4Ü!¤T¨$£Z LÐ0NÐ"OÓPÐPr/   c                 ó
   — | |u S ©N© ©r+   Úothers     r.   Ú__eq__zTransform.__eq__’   s   € Ø�uˆ}Ðr/   c                 ó&   — | j                  |«       S rG   )rK   rI   s     r.   Ú__ne__zTransform.__ne__•   s   € à—;‘;˜uÓ%Ð%Ð%r/   c                 ó¤   — | j                   dk(  r| j                  |«      S | j                  \  }}||u r|S | j                  |«      }||f| _        |S )z2
        Computes the transform `x => y`.
        r   )r%   Ú_callr'   )r+   ÚxÚx_oldÚy_oldÚys        r.   Ú__call__zTransform.__call__™   sY   € ð ×Ñ˜qÒ Ø—:‘:˜a“=Ð Ø×'Ñ'‰ˆˆuØ�‰:ØˆLØ�J‰J�q‹MˆØ˜a˜4ˆÔØˆr/   c                 ó¤   — | j                   dk(  r| j                  |«      S | j                  \  }}||u r|S | j                  |«      }||f| _        |S )z1
        Inverts the transform `y => x`.
        r   )r%   Ú_inverser'   )r+   rS   rQ   rR   rP   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+   rP   s     r.   rO   zTransform._call³   ó
   € ô "Ð!r/   c                 ó   — t         ‚)zD
        Abstract method to compute inverse transformation.
        r>   ©r+   rS   s     r.   rV   zTransform._inverse¹   rZ   r/   c                 ó   — t         ‚)zU
        Computes the log det jacobian `log |dy/dx|` given input and output.
        r>   ©r+   rP   rS   s      r.   Úlog_abs_det_jacobianzTransform.log_abs_det_jacobian¿   rZ   r/   c                 ó4   — | 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.
        rH   ©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.
        rH   rd   s     r.   Úinverse_shapezTransform.inverse_shapeÏ   rg   r/   ©r   ©r$   )ra   Ú
__module__Ú__qualname__Ú__doc__Ú	bijectiver   Ú
ConstraintÚ__annotations__r*   r4   Úpropertyr6   r<   r@   rE   rK   rM   rT   rW   rO   rV   r_   rb   rf   ri   Ú__classcell__©r-   s   @r.   r   r   .   s¨   ø… ñ*ðX €IØ×"Ñ"Ó"Ø×$Ñ$Ó$õ	òð
 ñWó ðWð
 ñó ðð ñ"ó ð"ó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                 óH   •— t         ‰| �  |j                  ¬«       || _        y ©NrB   )r)   r*   r%   r&   )r+   rv   r-   s     €r.   r*   z_InverseTransform.__init__Ý   s    ø€ Ü‰Ñ I×$9Ñ$9ÐÔ:Ø(ˆ�	r/   F©Úis_discretec                 óJ   — | j                   €J ‚| j                   j                  S rG   )r&   r"   r7   s    r.   r!   z_InverseTransform.domainá   s"   € à�y‰yÐ$Ð$Ð$Ø�y‰y×!Ñ!Ð!r/   c                 óJ   — | j                   €J ‚| j                   j                  S rG   )r&   r!   r7   s    r.   r"   z_InverseTransform.codomainæ   s"   € à�y‰yÐ$Ð$Ð$Ø�y‰y×ÑÐr/   c                 óJ   — | j                   €J ‚| j                   j                  S rG   )r&   ro   r7   s    r.   ro   z_InverseTransform.bijectiveë   s"   € à�y‰yÐ$Ð$Ð$Ø�y‰y×"Ñ"Ð"r/   c                 óJ   — | j                   €J ‚| j                   j                  S rG   )r&   r@   r7   s    r.   r@   z_InverseTransform.signð   s    € à�y‰yÐ$Ð$Ð$Ø�y‰y�~‰~Ðr/   c                 ó   — | j                   S rG   )r&   r7   s    r.   r<   z_InverseTransform.invõ   s   € à�y‰yÐr/   c                 óh   — | j                   €J ‚| j                  j                  |«      j                  S rG   )r&   r<   rE   rD   s     r.   rE   z_InverseTransform.with_cacheù   s-   € Ø�y‰yÐ$Ð$Ð$Ø�x‰x×"Ñ" :Ó.×2Ñ2Ð2r/   c                 ór   — t        |t        «      sy| j                  €J ‚| j                  |j                  k(  S ©NF)Ú
isinstancer9   r&   rI   s     r.   rK   z_InverseTransform.__eq__ý   s3   € Ü˜%Ô!2Ô3ØØ�y‰yÐ$Ð$Ð$Ø�y‰y˜EŸJ™JÑ&Ð&r/   c                 ó`   — | j                   j                  › dt        | j                  «      › d�S )Nú(ú))r-   ra   Úreprr&   r7   s    r.   rb   z_InverseTransform.__repr__  s)   € Ø—.‘.×)Ñ)Ð*¨!¬D°·±«OÐ+<¸AÐ>Ð>r/   c                 óT   — | j                   €J ‚| j                   j                  |«      S rG   )r&   rW   rY   s     r.   rT   z_InverseTransform.__call__  s'   € Ø�y‰yÐ$Ð$Ð$Ø�y‰y×"Ñ" 1Ó%Ð%r/   c                 óX   — | j                   €J ‚| j                   j                  ||«       S rG   )r&   r_   r^   s      r.   r_   z&_InverseTransform.log_abs_det_jacobian
  s,   € Ø�y‰yÐ$Ð$Ð$Ø—	‘	×.Ñ.¨q°!Ó4Ð4Ð4r/   c                 ó8   — | j                   j                  |«      S rG   )r&   ri   rd   s     r.   rf   z_InverseTransform.forward_shape  ó   € Ø�y‰y×&Ñ& uÓ-Ð-r/   c                 ó8   — | j                   j                  |«      S rG   )r&   rf   rd   s     r.   ri   z_InverseTransform.inverse_shape  r‹   r/   rk   )ra   rl   rm   rn   r   r*   r   Údependent_propertyr!   r"   rr   ro   r@   r<   rE   rK   rb   rT   r_   rf   ri   rs   rt   s   @r.   r9   r9   ×   sµ   ø„ ñð
) )õ )ð $€[×#Ñ#°Ô6ñ"ó 7ð"ð $€[×#Ñ#°Ô6ñ ó 7ð ð ñ#ó ð#ð ñó ðð ñó ðó3ò'ò?ò&ò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.
    Úpartsc                 ó~   •— |r|D �cg c]  }|j                  |«      ‘Œ }}t        ‰| �	  |¬«       || _        y c c}w rx   )rE   r)   r*   r�   )r+   r�   r,   Úpartr-   s       €r.   r*   zComposeTransform.__init__   s?   ø€ ÙØ=BÖC°T�T—_‘_ ZÕ0ÐCˆEÐCÜ‰Ñ JÐÔ/Øˆ�
ùò Ds   ˆ:c                 óV   — t        |t        «      sy| j                  |j                  k(  S r‚   )rƒ   r   r�   rI   s     r.   rK   zComposeTransform.__eq__&  s#   € Ü˜%Ô!1Ô2ØØ�z‰z˜UŸ[™[Ñ(Ð(r/   Fry   c                 ó  — | j                   st        j                  S | j                   d   j                  }| j                   d   j                  j
                  }t        | j                   «      D ]R  }||j                  j
                  |j                  j
                  z
  z  }t        ||j                  j
                  «      }ŒT ||j
                  k\  sJ ‚||j
                  kD  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ŠzÜ×#Ñ#Ð#Ø—‘˜A‘×%Ñ%ˆà—J‘J˜r‘N×+Ñ+×5Ñ5ˆ	Ü˜TŸZ™ZÓ(ò 	>ˆDØ˜Ÿ™×.Ñ.°·±×1HÑ1HÑHÑHˆIÜ˜I t§{¡{×'<Ñ'<Ó=‰Ið	>ð ˜F×,Ñ,Ò,Ð,Ð,Ø�v×'Ñ'Ò'Ü ×,Ñ,¨V°YÀ×AQÑAQÑ5QÓRˆFØˆr/   c                 óþ  — | j                   st        j                  S | j                   d   j                  }| j                   d   j                  j
                  }| j                   D ]R  }||j                  j
                  |j                  j
                  z
  z  }t        ||j                  j
                  «      }ŒT ||j
                  k\  sJ ‚||j
                  kD  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ŠzÜ×#Ñ#Ð#Ø—:‘:˜b‘>×*Ñ*ˆà—J‘J˜q‘M×(Ñ(×2Ñ2ˆ	Ø—J‘Jò 	@ˆDØ˜Ÿ™×0Ñ0°4·;±;×3HÑ3HÑHÑHˆIÜ˜I t§}¡}×'>Ñ'>Ó?‰Ið	@ð ˜H×.Ñ.Ò.Ð.Ð.Ø�x×)Ñ)Ò)Ü"×.Ñ.¨x¸ÀX×EWÑEWÑ9WÓXˆHØˆr/   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrG   ©ro   )Ú.0Úps     r.   ú	<genexpr>z-ComposeTransform.bijective.<locals>.<genexpr>K  s   è ø€ Ò3 1�1—;•;Ñ3ùó   ‚)Úallr�   r7   s    r.   ro   zComposeTransform.bijectiveI  s   € äÑ3¨¯
©
Ô3Ó3Ð3r/   c                 óJ   — d}| j                   D ]  }||j                  z  }Œ |S ©Nr$   )r�   r@   )r+   r@   rž   s      r.   r@   zComposeTransform.signM  s,   € àˆØ—‘ò 	!ˆAØ˜!Ÿ&™&‘=‰Dð	!àˆr/   c                 ó$  — d }| j                   �| j                  «       }|€jt        t        | j                  «      D �cg c]  }|j                  ‘Œ c}«      }t        j                  |«      | _         t        j                  | «      |_         |S c c}w rG   )r&   r   r–   r�   r<   r:   r;   )r+   r<   rž   s      r.   r<   zComposeTransform.invT  sn   € àˆØ�9‰9Ð Ø—)‘)“+ˆCØˆ;Ü"´8¸D¿J¹JÓ3GÖ#H¨a A§E£EÒ#HÓIˆCÜŸ™ CÓ(ˆDŒIÜ—{‘{ 4Ó(ˆCŒHØˆ
ùò $Is   ½Bc                 óR   — | j                   |k(  r| S t        | j                  |¬«      S rx   )r%   r   r�   rD   s     r.   rE   zComposeTransform.with_cache_  s&   € Ø×Ñ˜zÒ)ØˆKÜ §
¡
°zÔBÐBr/   c                 ó8   — | j                   D ]
  } ||«      }Œ |S rG   )r�   )r+   rP   r‘   s      r.   rT   zComposeTransform.__call__d  s#   € Ø—J‘Jò 	ˆDÙ�Q“‰Að	àˆr/   c           	      óp  — | j                   st        j                  |«      S |g}| j                   d d D ]  }|j                   ||d   «      «       Œ |j                  |«       g }| j                  j
                  }t        | j                   |d d |dd  «      D ]x  \  }}}|j                  t        |j                  ||«      ||j                  j
                  z
  «      «       ||j                  j
                  |j                  j
                  z
  z  }Œz t        j                  t        j                  |«      S )Nr”   r$   )r�   ÚtorchÚ
zeros_likeÚappendr!   r6   Úzipr   r_   r"   Ú	functoolsÚreduceÚoperatorÚadd)r+   rP   rS   Úxsr‘   Útermsr6   s          r.   r_   z%ComposeTransform.log_abs_det_jacobiani  s  € Ø�zŠzÜ×#Ñ# AÓ&Ð&ð ˆSˆØ—J‘J˜s �Oò 	$ˆDØ�I‰I‘d˜2˜b™6“lÕ#ð	$à
�	‰	�!ŒàˆØ—K‘K×)Ñ)ˆ	Ü˜dŸj™j¨"¨S¨b¨'°2°a°b°6Ó:ò 	I‰JˆD�!�QØ�L‰LÜØ×-Ñ-¨a°Ó3°YÀÇÁ×AVÑAVÑ5Vóôð
 ˜Ÿ™×0Ñ0°4·;±;×3HÑ3HÑHÑH‰Ið	Iô ×Ñ¤§¡¨eÓ4Ð4r/   c                 óJ   — | j                   D ]  }|j                  |«      }Œ |S rG   )r�   rf   ©r+   re   r‘   s      r.   rf   zComposeTransform.forward_shape~  s*   € Ø—J‘Jò 	.ˆDØ×&Ñ& uÓ-‰Eð	.àˆr/   c                 ó\   — t        | j                  «      D ]  }|j                  |«      }Œ |S rG   )r–   r�   ri   r³   s      r.   ri   zComposeTransform.inverse_shapeƒ  s/   € Ü˜TŸZ™ZÓ(ò 	.ˆDØ×&Ñ& uÓ-‰Eð	.àˆr/   c                 óÀ   — | j                   j                  dz   }|dj                  | j                  D �cg c]  }|j	                  «       ‘Œ c}«      z  }|dz  }|S c c}w )Nz(
    z,
    z
))r-   ra   Újoinr�   rb   )r+   Ú
fmt_stringrž   s      r.   rb   zComposeTransform.__repr__ˆ  sT   € Ø—^‘^×,Ñ,¨yÑ8ˆ
Ø�i—n‘n¸D¿J¹JÖ%G°q a§j¡j¥lÒ%GÓHÑHˆ
Ø�eÑˆ
ØÐùò &Hs   ´A
rj   rk   )ra   rl   rm   rn   r   r   r*   rK   r   r�   r!   r"   r   ro   r@   rr   r<   rE   rT   r_   rf   ri   rb   rs   rt   s   @r.   r   r     sº   ø„ ññ˜d 9™oõ ò)ð
 $€[×#Ñ#°Ô6ñó 7ðð $€[×#Ñ#°Ô6ñó 7ðð ñ4ó ð4ð ñó ðð ñó ðóCò
ò
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.
    c                 ó`   •— t         ‰| �  |¬«       |j                  |«      | _        || _        y rx   )r)   r*   rE   Úbase_transformÚreinterpreted_batch_ndims)r+   rº   r»   r,   r-   s       €r.   r*   zIndependentTransform.__init__   s.   ø€ Ü‰Ñ JÐÔ/Ø,×7Ñ7¸
ÓCˆÔØ)BˆÕ&r/   c                 óh   — | j                   |k(  r| S t        | j                  | j                  |¬«      S rx   )r%   r   rº   r»   rD   s     r.   rE   zIndependentTransform.with_cache¥  s5   € Ø×Ñ˜zÒ)ØˆKÜ#Ø×Ñ ×!?Ñ!?ÈJô
ð 	
r/   Fry   c                 ój   — t        j                  | j                  j                  | j                  «      S rG   )r   r˜   rº   r!   r»   r7   s    r.   r!   zIndependentTransform.domain¬  s,   € ä×&Ñ&Ø×Ñ×&Ñ&¨×(FÑ(Fó
ð 	
r/   c                 ój   — t        j                  | j                  j                  | j                  «      S rG   )r   r˜   rº   r"   r»   r7   s    r.   r"   zIndependentTransform.codomain²  s,   € ä×&Ñ&Ø×Ñ×(Ñ(¨$×*HÑ*Hó
ð 	
r/   c                 ó.   — | j                   j                  S rG   )rº   ro   r7   s    r.   ro   zIndependentTransform.bijective¸  s   € à×"Ñ"×,Ñ,Ð,r/   c                 ó.   — | j                   j                  S rG   )rº   r@   r7   s    r.   r@   zIndependentTransform.sign¼  s   € à×"Ñ"×'Ñ'Ð'r/   c                 óˆ   — |j                  «       | j                  j                  k  rt        d«      ‚| j	                  |«      S ©NúToo few dimensions on input)Údimr!   r6   r(   rº   rY   s     r.   rO   zIndependentTransform._callÀ  s7   € Ø�5‰5‹7�T—[‘[×*Ñ*Ò*ÜÐ:Ó;Ð;Ø×"Ñ" 1Ó%Ð%r/   c                 óœ   — |j                  «       | j                  j                  k  rt        d«      ‚| j                  j                  |«      S rÂ   )rÄ   r"   r6   r(   rº   r<   r\   s     r.   rV   zIndependentTransform._inverseÅ  s=   € Ø�5‰5‹7�T—]‘]×,Ñ,Ò,ÜÐ:Ó;Ð;Ø×"Ñ"×&Ñ& qÓ)Ð)r/   c                 ój   — | j                   j                  ||«      }t        || j                  «      }|S rG   )rº   r_   r   r»   )r+   rP   rS   Úresults       r.   r_   z)IndependentTransform.log_abs_det_jacobianÊ  s1   € Ø×$Ñ$×9Ñ9¸!¸QÓ?ˆÜ ¨×(FÑ(FÓGˆØˆr/   c                 óz   — | j                   j                  › dt        | j                  «      › d| j                  › d�S )Nr…   z, r†   )r-   ra   r‡   rº   r»   r7   s    r.   rb   zIndependentTransform.__repr__Ï  s:   € Ø—.‘.×)Ñ)Ð*¨!¬D°×1DÑ1DÓ,EÐ+FÀbÈ×IgÑIgÐHhÐhiÐjÐjr/   c                 ó8   — | j                   j                  |«      S rG   )rº   rf   rd   s     r.   rf   z"IndependentTransform.forward_shapeÒ  ó   € Ø×"Ñ"×0Ñ0°Ó7Ð7r/   c                 ó8   — | j                   j                  |«      S rG   )rº   ri   rd   s     r.   ri   z"IndependentTransform.inverse_shapeÕ  rÊ   r/   rj   rk   )ra   rl   rm   rn   r*   rE   r   r�   r!   r"   rr   ro   r@   rO   rV   r_   rb   rf   ri   rs   rt   s   @r.   r   r   ’  sœ   ø„ ñõCó

ð $€[×#Ñ#°Ô6ñ
ó 7ð
ð
 $€[×#Ñ#°Ô6ñ
ó 7ð
ð
 ñ-ó ð-ð ñ(ó ð(ò&ò
*ò
ò
kò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.
    Tc                 ó  •— t        j                  |«      | _        t        j                  |«      | _        | j                  j	                  «       | j                  j	                  «       k7  rt        d«      ‚t        ‰| �  |¬«       y )Nz6in_shape, out_shape have different numbers of elementsrB   )r¨   ÚSizeÚin_shapeÚ	out_shapeÚnumelr(   r)   r*   )r+   rÏ   rÐ   r,   r-   s       €r.   r*   zReshapeTransform.__init__ç  sa   ø€ ÜŸ
™
 8Ó,ˆŒÜŸ™ IÓ.ˆŒØ�=‰=×ÑÓ  D§N¡N×$8Ñ$8Ó$:Ò:ÜÐUÓVÐVÜ‰Ñ JÐÕ/r/   c                 óp   — t        j                  t         j                  t        | j                  «      «      S rG   )r   r˜   r•   ÚlenrÏ   r7   s    r.   r!   zReshapeTransform.domainî  s$   € ä×&Ñ&¤{×'7Ñ'7¼¸T¿]¹]Ó9KÓLÐLr/   c                 óp   — t        j                  t         j                  t        | j                  «      «      S rG   )r   r˜   r•   rÓ   rÐ   r7   s    r.   r"   zReshapeTransform.codomainò  s$   € ä×&Ñ&¤{×'7Ñ'7¼¸T¿^¹^Ó9LÓMÐMr/   c                 óh   — | j                   |k(  r| S t        | j                  | j                  |¬«      S rx   )r%   r   rÏ   rÐ   rD   s     r.   rE   zReshapeTransform.with_cacheö  s,   € Ø×Ñ˜zÒ)ØˆKÜ §¡¨t¯~©~È*ÔUÐUr/   c                 ó¤   — |j                   d |j                  «       t        | j                  «      z
   }|j	                  || j
                  z   «      S rG   )re   rÄ   rÓ   rÏ   ÚreshaperÐ   )r+   rP   Úbatch_shapes      r.   rO   zReshapeTransform._callû  s?   € Ø—g‘gÐ< §¡£¬#¨d¯m©mÓ*<Ñ <Ð=ˆØ�y‰y˜ t§~¡~Ñ5Ó6Ð6r/   c                 ó¤   — |j                   d |j                  «       t        | j                  «      z
   }|j	                  || j
                  z   «      S rG   )re   rÄ   rÓ   rÐ   r×   rÏ   )r+   rS   rØ   s      r.   rV   zReshapeTransform._inverseÿ  s?   € Ø—g‘gÐ= §¡£¬#¨d¯n©nÓ*=Ñ =Ð>ˆØ�y‰y˜ t§}¡}Ñ4Ó5Ð5r/   c                 óŠ   — |j                   d |j                  «       t        | j                  «      z
   }|j	                  |«      S rG   )re   rÄ   rÓ   rÏ   Ú	new_zeros)r+   rP   rS   rØ   s       r.   r_   z%ReshapeTransform.log_abs_det_jacobian  s6   € Ø—g‘gÐ< §¡£¬#¨d¯m©mÓ*<Ñ <Ð=ˆØ�{‰{˜;Ó'Ð'r/   c                 ó   — t        |«      t        | j                  «      k  rt        d«      ‚t        |«      t        | j                  «      z
  }||d  | j                  k7  rt        d||d  › d| j                  › �«      ‚|d | | j                  z   S ©NrÃ   zShape mismatch: expected z	 but got )rÓ   rÏ   r(   rÐ   ©r+   re   Úcuts      r.   rf   zReshapeTransform.forward_shape  sŠ   € Üˆu‹:œ˜DŸM™MÓ*Ò*ÜÐ:Ó;Ð;Ü�%‹jœ3˜tŸ}™}Ó-Ñ-ˆØ��ˆ;˜$Ÿ-™-Ò'ÜØ+¨E°#°$¨K¨=¸	À$Ç-Á-ÀÐQóð ð �T�cˆ{˜TŸ^™^Ñ+Ð+r/   c                 ó   — t        |«      t        | j                  «      k  rt        d«      ‚t        |«      t        | j                  «      z
  }||d  | j                  k7  rt        d||d  › d| j                  › �«      ‚|d | | j                  z   S rÝ   )rÓ   rÐ   r(   rÏ   rÞ   s      r.   ri   zReshapeTransform.inverse_shape  s‹   € Üˆu‹:œ˜DŸN™NÓ+Ò+ÜÐ:Ó;Ð;Ü�%‹jœ3˜tŸ~™~Ó.Ñ.ˆØ��ˆ;˜$Ÿ.™.Ò(ÜØ+¨E°#°$¨K¨=¸	À$Ç.Á.ÐAQÐRóð ð �T�cˆ{˜TŸ]™]Ñ*Ð*r/   rj   rk   )ra   rl   rm   rn   ro   r*   r   r�   r!   r"   rE   rO   rV   r_   rf   ri   rs   rt   s   @r.   r   r   Ù  sk   ø„ ñ	ð €Iõ0ð ×#Ñ#ñMó $ðMð ×#Ñ#ñNó $ðNóVò
7ò6ò(ò,ö+r/   r   c                   ó`   — e Zd ZdZej
                  Zej                  ZdZ	dZ
d„ Zd„ Zd„ Zd„ Zy)	r   z8
    Transform via the mapping :math:`y = \exp(x)`.
    Tr$   c                 ó"   — t        |t        «      S rG   )rƒ   r   rI   s     r.   rK   zExpTransform.__eq__%  ó   € Ü˜%¤Ó.Ð.r/   c                 ó"   — |j                  «       S rG   )ÚexprY   s     r.   rO   zExpTransform._call(  ó   € Ø�u‰u‹wˆr/   c                 ó"   — |j                  «       S rG   ©Úlogr\   s     r.   rV   zExpTransform._inverse+  ræ   r/   c                 ó   — |S rG   rH   r^   s      r.   r_   z!ExpTransform.log_abs_det_jacobian.  ó   € Øˆr/   N©ra   rl   rm   rn   r   r•   r!   Úpositiver"   ro   r@   rK   rO   rV   r_   rH   r/   r.   r   r     s=   „ ñð ×Ñ€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}}`.
    Tc                 óJ   •— t         ‰| �  |¬«       t        |«      \  | _        y rx   )r)   r*   r   Úexponent)r+   rð   r,   r-   s      €r.   r*   zPowerTransform.__init__:  s"   ø€ Ü‰Ñ JÐÔ/Ü(¨Ó2Ñˆ�r/   c                 óR   — | j                   |k(  r| S t        | j                  |¬«      S rx   )r%   r   rð   rD   s     r.   rE   zPowerTransform.with_cache>  s&   € Ø×Ñ˜zÒ)ØˆKÜ˜dŸm™m¸
ÔCÐCr/   c                 ó6   — | j                   j                  «       S rG   )rð   r@   r7   s    r.   r@   zPowerTransform.signC  s   € à�}‰}×!Ñ!Ó#Ð#r/   c                 ó¦   — t        |t        «      sy| j                  j                  |j                  «      j	                  «       j                  «       S r‚   )rƒ   r   rð   Úeqr¡   ÚitemrI   s     r.   rK   zPowerTransform.__eq__G  s:   € Ü˜%¤Ô0ØØ�}‰}×Ñ §¡Ó/×3Ñ3Ó5×:Ñ:Ó<Ð<r/   c                 ó8   — |j                  | j                  «      S rG   ©Úpowrð   rY   s     r.   rO   zPowerTransform._callL  s   € Ø�u‰u�T—]‘]Ó#Ð#r/   c                 ó>   — |j                  d| j                  z  «      S r£   r÷   r\   s     r.   rV   zPowerTransform._inverseO  s   € Ø�u‰u�Q˜Ÿ™Ñ&Ó'Ð'r/   c                 ó^   — | j                   |z  |z  j                  «       j                  «       S rG   )rð   Úabsré   r^   s      r.   r_   z#PowerTransform.log_abs_det_jacobianR  s(   € Ø—‘ Ñ! AÑ%×*Ñ*Ó,×0Ñ0Ó2Ð2r/   c                 óX   — t        j                  |t        | j                  dd«      «      S ©Nre   rH   ©r¨   Úbroadcast_shapesÚgetattrrð   rd   s     r.   rf   zPowerTransform.forward_shapeU  ó"   € Ü×%Ñ% e¬W°T·]±]ÀGÈRÓ-PÓQÐQr/   c                 óX   — t        j                  |t        | j                  dd«      «      S rý   rþ   rd   s     r.   ri   zPowerTransform.inverse_shapeX  r  r/   rj   rk   )ra   rl   rm   rn   r   rí   r!   r"   ro   r*   rE   r   r@   rK   rO   rV   r_   rf   ri   rs   rt   s   @r.   r   r   2  sd   ø„ ñð ×!Ñ!€FØ×#Ñ#€HØ€Iõ3óDð
 ñ$ó ð$ò=ò
$ò(ò3ò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)rP   r  s     r.   Ú_clipped_sigmoidr  \  s<   € Ü�K‰K˜Ÿ™Ó €EÜ�;‰;”u—}‘} QÓ'¨U¯Z©Z¸SÀ5Ç9Á9¹_ÔMÐMr/   c                   ó`   — e Zd ZdZej
                  Zej                  ZdZ	dZ
d„ Zd„ Zd„ Zd„ Zy)	r   zg
    Transform via the mapping :math:`y = \frac{1}{1 + \exp(-x)}` and :math:`x = \text{logit}(y)`.
    Tr$   c                 ó"   — t        |t        «      S rG   )rƒ   r   rI   s     r.   rK   zSigmoidTransform.__eq__j  ó   € Ü˜%Ô!1Ó2Ð2r/   c                 ó   — t        |«      S rG   )r  rY   s     r.   rO   zSigmoidTransform._callm  s   € Ü Ó"Ð"r/   c                 óØ   — t        j                  |j                  «      }|j                  |j                  d|j
                  z
  ¬«      }|j                  «       | j                  «       z
  S r  )r¨   r  r	  r
  r  r  ré   Úlog1p)r+   rS   r  s      r.   rV   zSigmoidTransform._inversep  sK   € Ü—‘˜AŸG™GÓ$ˆØ�G‰G˜Ÿ
™
¨¨e¯i©i©ˆGÓ8ˆØ�u‰u‹w˜1˜"Ÿ™›Ñ%Ð%r/   c                 ó\   — t        j                  | «       t        j                  |«      z
  S rG   )ÚFr   r^   s      r.   r_   z%SigmoidTransform.log_abs_det_jacobianu  s!   € Ü—
‘
˜A˜2“ˆ¤§¡¨A£Ñ.Ð.r/   N)ra   rl   rm   rn   r   r•   r!   Úunit_intervalr"   ro   r@   rK   rO   rV   r_   rH   r/   r.   r   r   a  s=   „ ñð ×Ñ€FØ×(Ñ(€HØ€IØ€Dò3ò#ò&ó
/r/   r   c                   ó`   — e Zd ZdZej
                  Zej                  ZdZ	dZ
d„ Zd„ Zd„ Zd„ Zy)	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 rG   )rƒ   r   rI   s     r.   rK   zSoftplusTransform.__eq__ƒ  s   € Ü˜%Ô!2Ó3Ð3r/   c                 ó   — t        |«      S rG   ©r   rY   s     r.   rO   zSoftplusTransform._call†  s   € Ü˜‹{Ðr/   c                 ób   — | j                  «       j                  «       j                  «       |z   S rG   )Úexpm1Únegré   r\   s     r.   rV   zSoftplusTransform._inverse‰  s'   € Ø��z‰z‹|×ÑÓ!×%Ñ%Ó'¨!Ñ+Ð+r/   c                 ó   — t        | «       S rG   r  r^   s      r.   r_   z&SoftplusTransform.log_abs_det_jacobianŒ  s   € Ü˜!˜“ˆ}Ðr/   Nrì   rH   r/   r.   r   r   y  s=   „ ñð ×Ñ€FØ×#Ñ#€HØ€IØ€Dò4òò,ór/   r   c                   ón   — 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y
)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 rG   )rƒ   r   rI   s     r.   rK   zTanhTransform.__eq__£  s   € Ü˜%¤Ó/Ð/r/   c                 ó"   — |j                  «       S rG   )ÚtanhrY   s     r.   rO   zTanhTransform._call¦  s   € Ø�v‰v‹xˆr/   c                 ó,   — t        j                  |«      S rG   )r¨   Úatanhr\   s     r.   rV   zTanhTransform._inverse©  s   € ô �{‰{˜1‹~Ðr/   c                 óV   — 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‘h˜s“m aÑ'¬(°4¸!±8Ó*<Ñ<Ñ=Ð=r/   N)ra   rl   rm   rn   r   r•   r!   Úintervalr"   ro   r@   rK   rO   rV   r_   rH   r/   r.   r   r   �  sF   „ ñð ×Ñ€FØ#ˆ{×#Ñ# D¨#Ó.€HØ€IØ€Dò0òòó
>r/   r   c                   óR   — e Zd ZdZej
                  Zej                  Zd„ Z	d„ Z
d„ Zy)r   z4
    Transform via the mapping :math:`y = |x|`.
    c                 ó"   — t        |t        «      S rG   )rƒ   r   rI   s     r.   rK   zAbsTransform.__eq__»  rã   r/   c                 ó"   — |j                  «       S rG   )rû   rY   s     r.   rO   zAbsTransform._call¾  ræ   r/   c                 ó   — |S rG   rH   r\   s     r.   rV   zAbsTransform._inverseÁ  rë   r/   N)ra   rl   rm   rn   r   r•   r!   rí   r"   rK   rO   rV   rH   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.
    Tc                 óP   •— t         ‰| �  |¬«       || _        || _        || _        y rx   )r)   r*   ÚlocÚscaleÚ
_event_dim)r+   r0  r1  r6   r,   r-   s        €r.   r*   zAffineTransform.__init__Ò  s(   ø€ Ü‰Ñ JÐÔ/ØˆŒØˆŒ
Ø#ˆ�r/   c                 ó   — | j                   S rG   )r2  r7   s    r.   r6   zAffineTransform.event_dimØ  s   € à�‰Ðr/   Fry   c                 óœ   — | 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Ü  ó7   € à�>‰>˜QÒÜ×#Ñ#Ð#Ü×&Ñ&¤{×'7Ñ'7¸¿¹ÓHÐHr/   c                 óœ   — | j                   dk(  rt        j                  S t        j                  t        j                  | j                   «      S r5  r6  r7   s    r.   r"   zAffineTransform.codomainâ  r7  r/   c                 ó~   — | j                   |k(  r| S t        | j                  | j                  | j                  |¬«      S rx   )r%   r   r0  r1  r6   rD   s     r.   rE   zAffineTransform.with_cacheè  s7   € Ø×Ñ˜zÒ)ØˆKÜØ�H‰H�d—j‘j $§.¡.¸Zô
ð 	
r/   c                 óˆ  — t        |t        «      syt        | j                  t        j                  «      r>t        |j                  t        j                  «      r| j                  |j                  k7  r7y| j                  |j                  k(  j                  «       j                  «       syt        | j                  t        j                  «      r?t        |j                  t        j                  «      r| j                  |j                  k7  ryy| j                  |j                  k(  j                  «       j                  «       syy)NFT)rƒ   r   r0  ÚnumbersÚNumberr¡   rõ   r1  rI   s     r.   rK   zAffineTransform.__eq__ï  sÙ   € Ü˜%¤Ô1Øä�d—h‘h¤§¡Ô/´JØ�I‰I”w—~‘~ô5
ð �x‰x˜5Ÿ9™9Ò$Øà—H‘H §	¡	Ñ)×.Ñ.Ó0×5Ñ5Ô7Øä�d—j‘j¤'§.¡.Ô1´jØ�K‰KœŸ™ô7
ð �z‰z˜UŸ[™[Ò(Øð
 ð —J‘J %§+¡+Ñ-×2Ñ2Ó4×9Ñ9Ô;Øàr/   c                 óê   — t        | j                  t        j                  «      r6t	        | j                  «      dkD  rdS t	        | j                  «      dk  rdS dS | j                  j                  «       S )Nr   r$   r”   )rƒ   r1  r;  ÚRealÚfloatr@   r7   s    r.   r@   zAffineTransform.sign  sV   € ä�d—j‘j¤'§,¡,Ô/Ü˜dŸj™jÓ)¨AÒ-�1ÐU¼¸t¿z¹zÓ9JÈQÒ9N°2ÐUÐTUÐUØ�z‰z�‰Ó Ð r/   c                 ó:   — | j                   | j                  |z  z   S rG   ©r0  r1  rY   s     r.   rO   zAffineTransform._call  s   € Ø�x‰x˜$Ÿ*™* q™.Ñ(Ð(r/   c                 ó:   — || j                   z
  | j                  z  S rG   rA  r\   s     r.   rV   zAffineTransform._inverse  s   € Ø�D—H‘H‘ §
¡
Ñ*Ð*r/   c                 óî  — |j                   }| j                  }t        |t        j                  «      r3t        j                  |t        j                  t        |«      «      «      }n#t        j                  |«      j                  «       }| j                  rQ|j                  «       d | j                    dz   }|j                  |«      j                  d«      }|d | j                    }|j                  |«      S )N)r”   r”   )re   r1  rƒ   r;  r>  r¨   Ú	full_liker(  ré   rû   r6   ÚsizeÚviewÚsumÚexpand)r+   rP   rS   re   r1  rÇ   Úresult_sizes          r.   r_   z$AffineTransform.log_abs_det_jacobian  s¶   € Ø—‘ˆØ—
‘
ˆÜ�eœWŸ\™\Ô*Ü—_‘_ Q¬¯©´°U³Ó(<Ó=‰Fä—Y‘Y˜uÓ%×)Ñ)Ó+ˆFØ�>Š>Ø Ÿ+™+›-Ð(9¨4¯>©>¨/Ð:¸UÑBˆKØ—[‘[ Ó-×1Ñ1°"Ó5ˆFØÐ+˜TŸ^™^˜OÐ,ˆEØ�}‰}˜UÓ#Ð#r/   c           	      ó„   — t        j                  |t        | j                  dd«      t        | j                  dd«      «      S rý   ©r¨   rÿ   r   r0  r1  rd   s     r.   rf   zAffineTransform.forward_shape   ó7   € Ü×%Ñ%Ø”7˜4Ÿ8™8 W¨bÓ1´7¸4¿:¹:ÀwÐPRÓ3Só
ð 	
r/   c           	      ó„   — t        j                  |t        | j                  dd«      t        | j                  dd«      «      S rý   rK  rd   s     r.   ri   zAffineTransform.inverse_shape%  rL  r/   ©r   r   rk   )ra   rl   rm   rn   ro   r*   rr   r6   r   r�   r!   r"   rE   rK   r@   rO   rV   r_   rf   ri   rs   rt   s   @r.   r   r   Å  s¥   ø„ ñ	ð €Iõ$ð ñó ðð $€[×#Ñ#°Ô6ñIó 7ðIð
 $€[×#Ñ#°Ô6ñIó 7ðIó

òð0 ñ!ó ð!ò
)ò+ò$ò
ö

r/   r   c                   ód   — 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y)
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                  }|j                  d|z   d|z
  ¬«      }t        |d¬«      }|dz  }d|z
  j                  «       j                  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Úeyere   rT  r
   )r+   rP   r  ÚrÚzÚz1m_cumprod_sqrtrS   s          r.   rO   zCorrCholeskyTransform._call?  sÄ   € Ü�J‰J�q‹MˆÜ�k‰k˜!Ÿ'™'Ó"×&Ñ&ˆØ�G‰G˜˜S™ a¨#¡gˆGÓ.ˆÜ˜q rÔ*ˆð ˆq‰DˆØ ™EŸ<™<›>×1Ñ1°"Ó5Ðà”—	‘	˜!Ÿ'™' "™+¨Q¯W©W¸Q¿X¹XÔFÑFˆØ”Ð$ S¨#¨2¨# XÑ.°°A°¸aÔ@Ñ@ˆØˆr/   c                 ó,  — dt        j                  ||z  d¬«      z
  }t        |dd d…f   ddgd¬«      }t        |d¬«      }t        |d¬«      }||j	                  «       z  }|j                  «       |j                  «       j                  «       z
  dz  }|S )	Nr$   r”   ©rÄ   .r   rU  rQ  rS  )r¨   Úcumsumr
   r   rW  r  r  )r+   rS   Úy_cumsumÚy_cumsum_shiftedÚy_vecÚy_cumsum_vecÚtrP   s           r.   rV   zCorrCholeskyTransform._inverseN  s�   € ð ”u—|‘| A¨¡E¨rÔ2Ñ2ˆÜ˜x¨¨S¨b¨S¨Ñ1°A°q°6ÀÔCÐÜ" 1¨2Ô.ˆÜ)Ð*:ÀÔDˆØ�\×'Ñ'Ó)Ñ)ˆà�W‰W‹Y˜Ÿ™›Ÿ™›Ñ(¨AÑ-ˆØˆr/   Nc                 ó  — d||z  j                  d¬«      z
  }t        |d¬«      }d|j                  «       j                  d«      z  }d|t	        d|z  «      z   t        j                  d«      z
  j                  d¬«      z  }||z   S )Nr$   r”   r^  éþÿÿÿrQ  ç      à?r'  )r_  r   ré   rG  r   r(  )r+   rP   rS   Ú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À"Ó&EÑ EÐØ˜A¤¨¨a©Ó 0Ñ0´4·8±8¸C³=Ñ@×EÑEÈ"ÐEÓ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  |k7  rt        d«      ‚|d d ||fz   S )Nr$   rÃ   r”   g      Ð?rS  rg  z-Input is not a flattend lower-diagonal number)rÓ   r(   Úround)r+   re   ÚNÚDs       r.   rf   z#CorrCholeskyTransform.forward_shapeh  st   € äˆu‹:˜Š>ÜÐ:Ó;Ð;Ø�"‰IˆÜ�4˜!˜a™%‘< CÑ'¨#Ñ-Ó.ˆØ��A‘‰;˜!Ñ˜qÒ ÜÐLÓMÐMØ�S�bˆz˜Q ˜FÑ"Ð"r/   c                 ó’   — t        |«      dk  rt        d«      ‚|d   |d   k7  rt        d«      ‚|d   }||dz
  z  dz  }|d d |fz   S )NrS  rÃ   rf  r”   zInput is not squarer$   ©rÓ   r(   )r+   re   rp  ro  s       r.   ri   z#CorrCholeskyTransform.inverse_shaper  sc   € äˆu‹:˜Š>ÜÐ:Ó;Ð;Ø�‰9˜˜b™	Ò!ÜÐ2Ó3Ð3Ø�"‰IˆØ��Q‘‰K˜1ÑˆØ�S�bˆz˜Q˜DÑ Ð r/   rG   )ra   rl   rm   rn   r   Úreal_vectorr!   Úcorr_choleskyr"   ro   rO   rV   r_   rf   ri   rH   r/   r.   r   r   +  s=   „ ñð ×$Ñ$€FØ×(Ñ(€HØ€Iòò
ó3ò#ó!r/   r   c                   ó^   — e Zd ZdZej
                  Zej                  Zd„ Z	d„ Z
d„ Zd„ Zd„ Zy)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 rG   )rƒ   r   rI   s     r.   rK   zSoftmaxTransform.__eq__‰  r  r/   c                 ó|   — |}||j                  dd«      d   z
  j                  «       }||j                  dd«      z  S )Nr”   Tr   )r—   rå   rG  )r+   rP   ÚlogprobsÚprobss       r.   rO   zSoftmaxTransform._callŒ  s@   € ØˆØ˜HŸL™L¨¨TÓ2°1Ñ5Ñ5×:Ñ:Ó<ˆØ�u—y‘y  TÓ*Ñ*Ð*r/   c                 ó&   — |}|j                  «       S rG   rè   )r+   rS   ry  s      r.   rV   zSoftmaxTransform._inverse‘  s   € ØˆØ�y‰y‹{Ðr/   c                 ó8   — t        |«      dk  rt        d«      ‚|S ©Nr$   rÃ   rr  rd   s     r.   rf   zSoftmaxTransform.forward_shape•  ó   € Üˆu‹:˜Š>ÜÐ:Ó;Ð;Øˆr/   c                 ó8   — t        |«      dk  rt        d«      ‚|S r|  rr  rd   s     r.   ri   zSoftmaxTransform.inverse_shapeš  r}  r/   N)ra   rl   rm   rn   r   rs  r!   Úsimplexr"   rK   rO   rV   rf   ri   rH   r/   r.   r   r   }  s8   „ ñð ×$Ñ$€FØ×"Ñ"€Hò3ò+ò
òó
r/   r   c                   óh   — 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y	)
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 rG   )rƒ   r   rI   s     r.   rK   zStickBreakingTransform.__eq__²  ó   € Ü˜%Ô!7Ó8Ð8r/   c                 ó(  — |j                   d   dz   |j                  |j                   d   «      j                  d«      z
  }t        ||j	                  «       z
  «      }d|z
  j                  d«      }t        |ddgd¬«      t        |ddgd¬«      z  }|S )Nr”   r$   r   rU  )re   Únew_onesr_  r  ré   rX  r
   )r+   rP   Úoffsetr[  Ú	z_cumprodrS   s         r.   rO   zStickBreakingTransform._callµ  s„   € Ø—‘˜‘˜q‘ 1§:¡:¨a¯g©g°b©kÓ#:×#AÑ#AÀ"Ó#EÑEˆÜ˜Q §¡£Ñ-Ó.ˆØ˜‘U—O‘O BÓ'ˆ	Ü��A�q�6 Ô#¤c¨)°a¸°VÀ1Ô&EÑEˆØˆr/   c                 óš  — |dd d…f   }|j                   d   |j                  |j                   d   «      j                  d«      z
  }d|j                  d«      z
  }t        j                  |t        j
                  |j                  «      j                  ¬«      }|j                  «       |j                  «       z
  |j                  «       z   }|S )N.r”   r$   )r  )	re   r„  r_  r¨   r
  r  r	  r  ré   )r+   rS   Úy_cropr…  ÚsfrP   s         r.   rV   zStickBreakingTransform._inverse¼  s    € Ø�3˜˜˜�8‘ˆØ—‘˜‘˜qŸz™z¨&¯,©,°rÑ*:Ó;×BÑBÀ2ÓFÑFˆØ�—‘˜rÓ"Ñ"ˆô �[‰[˜¤§¡¨Q¯W©WÓ!5×!:Ñ!:Ô;ˆØ�J‰J‹L˜2Ÿ6™6›8Ñ# f§j¡j£lÑ2ˆØˆr/   c                 ó,  — |j                   d   dz   |j                  |j                   d   «      j                  d«      z
  }||j                  «       z
  }| t	        j
                  |«      z   |dd d…f   j                  «       z   j                  d«      }|S )Nr”   r$   .)re   r„  r_  ré   r  Ú
logsigmoidrG  )r+   rP   rS   r…  ÚdetJs        r.   r_   z+StickBreakingTransform.log_abs_det_jacobianÆ  s€   € Ø—‘˜‘˜q‘ 1§:¡:¨a¯g©g°b©kÓ#:×#AÑ#AÀ"Ó#EÑEˆØ�—
‘
“Ñˆà�”Q—\‘\ !“_Ñ$ q¨¨c¨r¨c¨¡{§¡Ó'8Ñ8×=Ñ=¸bÓAˆØˆr/   c                 óR   — t        |«      dk  rt        d«      ‚|d d |d   dz   fz   S ©Nr$   rÃ   r”   rr  rd   s     r.   rf   z$StickBreakingTransform.forward_shapeÍ  ó5   € Üˆu‹:˜Š>ÜÐ:Ó;Ð;Ø�S�bˆz˜U 2™Y¨™]Ð,Ñ,Ð,r/   c                 óR   — t        |«      dk  rt        d«      ‚|d d |d   dz
  fz   S rŽ  rr  rd   s     r.   ri   z$StickBreakingTransform.inverse_shapeÒ  r�  r/   N)ra   rl   rm   rn   r   rs  r!   r  r"   ro   rK   rO   rV   r_   rf   ri   rH   r/   r.   r   r      sB   „ ñð ×$Ñ$€FØ×"Ñ"€HØ€Iò9òòòò-ó
-r/   r   c                   ót   — e Zd ZdZ ej
                  ej                  d«      Zej                  Z	d„ Z
d„ Zd„ Zy)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.
    rS  c                 ó"   — t        |t        «      S rG   )rƒ   r   rI   s     r.   rK   zLowerCholeskyTransform.__eq__ä  r‚  r/   c                 ó„   — |j                  d«      |j                  dd¬«      j                  «       j                  «       z   S ©Nr”   rf  )Údim1Údim2)ÚtrilÚdiagonalrå   Ú
diag_embedrY   s     r.   rO   zLowerCholeskyTransform._callç  ó4   € Ø�v‰v�b‹z˜AŸJ™J¨B°R˜JÓ8×<Ñ<Ó>×IÑIÓKÑKÐKr/   c                 ó„   — |j                  d«      |j                  dd¬«      j                  «       j                  «       z   S r”  )r—  r˜  ré   r™  r\   s     r.   rV   zLowerCholeskyTransform._inverseê  rš  r/   N)ra   rl   rm   rn   r   r˜   r•   r!   Úlower_choleskyr"   rK   rO   rV   rH   r/   r.   r   r   Ø  s?   „ ñð %ˆ[×$Ñ$ [×%5Ñ%5°qÓ9€FØ×)Ñ)€Hò9òLóLr/   r   c                   ót   — e Zd ZdZ ej
                  ej                  d«      Zej                  Z	d„ Z
d„ Zd„ Zy)r   zN
    Transform from unconstrained matrices to positive-definite matrices.
    rS  c                 ó"   — t        |t        «      S rG   )rƒ   r   rI   s     r.   rK   z PositiveDefiniteTransform.__eq__ö  s   € Ü˜%Ô!:Ó;Ð;r/   c                 ó@   —  t        «       |«      }||j                  z  S rG   )r   ÚmTrY   s     r.   rO   zPositiveDefiniteTransform._callù  s   € Ø$Ô"Ó$ QÓ'ˆØ�1—4‘4‰xˆr/   c                 ór   — t         j                  j                  |«      }t        «       j	                  |«      S rG   )r¨   ÚlinalgÚcholeskyr   r<   r\   s     r.   rV   z"PositiveDefiniteTransform._inverseý  s*   € Ü�L‰L×!Ñ! !Ó$ˆÜ%Ó'×+Ñ+¨AÓ.Ð.r/   N)ra   rl   rm   rn   r   r˜   r•   r!   Úpositive_definiter"   rK   rO   rV   rH   r/   r.   r   r   î  s=   „ ñð %ˆ[×$Ñ$ [×%5Ñ%5°qÓ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)
    Ú
transformsc                 óv  •— t        d„ |D «       «      sJ ‚|r|D �cg c]  }|j                  |«      ‘Œ }}t        ‰| �  |¬«       t	        |«      | _        |€dgt        | j
                  «      z  }t	        |«      | _        t        | j                  «      t        | j
                  «      k(  sJ ‚|| _        y c c}w )Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrG   ©rƒ   r   ©r�   rd  s     r.   rŸ   z(CatTransform.__init__.<locals>.<genexpr>  ó   è ø€ Ò:°”:˜a¤×+Ñ:ùó   ‚rB   r$   )	r¡   rE   r)   r*   Úlistr¦  rÓ   ÚlengthsrÄ   )r+   ÚtseqrÄ   r®  r,   rd  r-   s         €r.   r*   zCatTransform.__init__  s¢   ø€ ÜÑ:°TÔ:Ô:Ð:Ð:ÙØ6:Ö;°�A—L‘L Õ,Ð;ˆDÐ;Ü‰Ñ JÐÔ/Ü˜t›*ˆŒØˆ?Ø�cœC §¡Ó0Ñ0ˆGÜ˜G“}ˆŒÜ�4—<‘<Ó ¤C¨¯©Ó$8Ò8Ð8Ð8Øˆ�ùò <s   œB6c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrG   )r6   rª  s     r.   rŸ   z)CatTransform.event_dim.<locals>.<genexpr>!  ó   è ø€ Ò8 1�1—;•;Ñ8ùr    )r—   r¦  r7   s    r.   r6   zCatTransform.event_dim  ó   € äÑ8¨¯©Ô8Ó8Ð8r/   c                 ó,   — t        | j                  «      S rG   )rG  r®  r7   s    r.   ÚlengthzCatTransform.length#  s   € ä�4—<‘<Ó Ð r/   c                 ó|   — | j                   |k(  r| S t        | j                  | j                  | j                  |«      S rG   )r%   r   r¦  rÄ   r®  rD   s     r.   rE   zCatTransform.with_cache'  s2   € Ø×Ñ˜zÒ)ØˆKÜ˜DŸO™O¨T¯X©X°t·|±|ÀZÓPÐPr/   c                 óÐ  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      | j                  k(  sJ ‚g }d}t        | j                  | j
                  «      D ]>  \  }}|j                  | j                   ||«      }|j                   ||«      «       ||z   }Œ@ t        j                  || j                   ¬«      S ©Nr   r^  )
rÄ   rE  rµ  r«   r¦  r®  Únarrowrª   r¨   Úcat)r+   rP   ÚyslicesÚstartÚtransrµ  Úxslices          r.   rO   zCatTransform._call,  s¾   € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ 4§;¡;Ò.Ð.Ð.ØˆØˆÜ  §¡°$·,±,Ó?ò 	#‰MˆE�6Ø—X‘X˜dŸh™h¨¨vÓ6ˆFØ�N‰N™5 ›=Ô)Ø˜F‘N‰Eð	#ô �y‰y˜ d§h¡hÔ/Ð/r/   c                 óâ  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      | j                  k(  sJ ‚g }d}t        | j                  | j
                  «      D ]G  \  }}|j                  | j                   ||«      }|j                  |j                  |«      «       ||z   }ŒI t        j                  || j                   ¬«      S r¸  )rÄ   rE  rµ  r«   r¦  r®  r¹  rª   r<   r¨   rº  )r+   rS   Úxslicesr¼  r½  rµ  Úyslices          r.   rV   zCatTransform._inverse7  sÃ   € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ 4§;¡;Ò.Ð.Ð.ØˆØˆÜ  §¡°$·,±,Ó?ò 	#‰MˆE�6Ø—X‘X˜dŸh™h¨¨vÓ6ˆFØ�N‰N˜5Ÿ9™9 VÓ,Ô-Ø˜F‘N‰Eð	#ô �y‰y˜ d§h¡hÔ/Ð/r/   c                 óÎ  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      | j                  k(  sJ ‚|j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      | j                  k(  sJ ‚g }d}t        | j                  | j
                  «      D ]£  \  }}|j                  | j                   ||«      }|j                  | j                   ||«      }|j                  ||«      }	|j                  | j                  k  r#t        |	| j                  |j                  z
  «      }	|j                  |	«       ||z   }Œ¥ | j                   }
|
dk\  r|
|j                  «       z
  }
|
| j                  z   }
|
dk  rt        j                  ||
¬«      S t        |«      S r¸  )rÄ   rE  rµ  r«   r¦  r®  r¹  r_   r6   r   rª   r¨   rº  rG  )r+   rP   rS   Ú
logdetjacsr¼  r½  rµ  r¾  rÁ  Ú	logdetjacrÄ   s              r.   r_   z!CatTransform.log_abs_det_jacobianB  s‘  € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ 4§;¡;Ò.Ð.Ð.Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ 4§;¡;Ò.Ð.Ð.Øˆ
ØˆÜ  §¡°$·,±,Ó?ò 	#‰MˆE�6Ø—X‘X˜dŸh™h¨¨vÓ6ˆFØ—X‘X˜dŸh™h¨¨vÓ6ˆFØ×2Ñ2°6¸6ÓBˆIØ�‰ §¡Ò/Ü*¨9°d·n±nÀuÇÁÑ6VÓW�	Ø×Ñ˜iÔ(Ø˜F‘N‰Eð	#ð �h‰hˆØ�!Š8Ø˜Ÿ™›‘-ˆCØ�D—N‘NÑ"ˆØ�Š7Ü—9‘9˜Z¨SÔ1Ð1ä�z“?Ð"r/   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrG   rœ   rª  s     r.   rŸ   z)CatTransform.bijective.<locals>.<genexpr>]  r²  r    ©r¡   r¦  r7   s    r.   ro   zCatTransform.bijective[  r³  r/   c                 ó¦   — t        j                  | j                  D �cg c]  }|j                  ‘Œ c}| j                  | j
                  «      S c c}w rG   )r   rº  r¦  r!   rÄ   r®  ©r+   rd  s     r.   r!   zCatTransform.domain_  s8   € ä�‰Ø#Ÿ™Ö/˜!ˆQ�X‹XÒ/°·±¸4¿<¹<ó
ð 	
ùÚ/ó   žAc                 ó¦   — t        j                  | j                  D �cg c]  }|j                  ‘Œ c}| j                  | j
                  «      S c c}w rG   )r   rº  r¦  r"   rÄ   r®  rÉ  s     r.   r"   zCatTransform.codomaine  s8   € ä�‰Ø!%§¡Ö1˜AˆQ�Z‹ZÒ1°4·8±8¸T¿\¹\ó
ð 	
ùÚ1rÊ  )r   Nr   rk   )ra   rl   rm   rn   r   r   rq   r*   r   r6   rµ  rE   rO   rV   r_   rr   ro   r   r�   r!   r"   rs   rt   s   @r.   r   r     sž   ø… ñð �Y‘Óõ
ð ñ9ó ð9ð ñ!ó ð!óQò
	0ò	0ò#ð2 ñ9ó ð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¦  c                 óÆ   •— t        d„ |D «       «      sJ ‚|r|D �cg c]  }|j                  |«      ‘Œ }}t        ‰| �  |¬«       t	        |«      | _        || _        y c c}w )Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrG   r©  rª  s     r.   rŸ   z*StackTransform.__init__.<locals>.<genexpr>|  r«  r¬  rB   )r¡   rE   r)   r*   r­  r¦  rÄ   )r+   r¯  rÄ   r,   rd  r-   s        €r.   r*   zStackTransform.__init__{  s]   ø€ ÜÑ:°TÔ:Ô:Ð:Ð:ÙØ6:Ö;°�A—L‘L Õ,Ð;ˆDÐ;Ü‰Ñ JÐÔ/Ü˜t›*ˆŒØˆ�ùò <s   œAc                 óf   — | j                   |k(  r| S t        | j                  | j                  |«      S rG   )r%   r   r¦  rÄ   rD   s     r.   rE   zStackTransform.with_cacheƒ  s,   € Ø×Ñ˜zÒ)ØˆKÜ˜dŸo™o¨t¯x©x¸ÓDÐDr/   c                 ó¤   — t        |j                  | j                  «      «      D �cg c]  }|j                  | j                  |«      ‘Œ  c}S c c}w rG   )ÚrangerE  rÄ   Úselect)r+   r[  Úis      r.   Ú_slicezStackTransform._sliceˆ  s7   € Ü/4°Q·V±V¸D¿H¹HÓ5EÓ/FÖG¨!�—‘˜Ÿ™ 1Õ%ÒGÐGùÒGs   §#Ac                 ó¤  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      t        | j                  «      k(  sJ ‚g }t	        | j                  |«      | j                  «      D ]  \  }}|j                   ||«      «       Œ t        j                  || j                   ¬«      S ©Nr^  )	rÄ   rE  rÓ   r¦  r«   rÔ  rª   r¨   Ústack)r+   rP   r»  r¾  r½  s        r.   rO   zStackTransform._call‹  s¡   € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ¤3 t§¡Ó#7Ò7Ð7Ð7ØˆÜ  §¡¨Q£°·±ÓAò 	*‰MˆF�EØ�N‰N™5 ›=Õ)ð	*ä�{‰{˜7¨¯©Ô1Ð1r/   c                 ó¶  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      t        | j                  «      k(  sJ ‚g }t	        | j                  |«      | j                  «      D ]%  \  }}|j                  |j                  |«      «       Œ' t        j                  || j                   ¬«      S rÖ  )
rÄ   rE  rÓ   r¦  r«   rÔ  rª   r<   r¨   r×  )r+   rS   rÀ  rÁ  r½  s        r.   rV   zStackTransform._inverse“  s¦   € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ¤3 t§¡Ó#7Ò7Ð7Ð7ØˆÜ  §¡¨Q£°·±ÓAò 	.‰MˆF�EØ�N‰N˜5Ÿ9™9 VÓ,Õ-ð	.ä�{‰{˜7¨¯©Ô1Ð1r/   c                 ó¶  — |j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      t        | j                  «      k(  sJ ‚|j                  «        | j                   cxk  r|j                  «       k  sJ ‚ J ‚|j                  | j                   «      t        | j                  «      k(  sJ ‚g }| j	                  |«      }| j	                  |«      }t        ||| j                  «      D ]'  \  }}}|j                  |j                  ||«      «       Œ) t        j                  || j                   ¬«      S rÖ  )
rÄ   rE  rÓ   r¦  rÔ  r«   rª   r_   r¨   r×  )	r+   rP   rS   rÃ  r»  rÀ  r¾  rÁ  r½  s	            r.   r_   z#StackTransform.log_abs_det_jacobian›  s  € Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ¤3 t§¡Ó#7Ò7Ð7Ð7Ø—‘“ˆx˜4Ÿ8™8Ô- a§e¡e£gÒ-Ð-Ñ-Ð-Ð-Ø�v‰v�d—h‘hÓ¤3 t§¡Ó#7Ò7Ð7Ð7Øˆ
Ø—+‘+˜a“.ˆØ—+‘+˜a“.ˆÜ%(¨°'¸4¿?¹?Ó%Kò 	JÑ!ˆF�F˜EØ×Ñ˜e×8Ñ8¸ÀÓHÕIð	Jä�{‰{˜:¨4¯8©8Ô4Ð4r/   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrG   rœ   rª  s     r.   rŸ   z+StackTransform.bijective.<locals>.<genexpr>©  r²  r    rÇ  r7   s    r.   ro   zStackTransform.bijective§  r³  r/   c                 ó�   — t        j                  | j                  D �cg c]  }|j                  ‘Œ c}| j                  «      S c c}w rG   )r   r×  r¦  r!   rÄ   rÉ  s     r.   r!   zStackTransform.domain«  s/   € ä× Ñ °D·O±OÖ!D¨q !§(£(Ò!DÀdÇhÁhÓOÐOùÒ!Dó   žAc                 ó�   — t        j                  | j                  D �cg c]  }|j                  ‘Œ c}| j                  «      S c c}w rG   )r   r×  r¦  r"   rÄ   rÉ  s     r.   r"   zStackTransform.codomain¯  s/   € ä× Ñ °d·o±oÖ!F° !§*£*Ò!FÈÏÉÓQÐQùÒ!FrÝ  rN  rk   )ra   rl   rm   rn   r   r   rq   r*   rE   rÔ  rO   rV   r_   rr   ro   r   r�   r!   r"   rs   rt   s   @r.   r   r   l  s€   ø… ñ
ð �Y‘ÓõóEò
Hò2ò2ò
5ð ñ9ó ð9ð ×#Ñ#ñPó $ðPð ×#Ñ#ñRó $ôRr/   r   c                   ón   ‡ — 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$   c                 ó4   •— t         ‰| �  |¬«       || _        y rx   )r)   r*   Údistribution)r+   rá  r,   r-   s      €r.   r*   z(CumulativeDistributionTransform.__init__Ë  s   ø€ Ü‰Ñ JÐÔ/Ø(ˆÕr/   c                 ó.   — | j                   j                  S rG   )rá  Úsupportr7   s    r.   r!   z&CumulativeDistributionTransform.domainÏ  s   € à× Ñ ×(Ñ(Ð(r/   c                 ó8   — | j                   j                  |«      S rG   )rá  ÚcdfrY   s     r.   rO   z%CumulativeDistributionTransform._callÓ  s   € Ø× Ñ ×$Ñ$ QÓ'Ð'r/   c                 ó8   — | j                   j                  |«      S rG   )rá  Úicdfr\   s     r.   rV   z(CumulativeDistributionTransform._inverseÖ  s   € Ø× Ñ ×%Ñ% aÓ(Ð(r/   c                 ó8   — | j                   j                  |«      S rG   )rá  Úlog_probr^   s      r.   r_   z4CumulativeDistributionTransform.log_abs_det_jacobianÙ  s   € Ø× Ñ ×)Ñ)¨!Ó,Ð,r/   c                 óR   — | j                   |k(  r| S t        | j                  |¬«      S rx   )r%   r   rá  rD   s     r.   rE   z*CumulativeDistributionTransform.with_cacheÜ  s(   € Ø×Ñ˜zÒ)ØˆKÜ.¨t×/@Ñ/@ÈZÔXÐXr/   rj   rk   )ra   rl   rm   rn   ro   r   r  r"   r@   r*   rr   r!   rO   rV   r_   rE   rs   rt   s   @r.   r   r   ´  sM   ø„ ñð$ €IØ×(Ñ(€HØ€Dõ)ð ñ)ó ð)ò(ò)ò-÷Yr/   r   )-r¬   r(  r;  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   rH   r/   r.   ú<module>rò     s_  ðã Û Û Û Û Ý ã ß Ð Ý +÷õ ÷ .ò€÷0fñ fôR;.˜	ô ;.ô|w�yô wñt & bÓ)Ð ôD8˜9ô D8ôN@+�yô @+ôF�9ô ô,'R�Yô 'RòTNô
/�yô /ô0˜	ô ô.!>�Iô !>ôH�9ô ô"c
�iô c
ôLO!˜Iô O!ôd �yô  ôF5-˜Yô 5-ôpL˜Yô Lô,/ 	ô /ô(g
�9ô g
ôTER�Yô ERôP+Y iõ +Yr/   