Ë
    f^(hù{  ã            	       óÆ  — 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)Útotal_ordering)ÚCallable)Ú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    €€úT/var/www/skyplay_api_hub/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   sC   € Ü˜Ÿ
™
 E§K¡KÓ0ò 	‰DˆAˆqÜ˜a Ô#ÙØ˜ŠzØØð	ð
 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rOt        j                  d| j                  › d|j                  › d|j                  › d|j                  › d�	t        «       |	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¨œ œÑ5ù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£;Ô/ÑAùs   ‚zAmbiguous kl_divergence(z, z). Please register_kl(ú))	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_klrb   q   sû   € ô !-÷áˆG�WÜ�f˜gÔ&¬:°f¸gÔ+Fð 
�'Òð€Gñ ñ
 ÜÐô Ñ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_likerh   Œ   s   € ô �?‰?˜6¤3Ó'Ð'r2   c                 óB   — t         j                  j                  | | «      S )z2
    Utility function for calculating x log x
    )rd   ÚspecialÚxlogyrf   s    r0   Ú_x_log_xrl   “   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
    éÿÿÿÿéþÿÿÿé   N)ÚsizeÚreshapeÚpowÚsumÚshape)ÚbmatÚnrO   Ú
flat_traces       r0   Ú_batch_trace_XXTry   š   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   ÚKeyErrorrb   rT   ÚNotImplementedErrorÚ	__class__rF   )rz   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   )Úprobsrd   ÚnnÚ
functionalÚsoftplusÚlogitsr   ©rz   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Úlgammard   Údigamma)	rz   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‡   Úlog1prh   )rz   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   rn   )rƒ   r‡   r   Ú	expand_asrt   )rz   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_normrd   rš   rƒ   ©rz   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 )Nrn   )Úconcentrationrt   r�   r�   Ú	unsqueeze)rz   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)rz   r{   Ú
rate_ratior‰   s       r0   Ú_kl_exponential_exponentialr³     s1   € à—‘˜!Ÿ&™&‘€JØ
�.‰.Ó
Ð	€BØ�
‰?˜QÑÐr2   c                 óø  — t        | «      t        |«      k(  s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_normalizerrd   ÚautogradÚgradrt   rB   r#   ÚlenÚevent_shape)rz   r{   ÚnpÚ	p_nparamsÚ	q_nparamsÚ	lg_normalÚ	gradientsÚresultÚpnpÚqnpÚgÚterms               r0   Ú_kl_expfamily_expfamilyrÈ     sö   € ä�‹7”d˜1“gÒÜ!ðCó
ð 	
ð 9:×8IÑ8IÖJ°"�—‘“×+Ñ+Õ-ÐJ€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   ±%C7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±   rd   r�   r�   ©rz   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_gammard   Úexpr�   )rz   r{   Úct1Úct2Úct3r‰   rŠ   r“   s           r0   Ú_kl_gumbel_gumbelrÔ   4  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+   )Úentropyrd   rš   rƒ   r‡   ©rz   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Ü   D  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±   rd   rÐ   )rz   r{   Úscale_ratioÚloc_abs_diffr‰   rŠ   r“   s          r0   Ú_kl_laplace_laplacerá   I  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 computedro   F©Úupperrn   ç      à?r   )r½   Ú
ValueErrorr   Ú_unbroadcasted_cov_factorÚ_unbroadcasted_cov_diagÚ_capacitance_trilr   rÎ   ÚmTr©   rd   ÚlinalgÚsolve_triangularrt   ry   ÚrsqrtÚsqrtÚmatmul)rz   r{   Úterm1Úterm3Ú	qWt_qDinvÚAÚterm21Úterm22Úterm23Úterm24Úterm2s              r0   Ú7_kl_lowrankmultivariatenormal_lowrankmultivariatenormalrù   T  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 computedrp   ro   rn   ©Údim1Údim2Frã   rå   r   )r½   ræ   r   rç   rè   ré   Ú_unbroadcasted_scale_trilÚdiagonalr±   rt   r   rÎ   rê   r©   rd   rë   rì   ry   rí   rï   )	rz   r{   rð   rñ   rò   ró   rô   rõ   rø   s	            r0   Ú0_kl_multivariatenormal_lowrankmultivariatenormalr  v  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û   rp   ro   rn   rü   r   Frã   rå   )r½   ræ   rÿ   r   r±   rt   r   rç   rè   ré   r   rÎ   rd   Ú_CÚ_infer_sizeru   ÚexpandÚ
cov_factorrq   Ú
diag_embedrî   ry   rë   rì   )rz   r{   rð   rñ   Úcombined_batch_shaperw   Ú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 computedro   rn   rü   r   Frã   rå   )r½   ræ   rÿ   r   r±   rt   rd   r  r  ru   r  ry   rë   rì   r   rÎ   )	rz   r{   Ú
half_term1r  rw   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 ©Nrp   rå   r   ©rÍ   rs   rÎ   r±   )rz   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)rz   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   ©rz   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‡   rd   rš   rƒ   r¤   r×   s     r0   Ú_kl_beta_continuous_bernoullir+    sS   € ð 
�‰‹ˆØ
�&‰&�1—8‘8Ñ
ñ	ä
�+‰+�q—w‘w�hÓ
ñ	 ð ×
Ñ
Ó
!ñ	"ðr2   c                 ó,   — t        | j                  «      S r+   )rh   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_exponentialr/    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_gammar1    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Í   rs   rÖ   ÚmathÚpir±   rÎ   )	rz   r{   ÚE_betaÚ
var_normalr‰   rŠ   r“   r”   r•   s	            r0   Ú_kl_beta_normalr7  +  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+   )rh   rƒ   r×   s     r0   Ú!_kl_continuous_bernoulli_infinityr<  D  s   € ä˜!Ÿ'™'Ó"Ð"r2   c                 ó˜   — | j                  «        t        j                  |j                  «      z
  |j                  | j                  z  z   S r+   )rÖ   rd   r±   r°   r£   r×   s     r0   Ú$_kl_continuous_bernoulli_exponentialr>  I  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Ö   r3  r±   r4  rd   ÚsquarerÎ   rÍ   Úvariancer£   r¥   s        r0   Ú_kl_continuous_bernoulli_normalrB  R  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±   rd   ÚwhereÚmaxÚger  r  Úler9  Ú	ones_liker   r&  s      r0   Ú _kl_continuous_bernoulli_uniformrI  ^  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+   ©rh   r°   r×   s     r0   Ú_kl_exponential_infinityrL  k  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¨   rd   r±   r�   rÏ   )rz   r{   Úratior‰   s       r0   Ú_kl_exponential_gammarO  s  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±   rd   rÐ   Ú
reciprocal)rz   r{   Úscale_rate_prodÚloc_scale_ratior‰   rŠ   r“   s          r0   Ú_kl_exponential_gumbelrT  €  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Í   rs   r°   rd   r±   r3  r4  rQ  rÎ   )rz   r{   r6  Úrate_sqrr‰   rŠ   r“   r”   s           r0   Ú_kl_exponential_normalrW  �  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+   )rh   r¨   r×   s     r0   Ú_kl_gamma_infinityrY  ˜  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±   rd   rÐ   rQ  rs   )rz   r{   Úbeta_scale_prodrS  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Í   rs   r°   rd   r±   r3  r4  r¨   r�   rÎ   r�   )rz   r{   r6  Úbeta_sqrr‰   rŠ   r“   r”   s           r0   Ú_kl_gamma_normalra  º  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+   ©rh   rÎ   r×   s     r0   Ú_kl_gumbel_infinityrd  Í  ó   € ô ˜!Ÿ%™%Ó Ð 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 )Nrp   rå   é   r   )rÍ   r3  rî   r4  r±   rs   rÎ   rÏ   )rz   r{   Úparam_ratior‰   rŠ   r“   s         r0   Ú_kl_gumbel_normalri  Ú  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+   rc  r×   s     r0   Ú_kl_laplace_infinityrk  ã  re  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Í   rs   rd   r±   r3  r4  rÎ   )rz   r{   r6  Úscale_sqr_var_ratior‰   rŠ   r“   r”   s           r0   Ú_kl_laplace_normalrn  í  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+   rc  r×   s     r0   Ú_kl_normal_infinityrp  ø  re  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Í   rs   r±   rd   rÐ   r3  r4  )rz   r{   Úmean_scale_ratioÚvar_scale_sqr_ratiorS  r‰   rŠ   r“   s           r0   Ú_kl_normal_gumbelrt    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 )Nrp   g      à¿rå   r   )
rÎ   rÍ   rd   r±   r3  rî   r4  rÐ   rs   Úerf)rz   r{   Úloc_diffrß   Úloc_diff_scale_ratior‰   rŠ   r“   s           r0   Ú_kl_normal_laplacery    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+   )rh   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±   rQ  r   )rz   r{   rR  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  rQ  r¨   r�   r°   r   ©rz   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 )Nrp   r   )
rÍ   rs   r  r3  rî   r4  r±   rQ  rÎ   r   )	rz   r{   r6  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+   rK  r×   s     r0   Ú_kl_poisson_infinityr…  H  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%  rd   r±   r�   rl   rŽ   r�   r   r  r9  r  r  s           r0   Ú_kl_uniform_betar‡  N  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‡   rd   rš   rƒ   r¤   rD  rE  rF  r$  r  r9  rG  r%  r  rH  r   r&  s      r0   Ú _kl_uniform_continuous_bernoullir‰  f  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 )Nrp   )r°   r$  r%  r±   r   r  r  r&  s      r0   Ú_kl_uniform_exponetialr‹  x  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   rp   )
r$  r%  r±   r¨   r�   r°   rl   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±   rd   rÐ   )rz   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 )Nrp   é   rå   )	r$  r%  r3  rî   r4  rÍ   r±   rs   rÎ   )rz   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Í   rs   r±   rl   r   r  r  )rz   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 )Nrp   é   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¹¿¹Ð&H€ r2   )Úkeyz* :class:`~torch.distributions.z#` and :class:`~torch.distributions.ú`z
	N)Úsortedr%   ÚappendrF   Újoinr(   Ú__doc__)Úrowsrz   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   )Žr3  rV   Ú	functoolsr   Útypingr   rd   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   rb   rh   rl   ry   r(   r‹   r–   r�   r¡   r¦   r¬   r³   rÈ   rË   rÔ   rØ   rÜ   rá   rù   r  r  r  rÚ   r  r  r  r"  r'  r)  r+  r-  r/  r1  r7  r:  r<  r>  rB  rI  rL  rO  rT  rW  rY  r[  r^  ra  rd  ri  rk  rn  rp  rt  ry  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 ÷ð ó ðò$ò6(ò/ò/ð�\ð  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   