ó
    Eñi6´  ã                   óz  • S SK r S SKrS SKrS SKrS SKJr  S SKrS SKJs  J	r
  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S SKJrJr  S SKJr  / S	Qr " S
 S5      r " S S\5      r " S S\5      r\" / 5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r"S r# " S S\5      r$ " S S\5      r% " S S\5      r& " S S \5      r' " S! S"\5      r( " S# S$\5      r) " S% S&\5      r* " S' S(\5      r+ " S) S*\5      r, " S+ S,\5      r- " S- S.\5      r. " S/ S0\5      r/ " S1 S2\5      r0g)3é    N)ÚSequence)ÚTensor)Úconstraints)ÚDistribution)Ú_sum_rightmostÚbroadcast_allÚlazy_propertyÚtril_matrix_to_vecÚvec_to_tril_matrix)ÚpadÚsoftplus)Ú_Number)ÚAbsTransformÚAffineTransformÚCatTransformÚComposeTransformÚCorrCholeskyTransformÚCumulativeDistributionTransformÚExpTransformÚIndependentTransformÚLowerCholeskyTransformÚPositiveDefiniteTransformÚPowerTransformÚReshapeTransformÚSigmoidTransformÚSoftplusTransformÚTanhTransformÚSoftmaxTransformÚStackTransformÚStickBreakingTransformÚ	TransformÚidentity_transformc                   ó  ^ • \ rS rSr% SrSr\R                  \S'   \R                  \S'   SS\	SS4U 4S	 jjjr
S
 r\S\	4S j5       r\SS j5       r\S\	4S j5       rSS jrS rS rS rS rS rS rS rS rS rS rSrU =r$ )r!   é0   ac  
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ÚcodomainÚ
cache_sizeÚreturnNc                 ó|   >• Xl         S U l        US:X  a  OUS:X  a  SU l        O[        S5      e[        TU ]  5         g )Nr   é   )NNzcache_size must be 0 or 1)Ú_cache_sizeÚ_invÚ_cached_x_yÚ
ValueErrorÚsuperÚ__init__)Úselfr'   Ú	__class__s     €Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributions/transforms.pyr0   ÚTransform.__init__a   s@   ø€ Ø%ÔØ=AˆŒ	Ø˜‹?ØØ˜1‹_Ø)ˆDÕäÐ8Ó9Ð9Ü‰ÑÕó    c                 óD   • U R                   R                  5       nS US'   U$ )Nr,   )Ú__dict__Úcopy)r1   Ústates     r3   Ú__getstate__ÚTransform.__getstate__l   s"   € Ø—‘×"Ñ"Ó$ˆØˆˆf‰Øˆr5   c                 ó    • U R                   R                  U R                  R                  :X  a  U R                   R                  $ [        S5      e)Nz:Please use either .domain.event_dim or .codomain.event_dim)r%   Ú	event_dimr&   r.   ©r1   s    r3   r=   ÚTransform.event_dimq   s:   € à�;‰;× Ñ  D§M¡M×$;Ñ$;Ó;Ø—;‘;×(Ñ(Ð(ÜÐUÓVÐVr5   c                 ó–   • SnU R                   b  U R                  5       nUc&  [        U 5      n[        R                  " U5      U l         U$ )zc
Returns the inverse :class:`Transform` of this transform.
This should satisfy ``t.inv.inv is t``.
N)r,   Ú_InverseTransformÚweakrefÚref)r1   Úinvs     r3   rD   ÚTransform.invw   sB   € ð ˆØ�9‰9Ñ Ø—)‘)“+ˆCØ‰;Ü# DÓ)ˆCÜŸš CÓ(ˆDŒIØˆ
r5   c                 ó   • [         e)z€
Returns the sign of the determinant of the Jacobian, if applicable.
In general this only makes sense for bijective transforms.
©ÚNotImplementedErrorr>   s    r3   ÚsignÚTransform.sign…   s
   € ô "Ð!r5   c                 ó¾   • U R                   U:X  a  U $ [        U 5      R                  [        R                  L a  [        U 5      " US9$ [	        [        U 5       S35      e)N©r'   z.with_cache is not implemented)r+   Útyper0   r!   rH   ©r1   r'   s     r3   Ú
with_cacheÚTransform.with_cache�   sS   € Ø×Ñ˜zÓ)ØˆKÜ�‹:×Ñ¤)×"4Ñ"4Ò4Ü˜”:¨Ñ4Ð4Ü!¤T¨$£Z LÐ0NÐ"OÓPÐPr5   c                 ó   • XL $ ©N© ©r1   Úothers     r3   Ú__eq__ÚTransform.__eq__”   s
   € Øˆ}Ðr5   c                 ó.   • U R                  U5      (       + $ rR   )rV   rT   s     r3   Ú__ne__ÚTransform.__ne__—   s   € à—;‘;˜uÓ%Ô%Ð%r5   c                 ó¢   • U R                   S:X  a  U R                  U5      $ U R                  u  p#XL a  U$ U R                  U5      nX4U l        U$ )z"
Computes the transform `x => y`.
r   )r+   Ú_callr-   )r1   ÚxÚx_oldÚy_oldÚys        r3   Ú__call__ÚTransform.__call__›   sS   € ð ×Ñ˜qÓ Ø—:‘:˜a“=Ð Ø×'Ñ'‰ˆØŠ:ØˆLØ�J‰J�q‹MˆØ˜4ˆÔØˆr5   c                 ó¢   • U R                   S:X  a  U R                  U5      $ U R                  u  p#XL a  U$ U R                  U5      nXA4U l        U$ )z!
Inverts the transform `y => x`.
r   )r+   Ú_inverser-   )r1   r`   r^   r_   r]   s        r3   Ú	_inv_callÚTransform._inv_call¨   sU   € ð ×Ñ˜qÓ Ø—=‘= Ó#Ð#Ø×'Ñ'‰ˆØŠ:ØˆLØ�M‰M˜!ÓˆØ˜4ˆÔØˆr5   c                 ó   • [         e)z4
Abstract method to compute forward transformation.
rG   ©r1   r]   s     r3   r\   ÚTransform._callµ   ó
   € ô "Ð!r5   c                 ó   • [         e)z4
Abstract method to compute inverse transformation.
rG   ©r1   r`   s     r3   rd   ÚTransform._inverse»   rj   r5   c                 ó   • [         e)zE
Computes the log det jacobian `log |dy/dx|` given input and output.
rG   ©r1   r]   r`   s      r3   Úlog_abs_det_jacobianÚTransform.log_abs_det_jacobianÁ   rj   r5   c                 ó4   • U R                   R                  S-   $ )Nz())r2   Ú__name__r>   s    r3   Ú__repr__ÚTransform.__repr__Ç   s   € Ø�~‰~×&Ñ&¨Ñ-Ð-r5   c                 ó   • U$ )zc
Infers the shape of the forward computation, given the input shape.
Defaults to preserving shape.
rS   ©r1   Úshapes     r3   Úforward_shapeÚTransform.forward_shapeÊ   ó	   € ð
 ˆr5   c                 ó   • U$ )ze
Infers the shapes of the inverse computation, given the output shape.
Defaults to preserving shape.
rS   rw   s     r3   Úinverse_shapeÚTransform.inverse_shapeÑ   r{   r5   )r+   r-   r,   ©r   )r(   r!   ©r*   )rs   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	bijectiver   Ú
ConstraintÚ__annotations__Úintr0   r:   Úpropertyr=   rD   rI   rO   rV   rY   ra   re   r\   rd   rp   rt   ry   r}   Ú__static_attributes__Ú__classcell__©r2   s   @r3   r!   r!   0   sÏ   ø‡ ñ*ðX €IØ×"Ñ"Ó"Ø×$Ñ$Ó$ñ	 3ð 	¨t÷ 	ð 	òð
 ðW˜3ó Wó ðWð
 óó ðð ð"�có "ó ð"ôQòò&òòò"ò"ò"ò.ò÷ð r5   r!   c                   ó  ^ • \ rS rSrSrS\SS4U 4S jjr\R                  " SS9S	 5       r	\R                  " SS9S
 5       r
\S\4S j5       r\S\4S j5       r\S\4S j5       rSS jrS rS rS rS rS rS rSrU =r$ )rA   éÙ   zp
Inverts a single :class:`Transform`.
This class is private; please instead use the ``Transform.inv`` property.
Ú	transformr(   Nc                 ó@   >• [         TU ]  UR                  S9  Xl        g ©NrL   )r/   r0   r+   r,   )r1   r�   r2   s     €r3   r0   Ú_InverseTransform.__init__ß   s   ø€ Ü‰Ñ I×$9Ñ$9ÐÑ:Ø(�	r5   F©Úis_discretec                 ó^   • U R                   c  [        S5      eU R                   R                  $ ©Nú_inv must not be None)r,   ÚAssertionErrorr&   r>   s    r3   r%   Ú_InverseTransform.domainã   s*   € ð �9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y×!Ñ!Ð!r5   c                 ó^   • U R                   c  [        S5      eU R                   R                  $ r–   )r,   r˜   r%   r>   s    r3   r&   Ú_InverseTransform.codomainê   s*   € ð �9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y×ÑÐr5   c                 ó^   • U R                   c  [        S5      eU R                   R                  $ r–   )r,   r˜   r…   r>   s    r3   r…   Ú_InverseTransform.bijectiveñ   s(   € à�9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y×"Ñ"Ð"r5   c                 ó^   • U R                   c  [        S5      eU R                   R                  $ r–   )r,   r˜   rI   r>   s    r3   rI   Ú_InverseTransform.sign÷   s&   € à�9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y�~‰~Ðr5   c                 ó   • U R                   $ rR   ©r,   r>   s    r3   rD   Ú_InverseTransform.invý   s   € à�y‰yÐr5   c                 ó|   • U R                   c  [        S5      eU R                  R                  U5      R                  $ r–   )r,   r˜   rD   rO   rN   s     r3   rO   Ú_InverseTransform.with_cache  s3   € Ø�9‰9ÑÜ Ð!8Ó9Ð9Ø�x‰x×"Ñ" :Ó.×2Ñ2Ð2r5   c                 ó�   • [        U[        5      (       d  gU R                  c  [        S5      eU R                  UR                  :H  $ )NFr—   )Ú
isinstancerA   r,   r˜   rT   s     r3   rV   Ú_InverseTransform.__eq__  s<   € Ü˜%Ô!2×3Ñ3ØØ�9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y˜EŸJ™JÑ&Ð&r5   c                 ó`   • U R                   R                   S[        U R                  5       S3$ )NÚ(Ú))r2   rs   Úreprr,   r>   s    r3   rt   Ú_InverseTransform.__repr__  s)   € Ø—.‘.×)Ñ)Ð*¨!¬D°·±«OÐ+<¸AÐ>Ð>r5   c                 óh   • U R                   c  [        S5      eU R                   R                  U5      $ r–   )r,   r˜   re   rh   s     r3   ra   Ú_InverseTransform.__call__  s-   € Ø�9‰9ÑÜ Ð!8Ó9Ð9Ø�y‰y×"Ñ" 1Ó%Ð%r5   c                 ój   • U R                   c  [        S5      eU R                   R                  X!5      * $ r–   )r,   r˜   rp   ro   s      r3   rp   Ú&_InverseTransform.log_abs_det_jacobian  s0   € Ø�9‰9ÑÜ Ð!8Ó9Ð9Ø—	‘	×.Ñ.¨qÓ4Ð4Ð4r5   c                 ó8   • U R                   R                  U5      $ rR   )r,   r}   rw   s     r3   ry   Ú_InverseTransform.forward_shape  ó   € Ø�y‰y×&Ñ& uÓ-Ð-r5   c                 ó8   • U R                   R                  U5      $ rR   )r,   ry   rw   s     r3   r}   Ú_InverseTransform.inverse_shape  r³   r5   r¡   r€   )rs   r�   r‚   rƒ   r„   r!   r0   r   Údependent_propertyr%   r&   r‰   Úboolr…   rˆ   rI   rD   rO   rV   rt   ra   rp   ry   r}   rŠ   r‹   rŒ   s   @r3   rA   rA   Ù   sÒ   ø† ñð
) )ð )°÷ )ð ×#Ò#°Ñ6ñ"ó 7ð"ð
 ×#Ò#°Ñ6ñ ó 7ð ð
 ð#˜4ó #ó ð#ð
 ð�có ó ðð
 ð�Yó ó ðô3ò
'ò?ò&ò
5ò
.÷.ð .r5   rA   c                   ó  ^ • \ rS rSrSrSS\\   S\SS4U 4S jjjrS r	\
R                  " S	S
9S 5       r\
R                  " S	S
9S 5       r\S\4S j5       r\S\4S j5       r\S\4S j5       rSS jrS rS rS rS rS rSrU =r$ )r   i!  aF  
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.
Úpartsr'   r(   Nc                 ó„   >• U(       a   U Vs/ s H  o3R                  U5      PM     nn[        TU ]	  US9  Xl        g s  snf r‘   )rO   r/   r0   r¹   )r1   r¹   r'   Úpartr2   s       €r3   r0   ÚComposeTransform.__init__,  s<   ø€ ÞÙ=BÓCºU°T—_‘_ ZÖ0¹UˆEÐCÜ‰Ñ JÐÑ/Ø�
ùò Ds   �=c                 ó`   • [        U[        5      (       d  gU R                  UR                  :H  $ ©NF)r¦   r   r¹   rT   s     r3   rV   ÚComposeTransform.__eq__2  s&   € Ü˜%Ô!1×2Ñ2ØØ�z‰z˜UŸ[™[Ñ(Ð(r5   Fr“   c                 óL  • U R                   (       d  [        R                  $ U R                   S   R                  nU R                   S   R                  R
                  n[        U R                   5       HQ  nX#R                  R
                  UR                  R
                  -
  -  n[        X#R                  R
                  5      nMS     X!R
                  :  a  [        SU SUR
                   35      eX!R
                  :”  a#  [        R                  " XUR
                  -
  5      nU$ )Nr   éÿÿÿÿú
event_dim z must be >= domain.event_dim )
r¹   r   Úrealr%   r&   r=   ÚreversedÚmaxr˜   Úindependent)r1   r%   r=   r»   s       r3   r%   ÚComposeTransform.domain7  sì   € ð �z�zÜ×#Ñ#Ð#Ø—‘˜A‘×%Ñ%ˆà—J‘J˜r‘N×+Ñ+×5Ñ5ˆ	Ü˜TŸZ™ZÖ(ˆDØŸ™×.Ñ.°·±×1HÑ1HÑHÑHˆIÜ˜I§{¡{×'<Ñ'<Ó=ŠIñ )ð ×'Ñ'Ó'Ü Ø˜Y˜KÐ'DÀV×EUÑEUÐDVÐWóð ð ×'Ñ'Ó'Ü ×,Ò,¨VÀ×AQÑAQÑ5QÓRˆFØˆr5   c                 ó:  • U R                   (       d  [        R                  $ U R                   S   R                  nU R                   S   R                  R
                  nU R                    HQ  nX#R                  R
                  UR                  R
                  -
  -  n[        X#R                  R
                  5      nMS     X!R
                  :  a  [        SU SUR
                   35      eX!R
                  :”  a#  [        R                  " XUR
                  -
  5      nU$ )NrÁ   r   rÂ   z must be >= codomain.event_dim )	r¹   r   rÃ   r&   r%   r=   rÅ   r˜   rÆ   )r1   r&   r=   r»   s       r3   r&   ÚComposeTransform.codomainJ  sç   € ð �z�zÜ×#Ñ#Ð#Ø—:‘:˜b‘>×*Ñ*ˆà—J‘J˜q‘M×(Ñ(×2Ñ2ˆ	Ø—J”JˆDØŸ™×0Ñ0°4·;±;×3HÑ3HÑHÑHˆIÜ˜I§}¡}×'>Ñ'>Ó?ŠIñ ð ×)Ñ)Ó)Ü Ø˜Y˜KÐ'FÀx×GYÑGYÐFZÐ[óð ð ×)Ñ)Ó)Ü"×.Ò.¨xÀX×EWÑEWÑ9WÓXˆHØˆr5   c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó8   #   • U  H  oR                   v •  M     g 7frR   ©r…   )Ú.0Úps     r3   Ú	<genexpr>Ú-ComposeTransform.bijective.<locals>.<genexpr>_  s   é € Ð3ª
 1—;–;ª
ùó   ‚)Úallr¹   r>   s    r3   r…   ÚComposeTransform.bijective]  s   € äÑ3¨¯
ª
Ó3Ó3Ð3r5   c                 óL   • SnU R                    H  nXR                  -  nM     U$ ©Nr*   )r¹   rI   )r1   rI   rÎ   s      r3   rI   ÚComposeTransform.signa  s%   € àˆØ—”ˆAØŸ&™&‘=ŠDñ àˆr5   c                 ó0  • S nU R                   b  U R                  5       nUcn  [        [        U R                  5       Vs/ s H  o"R                  PM     sn5      n[
        R                  " U5      U l         [
        R                  " U 5      Ul         U$ s  snf rR   )r,   r   rÄ   r¹   rD   rB   rC   )r1   rD   rÎ   s      r3   rD   ÚComposeTransform.invh  sr   € àˆØ�9‰9Ñ Ø—)‘)“+ˆCØ‰;Ü"´8¸D¿J¹JÔ3GÓ#HÒ3G¨a§E¤EÑ3GÑ#HÓIˆCÜŸš CÓ(ˆDŒIÜ—{’{ 4Ó(ˆCŒHØˆ
ùò $Is   ¿Bc                 óN   • U R                   U:X  a  U $ [        U R                  US9$ r‘   )r+   r   r¹   rN   s     r3   rO   ÚComposeTransform.with_caches  s&   € Ø×Ñ˜zÓ)ØˆKÜ §
¡
°zÑBÐBr5   c                 ó<   • U R                    H  nU" U5      nM     U$ rR   )r¹   )r1   r]   r»   s      r3   ra   ÚComposeTransform.__call__x  s   € Ø—J”JˆDÙ�Q“ŠAñ àˆr5   c           	      ó~  • U R                   (       d  [        R                  " U5      $ U/nU R                   S S  H  nUR                  U" US   5      5        M     UR                  U5        / nU R                  R
                  n[        U R                   US S USS  5       Hu  u  pAnUR                  [        UR                  X5      XdR                  R
                  -
  5      5        XdR                  R
                  UR                  R
                  -
  -  nMw     [        R                  " [        R                  U5      $ )NrÁ   r*   )r¹   ÚtorchÚ
zeros_likeÚappendr%   r=   Úzipr   rp   r&   Ú	functoolsÚreduceÚoperatorÚadd)r1   r]   r`   Úxsr»   Útermsr=   s          r3   rp   Ú%ComposeTransform.log_abs_det_jacobian}  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Ö:‰JˆD�QØ�L‰LÜØ×-Ñ-¨aÓ3°YÇÁ×AVÑAVÑ5Vóôð
 Ÿ™×0Ñ0°4·;±;×3HÑ3HÑHÑHŠIñ ;ô ×Ò¤§¡¨eÓ4Ð4r5   c                 óN   • U R                    H  nUR                  U5      nM     U$ rR   )r¹   ry   ©r1   rx   r»   s      r3   ry   ÚComposeTransform.forward_shape’  s%   € Ø—J”JˆDØ×&Ñ& uÓ-ŠEñ àˆr5   c                 ó`   • [        U R                  5       H  nUR                  U5      nM     U$ rR   )rÄ   r¹   r}   rê   s      r3   r}   ÚComposeTransform.inverse_shape—  s*   € Ü˜TŸZ™ZÖ(ˆDØ×&Ñ& uÓ-ŠEñ )àˆr5   c                 óÄ   • U R                   R                  S-   nUSR                  U R                   Vs/ s H  o"R	                  5       PM     sn5      -  nUS-  nU$ s  snf )Nz(
    z,
    z
))r2   rs   Újoinr¹   rt   )r1   Ú
fmt_stringrÎ   s      r3   rt   ÚComposeTransform.__repr__œ  sV   € Ø—^‘^×,Ñ,¨yÑ8ˆ
Ø�i—n‘n¸D¿JºJÓ%GºJ°q§j¡j¦l¹JÑ%GÓHÑHˆ
Ø�eÑˆ
ØÐùò &Hs   ´A
)r,   r¹   r   r€   )rs   r�   r‚   rƒ   r„   Úlistr!   rˆ   r0   rV   r   r¶   r%   r&   r	   r·   r…   rI   r‰   rD   rO   ra   rp   ry   r}   rt   rŠ   r‹   rŒ   s   @r3   r   r   !  sã   ø† ññ˜d 9™oð ¸3ð Àt÷ ð ò)ð
 ×#Ò#°Ñ6ñó 7ðð" ×#Ò#°Ñ6ñó 7ðð" ð4˜4ó 4ó ð4ð ð�có ó ðð ð�Yó ó ðôCò
ò
5ò*ò
÷
ð r5   r   c            	       óü   ^ • \ rS rSrSr SS\S\S\SS4U 4S jjjrSS	 jr\	R                  " S
S9S 5       r\	R                  " S
S9S 5       r\S\4S j5       r\S\4S j5       rS rS rS rS rS rS rSrU =r$ )r   i¦  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.
Úbase_transformÚreinterpreted_batch_ndimsr'   r(   Nc                 óX   >• [         TU ]  US9  UR                  U5      U l        X l        g r‘   )r/   r0   rO   rô   rõ   )r1   rô   rõ   r'   r2   s       €r3   r0   ÚIndependentTransform.__init__´  s.   ø€ ô 	‰Ñ JÐÑ/Ø,×7Ñ7¸
ÓCˆÔØ)BÕ&r5   c                 ód   • U R                   U:X  a  U $ [        U R                  U R                  US9$ r‘   )r+   r   rô   rõ   rN   s     r3   rO   ÚIndependentTransform.with_cache¾  s5   € Ø×Ñ˜zÓ)ØˆKÜ#Ø×Ñ ×!?Ñ!?ÈJñ
ð 	
r5   Fr“   c                 ól   • [         R                  " U R                  R                  U R                  5      $ rR   )r   rÆ   rô   r%   rõ   r>   s    r3   r%   ÚIndependentTransform.domainÅ  s.   € ô ×&Ò&Ø×Ñ×&Ñ&¨×(FÑ(Fó
ð 	
r5   c                 ól   • [         R                  " U R                  R                  U R                  5      $ rR   )r   rÆ   rô   r&   rõ   r>   s    r3   r&   ÚIndependentTransform.codomainÌ  s.   € ô ×&Ò&Ø×Ñ×(Ñ(¨$×*HÑ*Hó
ð 	
r5   c                 ó.   • U R                   R                  $ rR   )rô   r…   r>   s    r3   r…   ÚIndependentTransform.bijectiveÓ  s   € à×"Ñ"×,Ñ,Ð,r5   c                 ó.   • U R                   R                  $ rR   )rô   rI   r>   s    r3   rI   ÚIndependentTransform.sign×  s   € à×"Ñ"×'Ñ'Ð'r5   c                 óŠ   • UR                  5       U R                  R                  :  a  [        S5      eU R	                  U5      $ ©NúToo few dimensions on input)Údimr%   r=   r.   rô   rh   s     r3   r\   ÚIndependentTransform._callÛ  s7   € Ø�5‰5‹7�T—[‘[×*Ñ*Ó*ÜÐ:Ó;Ð;Ø×"Ñ" 1Ó%Ð%r5   c                 óž   • UR                  5       U R                  R                  :  a  [        S5      eU R                  R                  U5      $ r  )r  r&   r=   r.   rô   rD   rl   s     r3   rd   ÚIndependentTransform._inverseà  s=   € Ø�5‰5‹7�T—]‘]×,Ñ,Ó,ÜÐ:Ó;Ð;Ø×"Ñ"×&Ñ& qÓ)Ð)r5   c                 óf   • U R                   R                  X5      n[        X0R                  5      nU$ rR   )rô   rp   r   rõ   )r1   r]   r`   Úresults       r3   rp   Ú)IndependentTransform.log_abs_det_jacobianå  s-   € Ø×$Ñ$×9Ñ9¸!Ó?ˆÜ ×(FÑ(FÓGˆØˆr5   c                 óz   • U R                   R                   S[        U R                  5       SU R                   S3$ )Nr©   z, rª   )r2   rs   r«   rô   rõ   r>   s    r3   rt   ÚIndependentTransform.__repr__ê  s:   € Ø—.‘.×)Ñ)Ð*¨!¬D°×1DÑ1DÓ,EÐ+FÀbÈ×IgÑIgÐHhÐhiÐjÐjr5   c                 ó8   • U R                   R                  U5      $ rR   )rô   ry   rw   s     r3   ry   Ú"IndependentTransform.forward_shapeí  ó   € Ø×"Ñ"×0Ñ0°Ó7Ð7r5   c                 ó8   • U R                   R                  U5      $ rR   )rô   r}   rw   s     r3   r}   Ú"IndependentTransform.inverse_shapeð  r  r5   )rô   rõ   r   r€   )rs   r�   r‚   rƒ   r„   r!   rˆ   r0   rO   r   r¶   r%   r&   r‰   r·   r…   rI   r\   rd   rp   rt   ry   r}   rŠ   r‹   rŒ   s   @r3   r   r   ¦  sà   ø† ñð" ñ	Cà!ðCð $'ðCð ð	Cð
 
÷Cð Cô
ð ×#Ò#°Ñ6ñ
ó 7ð
ð
 ×#Ò#°Ñ6ñ
ó 7ð
ð
 ð-˜4ó -ó ð-ð ð(�có (ó ð(ò&ò
*ò
ò
kò8÷8ð 8r5   r   c            	       óâ   ^ • \ rS rSrSrSr SS\R                  S\R                  S\SS4U 4S	 jjjr	\
R                  S
 5       r\
R                  S 5       rSS jrS rS rS rS rS rSrU =r$ )r   iô  aÏ  
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.
    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. (Default 0.)
TÚin_shapeÚ	out_shaper'   r(   Nc                 ó  >• [         R                  " U5      U l        [         R                  " U5      U l        U R                  R	                  5       U R                  R	                  5       :w  a  [        S5      e[        TU ]  US9  g )Nz6in_shape, out_shape have different numbers of elementsrL   )rÞ   ÚSizer  r  Únumelr.   r/   r0   )r1   r  r  r'   r2   s       €r3   r0   ÚReshapeTransform.__init__  sc   ø€ ô Ÿ
š
 8Ó,ˆŒÜŸš IÓ.ˆŒØ�=‰=×ÑÓ  D§N¡N×$8Ñ$8Ó$:Ó:ÜÐUÓVÐVÜ‰Ñ JÐÒ/r5   c                 ór   • [         R                  " [         R                  [        U R                  5      5      $ rR   )r   rÆ   rÃ   Úlenr  r>   s    r3   r%   ÚReshapeTransform.domain  s&   € ô ×&Ò&¤{×'7Ñ'7¼¸T¿]¹]Ó9KÓLÐLr5   c                 ór   • [         R                  " [         R                  [        U R                  5      5      $ rR   )r   rÆ   rÃ   r  r  r>   s    r3   r&   ÚReshapeTransform.codomain  s&   € ô ×&Ò&¤{×'7Ñ'7¼¸T¿^¹^Ó9LÓMÐMr5   c                 ód   • U R                   U:X  a  U $ [        U R                  U R                  US9$ r‘   )r+   r   r  r  rN   s     r3   rO   ÚReshapeTransform.with_cache  s,   € Ø×Ñ˜zÓ)ØˆKÜ §¡¨t¯~©~È*ÑUÐUr5   c                 ó¢   • UR                   S UR                  5       [        U R                  5      -
   nUR	                  X R
                  -   5      $ rR   )rx   r  r  r  Úreshaper  )r1   r]   Úbatch_shapes      r3   r\   ÚReshapeTransform._call  s=   € Ø—g‘gÐ< §¡£¬#¨d¯m©mÓ*<Ñ <Ð=ˆØ�y‰y˜§~¡~Ñ5Ó6Ð6r5   c                 ó¢   • UR                   S UR                  5       [        U R                  5      -
   nUR	                  X R
                  -   5      $ rR   )rx   r  r  r  r"  r  )r1   r`   r#  s      r3   rd   ÚReshapeTransform._inverse#  s=   € Ø—g‘gÐ= §¡£¬#¨d¯n©nÓ*=Ñ =Ð>ˆØ�y‰y˜§}¡}Ñ4Ó5Ð5r5   c                 óŠ   • UR                   S UR                  5       [        U R                  5      -
   nUR	                  U5      $ rR   )rx   r  r  r  Ú	new_zeros)r1   r]   r`   r#  s       r3   rp   Ú%ReshapeTransform.log_abs_det_jacobian'  s6   € Ø—g‘gÐ< §¡£¬#¨d¯m©mÓ*<Ñ <Ð=ˆØ�{‰{˜;Ó'Ð'r5   c                 ó   • [        U5      [        U R                  5      :  a  [        S5      e[        U5      [        U R                  5      -
  nXS  U R                  :w  a  [        SXS   SU R                   35      eUS U U R                  -   $ ©Nr  zShape mismatch: expected z	 but got )r  r  r.   r  ©r1   rx   Úcuts      r3   ry   ÚReshapeTransform.forward_shape+  s†   € Üˆu‹:œ˜DŸM™MÓ*Ó*ÜÐ:Ó;Ð;Ü�%‹jœ3˜tŸ}™}Ó-Ñ-ˆØ�ˆ;˜$Ÿ-™-Ó'ÜØ+¨E°$¨K¨=¸	À$Ç-Á-ÀÐQóð ð �T�cˆ{˜TŸ^™^Ñ+Ð+r5   c                 ó   • [        U5      [        U R                  5      :  a  [        S5      e[        U5      [        U R                  5      -
  nXS  U R                  :w  a  [        SXS   SU R                   35      eUS U U R                  -   $ r+  )r  r  r.   r  r,  s      r3   r}   ÚReshapeTransform.inverse_shape5  s‡   € Üˆu‹:œ˜DŸN™NÓ+Ó+ÜÐ:Ó;Ð;Ü�%‹jœ3˜tŸ~™~Ó.Ñ.ˆØ�ˆ;˜$Ÿ.™.Ó(ÜØ+¨E°$¨K¨=¸	À$Ç.Á.ÐAQÐRóð ð �T�cˆ{˜TŸ]™]Ñ*Ð*r5   )r  r  r   r€   )rs   r�   r‚   rƒ   r„   r…   rÞ   r  rˆ   r0   r   r¶   r%   r&   rO   r\   rd   rp   ry   r}   rŠ   r‹   rŒ   s   @r3   r   r   ô  s¨   ø† ñð €Ið ñ	
0à—*‘*ð
0ð —:‘:ð
0ð ð	
0ð
 
÷
0ð 
0ð ×#Ñ#ñMó $ðMð ×#Ñ#ñNó $ðNôVò
7ò6ò(ò,÷+ð +r5   r   c                   óh   • \ rS rSrSr\R                  r\R                  r	Sr
SrS rS rS rS rS	rg
)r   i@  z0
Transform via the mapping :math:`y = \exp(x)`.
Tr*   c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚExpTransform.__eq__J  ó   € Ü˜%¤Ó.Ð.r5   c                 ó"   • UR                  5       $ rR   )Úexprh   s     r3   r\   ÚExpTransform._callM  ó   € Ø�u‰u‹wˆr5   c                 ó"   • UR                  5       $ rR   ©Úlogrl   s     r3   rd   ÚExpTransform._inverseP  r8  r5   c                 ó   • U$ rR   rS   ro   s      r3   rp   Ú!ExpTransform.log_abs_det_jacobianS  ó   € Øˆr5   rS   N©rs   r�   r‚   rƒ   r„   r   rÃ   r%   Úpositiver&   r…   rI   rV   r\   rd   rp   rŠ   rS   r5   r3   r   r   @  s=   † ñð ×Ñ€FØ×#Ñ#€HØ€IØ€Dò/òòõr5   r   c                   óº   ^ • \ rS rSrSr\R                  r\R                  rSr	SS\
S\SS4U 4S jjjrSS	 jr\S\4S
 j5       rS rS rS rS rS rS rSrU =r$ )r   iW  z<
Transform via the mapping :math:`y = x^{\text{exponent}}`.
TÚexponentr'   r(   Nc                 óD   >• [         TU ]  US9  [        U5      u  U l        g r‘   )r/   r0   r   rC  )r1   rC  r'   r2   s      €r3   r0   ÚPowerTransform.__init__`  s"   ø€ Ü‰Ñ JÐÑ/Ü(¨Ó2Ñˆ�r5   c                 óN   • U R                   U:X  a  U $ [        U R                  US9$ r‘   )r+   r   rC  rN   s     r3   rO   ÚPowerTransform.with_cached  s&   € Ø×Ñ˜zÓ)ØˆKÜ˜dŸm™m¸
ÑCÐCr5   c                 ó6   • U R                   R                  5       $ rR   )rC  rI   r>   s    r3   rI   ÚPowerTransform.signi  s   € à�}‰}×!Ñ!Ó#Ð#r5   c                 ó°   • [        U[        5      (       d  gU R                  R                  UR                  5      R	                  5       R                  5       $ r¾   )r¦   r   rC  ÚeqrÒ   ÚitemrT   s     r3   rV   ÚPowerTransform.__eq__m  s=   € Ü˜%¤×0Ñ0ØØ�}‰}×Ñ §¡Ó/×3Ñ3Ó5×:Ñ:Ó<Ð<r5   c                 ó8   • UR                  U R                  5      $ rR   ©ÚpowrC  rh   s     r3   r\   ÚPowerTransform._callr  s   € Ø�u‰u�T—]‘]Ó#Ð#r5   c                 ó>   • UR                  SU R                  -  5      $ rÕ   rO  rl   s     r3   rd   ÚPowerTransform._inverseu  s   € Ø�u‰u�Q˜Ÿ™Ñ&Ó'Ð'r5   c                 ó^   • U R                   U-  U-  R                  5       R                  5       $ rR   )rC  Úabsr;  ro   s      r3   rp   Ú#PowerTransform.log_abs_det_jacobianx  s(   € Ø—‘ Ñ! AÑ%×*Ñ*Ó,×0Ñ0Ó2Ð2r5   c                 óZ   • [         R                  " U[        U R                  SS5      5      $ ©Nrx   rS   ©rÞ   Úbroadcast_shapesÚgetattrrC  rw   s     r3   ry   ÚPowerTransform.forward_shape{  ó"   € Ü×%Ò% e¬W°T·]±]ÀGÈRÓ-PÓQÐQr5   c                 óZ   • [         R                  " U[        U R                  SS5      5      $ rX  rY  rw   s     r3   r}   ÚPowerTransform.inverse_shape~  r]  r5   )rC  r   r€   )rs   r�   r‚   rƒ   r„   r   rA  r%   r&   r…   r   rˆ   r0   rO   r	   rI   rV   r\   rd   rp   ry   r}   rŠ   r‹   rŒ   s   @r3   r   r   W  s‹   ø† ñð ×!Ñ!€FØ×#Ñ#€HØ€Iñ3 ð 3°Sð 3À÷ 3ð 3ôDð
 ð$�có $ó ð$ò=ò
$ò(ò3òR÷Rð Rr5   r   c                 óÄ   • [         R                  " U R                  5      n[         R                  " [         R                  " U 5      UR
                  SUR                  -
  S9$ ©Nç      ð?©ÚminrÅ   )rÞ   ÚfinfoÚdtypeÚclampÚsigmoidÚtinyÚeps)r]   re  s     r3   Ú_clipped_sigmoidrk  ‚  s<   € Ü�KŠK˜Ÿ™Ó €EÜ�;Š;”u—}’} QÓ'¨U¯Z©Z¸SÀ5Ç9Á9¹_ÑMÐMr5   c                   óh   • \ rS rSrSr\R                  r\R                  r	Sr
SrS rS rS rS rS	rg
)r   i‡  z_
Transform via the mapping :math:`y = \frac{1}{1 + \exp(-x)}` and :math:`x = \text{logit}(y)`.
Tr*   c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚSigmoidTransform.__eq__‘  ó   € Ü˜%Ô!1Ó2Ð2r5   c                 ó   • [        U5      $ rR   )rk  rh   s     r3   r\   ÚSigmoidTransform._call”  s   € Ü Ó"Ð"r5   c                 óÔ   • [         R                  " UR                  5      nUR                  UR                  SUR
                  -
  S9nUR                  5       U* R                  5       -
  $ ra  )rÞ   re  rf  rg  ri  rj  r;  Úlog1p)r1   r`   re  s      r3   rd   ÚSigmoidTransform._inverse—  sK   € Ü—’˜AŸG™GÓ$ˆØ�G‰G˜Ÿ
™
¨¨e¯i©i©ˆGÐ8ˆØ�u‰u‹w˜1˜"Ÿ™›Ñ%Ð%r5   c                 ó`   • [         R                  " U* 5      * [         R                  " U5      -
  $ rR   )ÚFr   ro   s      r3   rp   Ú%SigmoidTransform.log_abs_det_jacobianœ  s!   € Ü—
’
˜A˜2“ˆ¤§¢¨A£Ñ.Ð.r5   rS   N)rs   r�   r‚   rƒ   r„   r   rÃ   r%   Úunit_intervalr&   r…   rI   rV   r\   rd   rp   rŠ   rS   r5   r3   r   r   ‡  s=   † ñð ×Ñ€FØ×(Ñ(€HØ€IØ€Dò3ò#ò&õ
/r5   r   c                   óh   • \ rS rSrSr\R                  r\R                  r	Sr
SrS rS rS rS rS	rg
)r   i   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                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚSoftplusTransform.__eq__«  s   € Ü˜%Ô!2Ó3Ð3r5   c                 ó   • [        U5      $ rR   ©r   rh   s     r3   r\   ÚSoftplusTransform._call®  s   € Ü˜‹{Ðr5   c                 ób   • U* R                  5       R                  5       R                  5       U-   $ rR   )Úexpm1Únegr;  rl   s     r3   rd   ÚSoftplusTransform._inverse±  s'   € Ø��z‰z‹|×ÑÓ!×%Ñ%Ó'¨!Ñ+Ð+r5   c                 ó   • [        U* 5      * $ rR   r}  ro   s      r3   rp   Ú&SoftplusTransform.log_abs_det_jacobian´  s   € Ü˜!˜“ˆ}Ðr5   rS   Nr@  rS   r5   r3   r   r      s=   † ñð
 ×Ñ€FØ×#Ñ#€HØ€IØ€Dò4òò,õr5   r   c                   óv   • \ rS rSrSr\R                  r\R                  " SS5      r	Sr
SrS rS rS	 rS
 rSrg)r   i¸  a±  
Transform via the mapping :math:`y = \tanh(x)`.

It is equivalent to

.. code-block:: python

    ComposeTransform(
        [
            AffineTransform(0.0, 2.0),
            SigmoidTransform(),
            AffineTransform(-1.0, 2.0),
        ]
    )

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      ð¿rb  Tr*   c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚTanhTransform.__eq__Ô  s   € Ü˜%¤Ó/Ð/r5   c                 ó"   • UR                  5       $ rR   )Útanhrh   s     r3   r\   ÚTanhTransform._call×  s   € Ø�v‰v‹xˆr5   c                 ó.   • [         R                  " U5      $ rR   )rÞ   Úatanhrl   s     r3   rd   ÚTanhTransform._inverseÚ  s   € ô �{Š{˜1‹~Ðr5   c                 óX   • S[         R                  " S5      U-
  [        SU-  5      -
  -  $ )Nç       @g       À)Úmathr;  r   ro   s      r3   rp   Ú"TanhTransform.log_abs_det_jacobianß  s*   € ð ”d—h’h˜s“m aÑ'¬(°4¸!±8Ó*<Ñ<Ñ=Ð=r5   rS   N)rs   r�   r‚   rƒ   r„   r   rÃ   r%   Úintervalr&   r…   rI   rV   r\   rd   rp   rŠ   rS   r5   r3   r   r   ¸  sD   † ñð, ×Ñ€FØ×#Ò# D¨#Ó.€HØ€IØ€Dò0òòõ
>r5   r   c                   óZ   • \ rS rSrSr\R                  r\R                  r	S r
S rS rSrg)r   iå  z*Transform via the mapping :math:`y = |x|`.c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚAbsTransform.__eq__ë  r4  r5   c                 ó"   • UR                  5       $ rR   )rU  rh   s     r3   r\   ÚAbsTransform._callî  r8  r5   c                 ó   • U$ rR   rS   rl   s     r3   rd   ÚAbsTransform._inverseñ  r?  r5   rS   N)rs   r�   r‚   rƒ   r„   r   rÃ   r%   rA  r&   rV   r\   rd   rŠ   rS   r5   r3   r   r   å  s*   † Ù5à×Ñ€FØ×#Ñ#€Hò/òõr5   r   c                   ó  ^ • \ rS rSrSrSr  SS\\-  S\\-  S\S\SS	4
U 4S
 jjjr	\
S\4S j5       r\R                  " SS9S 5       r\R                  " SS9S 5       rSS jrS r\
S\\-  4S j5       rS rS rS rS rS rSrU =r$ )r   iõ  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.
TÚlocÚscaler=   r'   r(   Nc                 óD   >• [         TU ]  US9  Xl        X l        X0l        g r‘   )r/   r0   r›  rœ  Ú
_event_dim)r1   r›  rœ  r=   r'   r2   s        €r3   r0   ÚAffineTransform.__init__  s$   ø€ ô 	‰Ñ JÐÑ/ØŒØŒ
Ø#�r5   c                 ó   • U R                   $ rR   )rž  r>   s    r3   r=   ÚAffineTransform.event_dim  s   € à�‰Ðr5   Fr“   c                 ó    • U R                   S:X  a  [        R                  $ [        R                  " [        R                  U R                   5      $ ©Nr   ©r=   r   rÃ   rÆ   r>   s    r3   r%   ÚAffineTransform.domain  ó9   € ð �>‰>˜QÓÜ×#Ñ#Ð#Ü×&Ò&¤{×'7Ñ'7¸¿¹ÓHÐHr5   c                 ó    • U R                   S:X  a  [        R                  $ [        R                  " [        R                  U R                   5      $ r£  r¤  r>   s    r3   r&   ÚAffineTransform.codomain  r¦  r5   c                 óz   • U R                   U:X  a  U $ [        U R                  U R                  U R                  US9$ r‘   )r+   r   r›  rœ  r=   rN   s     r3   rO   ÚAffineTransform.with_cache!  s7   € Ø×Ñ˜zÓ)ØˆKÜØ�H‰H�d—j‘j $§.¡.¸Zñ
ð 	
r5   c                 ó†  • [        U[        5      (       d  g[        U R                  [        5      (       a;  [        UR                  [        5      (       a  U R                  UR                  :w  a  gO;U R                  UR                  :H  R	                  5       R                  5       (       d  g[        U R                  [        5      (       a<  [        UR                  [        5      (       a  U R                  UR                  :w  a  g gU R                  UR                  :H  R	                  5       R                  5       (       d  gg)NFT)r¦   r   r›  r   rÒ   rL  rœ  rT   s     r3   rV   ÚAffineTransform.__eq__(  sà   € Ü˜%¤×1Ñ1Øä�d—h‘h¤×(Ñ(¬Z¸¿	¹	Ä7×-KÑ-KØ�x‰x˜5Ÿ9™9Ó$Øð %ð —H‘H §	¡	Ñ)×.Ñ.Ó0×5Ñ5×7Ñ7Øä�d—j‘j¤'×*Ñ*¬z¸%¿+¹+Äw×/OÑ/OØ�z‰z˜UŸ[™[Ó(Øð )ð ð —J‘J %§+¡+Ñ-×2Ñ2Ó4×9Ñ9×;Ñ;Øàr5   c                 óä   • [        U R                  [        5      (       a8  [        U R                  5      S:”  a  S$ [        U R                  5      S:  a  S$ S$ U R                  R	                  5       $ )Nr   r*   rÁ   )r¦   rœ  r   ÚfloatrI   r>   s    r3   rI   ÚAffineTransform.sign<  sU   € ä�d—j‘j¤'×*Ñ*Ü˜dŸj™jÓ)¨AÓ-�1ÐU¼¸t¿z¹zÓ9JÈQÓ9N°2ÐUÐTUÐUØ�z‰z�‰Ó Ð r5   c                 ó:   • U R                   U R                  U-  -   $ rR   ©r›  rœ  rh   s     r3   r\   ÚAffineTransform._callB  s   € Ø�x‰x˜$Ÿ*™* q™.Ñ(Ð(r5   c                 ó8   • XR                   -
  U R                  -  $ rR   r±  rl   s     r3   rd   ÚAffineTransform._inverseE  s   € Ø—H‘H‘ §
¡
Ñ*Ð*r5   c                 óô  • UR                   nU R                  n[        U[        5      (       a5  [        R
                  " U[        R                  " [        U5      5      5      nO$[        R                  " U5      R                  5       nU R                  (       aQ  UR                  5       S U R                  *  S-   nUR                  U5      R                  S5      nUS U R                  *  nUR                  U5      $ )N)rÁ   rÁ   )rx   rœ  r¦   r   rÞ   Ú	full_liker�  r;  rU  r=   ÚsizeÚviewÚsumÚexpand)r1   r]   r`   rx   rœ  r
  Úresult_sizes          r3   rp   Ú$AffineTransform.log_abs_det_jacobianH  sµ   € Ø—‘ˆØ—
‘
ˆÜ�eœW×%Ñ%Ü—_’_ Q¬¯ª´°U³Ó(<Ó=‰Fä—Y’Y˜uÓ%×)Ñ)Ó+ˆFØ�>�>Ø Ÿ+™+›-Ð(9¨4¯>©>¨/Ð:¸UÑBˆKØ—[‘[ Ó-×1Ñ1°"Ó5ˆFØÐ+˜TŸ^™^˜OÐ,ˆEØ�}‰}˜UÓ#Ð#r5   c           	      ó†   • [         R                  " U[        U R                  SS5      [        U R                  SS5      5      $ rX  ©rÞ   rZ  r[  r›  rœ  rw   s     r3   ry   ÚAffineTransform.forward_shapeU  ó7   € Ü×%Ò%Ø”7˜4Ÿ8™8 W¨bÓ1´7¸4¿:¹:ÀwÐPRÓ3Só
ð 	
r5   c           	      ó†   • [         R                  " U[        U R                  SS5      [        U R                  SS5      5      $ rX  r¾  rw   s     r3   r}   ÚAffineTransform.inverse_shapeZ  rÀ  r5   )rž  r›  rœ  ©r   r   r€   )rs   r�   r‚   rƒ   r„   r…   r   r®  rˆ   r0   r‰   r=   r   r¶   r%   r&   rO   rV   rI   r\   rd   rp   ry   r}   rŠ   r‹   rŒ   s   @r3   r   r   õ  sý   ø† ñ	ð €Ið Øñ
$à�e‰^ð
$ð ˜‰~ð
$ð ð	
$ð
 ð
$ð 
÷
$ð 
$ð ð˜3ó ó ðð ×#Ò#°Ñ6ñIó 7ðIð
 ×#Ò#°Ñ6ñIó 7ðIô

òð( ð!�f˜s‘ló !ó ð!ò
)ò+ò$ò
÷

ð 
r5   r   c                   ón   • \ rS rSrSr\R                  r\R                  r	Sr
S rS rSS jrS rS	 rS
rg)r   i`  a|  
Transforms an unconstrained 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                 ó¶  • [         R                  " U5      n[         R                  " UR                  5      R                  nUR                  SU-   SU-
  S9n[        USS9nUS-  nSU-
  R                  5       R                  S5      nU[         R                  " UR                  S   UR                  UR                  S9-   nU[        USS S24   SS/SS	9-  nU$ )
NrÁ   r*   rc  ©Údiagé   )rf  Údevice.r   ©Úvalue)rÞ   r‰  re  rf  rj  rg  r   ÚsqrtÚcumprodÚeyerx   rÉ  r   )r1   r]   rj  ÚrÚzÚz1m_cumprod_sqrtr`   s          r3   r\   ÚCorrCholeskyTransform._callu  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Ñ@Ñ@ˆØˆr5   c                 ó  • S[         R                  " X-  SS9-
  n[        USS S24   SS/SS9n[        USS9n[        USS9nXER	                  5       -  nUR                  5       UR                  5       R                  5       -
  S-  nU$ )	Nr*   rÁ   ©r  .r   rÊ  rÆ  rÈ  )rÞ   Úcumsumr   r
   rÌ  rs  r�  )r1   r`   Úy_cumsumÚy_cumsum_shiftedÚy_vecÚy_cumsum_vecÚtr]   s           r3   rd   ÚCorrCholeskyTransform._inverse…  s‹   € ð ”u—|’| A¡E¨rÑ2Ñ2ˆÜ˜x¨¨S¨b¨S¨Ñ1°A°q°6ÀÑCÐÜ" 1¨2Ñ.ˆÜ)Ð*:ÀÑDˆØ×'Ñ'Ó)Ñ)ˆà�W‰W‹Y˜Ÿ™›Ÿ™›Ñ(¨AÑ-ˆØˆr5   Nc                 óú   • SX"-  R                  SS9-
  n[        USS9nSUR                  5       R                  S5      -  nSU[	        SU-  5      -   [
        R                  " S5      -
  R                  SS9-  nXg-   $ )Nr*   rÁ   rÔ  éþÿÿÿrÆ  ç      à?r�  )rÕ  r
   r;  r¹  r   r�  )r1   r]   r`   ÚintermediatesÚ
y1m_cumsumÚy1m_cumsum_trilÚstick_breaking_logdetÚtanh_logdets           r3   rp   Ú*CorrCholeskyTransform.log_abs_det_jacobian‘  s„   € ð ˜!™%Ÿ™¨B˜Ð/Ñ/ˆ
ô -¨Z¸bÑAˆØ # ×&;Ñ&;Ó&=×&AÑ&AÀ"Ó&EÑ EÐØ˜A¤¨¨a©Ó 0Ñ0´4·8²8¸C³=Ñ@×EÑEÈ"ÐEÐMÑMˆØ$Ñ2Ð2r5   c                 ó²   • [        U5      S:  a  [        S5      eUS   n[        SSU-  -   S-  S-   5      nX3S-
  -  S-  U:w  a  [        S5      eUS S X34-   $ )Nr*   r  rÁ   g      Ð?rÈ  rÞ  z.Input is not a flattened lower-diagonal number)r  r.   Úround)r1   rx   ÚNÚDs       r3   ry   Ú#CorrCholeskyTransform.forward_shapeŸ  sp   € äˆu‹:˜‹>ÜÐ:Ó;Ð;Ø�"‰IˆÜ�4˜!˜a™%‘< CÑ'¨#Ñ-Ó.ˆØ�A‘‰;˜!Ñ˜qÓ ÜÐMÓNÐNØ�S�bˆz˜Q˜FÑ"Ð"r5   c                 ó”   • [        U5      S:  a  [        S5      eUS   US   :w  a  [        S5      eUS   nX"S-
  -  S-  nUS S U4-   $ )NrÈ  r  rÝ  rÁ   zInput is not squarer*   ©r  r.   )r1   rx   rè  rç  s       r3   r}   Ú#CorrCholeskyTransform.inverse_shape©  sa   € äˆu‹:˜‹>ÜÐ:Ó;Ð;Ø�‰9˜˜b™	Ó!ÜÐ2Ó3Ð3Ø�"‰IˆØ�Q‘‰K˜1ÑˆØ�S�bˆz˜Q˜DÑ Ð r5   rS   rR   )rs   r�   r‚   rƒ   r„   r   Úreal_vectorr%   Úcorr_choleskyr&   r…   r\   rd   rp   ry   r}   rŠ   rS   r5   r3   r   r   `  s=   † ñð  ×$Ñ$€FØ×(Ñ(€HØ€Iòò 
ô3ò#õ!r5   r   c                   óf   • \ rS rSrSr\R                  r\R                  r	S r
S rS rS rS rSrg	)
r   i´  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                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚSoftmaxTransform.__eq__Á  ro  r5   c                 óx   • UnX"R                  SS5      S   -
  R                  5       nX3R                  SS5      -  $ )NrÁ   Tr   )rÅ   r6  r¹  )r1   r]   ÚlogprobsÚprobss       r3   r\   ÚSoftmaxTransform._callÄ  s<   € ØˆØŸL™L¨¨TÓ2°1Ñ5Ñ5×:Ñ:Ó<ˆØ—y‘y  TÓ*Ñ*Ð*r5   c                 ó&   • UnUR                  5       $ rR   r:  )r1   r`   rô  s      r3   rd   ÚSoftmaxTransform._inverseÉ  s   € ØˆØ�y‰y‹{Ðr5   c                 ó:   • [        U5      S:  a  [        S5      eU$ ©Nr*   r  rë  rw   s     r3   ry   ÚSoftmaxTransform.forward_shapeÍ  ó   € Üˆu‹:˜‹>ÜÐ:Ó;Ð;Øˆr5   c                 ó:   • [        U5      S:  a  [        S5      eU$ rù  rë  rw   s     r3   r}   ÚSoftmaxTransform.inverse_shapeÒ  rû  r5   rS   N)rs   r�   r‚   rƒ   r„   r   rí  r%   Úsimplexr&   rV   r\   rd   ry   r}   rŠ   rS   r5   r3   r   r   ´  s8   † ñð ×$Ñ$€FØ×"Ñ"€Hò3ò+ò
òõ
r5   r   c                   óp   • \ rS rSrSr\R                  r\R                  r	Sr
S rS rS rS rS rS	 rS
rg)r    iØ  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                 ó"   • [        U[        5      $ rR   )r¦   r    rT   s     r3   rV   ÚStickBreakingTransform.__eq__ê  ó   € Ü˜%Ô!7Ó8Ð8r5   c                 ó  • UR                   S   S-   UR                  UR                   S   5      R                  S5      -
  n[        XR	                  5       -
  5      nSU-
  R                  S5      n[        USS/SS9[        USS/SS9-  nU$ )NrÁ   r*   r   rÊ  )rx   Únew_onesrÕ  rk  r;  rÍ  r   )r1   r]   ÚoffsetrÐ  Ú	z_cumprodr`   s         r3   r\   Ú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ˆØˆr5   c                 ó˜  • USS S24   nUR                   S   UR                  UR                   S   5      R                  S5      -
  nSUR                  S5      -
  n[        R                  " U[        R
                  " UR                  5      R                  S9nUR                  5       UR                  5       -
  UR                  5       -   nU$ )N.rÁ   r*   )rd  )	rx   r  rÕ  rÞ   rg  re  rf  ri  r;  )r1   r`   Úy_cropr  Úsfr]   s         r3   rd   Ú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ˆØˆr5   c                 ó,  • UR                   S   S-   UR                  UR                   S   5      R                  S5      -
  nXR                  5       -
  nU* [        R
                  " U5      -   USS S24   R                  5       -   R                  S5      nU$ )NrÁ   r*   .)rx   r  rÕ  r;  rv  Ú
logsigmoidr¹  )r1   r]   r`   r  ÚdetJs        r3   rp   Ú+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ˆØˆr5   c                 óT   • [        U5      S:  a  [        S5      eUS S US   S-   4-   $ ©Nr*   r  rÁ   rë  rw   s     r3   ry   Ú$StickBreakingTransform.forward_shape  ó5   € Üˆu‹:˜‹>ÜÐ:Ó;Ð;Ø�S�bˆz˜U 2™Y¨™]Ð,Ñ,Ð,r5   c                 óT   • [        U5      S:  a  [        S5      eUS S US   S-
  4-   $ r  rë  rw   s     r3   r}   Ú$StickBreakingTransform.inverse_shape
  r  r5   rS   N)rs   r�   r‚   rƒ   r„   r   rí  r%   rþ  r&   r…   rV   r\   rd   rp   ry   r}   rŠ   rS   r5   r3   r    r    Ø  sB   † ñð ×$Ñ$€FØ×"Ñ"€HØ€Iò9òòòò-õ
-r5   r    c                   ó|   • \ rS rSrSr\R                  " \R                  S5      r\R                  r
S rS rS rSrg)	r   i  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.
rÈ  c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   ÚLowerCholeskyTransform.__eq__  r  r5   c                 ó~   • UR                  S5      UR                  SSS9R                  5       R                  5       -   $ ©NrÁ   rÝ  )Údim1Údim2)ÚtrilÚdiagonalr6  Ú
diag_embedrh   s     r3   r\   ÚLowerCholeskyTransform._call  ó4   € Ø�v‰v�b‹z˜AŸJ™J¨B°R˜JÐ8×<Ñ<Ó>×IÑIÓKÑKÐKr5   c                 ó~   • UR                  S5      UR                  SSS9R                  5       R                  5       -   $ r  )r  r  r;  r  rl   s     r3   rd   ÚLowerCholeskyTransform._inverse"  r!  r5   rS   N)rs   r�   r‚   rƒ   r„   r   rÆ   rÃ   r%   Úlower_choleskyr&   rV   r\   rd   rŠ   rS   r5   r3   r   r     s=   † ñð ×$Ò$ [×%5Ñ%5°qÓ9€FØ×)Ñ)€Hò9òLõLr5   r   c                   ó|   • \ rS rSrSr\R                  " \R                  S5      r\R                  r
S rS rS rSrg)	r   i&  zF
Transform from unconstrained matrices to positive-definite matrices.
rÈ  c                 ó"   • [        U[        5      $ rR   )r¦   r   rT   s     r3   rV   Ú PositiveDefiniteTransform.__eq__.  s   € Ü˜%Ô!:Ó;Ð;r5   c                 ó>   • [        5       " U5      nXR                  -  $ rR   )r   ÚmTrh   s     r3   r\   ÚPositiveDefiniteTransform._call1  s   € Ü"Ô$ QÓ'ˆØ—4‘4‰xˆr5   c                 ór   • [         R                  R                  U5      n[        5       R	                  U5      $ rR   )rÞ   ÚlinalgÚcholeskyr   rD   rl   s     r3   rd   Ú"PositiveDefiniteTransform._inverse5  s*   € Ü�L‰L×!Ñ! !Ó$ˆÜ%Ó'×+Ñ+¨AÓ.Ð.r5   rS   N)rs   r�   r‚   rƒ   r„   r   rÆ   rÃ   r%   Úpositive_definiter&   rV   r\   rd   rŠ   rS   r5   r3   r   r   &  s;   † ñð ×$Ò$ [×%5Ñ%5°qÓ9€FØ×,Ñ,€Hò<òõ/r5   r   c                   ó  ^ • \ rS rSr% Sr\\   \S'      SS\\   S\	S\\	   S-  S\	S	S4
U 4S
 jjjr
\S	\	4S j5       r\S	\	4S j5       rSS jrS rS rS r\S	\4S j5       r\R,                  S 5       r\R,                  S 5       rSrU =r$ )r   i:  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)
Ú
transformsNÚtseqr  Úlengthsr'   r(   c                 ó  >• [        S U 5       5      (       d  [        S5      eU(       a   U Vs/ s H  oUR                  U5      PM     nn[        TU ]  US9  [        U5      U l        Uc  S/[        U R                  5      -  n[        U5      U l        [        U R                  5      [        U R                  5      :w  a8  [        S[        U R                  5       S[        U R                  5       S35      eX l	        g s  snf )Nc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7frR   ©r¦   r!   ©rÍ   rÚ  s     r3   rÏ   Ú(CatTransform.__init__.<locals>.<genexpr>R  ó   é € Ð:²T°”:˜a¤×+Ð+²Tùó   ‚ú0All elements of tseq must be Transform instancesrL   r*   z	lengths (z) must match transforms (rª   )
rÒ   r˜   rO   r/   r0   rò   r1  r  r3  r  )r1   r2  r  r3  r'   rÚ  r2   s         €r3   r0   ÚCatTransform.__init__K  sÛ   ø€ ô Ñ:±TÓ:×:Ñ:Ü Ð!SÓTÐTÞÙ6:Ó;²d°—L‘L Ö,±dˆDÐ;Ü‰Ñ JÐÑ/Ü˜t›*ˆŒØ‰?Ø�cœC §¡Ó0Ñ0ˆGÜ˜G“}ˆŒÜˆt�|‰|Ó¤ D§O¡OÓ 4Ó4Ü ØœC §¡Ó-Ð.Ð.GÌÈDÏOÉOÓH\ÐG]Ð]^Ð_óð ð �ùò <s   ¯C?c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó8   #   • U  H  oR                   v •  M     g 7frR   )r=   r7  s     r3   rÏ   Ú)CatTransform.event_dim.<locals>.<genexpr>c  ó   é € Ð8ª 1—;–;ªùrÑ   )rÅ   r1  r>   s    r3   r=   ÚCatTransform.event_dima  ó   € äÑ8¨¯ªÓ8Ó8Ð8r5   c                 ó,   • [        U R                  5      $ rR   )r¹  r3  r>   s    r3   ÚlengthÚCatTransform.lengthe  s   € ä�4—<‘<Ó Ð r5   c                 ó~   • U R                   U:X  a  U $ [        U R                  U R                  U R                  U5      $ rR   )r+   r   r1  r  r3  rN   s     r3   rO   ÚCatTransform.with_cachei  s2   € Ø×Ñ˜zÓ)ØˆKÜ˜DŸO™O¨T¯X©X°t·|±|ÀZÓPÐPr5   c                 óš  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      U R                  :w  aA  [        SU R                    SUR                  U R                   5       SU R                   35      e/ nSn[	        U R
                  U R                  5       H<  u  pEUR                  U R                   X55      nUR                  U" U5      5        X5-   nM>     [        R                  " X R                   S9$ )	Núdim ú out of range for tensor with ú dimensionsúx.size(ú) = ú must equal length r   rÔ  )r  r˜   r·  rD  rá   r1  r3  Únarrowrà   rÞ   Úcat)r1   r]   ÚyslicesÚstartÚtransrD  Úxslices          r3   r\   ÚCatTransform._calln  s  € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ >¸q¿u¹u»w¸iÀ{ÐSóð ð �6‰6�$—(‘(Ó˜tŸ{™{Ó*Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9LÈTÏ[É[ÈMÐZóð ð ˆØˆÜ  §¡°$·,±,Ö?‰MˆEØ—X‘X˜dŸh™h¨Ó6ˆFØ�N‰N™5 ›=Ô)Ø‘NŠEñ @ô �yŠy˜§h¡hÑ/Ð/r5   c                 ó¬  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      U R                  :w  aA  [        SU R                    SUR                  U R                   5       SU R                   35      e/ nSn[	        U R
                  U R                  5       HE  u  pEUR                  U R                   X55      nUR                  UR                  U5      5        X5-   nMG     [        R                  " X R                   S9$ )	NrI  rJ  rK  úy.size(rM  rN  r   rÔ  )r  r˜   r·  rD  rá   r1  r3  rO  rà   rD   rÞ   rP  )r1   r`   ÚxslicesrR  rS  rD  Úyslices          r3   rd   ÚCatTransform._inverse  s  € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ >¸q¿u¹u»w¸iÀ{ÐSóð ð �6‰6�$—(‘(Ó˜tŸ{™{Ó*Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9LÈTÏ[É[ÈMÐZóð ð ˆØˆÜ  §¡°$·,±,Ö?‰MˆEØ—X‘X˜dŸh™h¨Ó6ˆFØ�N‰N˜5Ÿ9™9 VÓ,Ô-Ø‘NŠEñ @ô �yŠy˜§h¡hÑ/Ð/r5   c                 óf  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      U R                  :w  aA  [        SU R                    SUR                  U R                   5       SU R                   35      eUR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      U R                  :w  aA  [        SU R                    SUR                  U R                   5       SU R                   35      e/ nS	n[	        U R
                  U R                  5       HŸ  u  pVUR                  U R                   XF5      nUR                  U R                   XF5      nUR                  Xx5      n	UR                  U R                  :  a"  [        X�R                  UR                  -
  5      n	UR                  U	5        XF-   nM¡     U R                   n
U
S	:¼  a  X¡R                  5       -
  n
X R                  -   n
U
S	:  a  [        R                  " X:S
9$ [        U5      $ )NrI  ú out of range for x with rK  rL  rM  rN  ú out of range for y with rW  r   rÔ  )r  r˜   r·  rD  rá   r1  r3  rO  rp   r=   r   rà   rÞ   rP  r¹  )r1   r]   r`   Ú
logdetjacsrR  rS  rD  rT  rY  Ú	logdetjacr  s              r3   rp   Ú!CatTransform.log_abs_det_jacobian�  s'  € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ 9¸!¿%¹%»'¸À+ÐNóð ð �6‰6�$—(‘(Ó˜tŸ{™{Ó*Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9LÈTÏ[É[ÈMÐZóð ð —‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ 9¸!¿%¹%»'¸À+ÐNóð ð �6‰6�$—(‘(Ó˜tŸ{™{Ó*Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9LÈTÏ[É[ÈMÐZóð ð ˆ
ØˆÜ  §¡°$·,±,Ö?‰MˆEØ—X‘X˜dŸh™h¨Ó6ˆFØ—X‘X˜dŸh™h¨Ó6ˆFØ×2Ñ2°6ÓBˆIØ�‰ §¡Ó/Ü*¨9·n±nÀuÇÁÑ6VÓW�	Ø×Ñ˜iÔ(Ø‘NŠEñ @ð �h‰hˆØ�!‹8ØŸ™›‘-ˆCØ—N‘NÑ"ˆØ�‹7Ü—9’9˜ZÑ1Ð1ä�z“?Ð"r5   c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó8   #   • U  H  oR                   v •  M     g 7frR   rÌ   r7  s     r3   rÏ   Ú)CatTransform.bijective.<locals>.<genexpr>·  r@  rÑ   ©rÒ   r1  r>   s    r3   r…   ÚCatTransform.bijectiveµ  rB  r5   c                 ó¬   • [         R                  " U R                   Vs/ s H  oR                  PM     snU R                  U R
                  5      $ s  snf rR   )r   rP  r1  r%   r  r3  ©r1   rÚ  s     r3   r%   ÚCatTransform.domain¹  s<   € ô �ŠØ#ŸšÓ/š˜!�XŒX™Ñ/°·±¸4¿<¹<ó
ð 	
ùÚ/ó   ŸAc                 ó¬   • [         R                  " U R                   Vs/ s H  oR                  PM     snU R                  U R
                  5      $ s  snf rR   )r   rP  r1  r&   r  r3  rg  s     r3   r&   ÚCatTransform.codomainÀ  s<   € ô �ŠØ!%§¢Ó1¢˜A�ZŒZ¡Ñ1°4·8±8¸T¿\¹\ó
ð 	
ùÚ1ri  )r  r3  r1  )r   Nr   r€   )rs   r�   r‚   rƒ   r„   rò   r!   r‡   r   rˆ   r0   r	   r=   rD  rO   r\   rd   rp   r‰   r·   r…   r   r¶   r%   r&   rŠ   r‹   rŒ   s   @r3   r   r   :  s  ø‡ ñð �Y‘Óð
 Ø(,Øñà�yÑ!ðð ðð ˜#‘ Ñ%ð	ð
 ðð 
÷ð ð, ð9˜3ó 9ó ð9ð ð!˜ó !ó ð!ôQò
0ò"0ò"##ðJ ð9˜4ó 9ó ð9ð ×#Ñ#ñ
ó $ð
ð
 ×#Ñ#ñ
ó $ö
r5   r   c            	       óà   ^ • \ rS rSr% Sr\\   \S'    SS\\   S\	S\	SS4U 4S	 jjjr
SS
 jrS rS rS rS r\S\4S j5       r\R(                  S 5       r\R(                  S 5       rSrU =r$ )r   iÈ  a7  
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)
r1  r2  r  r'   r(   Nc                 óè   >• [        S U 5       5      (       d  [        S5      eU(       a   U Vs/ s H  oDR                  U5      PM     nn[        TU ]  US9  [        U5      U l        X l        g s  snf )Nc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7frR   r6  r7  s     r3   rÏ   Ú*StackTransform.__init__.<locals>.<genexpr>Ú  r9  r:  r;  rL   )rÒ   r˜   rO   r/   r0   rò   r1  r  )r1   r2  r  r'   rÚ  r2   s        €r3   r0   ÚStackTransform.__init__×  se   ø€ ô Ñ:±TÓ:×:Ñ:Ü Ð!SÓTÐTÞÙ6:Ó;²d°—L‘L Ö,±dˆDÐ;Ü‰Ñ JÐÑ/Ü˜t›*ˆŒØ�ùò <s   ¯A/c                 óh   • U R                   U:X  a  U $ [        U R                  U R                  U5      $ rR   )r+   r   r1  r  rN   s     r3   rO   ÚStackTransform.with_cacheâ  s,   € Ø×Ñ˜zÓ)ØˆKÜ˜dŸo™o¨t¯x©x¸ÓDÐDr5   c                 ó¨   • [        UR                  U R                  5      5       Vs/ s H  o!R                  U R                  U5      PM      sn$ s  snf rR   )Úranger·  r  Úselect)r1   rÐ  Úis      r3   Ú_sliceÚStackTransform._sliceç  s;   € Ü/4°Q·V±V¸D¿H¹HÓ5EÔ/FÓGÒ/F¨!—‘˜Ÿ™ 1Ö%Ñ/FÑGÐGùÒGs   §%Ac           
      ó„  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      [        U R                  5      :w  aJ  [        SU R                    SUR                  U R                   5       S[        U R                  5       35      e/ n[        U R                  U5      U R                  5       H  u  p4UR                  U" U5      5        M     [        R                  " X R                   S9$ )NrI  rJ  rK  rL  rM  ú must equal len(transforms) rÔ  )
r  r˜   r·  r  r1  rá   rw  rà   rÞ   Ústack)r1   r]   rQ  rT  rS  s        r3   r\   ÚStackTransform._callê  sù   € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ >¸q¿u¹u»w¸iÀ{ÐSóð ð �6‰6�$—(‘(Óœs 4§?¡?Ó3Ó3Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9UÔVYÐZ^×ZiÑZiÓVjÐUkÐlóð ð ˆÜ  §¡¨Q£°·±ÖA‰MˆFØ�N‰N™5 ›=Ö)ñ Bä�{Š{˜7¯©Ñ1Ð1r5   c           
      ó–  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      [        U R                  5      :w  aJ  [        SU R                    SUR                  U R                   5       S[        U R                  5       35      e/ n[        U R                  U5      U R                  5       H%  u  p4UR                  UR                  U5      5        M'     [        R                  " X R                   S9$ )NrI  rJ  rK  rW  rM  rz  rÔ  )r  r˜   r·  r  r1  rá   rw  rà   rD   rÞ   r{  )r1   r`   rX  rY  rS  s        r3   rd   ÚStackTransform._inverseø  sþ   € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ >¸q¿u¹u»w¸iÀ{ÐSóð ð �6‰6�$—(‘(Óœs 4§?¡?Ó3Ó3Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9UÔVYÐZ^×ZiÑZiÓVjÐUkÐlóð ð ˆÜ  §¡¨Q£°·±ÖA‰MˆFØ�N‰N˜5Ÿ9™9 VÓ,Ö-ñ Bä�{Š{˜7¯©Ñ1Ð1r5   c           
      óv  • UR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      [        U R                  5      :w  aJ  [        SU R                    SUR                  U R                   5       S[        U R                  5       35      eUR                  5       * U R                   s=::  a  UR                  5       :  d,  O  [        SU R                    SUR                  5        S35      eUR                  U R                   5      [        U R                  5      :w  aJ  [        SU R                    SUR                  U R                   5       S[        U R                  5       35      e/ nU R                  U5      nU R                  U5      n[        XTU R                  5       H&  u  pgnUR                  UR                  Xg5      5        M(     [        R                  " X0R                   S	9$ )
NrI  r\  rK  rL  rM  rz  r]  rW  rÔ  )r  r˜   r·  r  r1  rw  rá   rà   rp   rÞ   r{  )	r1   r]   r`   r^  rQ  rX  rT  rY  rS  s	            r3   rp   Ú#StackTransform.log_abs_det_jacobian  sÆ  € Ø—‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ 9¸!¿%¹%»'¸À+ÐNóð ð �6‰6�$—(‘(Óœs 4§?¡?Ó3Ó3Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9UÔVYÐZ^×ZiÑZiÓVjÐUkÐlóð ð —‘“�˜DŸH™HÕ. q§u¡u£wÕ.Ü Ø�t—x‘x�jÐ 9¸!¿%¹%»'¸À+ÐNóð ð �6‰6�$—(‘(Óœs 4§?¡?Ó3Ó3Ü Ø˜$Ÿ(™(˜ 4¨¯©¨t¯x©xÓ(8Ð'9Ð9UÔVYÐZ^×ZiÑZiÓVjÐUkÐlóð ð ˆ
Ø—+‘+˜a“.ˆØ—+‘+˜a“.ˆÜ%(¨¸4¿?¹?Ö%KÑ!ˆF˜EØ×Ñ˜e×8Ñ8¸ÓHÖIñ &Lä�{Š{˜:¯8©8Ñ4Ð4r5   c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó8   #   • U  H  oR                   v •  M     g 7frR   rÌ   r7  s     r3   rÏ   Ú+StackTransform.bijective.<locals>.<genexpr>   r@  rÑ   rd  r>   s    r3   r…   ÚStackTransform.bijective  rB  r5   c                 ó–   • [         R                  " U R                   Vs/ s H  oR                  PM     snU R                  5      $ s  snf rR   )r   r{  r1  r%   r  rg  s     r3   r%   ÚStackTransform.domain"  s3   € ô × Ò °D·O²OÓ!D²O¨q§(¤(±OÑ!DÀdÇhÁhÓOÐOùÒ!Dó   ŸAc                 ó–   • [         R                  " U R                   Vs/ s H  oR                  PM     snU R                  5      $ s  snf rR   )r   r{  r1  r&   r  rg  s     r3   r&   ÚStackTransform.codomain'  s3   € ô × Ò °d·o²oÓ!F²o°§*¤*±oÑ!FÈÏÉÓQÐQùÒ!Fr‡  )r  r1  rÃ  r€   )rs   r�   r‚   rƒ   r„   rò   r!   r‡   r   rˆ   r0   rO   rw  r\   rd   rp   r‰   r·   r…   r   r¶   r%   r&   rŠ   r‹   rŒ   s   @r3   r   r   È  s¸   ø‡ ñ
ð �Y‘Óð JKñ	Ø˜YÑ'ð	Ø.1ð	ØCFð	à	÷	ð 	ôEò
Hò2ò2ò5ð0 ð9˜4ó 9ó ð9ð ×#Ñ#ñPó $ðPð ×#Ñ#ñRó $öRr5   r   c                   ó®   ^ • \ rS rSrSrSr\R                  rSr	SS\
S\SS4U 4S	 jjjr\S\R                  S-  4S
 j5       rS rS rS rSS jrSrU =r$ )r   i-  a  
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*   Údistributionr'   r(   Nc                 ó,   >• [         TU ]  US9  Xl        g r‘   )r/   r0   r‹  )r1   r‹  r'   r2   s      €r3   r0   Ú(CumulativeDistributionTransform.__init__D  s   ø€ Ü‰Ñ JÐÑ/Ø(Õr5   c                 ó.   • U R                   R                  $ rR   )r‹  Úsupportr>   s    r3   r%   Ú&CumulativeDistributionTransform.domainH  s   € à× Ñ ×(Ñ(Ð(r5   c                 ó8   • U R                   R                  U5      $ rR   )r‹  Úcdfrh   s     r3   r\   Ú%CumulativeDistributionTransform._callL  s   € Ø× Ñ ×$Ñ$ QÓ'Ð'r5   c                 ó8   • U R                   R                  U5      $ rR   )r‹  Úicdfrl   s     r3   rd   Ú(CumulativeDistributionTransform._inverseO  s   € Ø× Ñ ×%Ñ% aÓ(Ð(r5   c                 ó8   • U R                   R                  U5      $ rR   )r‹  Úlog_probro   s      r3   rp   Ú4CumulativeDistributionTransform.log_abs_det_jacobianR  s   € Ø× Ñ ×)Ñ)¨!Ó,Ð,r5   c                 óN   • U R                   U:X  a  U $ [        U R                  US9$ r‘   )r+   r   r‹  rN   s     r3   rO   Ú*CumulativeDistributionTransform.with_cacheU  s(   € Ø×Ñ˜zÓ)ØˆKÜ.¨t×/@Ñ/@ÈZÑXÐXr5   )r‹  r   r€   )rs   r�   r‚   rƒ   r„   r…   r   rx  r&   rI   r   rˆ   r0   r‰   r†   r%   r\   rd   rp   rO   rŠ   r‹   rŒ   s   @r3   r   r   -  s   ø† ñð$ €IØ×(Ñ(€HØ€Dñ) \ð )¸sð )È4÷ )ð )ð ð)˜×.Ñ.°Ñ5ó )ó ð)ò(ò)ò-÷Yò Yr5   r   )1râ   r�  rä   rB   Úcollections.abcr   rÞ   Útorch.nn.functionalÚnnÚ
functionalrv  r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r	   r
   r   r   r   Útorch.typesr   Ú__all__r!   rA   r   r"   r   r   r   r   rk  r   r   r   r   r   r   r   r    r   r   r   r   r   rS   r5   r3   Ú<module>r¥     sg  ðã Û Û Û Ý $ã ß Ð Ý Ý +Ý 9÷õ ÷ .Ý ò€÷0fñ fôRE.˜	ô E.ôP�yô ñD & bÓ)Ð ôK8˜9ô K8ô\I+�yô I+ôX�9ô ô.(R�Yô (RòVNô
/�yô /ô2˜	ô ô0*>�Iô *>ôZ�9ô ô h
�iô h
ôVQ!˜Iô Q!ôh!�yô !ôH5-˜Yô 5-ôpL˜Yô Lô,/ 	ô /ô(K
�9ô K
ô\bR�Yô bRôJ+Y iõ +Yr5   