ó
    Eñi|  ã            	       óÈ  • % S SK r S SKrS SKJr  S SKJr  S SKrS SKJrJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,  SSK-J.r.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;  SSK<J=r=J>r?  0 r@\A\B\C\C4   \4   \DS'   0 rE\A\B\C\C4   \4   \DS '   S!S"/rFS# rG\ " S$ S%5      5       rHS& rIS' rJS( rKS) rLS*\S+\S,\4S- jrM\G" \
\
5      S. 5       rN\G" \\5      S/ 5       rO\G" \\5      S0 5       rP\G" \\5      S1 5       rQ\G" \\5      S2 5       rR\G" \\5      S3 5       rS\G" \\5      S4 5       rT\G" \\5      S5 5       rU\G" \\5      S6 5       rV\G" \"\"5      S7 5       rW\G" \ \ 5      S8 5       rX\G" \$\$5      S9 5       rY\G" \(\(5      S: 5       rZ\G" \,\,5      S; 5       r[\G" \/\,5      S< 5       r\\G" \,\/5      S= 5       r]\G" \/\/5      S> 5       r^\G" \1\15      S? 5       r_\G" \3\35      S@ 5       r`\G" \5\55      SA 5       ra\G" \7\75      SB 5       rb\G" \9\95      SC 5       rc\G" \;\;5      SD 5       rd\G" \
\75      SE 5       re\G" \\5      SF 5       rf\G" \\55      SG 5       rg\G" \\5      SH 5       rh\G" \\5      SI 5       ri\G" \\15      SJ 5       rj\G" \\;5      SK 5       rk\G" \\55      SL 5       rl\G" \\5      SM 5       rm\G" \\15      SN 5       rn\G" \\;5      SO 5       ro\G" \\5      \G" \\5      \G" \\55      \G" \\;5      SP 5       5       5       5       rp\G" \\5      SQ 5       rq\G" \\"5      SR 5       rr\G" \\15      SS 5       rs\G" \\5      \G" \\5      \G" \\55      \G" \\;5      ST 5       5       5       5       rt\G" \\5      SU 5       ru\G" \\"5      SV 5       rv\G" \\15      SW 5       rw\G" \"\5      \G" \"\5      \G" \"\5      \G" \"\5      \G" \"\55      \G" \"\;5      SX 5       5       5       5       5       5       rx\G" \"\15      SY 5       ry\G" \(\5      \G" \(\5      \G" \(\5      \G" \(\5      \G" \(\55      \G" \(\;5      SZ 5       5       5       5       5       5       rz\G" \(\15      S[ 5       r{\G" \1\5      \G" \1\5      \G" \1\5      \G" \1\5      \G" \1\55      \G" \1\;5      S\ 5       5       5       5       5       5       r|\G" \1\"5      S] 5       r}\G" \1\(5      S^ 5       r~\G" \5\5      \G" \5\5      \G" \5\;5      S_ 5       5       5       r\G" \5\5      S` 5       r€\G" \5\5      Sa 5       r�\G" \5\15      Sb 5       r‚\G" \7\
5      \G" \7\5      Sc 5       5       rƒ\G" \;\5      Sd 5       r„\G" \;\5      Se 5       r…\G" \;\5      Sf 5       r†\G" \;\5      Sg 5       r‡\G" \;\"5      Sh 5       rˆ\G" \;\15      Si 5       r‰\G" \;\55      Sj 5       rŠ\G" \&\&5      Sk 5       r‹\G" \\5      Sl 5       rŒSm r�g)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 [        5      (       d#  [        T [        5      (       a  [	        ST  35      e[        T[        5      (       d#  [        T[        5      (       a  [	        ST 35      eU U4S jnU$ )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   >• U [         TT4'   [        R                  5         U $ ©N)r%   r&   Úclear)ÚfunÚtype_pÚtype_qs    €€ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributions/kl.pyÚ	decoratorÚregister_kl.<locals>.decoratorV   s"   ø€ Ø'*Œ�V˜V�^Ñ$Ü×ÑÔØˆ
ó    )Ú
isinstanceÚtypeÚ
issubclassr   Ú	TypeError)r.   r/   r1   s   `` r0   r'   r'   3   st   ù€ ô4 �fœd×#Ñ#¬
°6¼<×(HÑ(HÜØDÀVÀHÐMó
ð 	
ô �fœd×#Ñ#¬
°6¼<×(HÑ(HÜØDÀVÀHÐMó
ð 	
öð
 Ðr3   c                   ó,   • \ rS rSrS/rS rS rS rSrg)Ú_Matché^   Útypesc                 ó   • Xl         g r+   ©r;   )Úselfr;   s     r0   Ú__init__Ú_Match.__init__b   s   € Ø�
r3   c                 ó4   • U R                   UR                   :H  $ r+   r=   )r>   Úothers     r0   Ú__eq__Ú_Match.__eq__e   s   € Ø�z‰z˜UŸ[™[Ñ(Ð(r3   c                 ó†   • [        U R                  UR                  5       H  u  p#[        X#5      (       d    gX#Ld  M    g   g)NFT)Úzipr;   r6   )r>   rB   ÚxÚys       r0   Ú__le__Ú_Match.__le__h   s;   € Ü˜Ÿ
™
 E§K¡KÖ0‰DˆAÜ˜a×#Ñ#ÙØŒzØØñ 1ð
 r3   r=   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	__slots__r?   rC   rI   Ú__static_attributes__© r3   r0   r9   r9   ^   s   † à�	€Iòò)õr3   r9   c                 óð  • [          VVs/ s H,  u  p#[        X5      (       d  M  [        X5      (       d  M)  X#4PM.     nnnU(       d  [        $ [        S U 5       5      R                  u  pV[        S U 5       5      R                  u  px[         XV4   n	[         X‡4   n
XšLaO  [
        R                  " SU R                   SUR                   SUR                   SUR                   S3	[        SS9  U	$ s  snnf )	zH
Find the most specific approximate match, assuming single inheritance.
c              3   ó2   #   • U  H  n[        U6 v •  M     g 7fr+   )r9   ©Ú.0Úms     r0   Ú	<genexpr>Ú_dispatch_kl.<locals>.<genexpr>   s   é € Ð5ªW¨œ �ªWùs   ‚c              3   óD   #   • U  H  n[        [        U5      6 v •  M     g 7fr+   )r9   ÚreversedrT   s     r0   rW   rX   €   s   é € ÐAº°Aœ6¤8¨A£;Õ/ºùs   ‚ zAmbiguous kl_divergence(z, z). Please register_kl(Ú)é   )Ú
stacklevel)	r%   r6   ÚNotImplementedÚminr;   ÚwarningsÚwarnrK   ÚRuntimeWarning)r.   r/   Úsuper_pÚsuper_qÚmatchesÚleft_pÚleft_qÚright_qÚright_pÚleft_funÚ	right_funs              r0   Ú_dispatch_klrl   q   sø   € õ !-ôâ ,ÑˆGÜ�f×&ó 	ä+5°f×+Fó 	ˆÓÙ ,ð ñ ö
 ÜÐô Ñ5©WÓ5Ó5×;Ñ;�N€FÜÑA¹ÓAÓA×GÑGÑ€GÜ˜F˜NÑ+€HÜ˜WÐ-Ñ.€IØÒ Ü�ŠØ& v§¡Ð&7°r¸&¿/¹/Ð9Jð K"Ø"(§/¡/Ð!2°"°W×5EÑ5EÐ4FÀaðIäØò		
ð €Oùó+s   ŠC2¤C2¶C2c                 ó8   • [         R                  " U [        5      $ )zA
Helper function for obtaining infinite KL Divergence throughout
)ÚtorchÚ	full_liker   ©Útensors    r0   Ú_infinite_likerr   �   s   € ô �?Š?˜6¤3Ó'Ð'r3   c                 ó@   • [         R                  R                  X 5      $ )z*
Utility function for calculating x log x
)rn   ÚspecialÚxlogyrp   s    r0   Ú_x_log_xrv   ”   s   € ô �=‰=×Ñ˜vÓ.Ð.r3   c                 óæ   • U R                  S5      nU R                  S5      nU R                  SX!-  5      R                  S5      R                  S5      nUR                  U R                  SS 5      $ )zh
Utility function for calculating the trace of XX^{T} with X having arbitrary trailing batch dimensions
éÿÿÿÿéþÿÿÿr\   N)ÚsizeÚreshapeÚpowÚsumÚshape)ÚbmatÚnrV   Ú
flat_traces       r0   Ú_batch_trace_XXTr‚   ›   sa   € ð 	�	‰	�"‹€AØ�	‰	�"‹€AØ—‘˜b !¡%Ó(×,Ñ,¨QÓ/×3Ñ3°BÓ7€JØ×Ñ˜dŸj™j¨¨"˜oÓ.Ð.r3   ÚpÚqÚreturnc                 óh  •  [         [        U 5      [        U5      4   nU[        L a9  [        SU R                  R                   SUR                  R                   35      eU" X5      $ ! [         a>    [        [        U 5      [        U5      5      nU[         [        U 5      [        U5      4'    N‘f = f)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&   r5   ÚKeyErrorrl   r^   ÚNotImplementedErrorÚ	__class__rK   )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B1Â0B1c                 ó|  • U R                   [        R                  R                  R	                  UR
                  * 5      [        R                  R                  R	                  U R
                  * 5      -
  -  n[        X!R                   S:H  '   SX R                   S:H  '   SU R                   -
  [        R                  R                  R	                  UR
                  5      [        R                  R                  R	                  U R
                  5      -
  -  n[        X1R                   S:H  '   SX0R                   S:H  '   X#-   $ ©Nr   r   )Úprobsrn   ÚnnÚ
functionalÚsoftplusÚlogitsr   ©rƒ   r„   Út1Út2s       r0   Ú_kl_bernoulli_bernoullir”   Ë   sè   € à	
�‰Ü�‰×Ñ×$Ñ$ a§h¡h YÓ/Ü
�(‰(×
Ñ
×
&Ñ
&¨¯© yÓ
1ñ	2ñ
€Bô €B‡w�w�!�|ÑØ€B‡w�w�!�|ÑØ
ˆa�g‰g‰+Ü�‰×Ñ×$Ñ$ Q§X¡XÓ.´·±×1DÑ1D×1MÑ1MÈaÏhÉhÓ1WÑWñ
€Bô €B‡w�w�!�|ÑØ€B‡w�w�!�|ÑØ‰7€Nr3   c                 ó¶  • U R                   U R                  -   nUR                   UR                  -   nUR                   R                  5       UR                  R                  5       -   UR                  5       -   nU R                   R                  5       U R                  R                  5       -   UR                  5       -   nU R                   UR                   -
  [        R                  " U R                   5      -  nU R                  UR                  -
  [        R                  " U R                  5      -  nX2-
  [        R                  " U5      -  nXE-
  U-   U-   U-   $ r+   )Úconcentration1Úconcentration0Úlgammarn   Ú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Ñ!Ð!r3   c                 óš  • U R                   UR                   :  R                  5       (       a  [        S5      eU R                   U R                  U R                  UR                  -
  -  U R                  * R                  5       -   UR                  * R                  5       -
  -  nU R                   UR                   :„  n[        X#   5      X#'   U$ )NzKKL between Binomials where q.total_count > p.total_count is not implemented)Útotal_countÚanyrˆ   rŒ   r�   Úlog1prr   )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Ü! "¡,Ó/€B�LØ€Ir3   c                 óø   • U R                   U R                  UR                  -
  -  n[        X!R                   S:H  R                  U5      '   SX R                   S:H  R                  U5      '   UR	                  S5      $ )Nr   rx   )rŒ   r�   r   Ú	expand_asr}   )rƒ   r„   Úts      r0   Ú_kl_categorical_categoricalrª   ÷   sa   € à	�‰�1—8‘8˜aŸh™hÑ&Ñ'€AÜ%(€A‡w�w�!�|×Ñ˜qÓ!Ñ"Ø%&€A‡w�w�!�|×Ñ˜qÓ!Ñ"Ø�5‰5�‹9Ðr3   c                 ó&  • U R                   U R                  UR                  -
  -  nU R                  5       [        R                  " U R
                  * 5      -   nUR                  5       * [        R                  " UR
                  * 5      -
  nX#-   U-   $ r+   )Úmeanr�   Ú_cont_bern_log_normrn   r£   rŒ   ©rƒ   r„   r’   r“   rœ   s        r0   Ú-_kl_continuous_bernoulli_continuous_bernoullir¯   ÿ   sp   € à	
�‰�1—8‘8˜aŸh™hÑ&Ñ	'€BØ	
×	Ñ	Ó	 ¤5§;¢;°·±¨xÓ#8Ñ	8€BØ
×
Ñ
Ó
!Ð	!¤E§K¢K°·±°Ó$9Ñ	9€BØ‰7�R‰<Ðr3   c                 ó  • U R                   R                  S5      nUR                   R                  S5      nUR                  5       UR                  5       -
  nU R                   R                  5       UR                   R                  5       -
  R                  S5      nU R                   UR                   -
  nU R                   R                  5       UR                  5       R	                  S5      -
  nXE-
  Xg-  R                  S5      -   $ )Nrx   )Úconcentrationr}   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‘g—]‘] 2Ó&Ñ&Ð&r3   c                 ód   • UR                   U R                   -  nUR                  5       * nX2-   S-
  $ ©Nr   ©ÚrateÚlog)rƒ   r„   Ú
rate_ratior’   s       r0   Ú_kl_exponential_exponentialr¼     s/   € à—‘˜!Ÿ&™&‘€JØ
�.‰.Ó
Ð	€BØ‰?˜QÑÐr3   c                 óô  • [        U 5      [        U5      La  [        S5      eU R                   Vs/ s H   o"R                  5       R	                  5       PM"     nnUR                  nU R
                  " U6 n[        R                  R                  UR                  5       USS9nUR
                  " U6 U-
  n[        X4U5       H/  u  p‰n
X˜-
  U
-  nU[        U[        UR                  5      5      -  nM1     U$ s  snf )Nz‡The cross KL-divergence between different exponential families cannot                             be computed using Bregman divergencesT)Úcreate_graph)r5   rˆ   Ú_natural_paramsÚdetachÚrequires_grad_Ú_log_normalizerrn   ÚautogradÚgradr}   rF   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Ø×Ò 	Ð*¨YÑ6€FÜ˜9°Ö;‰ˆ�!Ø‘	˜Q‰ˆØ”. ¤s¨1¯=©=Ó'9Ó:Ñ:Šñ <ð €Mùò Ks   ±'C5c                 óÚ  • UR                   U R                  UR                  -  R                  5       -  n[        R                  " UR                   5      [        R                  " U R                   5      -
  nU R                   UR                   -
  [        R
                  " U R                   5      -  nUR                  U R                  -
  U R                   U R                  -  -  nX#-   U-   U-   $ r+   )r±   r¹   rº   rn   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‰<˜"ÑÐr3   c                 óT  • U R                   UR                   -  nUR                  UR                   -  nU R                  UR                   -  nUR                  5       * U-
  U-   nU[        -  n[        R
                  " USU-   R                  5       -   U-
  5      nXV-   U-   S[        -   -
  $ r·   )ÚscaleÚlocrº   Ú_euler_gammarn   Ú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œ|Ñ+Ñ,Ð,r3   c                 óœ   • U R                  5       * [        R                  " UR                  * 5      U R                  -  -
  UR                  -
  $ r+   )Úentropyrn   r£   rŒ   r�   ©rƒ   r„   s     r0   Ú_kl_geometric_geometricrá   @  s6   € à�I‰I‹Kˆ<œ%Ÿ+š+ q§w¡w hÓ/°!·'±'Ñ9Ñ9¸A¿H¹HÑDÐDr3   c                 óB   • [        U R                  UR                  5      $ r+   )Ú_kl_normal_normalÚ	base_distrà   s     r0   Ú_kl_halfnormal_halfnormalrå   E  s   € ä˜QŸ[™[¨!¯+©+Ó6Ð6r3   c                 ó"  • U R                   UR                   -  nU R                  UR                  -
  R                  5       nUR                  5       * nX1R                   -  nU[        R
                  " U* U R                   -  5      -  nXE-   U-   S-
  $ r·   )rÖ   r×   Úabsrº   rn   rÙ   )rƒ   r„   Úscale_ratioÚloc_abs_diffr’   r“   rœ   s          r0   Ú_kl_laplace_laplacerê   J  sz   € ð —'‘'˜AŸG™GÑ#€KØ—E‘E˜AŸE™E‘M×&Ñ&Ó(€LØ
�/‰/Ó
Ð	€BØ	Ÿ™Ñ	€BØ	”u—y’y , °·±Ñ!8Ó9Ñ	9€BØ‰7�R‰<˜!ÑÐr3   c                 óü  • U R                   UR                   :w  a  [        S5      e[        UR                  UR                  UR
                  5      [        U R                  U R                  U R
                  5      -
  n[        UR                  UR                  UR                  U R                  -
  UR
                  5      nUR                  R                  UR                  R                  S5      -  n[        R                  R                  UR
                  USS9nU R                  UR                  -  R                  S5      n[        U R                  UR                  R                  5       R                  S5      -  5      n[        XPR                  R!                  5       R                  S5      -  5      n[        UR#                  U R                  5      5      n	Xg-   U-
  U	-
  n
SX*-   U-   U R                   S   -
  -  $ )NzKL-divergence between two Low Rank Multivariate Normals with                          different event shapes cannot be computedry   F©Úupperrx   ç      à?r   )rÆ   Ú
ValueErrorr   Ú_unbroadcasted_cov_factorÚ_unbroadcasted_cov_diagÚ_capacitance_trilr   r×   ÚmTr²   rn   ÚlinalgÚsolve_triangularr}   r‚   Ú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Ø‰O˜fÑ$ vÑ-€EØ�%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r3   c                 óV  • U R                   UR                   :w  a  [        S5      e[        UR                  UR                  UR
                  5      SU R                  R                  SSS9R                  5       R                  S5      -  -
  n[        UR                  UR                  UR                  U R                  -
  UR
                  5      nUR                  R                  UR                  R                  S5      -  n[        R                  R!                  UR
                  USS9n[#        U R                  UR                  R%                  5       R                  S5      -  5      n[#        UR'                  U R                  5      5      nXg-
  nSX(-   U-   U R                   S	   -
  -  $ )
Nú�KL-divergence between two (Low Rank) Multivariate Normals with                          different event shapes cannot be computedr\   ry   rx   ©Údim1Údim2Frì   rî   r   )rÆ   rï   r   rð   rñ   rò   Ú_unbroadcasted_scale_trilÚdiagonalrº   r}   r   r×   ró   r²   rn   rô   rõ   r‚   rö   rø   )	rƒ   r„   rù   rú   rû   rü   rý   rþ   r  s	            r0   Ú0_kl_multivariatenormal_lowrankmultivariatenormalr
  w  sx  € à‡}�}˜Ÿ™Ó%Üð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Ø‰O€EØ�%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r3   c                 ó4  • U R                   UR                   :w  a  [        S5      eSUR                  R                  SSS9R	                  5       R                  S5      -  [        U R                  U R                  U R                  5      -
  n[        UR                  UR                  U R                  -
  5      n[        R                  R                  UR                  R                  S S U R                  R                  S S 5      nU R                   S   nUR                  R!                  XEU4-   5      nU R                  R!                  XEU R"                  R%                  S5      4-   5      n[        R&                  " U R                  R)                  5       5      R!                  XEU4-   5      n[+        [        R,                  R/                  XgSS95      n	[+        [        R,                  R/                  XhSS95      n
Xš-   nS	X+-   U-   U R                   S   -
  -  $ )
Nr  r\   ry   rx   r  r   Frì   rî   )rÆ   rï   r  r	  rº   r}   r   rð   rñ   rò   r   r×   rn   Ú_CÚ_infer_sizer~   ÚexpandÚ
cov_factorrz   Ú
diag_embedr÷   r‚   rô   rõ   )rƒ   r„   rù   rú   Úcombined_batch_shaper€   Ú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ÐQRÈVÑ6SÓT€LØ×.Ñ.×5Ñ5Ø 1§<¡<×#4Ñ#4°RÓ#8Ð9Ñ9ó€Lô ×!Ò! !×";Ñ";×"@Ñ"@Ó"BÓC×JÑJØ 1˜vÑ%ó€Jô Ü�‰×%Ñ% lÈÐ%ÐNó€Fô Ü�‰×%Ñ% lÀeÐ%ÐLó€Fð ‰O€EØ�%‘- %Ñ'¨!¯-©-¸Ñ*:Ñ:Ñ;Ð;r3   c                 ó"  • U R                   UR                   :w  a  [        S5      eUR                  R                  SSS9R	                  5       R                  S5      U R                  R                  SSS9R	                  5       R                  S5      -
  n[        R                  R                  UR                  R                  S S U R                  R                  S S 5      nU R                   S   nUR                  R                  X4U4-   5      nU R                  R                  X4U4-   5      n[        [        R                  R                  XVSS95      n[        UR                  UR                  U R                  -
  5      nUSXx-   U-
  -  -   $ )	NzvKL-divergence between two Multivariate Normals with                          different event shapes cannot be computedry   rx   r  r   Frì   rî   )rÆ   rï   r  r	  rº   r}   rn   r  r  r~   r  r‚   rô   rõ   r   r×   )	rƒ   r„   Ú
half_term1r  r€   r  Úp_scale_trilr  rú   s	            r0   Ú)_kl_multivariatenormal_multivariatenormalr  º  sx  € ð 	‡}�}˜Ÿ™Ó%Üð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ÐQRÈVÑ6SÓT€LØ×.Ñ.×5Ñ5Ð6JÐQRÈVÑ6SÓT€LÜÜ�‰×%Ñ% lÈÐ%ÐNó€Eô ˜q×:Ñ:¸Q¿U¹UÀQÇUÁU¹]ÓL€EØ˜˜u™}¨qÑ0Ñ1Ñ1Ð1r3   c                 óò   • U R                   UR                   -  R                  S5      nU R                  UR                  -
  UR                   -  R                  S5      nSX#-   S-
  UR                  5       -
  -  $ ©Nr\   rî   r   ©rÖ   r|   r×   rº   )rƒ   r„   Ú	var_ratior’   s       r0   rã   rã   Ó  sa   € à—‘˜1Ÿ7™7Ñ"×'Ñ'¨Ó*€IØ�5‰5�1—5‘5‰=˜AŸG™GÑ
#×	(Ñ	(¨Ó	+€BØ�)‘. 1Ñ$ y§}¡}£Ñ6Ñ7Ð7r3   c                 óB   • [        U R                  UR                  5      $ r+   )rª   Ú_categoricalrà   s     r0   Ú'_kl_onehotcategorical_onehotcategoricalr   Ú  s   € ä& q§~¡~°q·~±~ÓFÐFr3   c                 ó@  • U R                   UR                   -  nUR                  U R                  -  nUR                  UR                  5       -  nUR                  5       * nXE-   U-   S-
  n[        X`R                  R
                  UR                  R
                  :  '   U$ 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�9‰9× Ñ  1§9¡9×#8Ñ#8Ñ8Ñ9Ø€Mr3   c                 óº   • U R                   U R                   R                  5       UR                   R                  5       -
  -  U R                   UR                   -
  -
  $ 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ÐEr3   c                 óÂ   • U R                   UR                   :w  a  [        eU R                  UR                  :w  a  [        e[        U R                  UR                  5      $ r+   )Ú
transformsrˆ   rÆ   r(   rä   rà   s     r0   Ú_kl_transformed_transformedr+  ð  sC   € à‡|�|�q—|‘|Ó#Ü!Ð!Ø‡}�}˜Ÿ™Ó%Ü!Ð!Ü˜Ÿ™ a§k¡kÓ2Ð2r3   c                 óú   • UR                   UR                  -
  U R                   U R                  -
  -  R                  5       n[        X!R                  U R                  :„  UR                   U R                   :  -  '   U$ r+   )ÚhighÚlowrº   r   ©rƒ   r„   rÌ   s      r0   Ú_kl_uniform_uniformr0  ù  sW   € à�v‰v˜Ÿ™‰~ !§&¡&¨1¯5©5¡.Ñ1×6Ñ6Ó8€FÜ25€F�E‰E�A—E‘E‰M˜aŸf™f q§v¡v™oÑ.Ñ/Ø€Mr3   c                 óŽ   • U R                  5       * U R                  UR                  R                  5       -  UR                  -
  -
  $ r+   )rß   rŒ   r¹   rº   rà   s     r0   Ú_kl_bernoulli_poissonr2    s1   € à�I‰I‹Kˆ<˜1Ÿ7™7 Q§V¡V§Z¡Z£\Ñ1°A·F±FÑ:Ñ;Ð;r3   c                 ó¾   • U R                  5       * U R                  UR                  -  -
  [        R                  " UR
                  * 5      -
  UR                  5       -
  $ r+   )rß   r¬   r�   rn   r£   rŒ   r­   rà   s     r0   Ú_kl_beta_continuous_bernoullir4    sS   € ð 
�‰‹ˆØ
�&‰&�1—8‘8Ñ
ñ	ä
�+Š+�q—w‘w�hÓ
ñ	 ð ×
Ñ
Ó
!ñ	"ðr3   c                 ó,   • [        U R                  5      $ r+   )rr   r–   rà   s     r0   Ú_kl_beta_infinityr6    s   € ä˜!×*Ñ*Ó+Ð+r3   c                 óÂ   • U R                  5       * UR                  R                  5       -
  UR                  U R                  U R                  U R                  -   -  -  -   $ r+   )rß   r¹   rº   r–   r—   rà   s     r0   Ú_kl_beta_exponentialr8    sT   € ð 
�‰‹ˆØ
�&‰&�*‰*‹,ñ	à
�&‰&�A×$Ñ$¨×(8Ñ(8¸1×;KÑ;KÑ(KÑLÑ
Mñ	Nðr3   c                 óÆ  • U R                  5       * nUR                  R                  5       UR                  UR                  R	                  5       -  -
  nUR                  S-
  U R
                  R                  5       U R
                  U R                  -   R                  5       -
  -  nUR                  U R
                  -  U R
                  U R                  -   -  nX#-   U-
  U-   $ r·   )rß   r±   r˜   r¹   rº   r–   r™   r—   rÓ   s         r0   Ú_kl_beta_gammar:    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‰<˜"ÑÐr3   c                 óà  • U R                   U R                   U R                  -   -  nUR                  R                  S5      nU R	                  5       * nSUS-  [
        R                  -  R                  5       -  nUSU-
  -  U R                   U R                  -   S-   -  UR                  S5      -   S-  nUR                  U-  nUR                  R                  S5      S-  nXE-   Xg-
  U-   U-  -   $ r  )	r–   r—   rÖ   r|   rß   ÚmathÚpirº   r×   )	rƒ   r„   ÚE_betaÚ
var_normalr’   r“   rœ   r�   rž   s	            r0   Ú_kl_beta_normalr@  ,  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‘g ‘l jÑ0Ñ0Ð0r3   c                 ó  • U R                  5       * UR                  UR                  -
  R                  5       -   n[        X!R                  U R
                  R                  :„  UR                  U R
                  R                  :  -  '   U$ r+   )rß   r-  r.  rº   r   r#  r$  Úupper_boundr/  s      r0   Ú_kl_beta_uniformrC  ;  sa   € à�i‰i‹kˆ\˜QŸV™V a§e¡e™^×0Ñ0Ó2Ñ2€FÜQT€F�E‰E�A—I‘I×)Ñ)Ñ)¨a¯f©f°q·y±y×7LÑ7LÑ.LÑMÑNØ€Mr3   c                 ó,   • [        U R                  5      $ r+   )rr   rŒ   rà   s     r0   Ú!_kl_continuous_bernoulli_infinityrE  E  s   € ä˜!Ÿ'™'Ó"Ð"r3   c                 óš   • U R                  5       * [        R                  " UR                  5      -
  UR                  U R                  -  -   $ r+   )rß   rn   rº   r¹   r¬   rà   s     r0   Ú$_kl_continuous_bernoulli_exponentialrG  J  s3   € à�I‰I‹Kˆ<œ%Ÿ)š) A§F¡FÓ+Ñ+¨a¯f©f°q·v±v©oÑ=Ð=r3   c                 ó   • U R                  5       * nS[        R                  " S[        R                  -  5      [        R
                  " UR                  UR                  -  5      -   -  [        R                  " UR                  5      -   nU R                  [        R
                  " U R                  5      -   SUR                  -  U R                  -  -
  S[        R
                  " UR                  5      -  -  nX#-   U-   $ )Nrî   g       @)
rß   r<  rº   r=  rn   Úsquarer×   rÖ   Úvariancer¬   r®   s        r0   Ú_kl_continuous_bernoulli_normalrK  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‰<Ðr3   c           	      óÐ  • U R                  5       * UR                  UR                  -
  R                  5       -   n[        R
                  " [        R                  " [        R                  " UR                  U R                  R                  5      [        R                  " UR                  U R                  R                  5      5      [        R                  " U5      [        -  U5      $ r+   )rß   r-  r.  rº   rn   ÚwhereÚmaxÚger#  r$  ÚlerB  Ú	ones_liker   r/  s      r0   Ú _kl_continuous_bernoulli_uniformrR  _  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ó	
ô 	�Š˜Ó¤#Ñ%Øóð r3   c                 ó,   • [        U R                  5      $ r+   ©rr   r¹   rà   s     r0   Ú_kl_exponential_infinityrU  l  s   € ô
 ˜!Ÿ&™&Ó!Ð!r3   c                 óø   • UR                   U R                   -  nUR                  * [        R                  " U5      -  nUU-   UR                  R	                  5       -   UR                  [
        -  -   S[
        -   -
  $ r·   )r¹   r±   rn   rº   r˜   rØ   )rƒ   r„   Úratior’   s       r0   Ú_kl_exponential_gammarX  t  st   € à�F‰F�Q—V‘V‰O€EØ
�/‰/Ð	œEŸIšI eÓ,Ñ	,€Bà
Ø
ñ	à
�/‰/×
 Ñ
 Ó
"ñ	#ð �/‰/œLÑ
(ñ	)ð Œ|Ññ		ðr3   c                 óþ   • U R                   UR                  -  nUR                  UR                  -  nUR                  5       S-
  n[        R
                  " U5      U-  US-   -  nUR                  5       nXC-
  U-   U-   $ r·   )r¹   rÖ   r×   rº   rn   rÙ   Ú
reciprocal)rƒ   r„   Úscale_rate_prodÚloc_scale_ratior’   r“   rœ   s          r0   Ú_kl_exponential_gumbelr]  �  sv   € à—f‘f˜qŸw™wÑ&€OØ—e‘e˜aŸg™g‘o€OØ	×	Ñ	Ó	 Ñ	"€BÜ	�Š�?Ó	# oÑ	5¸È1Ñ9LÑ	M€BØ	×	#Ñ	#Ó	%€BØÑ "Ñ$ rÑ)Ð)r3   c                 óz  • UR                   R                  S5      nU R                  R                  S5      nS[        R                  " X2-  S-  [
        R                  -  5      -  nUR                  5       nUR                  U R                  -  nUR                  R                  S5      S-  nUS-
  XV-
  U-   U-  -   $ r  )	rÖ   r|   r¹   rn   rº   r<  r=  rZ  r×   )rƒ   r„   r?  Úrate_sqrr’   r“   rœ   r�   s           r0   Ú_kl_exponential_normalr`  Ž  s—   € à—‘—‘˜Q“€JØ�v‰v�z‰z˜!‹}€HØ	Œu�yŠy˜Ñ.°Ñ2´T·W±WÑ<Ó=Ñ	=€BØ	×	Ñ	Ó	€BØ	
�‰�—‘‰€BØ	
�‰�‰�1‹˜Ñ	€BØ�‰6�R‘W˜r‘\ ZÑ/Ñ/Ð/r3   c                 ó,   • [        U R                  5      $ r+   )rr   r±   rà   s     r0   Ú_kl_gamma_infinityrb  ™  s   € ô
 ˜!Ÿ/™/Ó*Ð*r3   c                 ó¨   • U R                  5       * UR                  R                  5       -
  UR                  U R                  -  U R                  -  -   $ r+   )rß   r¹   rº   r±   rà   s     r0   Ú_kl_gamma_exponentialrd  ¡  s:   € à�I‰I‹Kˆ<˜!Ÿ&™&Ÿ*™*›,Ñ&¨¯©°!·/±/Ñ)AÀAÇFÁFÑ)JÑJÐJr3   c                 óæ  • U R                   UR                  -  nUR                  UR                  -  nU R                  S-
  U R                  R	                  5       -  U R                  R                  5       -
  U R                  -
  nUR                  5       U R                  U-  -   n[        R                  " U5      SUR                  5       -   R                  U R                  * 5      -  U-
  nXE-   U-   $ r·   )r¹   rÖ   r×   r±   r™   r˜   rº   rn   rÙ   rZ  r|   )rƒ   r„   Úbeta_scale_prodr\  r’   r“   rœ   s          r0   Ú_kl_gamma_gumbelrg  ¦  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‰<Ðr3   c                 óp  • UR                   R                  S5      nU R                  R                  S5      nS[        R                  " X2-  S-  [
        R                  -  5      -  U R                  -
  U R                  R                  5       -
  nSU R                  R                  S5      U R                  -   -  U-  nUR                  U R                  -  U R                  -  nSUR                  R                  S5      -  nUU R                  S-
  U R                  R                  5       -  -   XV-
  U-   U-  -   $ r  )rÖ   r|   r¹   rn   rº   r<  r=  r±   r˜   r×   r™   )rƒ   r„   r?  Úbeta_sqrr’   r“   rœ   r�   s           r0   Ú_kl_gamma_normalrj  »  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‰<˜:Ñ
%ñ	&ðr3   c                 ó,   • [        U R                  5      $ r+   ©rr   r×   rà   s     r0   Ú_kl_gumbel_infinityrm  Î  ó   € ô ˜!Ÿ%™%Ó Ð r3   c                 ó²  • U R                   UR                   -  nU[        R                  " S[        R                  -  5      -  R	                  5       n[        R                  U-  S-  R                  S5      S-  nU R                  U R                   [        -  -   UR                  -
  UR                   -  R                  S5      S-  nU* U-   U-   [        S-   -
  $ )Nr\   rî   é   r   )rÖ   r<  r÷   r=  rº   r|   r×   rØ   )rƒ   r„   Úparam_ratior’   r“   rœ   s         r0   Ú_kl_gumbel_normalrr  Û  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Ñ,Ñ-Ð-r3   c                 ó,   • [        U R                  5      $ r+   rl  rà   s     r0   Ú_kl_laplace_infinityrt  ä  rn  r3   c                 ó   • UR                   R                  S5      nU R                   R                  S5      U-  nS[        R                  " SU-  [        R
                  -  5      -  nSU R                  R                  S5      -  nU R                  UR                  -  nSUR                  R                  S5      -  nU* U-   XV-
  U-   U-  -   S-
  $ r  )rÖ   r|   rn   rº   r<  r=  r×   )rƒ   r„   r?  Úscale_sqr_var_ratior’   r“   rœ   r�   s           r0   Ú_kl_laplace_normalrw  î  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Ð$Ñ$¨©°"©¸
Ñ'BÑBÀQÑFÐFr3   c                 ó,   • [        U R                  5      $ r+   rl  rà   s     r0   Ú_kl_normal_infinityry  ù  rn  r3   c                 ó’  • U R                   UR                  -  nU R                  UR                  -  R                  S5      nUR                   UR                  -  nUR                  5       S-  nX$-
  n[        R
                  " U* SU-  -   U-   5      nU* U-   U-   SS[        R                  " S[        R                  -  5      -   -  -
  $ r  )r×   rÖ   r|   rº   rn   rÙ   r<  r=  )rƒ   r„   Úmean_scale_ratioÚvar_scale_sqr_ratior\  r’   r“   rœ   s           r0   Ú_kl_normal_gumbelr}    s°   € à—u‘u˜qŸw™w‘ÐØŸ7™7 Q§W¡WÑ,×1Ñ1°!Ó4ÐØ—e‘e˜aŸg™g‘o€OØ	×	 Ñ	 Ó	" SÑ	(€BØ	Ñ	+€BÜ	�ŠÐ$Ð$ sÐ-@Ñ'@Ñ@À?ÑRÓ	S€BØˆ3�‰8�b‰=˜C 1¤t§x¢x°´D·G±G±Ó'<Ñ#<Ñ=Ñ>Ð>r3   c                 óN  • U R                   UR                   -
  nU R                  UR                  -  nX R                  -  n[        R                  " U5      n[        R
                  " S[        R                  -  5      U R                  -  [        R                  " SUR                  S5      -  5      -  nU[        R                  " [        R
                  " S5      U-  5      -  nU* Xg-   UR                  -  -   SS[        R                  " S[        R                  -  5      -   -  -
  $ )Nr\   g      à¿rî   r   )
r×   rÖ   rn   rº   r<  r÷   r=  rÙ   r|   Úerf)rƒ   r„   Úloc_diffrè   Úloc_diff_scale_ratior’   r“   rœ   s           r0   Ú_kl_normal_laplacer‚    sÝ   € à�u‰u�q—u‘u‰}€HØ—'‘'˜AŸG™GÑ#€KØ#§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�"‘'˜QŸW™WÑ$Ñ$¨¨q´4·8²8¸CÄ$Ç'Á'¹MÓ3JÑ/JÑ(KÑLÐLr3   c                 ó,   • [        U R                  5      $ r+   )rr   rÖ   rà   s     r0   Ú_kl_pareto_infinityr„    s   € ô ˜!Ÿ'™'Ó"Ð"r3   c                 ó"  • U R                   UR                  -  nU R                  U-  R                  5       nU R                  R	                  5       nU R                  U-  U R                  S-
  -  nX4-
  U-   S-
  n[
        X`R                  S:*  '   U$ r·   )rÖ   r¹   r"  rº   rZ  r   )rƒ   r„   r[  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�7‰7�a‰<ÑØ€Mr3   c                 ó  • U R                   R                  5       U R                  R                  5       -   nU R                  R                  5       U-
  nUR                  R                  5       UR                  UR                  R                  5       -  -
  nSUR                  -
  U-  nUR                  U R                  -  U R                   -  U R                  S-
  -  nX4-   U-   U-   S-
  n[        XpR                  S:*  '   U$ r·   )rÖ   rº   r"  rZ  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�7‰7�a‰<ÑØ€Mr3   c                 ó`  • SUR                   R                  S5      -  nU R                   U R                  S-
  -  n[        R                  " S[        R
                  -  5      UR                   -  U R                  -  U R                   -  R                  5       nU R                  R                  5       nU R                  UR                  S5      -  U R                  S-
  -  nU R                  U-  UR                  -
  R                  S5      nXE-
  Xg-   U-  -   S-
  n[        X€R                  S:*  '   U$ )Nr\   r   )
rÖ   r|   r"  r<  r÷   r=  rº   rZ  r×   r   )	rƒ   r„   r?  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˜™ :Ñ-Ñ-°Ñ1€FÜ€F�7‰7�a‰<ÑØ€Mr3   c                 ó,   • [        U R                  5      $ r+   rT  rà   s     r0   Ú_kl_poisson_infinityrŽ  I  s   € ô ˜!Ÿ&™&Ó!Ð!r3   c                 óÜ  • U R                   U R                  -
  n[        R                  " U5      nUR                  S-
  [        U R                   5      [        U R                  5      -
  U-
  -  U-  nUR                  S-
  [        SU R                   -
  5      [        SU R                  -
  5      -
  U-   -  U-  nUR                  R                  5       UR                  R                  5       -   UR                  UR                  -   R                  5       -
  nXV-   U-
  U-
  n[        XpR                   UR                  R                  :„  U R                  UR                  R                  :  -  '   U$ r·   )r-  r.  rn   rº   r–   rv   r—   r˜   r   r#  rB  r$  rˆ  s           r0   Ú_kl_uniform_betar�  O  sE  € à—&‘&˜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�F‰F�Q—Y‘Y×*Ñ*Ñ*¨q¯u©u°q·y±y×7LÑ7LÑ/LÑMÑNØ€Mr3   c           	      ó  • U R                  5       * U R                  UR                  -  -
  [        R                  " UR
                  * 5      -
  UR                  5       -
  n[        R                  " [        R                  " [        R                  " U R                  UR                  R                  5      [        R                  " U R                  UR                  R                  5      5      [        R                   " U5      ["        -  U5      $ r+   )rß   r¬   r�   rn   r£   rŒ   r­   rM  rN  rO  r-  r#  rB  rP  r.  r$  rQ  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ó	
ô 	�Š˜Ó¤#Ñ%Øóð r3   c                 ó  • UR                   U R                  U R                  -   -  S-  U R                  U R                  -
  UR                   -  R                  5       -
  n[        X R                  UR
                  R                  :  '   U$ )Nr\   )r¹   r-  r.  rº   r   r#  r$  r/  s      r0   Ú_kl_uniform_exponetialr”  y  sd   € à�V‰V�q—v‘v §¡‘~Ñ&¨Ñ*¨q¯v©v¸¿¹©~ÀÇÁÑ.G×-LÑ-LÓ-NÑN€FÜ,/€F�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr3   c                 ó  • U R                   U R                  -
  nUR                  5       nUR                  R	                  5       UR                  UR
                  R                  5       -  -
  nSUR                  -
  [        U R                   5      [        U R                  5      -
  U-
  -  U-  nUR
                  U R                   U R                  -   -  S-  nU* U-   U-   U-   n[        XpR                  UR                  R                  :  '   U$ )Nr   r\   )
r-  r.  rº   r±   r˜   r¹   rv   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�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr3   c                 ó‚  • UR                   U R                  U R                  -
  -  nU R                  UR                  -
  UR                   -  nU R                  UR                  -
  UR                   -  nUR	                  5       SX4-   -  -   nU[
        R                  " U* 5      [
        R                  " U* 5      -
  -  nXV-
  $ )Nrî   )rÖ   r-  r.  r×   rº   rn   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Ñ$@ÑAÑ	A€BØ	œŸ	š	 = .Ó1´E·I²I¸|¸mÓ4LÑLÑ	M€BØ‰7€Nr3   c                 ó¨  • U R                   U R                  -
  n[        R                  " [        R                  S-  5      UR
                  -  U-  R                  5       nUR                  S5      S-  nU R                   U R                  -   SUR                  -  -
  S-  R                  S5      nUSXE-   -  UR
                  R                  S5      -  -   $ )Nr\   é   rî   )	r-  r.  r<  r÷   r=  rÖ   rº   r|   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‘w‘ !§'¡'§+¡+¨a£.Ñ0Ñ0Ð0r3   c                 óš  • U R                   U R                  -
  nUR                  UR                  R	                  UR                  5      -  U-  R                  5       n[        U R                   5      [        U R                  5      -
  U-
  U-  nXAR                  S-   -  U-
  n[        XPR                  UR                  R                  :  '   U$ r·   )
r-  r.  r"  rÖ   r|   rº   rv   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Ø—7‘7˜Q‘;Ñ "Ñ$€FÜ,/€F�5‰5�1—9‘9×(Ñ(Ñ(Ñ)Ø€Mr3   c                 ó¬   • U R                   UR                   :w  a  [        e[        U R                  UR                  5      n[	        X R                   5      $ r+   )Úreinterpreted_batch_ndimsrˆ   r(   rä   r#   r/  s      r0   Ú_kl_independent_independentr£  °  sA   € à×"Ñ" a×&AÑ&AÓAÜ!Ð!Ü˜1Ÿ;™;¨¯©Ó4€FÜ˜&×"=Ñ"=Ó>Ð>r3   c                 ó  • U R                   UR                   -   R                  S5      U R                  UR                  -
  R                  S5      -   R                  5       nSU R                   -  UR                   -  R                  5       nX#-
  $ )Nr\   é   r  r‘   s       r0   Ú_kl_cauchy_cauchyr¦  ¸  sl   € ð �7‰7�Q—W‘WÑ×
!Ñ
! !Ó
$¨¯©°·±©×':Ñ':¸1Ó'=Ñ
=×	BÑ	BÓ	D€BØ
ˆa�g‰g‰+˜Ÿ™Ñ
×	$Ñ	$Ó	&€BØ‰7€Nr3   c                  ó  • S/n [        [        S S9 H1  u  pU R                  SUR                   SUR                   S35        M3     SR	                  U 5      n[
        R                  (       a  [
        =R                  U-  sl        gg)	zHAppends a list of implemented KL functions to the doc for kl_divergence.zLKL divergence is currently implemented for the following distribution pairs:c                 ó>   • U S   R                   U S   R                   4$ r‹   )rK   )Úp_qs    r0   Ú<lambda>Ú_add_kl_info.<locals>.<lambda>Æ  s   €  s¨1¡v§¡¸¸A¹¿¹Ñ&Hr3   )Úkeyz* :class:`~torch.distributions.z#` and :class:`~torch.distributions.Ú`z
	N)Úsortedr%   ÚappendrK   Újoinr(   Ú__doc__)Úrowsrƒ   r„   Úkl_infos       r0   Ú_add_kl_infor´  À  s…   € ð 	Wð€Dô ÜÑHô‰ˆð 	�‰Ø-¨a¯j©j¨\Ð9\Ð]^×]gÑ]gÐ\hÐhiÐjö	
ñð �k‰k˜$Ó€GÜ××Ü×Ò Ñ(Öð r3   )Žr<  r`   Úcollections.abcr   Ú	functoolsr   rn   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Útupler5   Ú__annotations__r&   Ú__all__r'   r9   rl   rr   rv   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  r4  r6  r8  r:  r@  rC  rE  rG  rK  rR  rU  rX  r]  r`  rb  rd  rg  rj  rm  rr  rt  rw  ry  r}  r‚  r„  r†  rŠ  rŒ  rŽ  r�  r’  r”  r–  rš  r�  r   r£  r¦  r´  rQ   r3   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Óñó ðó)r3   