Ë
    #täi|  ã            	       óÆ  — U d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z? i Z@eAeBeCeCf   ef   eDd<   i ZEeAeBeCeCf   ef   eDd <   d!d"gZFd#„ ZGe G d$„ d%«      «       ZHd&„ ZId'„ ZJd(„ ZKd)„ ZLd*ed+ed,efd-„ZM eGe
e
«      d.„ «       ZN eGee«      d/„ «       ZO eGee«      d0„ «       ZP eGee«      d1„ «       ZQ eGee«      d2„ «       ZR eGee«      d3„ «       ZS eGee«      d4„ «       ZT eGee«      d5„ «       ZU eGee«      d6„ «       ZV eGe"e"«      d7„ «       ZW eGe e «      d8„ «       ZX eGe$e$«      d9„ «       ZY eGe(e(«      d:„ «       ZZ eGe,e,«      d;„ «       Z[ eGe/e,«      d<„ «       Z\ eGe,e/«      d=„ «       Z] eGe/e/«      d>„ «       Z^ eGe1e1«      d?„ «       Z_ eGe3e3«      d@„ «       Z` eGe5e5«      dA„ «       Za eGe7e7«      dB„ «       Zb eGe9e9«      dC„ «       Zc eGe;e;«      dD„ «       Zd eGe
e7«      dE„ «       Ze eGee«      dF„ «       Zf eGee5«      dG„ «       Zg eGee«      dH„ «       Zh eGee«      dI„ «       Zi eGee1«      dJ„ «       Zj eGee;«      dK„ «       Zk eGee5«      dL„ «       Zl eGee«      dM„ «       Zm eGee1«      dN„ «       Zn eGee;«      dO„ «       Zo eGee«       eGee«       eGee5«       eGee;«      dP„ «       «       «       «       Zp eGee«      dQ„ «       Zq eGee"«      dR„ «       Zr eGee1«      dS„ «       Zs eGee«       eGee«       eGee5«       eGee;«      dT„ «       «       «       «       Zt eGee«      dU„ «       Zu eGee"«      dV„ «       Zv eGee1«      dW„ «       Zw eGe"e«       eGe"e«       eGe"e«       eGe"e«       eGe"e5«       eGe"e;«      dX„ «       «       «       «       «       «       Zx eGe"e1«      dY„ «       Zy eGe(e«       eGe(e«       eGe(e«       eGe(e«       eGe(e5«       eGe(e;«      dZ„ «       «       «       «       «       «       Zz eGe(e1«      d[„ «       Z{ eGe1e«       eGe1e«       eGe1e«       eGe1e«       eGe1e5«       eGe1e;«      d\„ «       «       «       «       «       «       Z| eGe1e"«      d]„ «       Z} eGe1e(«      d^„ «       Z~ eGe5e«       eGe5e«       eGe5e;«      d_„ «       «       «       Z eGe5e«      d`„ «       Z€ eGe5e«      da„ «       Z� eGe5e1«      db„ «       Z‚ eGe7e
«       eGe7e«      dc„ «       «       Zƒ eGe;e«      dd„ «       Z„ eGe;e«      de„ «       Z… eGe;e«      df„ «       Z† eGe;e«      dg„ «       Z‡ eGe;e"«      dh„ «       Zˆ eGe;e1«      di„ «       Z‰ eGe;e5«      dj„ «       ZŠ eGe&e&«      dk„ «       Z‹ eGee«      dl„ «       ZŒdm„ Z�y)né    N)ÚCallable)Útotal_ordering)ÚinfÚTensoré   )Ú	Bernoulli)ÚBeta)ÚBinomial)ÚCategorical)ÚCauchy)ÚContinuousBernoulli)Ú	Dirichlet)ÚDistribution)ÚExponentialFamily)ÚExponential)ÚGamma)Ú	Geometric)ÚGumbel)Ú
HalfNormal)ÚIndependent)ÚLaplace)Ú_batch_lowrank_logdetÚ_batch_lowrank_mahalanobisÚLowRankMultivariateNormal)Ú_batch_mahalanobisÚMultivariateNormal)ÚNormal)ÚOneHotCategorical)ÚPareto)ÚPoisson)ÚTransformedDistribution)ÚUniform)Ú_sum_rightmostÚeuler_constantÚ_KL_REGISTRYÚ_KL_MEMOIZEÚregister_klÚkl_divergencec                 óÎ   ‡ ‡— t        ‰ t        «      st        ‰ t        «      rt	        d‰ › �«      ‚t        ‰t        «      st        ‰t        «      rt	        d‰› �«      ‚ˆ ˆfd„}|S )a[  
    Decorator to register a pairwise function with :meth:`kl_divergence`.
    Usage::

        @register_kl(Normal, Normal)
        def kl_normal_normal(p, q):
            # insert implementation here

    Lookup returns the most specific (type,type) match ordered by subclass. If
    the match is ambiguous, a `RuntimeWarning` is raised. For example to
    resolve the ambiguous situation::

        @register_kl(BaseP, DerivedQ)
        def kl_version1(p, q): ...
        @register_kl(DerivedP, BaseQ)
        def kl_version2(p, q): ...

    you should register a third most-specific implementation, e.g.::

        register_kl(DerivedP, DerivedQ)(kl_version1)  # Break the tie.

    Args:
        type_p (type): A subclass of :class:`~torch.distributions.Distribution`.
        type_q (type): A subclass of :class:`~torch.distributions.Distribution`.
    z6Expected type_p to be a Distribution subclass but got z6Expected type_q to be a Distribution subclass but got c                 óF   •— | t         ‰‰f<   t        j                  «        | S ©N)r%   r&   Úclear)ÚfunÚtype_pÚtype_qs    €€úe/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/torch/distributions/kl.pyÚ	decoratorzregister_kl.<locals>.decoratorV   s"   ø€ Ø'*Œ�V˜V�^Ñ$Ü×ÑÔØˆ
ó    )Ú
isinstanceÚtypeÚ
issubclassr   Ú	TypeError)r.   r/   r1   s   `` r0   r'   r'   3   sh   ù€ ô4 �fœdÔ#¬
°6¼<Ô(HÜØDÀVÀHÐMó
ð 	
ô �fœdÔ#¬
°6¼<Ô(HÜØDÀVÀHÐMó
ð 	
õð
 Ðr2   c                   ó$   — e Zd ZdgZd„ Zd„ Zd„ Zy)Ú_MatchÚtypesc                 ó   — || _         y r+   ©r9   )Úselfr9   s     r0   Ú__init__z_Match.__init__b   s	   € Øˆ�
r2   c                 ó4   — | j                   |j                   k(  S r+   r;   )r<   Úothers     r0   Ú__eq__z_Match.__eq__e   s   € Ø�z‰z˜UŸ[™[Ñ(Ð(r2   c                 ó|   — t        | j                  |j                  «      D ]  \  }}t        ||«      s y||usŒ y y)NFT)Úzipr9   r5   )r<   r?   ÚxÚys       r0   Ú__le__z_Match.__le__h   s>   € Ü˜Ÿ
™
 E§K¡KÖ0‰DˆAˆqÜ˜a Ô#ÙØ˜ŠzØØð 1ð
 r2   N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r=   r@   rE   © r2   r0   r8   r8   ^   s   „ à�	€Iòò)ór2   r8   c                 óØ  — t         D ��cg c]!  \  }}t        | |«      rt        ||«      r||f‘Œ# }}}|st        S t        d„ |D «       «      j                  \  }}t        d„ |D «       «      j                  \  }}t         ||f   }	t         ||f   }
|	|
urQt        j                  d| j                  › d|j                  › d|j                  › d|j                  › d�	t        d¬«       |	S c c}}w )	zP
    Find the most specific approximate match, assuming single inheritance.
    c              3   ó,   K  — | ]  }t        |Ž –— Œ y ­wr+   )r8   ©Ú.0Úms     r0   Ú	<genexpr>z_dispatch_kl.<locals>.<genexpr>   s   è ø€ Ð5©W¨œ œ©Wùs   ‚c              3   ó>   K  — | ]  }t        t        |«      Ž –— Œ y ­wr+   )r8   ÚreversedrM   s     r0   rP   z_dispatch_kl.<locals>.<genexpr>€   s   è ø€ ÐA¹°Aœ6¤8¨A£;Ô/¹ùs   ‚zAmbiguous kl_divergence(z, z). Please register_kl(Ú)é   )Ú
stacklevel)	r%   r5   ÚNotImplementedÚminr9   ÚwarningsÚwarnrF   ÚRuntimeWarning)r.   r/   Úsuper_pÚsuper_qÚmatchesÚleft_pÚleft_qÚright_qÚright_pÚleft_funÚ	right_funs              r0   Ú_dispatch_klrd   q   s  € õ !-ôá ,ÑˆG�WÜ�f˜gÔ&¬:°f¸gÔ+Fð 
�'ÒØ ,ð ñ ñ
 ÜÐô Ñ5©WÓ5Ó5×;Ñ;�N€FˆFÜÑA¹ÓAÓA×GÑGÑ€GˆWÜ˜F F˜NÑ+€HÜ˜W gÐ-Ñ.€IØ�yÑ Ü�‰Ø& v§¡Ð&7°r¸&¿/¹/Ð9Jð K"Ø"(§/¡/Ð!2°"°W×5EÑ5EÐ4FÀaðIäØõ		
ð €Oùó+s   Š&C&c                 ó6   — t        j                  | t        «      S )zI
    Helper function for obtaining infinite KL Divergence throughout
    )ÚtorchÚ	full_liker   ©Útensors    r0   Ú_infinite_likerj   �   s   € ô �?‰?˜6¤3Ó'Ð'r2   c                 óB   — t         j                  j                  | | «      S )z2
    Utility function for calculating x log x
    )rf   ÚspecialÚxlogyrh   s    r0   Ú_x_log_xrn   ”   s   € ô �=‰=×Ñ˜v vÓ.Ð.r2   c                 óè   — | j                  d«      }| j                  d«      }| j                  d||z  «      j                  d«      j                  d«      }|j                  | j                  dd «      S )zp
    Utility function for calculating the trace of XX^{T} with X having arbitrary trailing batch dimensions
    éÿÿÿÿéþÿÿÿrT   N)ÚsizeÚreshapeÚpowÚsumÚshape)ÚbmatÚnrO   Ú
flat_traces       r0   Ú_batch_trace_XXTrz   ›   sc   € ð 	�	‰	�"‹€AØ�	‰	�"‹€AØ—‘˜b ! a¡%Ó(×,Ñ,¨QÓ/×3Ñ3°BÓ7€JØ×Ñ˜dŸj™j¨¨"˜oÓ.Ð.r2   ÚpÚqÚreturnc                 óf  — 	 t         t        | «      t        |«      f   }|t        u r9t        d| j                  j                  › d|j                  j                  › �«      ‚ || |«      S # t        $ r> t        t        | «      t        |«      «      }|t         t        | «      t        |«      f<   Y Œ�w xY w)a"  
    Compute Kullback-Leibler divergence :math:`KL(p \| q)` between two distributions.

    .. math::

        KL(p \| q) = \int p(x) \log\frac {p(x)} {q(x)} \,dx

    Args:
        p (Distribution): A :class:`~torch.distributions.Distribution` object.
        q (Distribution): A :class:`~torch.distributions.Distribution` object.

    Returns:
        Tensor: A batch of KL divergences of shape `batch_shape`.

    Raises:
        NotImplementedError: If the distribution types have not been registered via
            :meth:`register_kl`.
    z(No KL(p || q) is implemented for p type z and q type )r&   r4   ÚKeyErrorrd   rV   ÚNotImplementedErrorÚ	__class__rF   )r{   r|   r-   s      r0   r(   r(   ¥   s¨   € ð&,Üœ$˜q›'¤4¨£7Ð*Ñ+ˆð ŒnÑÜ!Ø6°q·{±{×7KÑ7KÐ6LÈLÐYZ×YdÑYd×YmÑYmÐXnÐoó
ð 	
ñ ˆq�!‹9Ðøô ò ,Üœ4 ›7¤D¨£GÓ,ˆØ(+Œ”D˜“GœT !›WÐ$Ó%ð,ús   ‚A) Á)AB0Â/B0c                 ó†  — | j                   t        j                  j                  j	                  |j
                   «      t        j                  j                  j	                  | j
                   «      z
  z  }t        ||j                   dk(  <   d|| j                   dk(  <   d| j                   z
  t        j                  j                  j	                  |j
                  «      t        j                  j                  j	                  | j
                  «      z
  z  }t        ||j                   dk(  <   d|| j                   dk(  <   ||z   S ©Nr   r   )Úprobsrf   ÚnnÚ
functionalÚsoftplusÚlogitsr   ©r{   r|   Út1Út2s       r0   Ú_kl_bernoulli_bernoullirŒ   Ë   sò   € à	
�‰Ü�‰×Ñ×$Ñ$ a§h¡h YÓ/Ü
�(‰(×
Ñ
×
&Ñ
&¨¯© yÓ
1ñ	2ñ
€Bô €B€q‡w�w�!�|ÑØ€B€q‡w�w�!�|ÑØ
ˆa�g‰g‰+Ü�‰×Ñ×$Ñ$ Q§X¡XÓ.´·±×1DÑ1D×1MÑ1MÈaÏhÉhÓ1WÑWñ
€Bô €B€q‡w�w�!�|ÑØ€B€q‡w�w�!�|ÑØ�‰7€Nr2   c                 ó´  — | j                   | j                  z   }|j                   |j                  z   }|j                   j                  «       |j                  j                  «       z   |j                  «       z   }| j                   j                  «       | j                  j                  «       z   |j                  «       z   }| j                   |j                   z
  t        j                  | j                   «      z  }| j                  |j                  z
  t        j                  | j                  «      z  }||z
  t        j                  |«      z  }||z
  |z   |z   |z   S r+   )Úconcentration1Úconcentration0Úlgammarf   Údigamma)	r{   r|   Úsum_params_pÚsum_params_qrŠ   r‹   Út3Út4Út5s	            r0   Ú_kl_beta_betar—   Û   s  € à×#Ñ# a×&6Ñ&6Ñ6€LØ×#Ñ# a×&6Ñ&6Ñ6€LØ	
×	Ñ	×	 Ñ	 Ó	" Q×%5Ñ%5×%<Ñ%<Ó%>Ñ	>À,×AVÑAVÓAXÑ	X€BØ	
×	Ñ	×	 Ñ	 Ó	" Q×%5Ñ%5×%<Ñ%<Ó%>Ñ	>À,×AVÑAVÓAXÑ	X€BØ
×
Ñ
˜Q×-Ñ-Ñ
-´·±¸q×?OÑ?OÓ1PÑ	P€BØ
×
Ñ
˜Q×-Ñ-Ñ
-´·±¸q×?OÑ?OÓ1PÑ	P€BØ
˜Ñ
%¬¯©°|Ó)DÑ	D€BØ�‰7�R‰<˜"Ñ˜rÑ!Ð!r2   c                 ó”  — | j                   |j                   k  j                  «       rt        d«      ‚| j                   | j                  | j                  |j                  z
  z  | j                   j                  «       z   |j                   j                  «       z
  z  }| j                   |j                   kD  }t        ||   «      ||<   |S )NzKKL between Binomials where q.total_count > p.total_count is not implemented)Útotal_countÚanyr€   r„   rˆ   Úlog1prj   )r{   r|   ÚklÚinf_idxss       r0   Ú_kl_binomial_binomialrž   ç   s©   € ð 	
�‰˜Ÿ™Ñ%×*Ñ*Ô,Ü!ØYó
ð 	
ð 
�‰Ø	�‰�1—8‘8˜aŸh™hÑ&Ñ'¨A¯G©G¨8×*:Ñ*:Ó*<Ñ<ÀÇÁÀ×?OÑ?OÓ?QÑQñ
€Bð �}‰}˜qŸ}™}Ñ,€HÜ! " X¡,Ó/€B€x�LØ€Ir2   c                 óü   — | j                   | j                  |j                  z
  z  }t        ||j                   dk(  j                  |«      <   d|| j                   dk(  j                  |«      <   |j	                  d«      S )Nr   rp   )r„   rˆ   r   Ú	expand_asru   )r{   r|   Úts      r0   Ú_kl_categorical_categoricalr¢   ÷   se   € à	�‰�1—8‘8˜aŸh™hÑ&Ñ'€AÜ%(€A€q‡w�w�!�|×Ñ˜qÓ!Ñ"Ø%&€A€q‡w�w�!�|×Ñ˜qÓ!Ñ"Ø�5‰5�‹9Ðr2   c                 ó$  — | j                   | j                  |j                  z
  z  }| j                  «       t        j                  | j
                   «      z   }|j                  «        t        j                  |j
                   «      z
  }||z   |z   S r+   )Úmeanrˆ   Ú_cont_bern_log_normrf   r›   r„   ©r{   r|   rŠ   r‹   r”   s        r0   Ú-_kl_continuous_bernoulli_continuous_bernoullir§   ÿ   sr   € à	
�‰�1—8‘8˜aŸh™hÑ&Ñ	'€BØ	
×	Ñ	Ó	 ¤5§;¡;°·±¨xÓ#8Ñ	8€BØ
×
Ñ
Ó
!Ð	!¤E§K¡K°·±°Ó$9Ñ	9€BØ�‰7�R‰<Ðr2   c                 ó  — | j                   j                  d«      }|j                   j                  d«      }|j                  «       |j                  «       z
  }| j                   j                  «       |j                   j                  «       z
  j                  d«      }| j                   |j                   z
  }| j                   j                  «       |j                  «       j	                  d«      z
  }||z
  ||z  j                  d«      z   S )Nrp   )Úconcentrationru   r�   r‘   Ú	unsqueeze)r{   r|   Úsum_p_concentrationÚsum_q_concentrationrŠ   r‹   r”   r•   s           r0   Ú_kl_dirichlet_dirichletr­     sÔ   € ð Ÿ/™/×-Ñ-¨bÓ1ÐØŸ/™/×-Ñ-¨bÓ1ÐØ	×	#Ñ	#Ó	%Ð(;×(BÑ(BÓ(DÑ	D€BØ
�/‰/×
 Ñ
 Ó
" Q§_¡_×%;Ñ%;Ó%=Ñ
=×	BÑ	BÀ2Ó	F€BØ	
�‰˜1Ÿ?™?Ñ	*€BØ	
�‰×	 Ñ	 Ó	"Ð%8×%@Ñ%@Ó%B×%LÑ%LÈRÓ%PÑ	P€BØ�‰7�b˜2‘g—]‘] 2Ó&Ñ&Ð&r2   c                 óf   — |j                   | j                   z  }|j                  «        }||z   dz
  S ©Nr   ©ÚrateÚlog)r{   r|   Ú
rate_ratiorŠ   s       r0   Ú_kl_exponential_exponentialr´     s1   € à—‘˜!Ÿ&™&‘€JØ
�.‰.Ó
Ð	€BØ�
‰?˜QÑÐr2   c                 óö  — t        | «      t        |«      urt        d«      ‚| j                  D �cg c]   }|j                  «       j	                  «       ‘Œ" }}|j                  } | j
                  |Ž }t        j                  j                  |j                  «       |d¬«      } |j
                  |Ž |z
  }t        |||«      D ]0  \  }}	}
|	|z
  |
z  }|t        |t        |j                  «      «      z  }Œ2 |S c c}w )Nz‡The cross KL-divergence between different exponential families cannot                             be computed using Bregman divergencesT)Úcreate_graph)r4   r€   Ú_natural_paramsÚdetachÚrequires_grad_Ú_log_normalizerrf   ÚautogradÚgradru   rB   r#   ÚlenÚevent_shape)r{   r|   ÚnpÚ	p_nparamsÚ	q_nparamsÚ	lg_normalÚ	gradientsÚresultÚpnpÚqnpÚgÚterms               r0   Ú_kl_expfamily_expfamilyrÉ     sô   € äˆAƒw”d˜1“gÑÜ!ðCó
ð 	
ð 9:×8IÒ8IÓJÑ8I°"�—‘“×+Ñ+Õ-Ð8I€IÐJØ×!Ñ!€IØ!�×!Ñ! 9Ð-€IÜ—‘×#Ñ# I§M¡M£O°YÈTÐ#ÓR€IØˆQ×Ñ 	Ð*¨YÑ6€FÜ˜9 i°Ö;‰ˆˆS�!Ø�c‘	˜Q‰ˆØ”. ¤s¨1¯=©=Ó'9Ó:Ñ:‰ð <ð €Mùò Ks   °%C6c                 óÖ  — |j                   | j                  |j                  z  j                  «       z  }t        j                  |j                   «      t        j                  | j                   «      z
  }| j                   |j                   z
  t        j
                  | j                   «      z  }|j                  | j                  z
  | j                   | j                  z  z  }||z   |z   |z   S r+   )r©   r±   r²   rf   r�   r‘   ©r{   r|   rŠ   r‹   r”   r•   s         r0   Ú_kl_gamma_gammarÌ   ,  s£   € à	
�‰˜AŸF™F Q§V¡V™O×0Ñ0Ó2Ñ	2€BÜ	�‰�a—o‘oÓ	&¬¯©°a·o±oÓ)FÑ	F€BØ
�/‰/˜AŸO™OÑ
+¬u¯}©}¸Q¿_¹_Ó/MÑ	M€BØ
�&‰&�1—6‘6‰/˜aŸo™o°·±Ñ6Ñ	7€BØ�‰7�R‰<˜"ÑÐr2   c                 óT  — | j                   |j                   z  }|j                  |j                   z  }| j                  |j                   z  }|j                  «        |z
  |z   }|t        z  }t	        j
                  |d|z   j                  «       z   |z
  «      }||z   |z   dt        z   z
  S r¯   )ÚscaleÚlocr²   Ú_euler_gammarf   Úexpr�   )r{   r|   Úct1Úct2Úct3rŠ   r‹   r”   s           r0   Ú_kl_gumbel_gumbelrÕ   5  s”   € à
�'‰'�A—G‘GÑ
€CØ
�%‰%�!—'‘'‰/€CØ
�%‰%�!—'‘'‰/€CØ
�'‰'‹)ˆ�cÑ	˜CÑ	€BØ	Œ|Ñ	€BÜ	�‰�3˜!˜c™'×)Ñ)Ó+Ñ+¨cÑ1Ó	2€BØ�‰7�R‰<˜1œ|Ñ+Ñ,Ð,r2   c                 óš   — | j                  «        t        j                  |j                   «      | j                  z  z
  |j                  z
  S r+   )Úentropyrf   r›   r„   rˆ   ©r{   r|   s     r0   Ú_kl_geometric_geometricrÙ   @  s6   € à�I‰I‹Kˆ<œ%Ÿ+™+ q§w¡w hÓ/°!·'±'Ñ9Ñ9¸A¿H¹HÑDÐDr2   c                 óB   — t        | j                  |j                  «      S r+   )Ú_kl_normal_normalÚ	base_distrØ   s     r0   Ú_kl_halfnormal_halfnormalrÝ   E  s   € ä˜QŸ[™[¨!¯+©+Ó6Ð6r2   c                 ó$  — | j                   |j                   z  }| j                  |j                  z
  j                  «       }|j                  «        }||j                   z  }|t	        j
                  | | j                   z  «      z  }||z   |z   dz
  S r¯   )rÎ   rÏ   Úabsr²   rf   rÑ   )r{   r|   Úscale_ratioÚloc_abs_diffrŠ   r‹   r”   s          r0   Ú_kl_laplace_laplacerâ   J  s~   € ð —'‘'˜AŸG™GÑ#€KØ—E‘E˜AŸE™E‘M×&Ñ&Ó(€LØ
�/‰/Ó
Ð	€BØ	˜Ÿ™Ñ	€BØ	”u—y‘y , °·±Ñ!8Ó9Ñ	9€BØ�‰7�R‰<˜!ÑÐr2   c                 ó  — | j                   |j                   k7  rt        d«      ‚t        |j                  |j                  |j
                  «      t        | j                  | j                  | j
                  «      z
  }t        |j                  |j                  |j                  | j                  z
  |j
                  «      }|j                  j                  |j                  j                  d«      z  }t        j                  j                  |j
                  |d¬«      }| j                  |j                  z  j                  d«      }t        | j                  |j                  j                  «       j                  d«      z  «      }t        || j                  j!                  «       j                  d«      z  «      }t        |j#                  | j                  «      «      }	||z   |z
  |	z
  }
d||
z   |z   | j                   d   z
  z  S )NzKL-divergence between two Low Rank Multivariate Normals with                          different event shapes cannot be computedrq   F©Úupperrp   ç      à?r   )r¾   Ú
ValueErrorr   Ú_unbroadcasted_cov_factorÚ_unbroadcasted_cov_diagÚ_capacitance_trilr   rÏ   ÚmTrª   rf   ÚlinalgÚsolve_triangularru   rz   ÚrsqrtÚsqrtÚmatmul)r{   r|   Úterm1Úterm3Ú	qWt_qDinvÚAÚterm21Úterm22Úterm23Úterm24Úterm2s              r0   Ú7_kl_lowrankmultivariatenormal_lowrankmultivariatenormalrú   U  s¾  € à‡}�}˜Ÿ™Ò%ÜðEó
ð 	
ô
 "Ø	×#Ñ# Q×%>Ñ%>À×@SÑ@SóäØ	×#Ñ# Q×%>Ñ%>À×@SÑ@Só	ñ€Eô
 'Ø	×#Ñ#Ø	×!Ñ!Ø	�‰�—‘‰Ø	×Ñó	€Eð ×+Ñ+×.Ñ.°×1JÑ1J×1TÑ1TÐUWÓ1XÑX€IÜ�‰×%Ñ% a×&9Ñ&9¸9ÈEÐ%ÓR€AØ×'Ñ'¨!×*CÑ*CÑC×HÑHÈÓL€FÜØ	×#Ñ# a×&?Ñ&?×&EÑ&EÓ&G×&QÑ&QÐRTÓ&UÑUó€Fô ˜a !×";Ñ";×"@Ñ"@Ó"B×"LÑ"LÈRÓ"PÑPÓQ€FÜ˜aŸh™h q×'BÑ'BÓCÓD€FØ�V‰O˜fÑ$ vÑ-€EØ�%˜%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r2   c                 ód  — | j                   |j                   k7  rt        d«      ‚t        |j                  |j                  |j
                  «      d| j                  j                  dd¬«      j                  «       j                  d«      z  z
  }t        |j                  |j                  |j                  | j                  z
  |j
                  «      }|j                  j                  |j                  j                  d«      z  }t        j                  j!                  |j
                  |d¬«      }t#        | j                  |j                  j%                  «       j                  d«      z  «      }t#        |j'                  | j                  «      «      }||z
  }d||z   |z   | j                   d	   z
  z  S )
Nú�KL-divergence between two (Low Rank) Multivariate Normals with                          different event shapes cannot be computedrT   rq   rp   ©Údim1Údim2Frä   ræ   r   )r¾   rç   r   rè   ré   rê   Ú_unbroadcasted_scale_trilÚdiagonalr²   ru   r   rÏ   rë   rª   rf   rì   rí   rz   rî   rð   )	r{   r|   rñ   rò   ró   rô   rõ   rö   rù   s	            r0   Ú0_kl_multivariatenormal_lowrankmultivariatenormalr  w  s|  € à‡}�}˜Ÿ™Ò%ÜðEó
ð 	
ô
 "Ø	×#Ñ# Q×%>Ñ%>À×@SÑ@Sóà	ˆA×'Ñ'×0Ñ0°b¸rÐ0ÓB×FÑFÓH×LÑLÈRÓPÑPñQ€Eô 'Ø	×#Ñ#Ø	×!Ñ!Ø	�‰�—‘‰Ø	×Ñó	€Eð ×+Ñ+×.Ñ.°×1JÑ1J×1TÑ1TÐUWÓ1XÑX€IÜ�‰×%Ñ% a×&9Ñ&9¸9ÈEÐ%ÓR€AÜØ	×#Ñ# a×&?Ñ&?×&EÑ&EÓ&G×&QÑ&QÐRTÓ&UÑUó€Fô ˜aŸh™h q×'BÑ'BÓCÓD€FØ�V‰O€EØ�%˜%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r2   c                 óP  — | j                   |j                   k7  rt        d«      ‚d|j                  j                  dd¬«      j	                  «       j                  d«      z  t        | j                  | j                  | j                  «      z
  }t        |j                  |j                  | j                  z
  «      }t        j                  j                  |j                  j                  d d | j                  j                  d d «      }| j                   d   }|j                  j!                  |||fz   «      }| j                  j!                  ||| j"                  j%                  d«      fz   «      }t        j&                  | j                  j)                  «       «      j!                  |||fz   «      }t+        t        j,                  j/                  ||d¬«      «      }	t+        t        j,                  j/                  ||d¬«      «      }
|	|
z   }d	||z   |z   | j                   d   z
  z  S )
Nrü   rT   rq   rp   rý   r   Frä   ræ   )r¾   rç   r   r  r²   ru   r   rè   ré   rê   r   rÏ   rf   Ú_CÚ_infer_sizerv   ÚexpandÚ
cov_factorrr   Ú
diag_embedrï   rz   rì   rí   )r{   r|   rñ   rò   Úcombined_batch_shaperx   Úq_scale_trilÚp_cov_factorÚ
p_cov_diagrõ   rö   rù   s               r0   Ú0_kl_lowrankmultivariatenormal_multivariatenormalr  •  sü  € à‡}�}˜Ÿ™Ò%ÜðEó
ð 	
ð
 �×+Ñ+×4Ñ4¸"À2Ð4ÓF×JÑJÓL×PÑPØ
óñ äØ	×#Ñ# Q×%>Ñ%>À×@SÑ@Só	ñ€Eô
 ˜q×:Ñ:¸Q¿U¹UÀQÇUÁU¹]ÓL€Eô !Ÿ8™8×/Ñ/Ø	×#Ñ#×)Ñ)¨#¨2Ð.°×0KÑ0K×0QÑ0QÐRUÐSUÐ0VóÐð 	
�‰�aÑ€AØ×.Ñ.×5Ñ5Ð6JÈaÐQRÈVÑ6SÓT€LØ×.Ñ.×5Ñ5Ø  1§<¡<×#4Ñ#4°RÓ#8Ð9Ñ9ó€Lô ×!Ñ! !×";Ñ";×"@Ñ"@Ó"BÓC×JÑJØ  1˜vÑ%ó€Jô Ü�‰×%Ñ% l°LÈÐ%ÓNó€Fô Ü�‰×%Ñ% l°JÀeÐ%ÓLó€Fð �V‰O€EØ�%˜%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r2   c                 ó:  — | j                   |j                   k7  rt        d«      ‚|j                  j                  dd¬«      j	                  «       j                  d«      | j                  j                  dd¬«      j	                  «       j                  d«      z
  }t        j                  j                  |j                  j                  d d | j                  j                  d d «      }| j                   d   }|j                  j                  |||fz   «      }| j                  j                  |||fz   «      }t        t        j                  j                  ||d¬«      «      }t        |j                  |j                  | j                  z
  «      }|d||z   |z
  z  z   S )	NzvKL-divergence between two Multivariate Normals with                          different event shapes cannot be computedrq   rp   rý   r   Frä   ræ   )r¾   rç   r   r  r²   ru   rf   r  r  rv   r  rz   rì   rí   r   rÏ   )	r{   r|   Ú
half_term1r	  rx   r
  Úp_scale_trilrù   rò   s	            r0   Ú)_kl_multivariatenormal_multivariatenormalr  º  s€  € ð 	‡}�}˜Ÿ™Ò%ÜðEó
ð 	
ð
 ×,Ñ,×5Ñ5¸2ÀBÐ5ÓG×KÑKÓM×QÑQØ
óà	×#Ñ#×,Ñ,°"¸2Ð,Ó>×BÑBÓD×HÑHÈÓLñM€Jô !Ÿ8™8×/Ñ/Ø	×#Ñ#×)Ñ)¨#¨2Ð.°×0KÑ0K×0QÑ0QÐRUÐSUÐ0VóÐð 	
�‰�aÑ€AØ×.Ñ.×5Ñ5Ð6JÈaÐQRÈVÑ6SÓT€LØ×.Ñ.×5Ñ5Ð6JÈaÐQRÈVÑ6SÓT€LÜÜ�‰×%Ñ% l°LÈÐ%ÓNó€Eô ˜q×:Ñ:¸Q¿U¹UÀQÇUÁU¹]ÓL€EØ˜˜u u™}¨qÑ0Ñ1Ñ1Ð1r2   c                 óô   — | j                   |j                   z  j                  d«      }| j                  |j                  z
  |j                   z  j                  d«      }d||z   dz
  |j                  «       z
  z  S ©NrT   ræ   r   ©rÎ   rt   rÏ   r²   )r{   r|   Ú	var_ratiorŠ   s       r0   rÛ   rÛ   Ó  sc   € à—‘˜1Ÿ7™7Ñ"×'Ñ'¨Ó*€IØ�5‰5�1—5‘5‰=˜AŸG™GÑ
#×	(Ñ	(¨Ó	+€BØ�)˜b‘. 1Ñ$ y§}¡}£Ñ6Ñ7Ð7r2   c                 óB   — t        | j                  |j                  «      S r+   )r¢   Ú_categoricalrØ   s     r0   Ú'_kl_onehotcategorical_onehotcategoricalr  Ú  s   € ä& q§~¡~°q·~±~ÓFÐFr2   c                 óD  — | j                   |j                   z  }|j                  | j                  z  }|j                  |j                  «       z  }|j                  «        }||z   |z   dz
  }t        || j                  j
                  |j                  j
                  k  <   |S r¯   )rÎ   Úalphar²   r   ÚsupportÚlower_bound)r{   r|   rà   Úalpha_ratiorŠ   r‹   rÄ   s          r0   Ú_kl_pareto_paretor  ß  s‡   € ð —'‘'˜AŸG™GÑ#€KØ—'‘'˜AŸG™GÑ#€KØ	
�‰�;—?‘?Ó$Ñ	$€BØ
�/‰/Ó
Ð	€BØ�"‰W�{Ñ" QÑ&€FÜ<?€Fˆ1�9‰9× Ñ  1§9¡9×#8Ñ#8Ñ8Ñ9Ø€Mr2   c                 óº   — | j                   | j                   j                  «       |j                   j                  «       z
  z  | j                   |j                   z
  z
  S r+   r°   rØ   s     r0   Ú_kl_poisson_poissonr   ë  s;   € à�6‰6�Q—V‘V—Z‘Z“\ A§F¡F§J¡J£LÑ0Ñ1°Q·V±V¸a¿f¹f±_ÑEÐEr2   c                 ó¾   — | j                   |j                   k7  rt        ‚| j                  |j                  k7  rt        ‚t        | j                  |j                  «      S r+   )Ú
transformsr€   r¾   r(   rÜ   rØ   s     r0   Ú_kl_transformed_transformedr#  ð  sC   € à‡|�|�q—|‘|Ò#Ü!Ð!Ø‡}�}˜Ÿ™Ò%Ü!Ð!Ü˜Ÿ™ a§k¡kÓ2Ð2r2   c                 óü   — |j                   |j                  z
  | j                   | j                  z
  z  j                  «       }t        ||j                  | j                  kD  |j                   | j                   k  z  <   |S r+   )ÚhighÚlowr²   r   ©r{   r|   rÄ   s      r0   Ú_kl_uniform_uniformr(  ù  sY   € à�v‰v˜Ÿ™‰~ !§&¡&¨1¯5©5¡.Ñ1×6Ñ6Ó8€FÜ25€FˆA�E‰E�A—E‘E‰M˜aŸf™f q§v¡v™oÑ.Ñ/Ø€Mr2   c                 óŽ   — | j                  «        | j                  |j                  j                  «       z  |j                  z
  z
  S r+   )r×   r„   r±   r²   rØ   s     r0   Ú_kl_bernoulli_poissonr*    s1   € à�I‰I‹Kˆ<˜1Ÿ7™7 Q§V¡V§Z¡Z£\Ñ1°A·F±FÑ:Ñ;Ð;r2   c                 ó¼   — | j                  «        | j                  |j                  z  z
  t        j                  |j
                   «      z
  |j                  «       z
  S r+   )r×   r¤   rˆ   rf   r›   r„   r¥   rØ   s     r0   Ú_kl_beta_continuous_bernoullir,    sS   € ð 
�‰‹ˆØ
�&‰&�1—8‘8Ñ
ñ	ä
�+‰+�q—w‘w�hÓ
ñ	 ð ×
Ñ
Ó
!ñ	"ðr2   c                 ó,   — t        | j                  «      S r+   )rj   rŽ   rØ   s     r0   Ú_kl_beta_infinityr.    s   € ä˜!×*Ñ*Ó+Ð+r2   c                 óÂ   — | j                  «        |j                  j                  «       z
  |j                  | j                  | j                  | j                  z   z  z  z   S r+   )r×   r±   r²   rŽ   r�   rØ   s     r0   Ú_kl_beta_exponentialr0    sT   € ð 
�‰‹ˆØ
�&‰&�*‰*‹,ñ	à
�&‰&�A×$Ñ$¨×(8Ñ(8¸1×;KÑ;KÑ(KÑLÑ
Mñ	Nðr2   c                 óÈ  — | j                  «        }|j                  j                  «       |j                  |j                  j	                  «       z  z
  }|j                  dz
  | j
                  j                  «       | j
                  | j                  z   j                  «       z
  z  }|j                  | j
                  z  | j
                  | j                  z   z  }||z   |z
  |z   S r¯   )r×   r©   r�   r±   r²   rŽ   r‘   r�   rË   s         r0   Ú_kl_beta_gammar2    s¼   € à
�)‰)‹+ˆ€BØ	
�‰×	Ñ	Ó	! A§O¡O°a·f±f·j±j³lÑ$BÑ	B€BØ
�/‰/˜AÑ
Ø	×Ñ× Ñ Ó" a×&6Ñ&6¸×9IÑ9IÑ&I×%RÑ%RÓ%TÑTñ
€Bð 
�‰�!×"Ñ"Ñ	" a×&6Ñ&6¸×9IÑ9IÑ&IÑ	J€BØ�‰7�R‰<˜"ÑÐr2   c                 óä  — | j                   | j                   | j                  z   z  }|j                  j                  d«      }| j	                  «        }d|dz  t
        j                  z  j                  «       z  }|d|z
  z  | j                   | j                  z   dz   z  |j                  d«      z   dz  }|j                  |z  }|j                  j                  d«      dz  }||z   ||z
  |z   |z  z   S r  )	rŽ   r�   rÎ   rt   r×   ÚmathÚpir²   rÏ   )	r{   r|   ÚE_betaÚ
var_normalrŠ   r‹   r”   r•   r–   s	            r0   Ú_kl_beta_normalr8  ,  sã   € à×Ñ ×!1Ñ!1°A×4DÑ4DÑ!DÑE€FØ—‘—‘˜Q“€JØ
�)‰)‹+ˆ€BØ	�
˜Q‘¤§¡Ñ(×-Ñ-Ó/Ñ	/€Bà�!�f‘*Ñ ×!1Ñ!1°A×4DÑ4DÑ!DÀqÑ!HÑIØ
�*‰*�Q‹-ñ	àñ
€Bð 
�‰�‰€BØ	
�‰�‰�1‹˜Ñ	€BØ�‰7�b˜2‘g ‘l jÑ0Ñ0Ð0r2   c                 ó  — | j                  «        |j                  |j                  z
  j                  «       z   }t        ||j                  | j
                  j                  kD  |j                  | j
                  j                  k  z  <   |S r+   )r×   r%  r&  r²   r   r  r  Úupper_boundr'  s      r0   Ú_kl_beta_uniformr;  ;  sc   € à�i‰i‹kˆ\˜QŸV™V a§e¡e™^×0Ñ0Ó2Ñ2€FÜQT€FˆA�E‰E�A—I‘I×)Ñ)Ñ)¨a¯f©f°q·y±y×7LÑ7LÑ.LÑMÑNØ€Mr2   c                 ó,   — t        | j                  «      S r+   )rj   r„   rØ   s     r0   Ú!_kl_continuous_bernoulli_infinityr=  E  s   € ä˜!Ÿ'™'Ó"Ð"r2   c                 ó˜   — | j                  «        t        j                  |j                  «      z
  |j                  | j                  z  z   S r+   )r×   rf   r²   r±   r¤   rØ   s     r0   Ú$_kl_continuous_bernoulli_exponentialr?  J  s3   € à�I‰I‹Kˆ<œ%Ÿ)™) A§F¡FÓ+Ñ+¨a¯f©f°q·v±v©oÑ=Ð=r2   c                 óø  — | j                  «        }dt        j                  dt        j                  z  «      t	        j
                  |j                  |j                  z  «      z   z  t	        j                  |j                  «      z   }| j                  t	        j
                  | j                  «      z   d|j                  z  | j                  z  z
  dt	        j
                  |j                  «      z  z  }||z   |z   S )Nræ   g       @)
r×   r4  r²   r5  rf   ÚsquarerÏ   rÎ   Úvariancer¤   r¦   s        r0   Ú_kl_continuous_bernoulli_normalrC  S  s¹   € à
�)‰)‹+ˆ€BØ	”—‘˜œtŸw™w™Ó'¬%¯,©,°q·u±u¸q¿w¹w±Ó*GÑGÑ	HÌ5Ï9É9Ø	�‰óLñ 
€Bð �*‰*”u—|‘| A§F¡FÓ+Ñ
+¨c°A·E±E©k¸A¿F¹FÑ.BÑ
BØŒe�l‰l˜1Ÿ7™7Ó#Ñ#ñ
€Bð �‰7�R‰<Ðr2   c           	      óÆ  — | j                  «        |j                  |j                  z
  j                  «       z   }t	        j
                  t	        j                  t	        j                  |j                  | j                  j                  «      t	        j                  |j                  | j                  j                  «      «      t	        j                  |«      t        z  |«      S r+   )r×   r%  r&  r²   rf   ÚwhereÚmaxÚger  r  Úler:  Ú	ones_liker   r'  s      r0   Ú _kl_continuous_bernoulli_uniformrJ  _  s”   € à�i‰i‹kˆ\˜QŸV™V a§e¡e™^×0Ñ0Ó2Ñ2€FÜ�;‰;Ü�	‰	Ü�H‰H�Q—U‘U˜AŸI™I×1Ñ1Ó2Ü�H‰H�Q—V‘V˜QŸY™Y×2Ñ2Ó3ó	
ô 	�‰˜Ó¤#Ñ%Øóð r2   c                 ó,   — t        | j                  «      S r+   ©rj   r±   rØ   s     r0   Ú_kl_exponential_infinityrM  l  s   € ô
 ˜!Ÿ&™&Ó!Ð!r2   c                 óö   — |j                   | j                   z  }|j                   t        j                  |«      z  }||z   |j                  j	                  «       z   |j                  t
        z  z   dt
        z   z
  S r¯   )r±   r©   rf   r²   r�   rÐ   )r{   r|   ÚratiorŠ   s       r0   Ú_kl_exponential_gammarP  t  st   € à�F‰F�Q—V‘V‰O€EØ
�/‰/Ð	œEŸI™I eÓ,Ñ	,€Bà
Ø
ñ	à
�/‰/×
 Ñ
 Ó
"ñ	#ð �/‰/œLÑ
(ñ	)ð Œ|Ññ		ðr2   c                 óþ   — | j                   |j                  z  }|j                  |j                  z  }|j                  «       dz
  }t	        j
                  |«      |z  |dz   z  }|j                  «       }||z
  |z   |z   S r¯   )r±   rÎ   rÏ   r²   rf   rÑ   Ú
reciprocal)r{   r|   Úscale_rate_prodÚloc_scale_ratiorŠ   r‹   r”   s          r0   Ú_kl_exponential_gumbelrU  �  sx   € à—f‘f˜qŸw™wÑ&€OØ—e‘e˜aŸg™g‘o€OØ	×	Ñ	Ó	 Ñ	"€BÜ	�‰�?Ó	# oÑ	5¸È1Ñ9LÑ	M€BØ	×	#Ñ	#Ó	%€BØ�Ñ "Ñ$ rÑ)Ð)r2   c                 ó|  — |j                   j                  d«      }| j                  j                  d«      }dt        j                  ||z  dz  t
        j                  z  «      z  }|j                  «       }|j                  | j                  z  }|j                  j                  d«      dz  }|dz
  ||z
  |z   |z  z   S r  )	rÎ   rt   r±   rf   r²   r4  r5  rR  rÏ   )r{   r|   r7  Úrate_sqrrŠ   r‹   r”   r•   s           r0   Ú_kl_exponential_normalrX  Ž  s›   € à—‘—‘˜Q“€JØ�v‰v�z‰z˜!‹}€HØ	Œu�y‰y˜ JÑ.°Ñ2´T·W±WÑ<Ó=Ñ	=€BØ	×	Ñ	Ó	€BØ	
�‰�—‘‰€BØ	
�‰�‰�1‹˜Ñ	€BØ�‰6�R˜"‘W˜r‘\ ZÑ/Ñ/Ð/r2   c                 ó,   — t        | j                  «      S r+   )rj   r©   rØ   s     r0   Ú_kl_gamma_infinityrZ  ™  s   € ô
 ˜!Ÿ/™/Ó*Ð*r2   c                 ó¨   — | j                  «        |j                  j                  «       z
  |j                  | j                  z  | j                  z  z   S r+   )r×   r±   r²   r©   rØ   s     r0   Ú_kl_gamma_exponentialr\  ¡  s:   € à�I‰I‹Kˆ<˜!Ÿ&™&Ÿ*™*›,Ñ&¨¯©°!·/±/Ñ)AÀAÇFÁFÑ)JÑJÐJr2   c                 óæ  — | j                   |j                  z  }|j                  |j                  z  }| j                  dz
  | j                  j	                  «       z  | j                  j                  «       z
  | j                  z
  }|j                  «       | j                  |z  z   }t        j                  |«      d|j                  «       z   j                  | j                   «      z  |z
  }||z   |z   S r¯   )r±   rÎ   rÏ   r©   r‘   r�   r²   rf   rÑ   rR  rt   )r{   r|   Úbeta_scale_prodrT  rŠ   r‹   r”   s          r0   Ú_kl_gamma_gumbelr_  ¦  sÙ   € à—f‘f˜qŸw™wÑ&€OØ—e‘e˜aŸg™g‘o€Oà	
�‰˜1Ñ	 §¡× 7Ñ 7Ó 9Ñ9Ø
�/‰/×
 Ñ
 Ó
"ñ	#à
�/‰/ñ	ð ð
 
×	Ñ	Ó	 §¡°?Ñ!BÑ	B€Bä�	‰	�/Ó"Øˆ×)Ñ)Ó+Ñ+×
0Ñ
0°!·/±/Ð1AÓ
Bñ	Cà
ñ	ð ð
 �‰7�R‰<Ðr2   c                 ór  — |j                   j                  d«      }| j                  j                  d«      }dt        j                  ||z  dz  t
        j                  z  «      z  | j                  z
  | j                  j                  «       z
  }d| j                  j                  d«      | j                  z   z  |z  }|j                  | j                  z  | j                  z  }d|j                  j                  d«      z  }|| j                  dz
  | j                  j                  «       z  z   ||z
  |z   |z  z   S r  )rÎ   rt   r±   rf   r²   r4  r5  r©   r�   rÏ   r‘   )r{   r|   r7  Úbeta_sqrrŠ   r‹   r”   r•   s           r0   Ú_kl_gamma_normalrb  »  s  € à—‘—‘˜Q“€JØ�v‰v�z‰z˜!‹}€HàŒe�i‰i˜ :Ñ-°Ñ1´D·G±GÑ;Ó<Ñ<Ø
�/‰/ñ	à
�/‰/×
 Ñ
 Ó
"ñ	#ð ð
 
�—‘×#Ñ# AÓ&¨¯©Ñ8Ñ	9¸HÑ	D€BØ	
�‰�—‘Ñ	  1§6¡6Ñ	)€BØ	ˆq�u‰u�y‰y˜‹|Ñ	€Bà
Ø�?‰?˜QÑ !§/¡/×"9Ñ"9Ó";Ñ
;ñ	<à�‰7�R‰<˜:Ñ
%ñ	&ðr2   c                 ó,   — t        | j                  «      S r+   ©rj   rÏ   rØ   s     r0   Ú_kl_gumbel_infinityre  Î  ó   € ô ˜!Ÿ%™%Ó Ð r2   c                 ó°  — | j                   |j                   z  }|t        j                  dt        j                  z  «      z  j	                  «       }t        j                  |z  dz  j                  d«      dz  }| j                  | j                   t        z  z   |j                  z
  |j                   z  j                  d«      dz  }| |z   |z   t        dz   z
  S )NrT   ræ   é   r   )rÎ   r4  rï   r5  r²   rt   rÏ   rÐ   )r{   r|   Úparam_ratiorŠ   r‹   r”   s         r0   Ú_kl_gumbel_normalrj  Û  s®   € à—'‘'˜AŸG™GÑ#€KØ
œŸ	™	 !¤d§g¡g¡+Ó.Ñ
.×	3Ñ	3Ó	5€BÜ
�'‰'�KÑ
 #Ñ
%×	*Ñ	*¨1Ó	-°Ñ	1€BØ�5‰5�1—7‘7œ\Ñ)Ñ)¨A¯E©EÑ1°Q·W±WÑ
<×	AÑ	AÀ!Ó	DÀsÑ	J€BØˆ3�‰8�b‰=œL¨1Ñ,Ñ-Ð-r2   c                 ó,   — t        | j                  «      S r+   rd  rØ   s     r0   Ú_kl_laplace_infinityrl  ä  rf  r2   c                 ó   — |j                   j                  d«      }| j                   j                  d«      |z  }dt        j                  d|z  t        j
                  z  «      z  }d| j                  j                  d«      z  }| j                  |j                  z  }d|j                  j                  d«      z  }| |z   ||z
  |z   |z  z   dz
  S r  )rÎ   rt   rf   r²   r4  r5  rÏ   )r{   r|   r7  Úscale_sqr_var_ratiorŠ   r‹   r”   r•   s           r0   Ú_kl_laplace_normalro  î  s®   € à—‘—‘˜Q“€JØŸ'™'Ÿ+™+ a›.¨:Ñ5ÐØ	Œu�y‰y˜Ð0Ñ0´4·7±7Ñ:Ó;Ñ	;€BØ	ˆq�u‰u�y‰y˜‹|Ñ	€BØ	
�‰�—‘‰€BØ	ˆq�u‰u�y‰y˜‹|Ñ	€BØˆ3Ð$Ñ$¨¨R©°"©¸
Ñ'BÑBÀQÑFÐFr2   c                 ó,   — t        | j                  «      S r+   rd  rØ   s     r0   Ú_kl_normal_infinityrq  ù  rf  r2   c                 ó�  — | j                   |j                  z  }| j                  |j                  z  j                  d«      }|j                   |j                  z  }|j                  «       dz  }||z
  }t	        j
                  | d|z  z   |z   «      }| |z   |z   ddt        j                  dt        j                  z  «      z   z  z
  S r  )rÏ   rÎ   rt   r²   rf   rÑ   r4  r5  )r{   r|   Úmean_scale_ratioÚvar_scale_sqr_ratiorT  rŠ   r‹   r”   s           r0   Ú_kl_normal_gumbelru    s²   € à—u‘u˜qŸw™w‘ÐØŸ7™7 Q§W¡WÑ,×1Ñ1°!Ó4ÐØ—e‘e˜aŸg™g‘o€OØ	×	 Ñ	 Ó	" SÑ	(€BØ	˜OÑ	+€BÜ	�‰Ð$Ð$ sÐ-@Ñ'@Ñ@À?ÑRÓ	S€BØˆ3�‰8�b‰=˜C 1¤t§x¡x°´D·G±G±Ó'<Ñ#<Ñ=Ñ>Ð>r2   c                 óF  — | j                   |j                   z
  }| j                  |j                  z  }|| j                  z  }t        j                  |«      }t	        j
                  dt        j                  z  «      | j                  z  t        j                  d|j                  d«      z  «      z  }|t        j                  t	        j
                  d«      |z  «      z  }| ||z   |j                  z  z   ddt	        j                  dt        j                  z  «      z   z  z
  S )NrT   g      à¿ræ   r   )
rÏ   rÎ   rf   r²   r4  rï   r5  rÑ   rt   Úerf)r{   r|   Úloc_diffrà   Úloc_diff_scale_ratiorŠ   r‹   r”   s           r0   Ú_kl_normal_laplacerz    sá   € à�u‰u�q—u‘u‰}€HØ—'‘'˜AŸG™GÑ#€KØ# a§g¡gÑ-ÐÜ	�‰�;Ó	€Bä�	‰	�!”d—g‘g‘+Ó §¡Ñ(¬5¯9©9°TÐ<P×<TÑ<TÐUVÓ<WÑ5WÓ+XÑXð ð 
”E—I‘IœdŸi™i¨›nÐ/CÑCÓDÑ	D€BØˆ3�"�r‘'˜QŸW™WÑ$Ñ$¨¨q´4·8±8¸CÄ$Ç'Á'¹MÓ3JÑ/JÑ(KÑLÐLr2   c                 ó,   — t        | j                  «      S r+   )rj   rÎ   rØ   s     r0   Ú_kl_pareto_infinityr|    s   € ô ˜!Ÿ'™'Ó"Ð"r2   c                 ó&  — | j                   |j                  z  }| j                  |z  j                  «       }| j                  j	                  «       }| j                  |z  | j                  dz
  z  }||z
  |z   dz
  }t
        || j                  dk  <   |S r¯   )rÎ   r±   r  r²   rR  r   )r{   r|   rS  rŠ   r‹   r”   rÄ   s          r0   Ú_kl_pareto_exponentialr~  "  s�   € à—g‘g §¡Ñ&€OØ
�'‰'�OÑ
#×	(Ñ	(Ó	*€BØ	
�‰×	Ñ	Ó	€BØ	
�‰�?Ñ	" a§g¡g°¡kÑ	2€BØ�"‰W�r‰\˜AÑ€FÜ€Fˆ1�7‰7�a‰<ÑØ€Mr2   c                 ó  — | j                   j                  «       | j                  j                  «       z   }| j                  j                  «       |z
  }|j                  j                  «       |j                  |j                  j                  «       z  z
  }d|j                  z
  |z  }|j                  | j                  z  | j                   z  | j                  dz
  z  }||z   |z   |z   dz
  }t        || j                  dk  <   |S r¯   )rÎ   r²   r  rR  r©   r�   r±   r   ©r{   r|   Úcommon_termrŠ   r‹   r”   r•   rÄ   s           r0   Ú_kl_pareto_gammar‚  -  sÊ   € à—'‘'—+‘+“- !§'¡'×"4Ñ"4Ó"6Ñ6€KØ	
�‰�‰‹˜Ñ	$€BØ	
�‰×	Ñ	Ó	! A§O¡O°a·f±f·j±j³lÑ$BÑ	B€BØ
ˆa�o‰oÑ
 Ñ	,€BØ	
�‰�!—'‘'Ñ	˜AŸG™GÑ	# q§w¡w°¡{Ñ	3€BØ�"‰W�r‰\˜BÑ Ñ"€FÜ€Fˆ1�7‰7�a‰<ÑØ€Mr2   c                 ód  — d|j                   j                  d«      z  }| j                   | j                  dz
  z  }t        j                  dt        j
                  z  «      |j                   z  | j                  z  | j                   z  j                  «       }| j                  j                  «       }| j                  |j                  d«      z  | j                  dz
  z  }| j                  |z  |j                  z
  j                  d«      }||z
  ||z   |z  z   dz
  }t        || j                  dk  <   |S )NrT   r   )
rÎ   rt   r  r4  rï   r5  r²   rR  rÏ   r   )	r{   r|   r7  r�  rŠ   r‹   r”   r•   rÄ   s	            r0   Ú_kl_pareto_normalr„  <  só   € à�Q—W‘W—[‘[ “^Ñ#€JØ—'‘'˜QŸW™W q™[Ñ)€KÜ
�)‰)�AœŸ™‘KÓ
  1§7¡7Ñ
*¨Q¯W©WÑ
4°q·w±wÑ
>×	CÑ	CÓ	E€BØ	
�‰×	Ñ	Ó	€BØ	
�‰�;—?‘? 1Ó%Ñ	%¨¯©°1©Ñ	5€BØ
�'‰'�KÑ
 !§%¡%Ñ
'×	,Ñ	,¨QÓ	/€BØ�"‰W˜˜R™ :Ñ-Ñ-°Ñ1€FÜ€Fˆ1�7‰7�a‰<ÑØ€Mr2   c                 ó,   — t        | j                  «      S r+   rL  rØ   s     r0   Ú_kl_poisson_infinityr†  I  s   € ô ˜!Ÿ&™&Ó!Ð!r2   c                 óÞ  — | j                   | j                  z
  }t        j                  |«      }|j                  dz
  t        | j                   «      t        | j                  «      z
  |z
  z  |z  }|j                  dz
  t        d| j                   z
  «      t        d| j                  z
  «      z
  |z   z  |z  }|j                  j                  «       |j                  j                  «       z   |j                  |j                  z   j                  «       z
  }||z   |z
  |z
  }t        || j                   |j                  j                  kD  | j                  |j                  j                  k  z  <   |S r¯   )r%  r&  rf   r²   rŽ   rn   r�   r�   r   r  r:  r  r€  s           r0   Ú_kl_uniform_betarˆ  O  sI  € à—&‘&˜1Ÿ5™5‘.€KÜ	�‰�;Ó	€Bà	
×	Ñ	˜AÑ	Ü�A—F‘FÓœh q§u¡u›oÑ-°Ñ;ñ	=à
ñ	ð ð 
×	Ñ	˜AÑ	Ü�A˜Ÿ™‘JÓ¤(¨1¨q¯u©u©9Ó"5Ñ5¸ÑCñ	Eà
ñ	ð ð 	
×Ñ×ÑÓ!Ø
×
Ñ
×
!Ñ
!Ó
#ñ	$à×Ñ˜a×.Ñ.Ñ.×
6Ñ
6Ó
8ñ	9ð ð
 �"‰W�r‰\˜BÑ€FÜQT€FˆA�F‰F�Q—Y‘Y×*Ñ*Ñ*¨q¯u©u°q·y±y×7LÑ7LÑ/LÑMÑNØ€Mr2   c           	      ó  — | j                  «        | j                  |j                  z  z
  t        j                  |j
                   «      z
  |j                  «       z
  }t        j                  t        j                  t        j                  | j                  |j                  j                  «      t        j                  | j                  |j                  j                  «      «      t        j                   |«      t"        z  |«      S r+   )r×   r¤   rˆ   rf   r›   r„   r¥   rE  rF  rG  r%  r  r:  rH  r&  r  rI  r   r'  s      r0   Ú _kl_uniform_continuous_bernoullirŠ  g  sÀ   € ð 
�‰‹ˆØ
�&‰&�1—8‘8Ñ
ñ	ä
�+‰+�q—w‘w�hÓ
ñ	 ð ×
Ñ
Ó
!ñ	"ð ô �;‰;Ü�	‰	Ü�H‰H�Q—V‘V˜QŸY™Y×2Ñ2Ó3Ü�H‰H�Q—U‘U˜AŸI™I×1Ñ1Ó2ó	
ô 	�‰˜Ó¤#Ñ%Øóð r2   c                 ó  — |j                   | j                  | j                  z   z  dz  | j                  | j                  z
  |j                   z  j                  «       z
  }t        || j                  |j
                  j                  k  <   |S )NrT   )r±   r%  r&  r²   r   r  r  r'  s      r0   Ú_kl_uniform_exponetialrŒ  y  sf   € à�V‰V�q—v‘v §¡‘~Ñ&¨Ñ*¨q¯v©v¸¿¹©~ÀÇÁÑ.G×-LÑ-LÓ-NÑN€FÜ,/€Fˆ1�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr2   c                 ó  — | j                   | j                  z
  }|j                  «       }|j                  j	                  «       |j                  |j
                  j                  «       z  z
  }d|j                  z
  t        | j                   «      t        | j                  «      z
  |z
  z  |z  }|j
                  | j                   | j                  z   z  dz  }| |z   |z   |z   }t        || j                  |j                  j                  k  <   |S )Nr   rT   )
r%  r&  r²   r©   r�   r±   rn   r   r  r  r€  s           r0   Ú_kl_uniform_gammarŽ  €  sÜ   € à—&‘&˜1Ÿ5™5‘.€KØ	�‰Ó	€BØ	
�‰×	Ñ	Ó	! A§O¡O°a·f±f·j±j³lÑ$BÑ	B€Bà	
ˆQ�_‰_Ñ	Ü�A—F‘FÓœh q§u¡u›oÑ-°Ñ;ñ	=à
ñ	ð ð
 
�‰�1—6‘6˜AŸE™E‘>Ñ	" QÑ	&€BØˆS�2‰X˜‰]˜RÑ€FÜ,/€Fˆ1�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr2   c                 ó‚  — |j                   | j                  | j                  z
  z  }| j                  |j                  z
  |j                   z  }| j                  |j                  z
  |j                   z  }|j	                  «       d||z   z  z   }|t        j                  | «      t        j                  | «      z
  z  }||z
  S )Nræ   )rÎ   r%  r&  rÏ   r²   rf   rÑ   )r{   r|   r�  Úhigh_loc_diffÚlow_loc_diffrŠ   r‹   s          r0   Ú_kl_uniform_gumbelr’  �  s™   € à—'‘'˜QŸV™V a§e¡e™^Ñ,€KØ—V‘V˜aŸe™e‘^ q§w¡wÑ.€MØ—E‘E˜AŸE™E‘M Q§W¡WÑ,€LØ	�‰Ó	˜S M°LÑ$@ÑAÑ	A€BØ	œŸ	™	 = .Ó1´E·I±I¸|¸mÓ4LÑLÑ	M€BØ�‰7€Nr2   c                 ó¨  — | j                   | j                  z
  }t        j                  t        j                  dz  «      |j
                  z  |z  j                  «       }|j                  d«      dz  }| j                   | j                  z   d|j                  z  z
  dz  j                  d«      }|d||z   z  |j
                  j                  d«      z  z   S )NrT   é   ræ   )	r%  r&  r4  rï   r5  rÎ   r²   rt   rÏ   )r{   r|   r�  rŠ   r‹   r”   s         r0   Ú_kl_uniform_normalr•  �  s§   € à—&‘&˜1Ÿ5™5‘.€KÜ
�)‰)”D—G‘G˜a‘KÓ
  1§7¡7Ñ
*¨[Ñ
8×	=Ñ	=Ó	?€BØ
×	Ñ	˜1Ó	 Ñ	"€BØ�6‰6�A—E‘E‰>˜A §¡™IÑ%¨Ñ
*×	/Ñ	/°Ó	2€BØ��r˜B‘w‘ !§'¡'§+¡+¨a£.Ñ0Ñ0Ð0r2   c                 óž  — | j                   | j                  z
  }|j                  |j                  j	                  |j                  «      z  |z  j                  «       }t        | j                   «      t        | j                  «      z
  |z
  |z  }||j                  dz   z  |z
  }t        || j                  |j                  j                  k  <   |S r¯   )
r%  r&  r  rÎ   rt   r²   rn   r   r  r  )r{   r|   Úsupport_uniformrŠ   r‹   rÄ   s         r0   Ú_kl_uniform_paretor˜  ¦  sž   € à—f‘f˜qŸu™u‘n€OØ
�'‰'�A—G‘G—K‘K §¡Ó(Ñ
(¨OÑ
<×	AÑ	AÓ	C€BÜ
�1—6‘6Ó
œX a§e¡e›_Ñ
,¨Ñ
>À/Ñ	Q€BØ�1—7‘7˜Q‘;Ñ "Ñ$€FÜ,/€Fˆ1�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr2   c                 ó¬   — | j                   |j                   k7  rt        ‚t        | j                  |j                  «      }t	        || j                   «      S r+   )Úreinterpreted_batch_ndimsr€   r(   rÜ   r#   r'  s      r0   Ú_kl_independent_independentr›  °  sC   € à×"Ñ" a×&AÑ&AÒAÜ!Ð!Ü˜1Ÿ;™;¨¯©Ó4€FÜ˜& !×"=Ñ"=Ó>Ð>r2   c                 ó  — | j                   |j                   z   j                  d«      | j                  |j                  z
  j                  d«      z   j                  «       }d| j                   z  |j                   z  j                  «       }||z
  S )NrT   é   r  r‰   s       r0   Ú_kl_cauchy_cauchyrž  ¸  sn   € ð �7‰7�Q—W‘WÑ×
!Ñ
! !Ó
$¨¯©°·±©×':Ñ':¸1Ó'=Ñ
=×	BÑ	BÓ	D€BØ
ˆa�g‰g‰+˜Ÿ™Ñ
×	$Ñ	$Ó	&€BØ�‰7€Nr2   c                  ó  — dg} t        t        d„ ¬«      D ]1  \  }}| j                  d|j                  › d|j                  › d�«       Œ3 dj	                  | «      }t
        j                  rt
        xj                  |z  c_        yy)	zHAppends a list of implemented KL functions to the doc for kl_divergence.zLKL divergence is currently implemented for the following distribution pairs:c                 ó>   — | d   j                   | d   j                   fS rƒ   )rF   )Úp_qs    r0   Ú<lambda>z_add_kl_info.<locals>.<lambda>Æ  s   €  s¨1¡v§¡¸¸A¹¿¹Ñ&Hr2   )Úkeyz* :class:`~torch.distributions.z#` and :class:`~torch.distributions.Ú`z
	N)Úsortedr%   ÚappendrF   Újoinr(   Ú__doc__)Úrowsr{   r|   Úkl_infos       r0   Ú_add_kl_infor«  À  s‡   € ð 	Wð€Dô ÜÑH÷‰ˆˆ1ð 	�‰Ø-¨a¯j©j¨\Ð9\Ð]^×]gÑ]gÐ\hÐhiÐjõ	
ðð �k‰k˜$Ó€GÜ×ÒÜ×Ò Ñ(Öð r2   )Žr4  rX   Úcollections.abcr   Ú	functoolsr   rf   r   r   Ú	bernoullir   Úbetar	   Úbinomialr
   Úcategoricalr   Úcauchyr   Úcontinuous_bernoullir   Ú	dirichletr   Údistributionr   Ú
exp_familyr   Úexponentialr   Úgammar   Ú	geometricr   Úgumbelr   Úhalf_normalr   Úindependentr   Úlaplacer   Úlowrank_multivariate_normalr   r   r   Úmultivariate_normalr   r   Únormalr   Úone_hot_categoricalr   Úparetor   Úpoissonr    Útransformed_distributionr!   Úuniformr"   Úutilsr#   r$   rÐ   r%   ÚdictÚtupler4   Ú__annotations__r&   Ú__all__r'   r8   rd   rj   rn   rz   r(   rŒ   r—   rž   r¢   r§   r­   r´   rÉ   rÌ   rÕ   rÙ   rÝ   râ   rú   r  r  r  rÛ   r  r  r   r#  r(  r*  r,  r.  r0  r2  r8  r;  r=  r?  rC  rJ  rM  rP  rU  rX  rZ  r\  r_  rb  re  rj  rl  ro  rq  ru  rz  r|  r~  r‚  r„  r†  rˆ  rŠ  rŒ  rŽ  r’  r•  r˜  r›  rž  r«  rJ   r2   r0   Ú<module>rË     sQ	  ðä Û Ý $Ý $ã ß å  Ý Ý Ý $Ý Ý 5Ý  Ý &Ý )Ý $Ý Ý  Ý Ý #Ý $Ý ÷ñ ÷
 HÝ Ý 2Ý Ý Ý =Ý ß Að
 ð ˆdØ	ˆ$�ˆ*Ñ�xÐñó ð
 ð ˆTØ	ˆ$�ˆ*Ñ�xÐñó ð ˜/Ð
*€ò(ðV ÷ð ó ðò$ò8(ò/ò/ð�\ð  lð °vó ñL ˆY˜	Ó"ñó #ðñ ˆT�4Óñ"ó ð"ñ ˆX�xÓ ñó !ðñ ˆ[˜+Ó&ñó 'ðñ Ð Ð"5Ó6ñó 7ðñ ˆY˜	Ó"ñ'ó #ð'ñ ˆ[˜+Ó&ñó 'ðñ ÐÐ 1Ó2ñó 3ðñ" ˆU�EÓñó ðñ ˆV�VÓñ-ó ð-ñ ˆY˜	Ó"ñEó #ðEñ ˆZ˜Ó$ñ7ó %ð7ñ ˆW�gÓñó ðñ Ð&Ð(AÓBñ<ó Cð<ñB ÐÐ!:Ó;ñ<ó <ð<ñ: Ð&Ð(:Ó;ñ!<ó <ð!<ñH ÐÐ!3Ó4ñ2ó 5ð2ñ0 ˆV�VÓñ8ó ð8ñ ÐÐ 1Ó2ñGó 3ðGñ ˆV�VÓñó ðñ ˆW�gÓñFó ðFñ Ð$Ð&=Ó>ñ3ó ?ð3ñ ˆW�gÓñó ðñ ˆY˜Ó ñ<ó !ð<ñ ˆTÐ&Ó'ñó (ðñ ˆT�6Óñ,ó ð,ñ ˆT�;Óñó  ðñ ˆT�5Óñó ðñ ˆT�6Óñ1ó ð1ñ ˆT�7Óñó ðñ Ð  &Ó)ñ#ó *ð#ñ Ð  +Ó.ñ>ó /ð>ñ Ð  &Ó)ñó *ðñ Ð  'Ó*ñ	ó +ð	ñ ˆ[˜$ÓÙˆ[Ð-Ó.Ùˆ[˜&Ó!Ùˆ[˜'Ó"ñ"ó #ó "ó /ó  ð"ñ ˆ[˜%Ó ñ	ó !ð	ñ ˆ[˜&Ó!ñ*ó "ð*ñ ˆ[˜&Ó!ñ0ó "ð0ñ ˆU�DÓÙˆUÐ'Ó(ÙˆU�FÓÙˆU�GÓñ+ó ó ó )ó ð+ñ ˆU�KÓ ñKó !ðKñ ˆU�FÓñó ðñ( ˆU�FÓñó ðñ$ ˆV�TÓÙˆVÐ(Ó)ÙˆV�[Ó!ÙˆV�UÓÙˆV�VÓÙˆV�WÓñ!ó ó ó ó "ó *ó ð!ñ ˆV�VÓñ.ó ð.ñ ˆW�dÓÙˆWÐ)Ó*ÙˆW�kÓ"ÙˆW�eÓÙˆW�fÓÙˆW�gÓñ!ó ó ó ó #ó +ó ð!ñ ˆW�fÓñGó ðGñ ˆV�TÓÙˆVÐ(Ó)ÙˆV�[Ó!ÙˆV�UÓÙˆV�VÓÙˆV�WÓñ!ó ó ó ó "ó *ó ð!ñ ˆV�VÓñ?ó ð?ñ ˆV�WÓñ	Mó ð	Mñ ˆV�TÓÙˆVÐ(Ó)ÙˆV�WÓñ#ó ó *ó ð#ñ ˆV�[Ó!ñó "ðñ ˆV�UÓñó ðñ ˆV�VÓñ	ó ð	ñ ˆW�iÓ ÙˆW�hÓñ"ó  ó !ð"ñ ˆW�dÓñó ðñ. ˆWÐ)Ó*ñó +ðñ" ˆW�kÓ"ñó #ðñ ˆW�eÓñó ðñ ˆW�fÓñó ðñ ˆW�fÓñ1ó ð1ñ ˆW�fÓñó ðñ ˆ[˜+Ó&ñ?ó 'ð?ñ ˆV�VÓñó ðó)r2   