+
    &jJ|              	         a  Ri t0 t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIt^ RIHtH	t	 ^RI
Ht ^RIHt ^RIHt ^RIHt ^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RI H!t! ^RI"H#t# ^RI$H%t% ^RI&H't' ^RI(H)t) ^RI*H+t+H,t,H-t- ^RI.H/t/H0t0 ^RI1H2t2 ^RI3H4t4 ^RI5H6t6 ^RI7H8t8 ^RI9H:t: ^RI;H<t< ^RI=H>t>H?t@ / tA] ^ k / tB] ^k RR.tCR  tD] ! R! R"4      4       tER# tFR$ tGR% tHR& tIR' R( ltJ]D! ]]4      R) 4       tK]D! ]]4      R* 4       tL]D! ]]4      R+ 4       tM]D! ]]4      R, 4       tN]D! ]]4      R- 4       tO]D! ]]4      R. 4       tP]D! ]]4      R/ 4       tQ]D! ]]4      R0 4       tR]D! ]]4      R1 4       tS]D! ]#]#4      R2 4       tT]D! ]!]!4      R3 4       tU]D! ]%]%4      R4 4       tV]D! ])])4      R5 4       tW]D! ]-]-4      R6 4       tX]D! ]0]-4      R7 4       tY]D! ]-]04      R8 4       tZ]D! ]0]04      R9 4       t[]D! ]2]24      R: 4       t\]D! ]4]44      R; 4       t]]D! ]6]64      R< 4       t^]D! ]8]84      R= 4       t_]D! ]:]:4      R> 4       t`]D! ]<]<4      R? 4       ta]D! ]]84      R@ 4       tb]D! ]]4      RA 4       tc]D! ]]64      RB 4       td]D! ]]4      RC 4       te]D! ]]4      RD 4       tf]D! ]]24      RE 4       tg]D! ]]<4      RF 4       th]D! ]]64      RG 4       ti]D! ]]4      RH 4       tj]D! ]]24      RI 4       tk]D! ]]<4      RJ 4       tl]D! ]]4      ]D! ]]4      ]D! ]]64      ]D! ]]<4      RK 4       4       4       4       tm]D! ]]4      RL 4       tn]D! ]]#4      RM 4       to]D! ]]24      RN 4       tp]D! ]]4      ]D! ]]4      ]D! ]]64      ]D! ]]<4      RO 4       4       4       4       tq]D! ]]4      RP 4       tr]D! ]]#4      RQ 4       ts]D! ]]24      RR 4       tt]D! ]#]4      ]D! ]#]4      ]D! ]#]4      ]D! ]#]4      ]D! ]#]64      ]D! ]#]<4      RS 4       4       4       4       4       4       tu]D! ]#]24      RT 4       tv]D! ])]4      ]D! ])]4      ]D! ])]4      ]D! ])]4      ]D! ])]64      ]D! ])]<4      RU 4       4       4       4       4       4       tw]D! ])]24      RV 4       tx]D! ]2]4      ]D! ]2]4      ]D! ]2]4      ]D! ]2]4      ]D! ]2]64      ]D! ]2]<4      RW 4       4       4       4       4       4       ty]D! ]2]#4      RX 4       tz]D! ]2])4      RY 4       t{]D! ]6]4      ]D! ]6]4      ]D! ]6]<4      RZ 4       4       4       t|]D! ]6]4      R[ 4       t}]D! ]6]4      R\ 4       t~]D! ]6]24      R] 4       t]D! ]8]4      ]D! ]8]4      R^ 4       4       t]D! ]<]4      R_ 4       t]D! ]<]4      R` 4       t]D! ]<]4      Ra 4       t]D! ]<]4      Rb 4       t]D! ]<]#4      Rc 4       t]D! ]<]24      Rd 4       t]D! ]<]64      Re 4       t]D! ]']'4      Rf 4       t]D! ]]4      Rg 4       tRh tR# )j    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register_klkl_divergencec                   a a \        S \        4      '       g%   \        S \        4      '       d   \	        RS  24      h\        S\        4      '       g%   \        S\        4      '       d   \	        RS 24      hV V3R lpV# )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   < V \         SS3&   \        P                  4        V # N)_KL_REGISTRY_KL_MEMOIZEclear)funtype_ptype_qs   &n/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/torch/distributions/kl.py	decoratorregister_kl.<locals>.decoratorV   s"    '*VV^$
    )
isinstancetype
issubclassr   	TypeError)r-   r.   r0   s   ff r/   r$   r$   3   st    4 fd##
6<(H(HDVHM
 	
 fd##
6<(H(HDVHM
 	

 r2   c                   8   a  ] tR t^^t o R.tR tR tR tRtV t	R# )_Matchtypesc                    Wn         R # r(   r9   )selfr9   s   &*r/   __init___Match.__init__b   s    
r2   c                4    V P                   VP                   8H  # r(   r;   )r<   others   &&r/   __eq___Match.__eq__e   s    zzU[[((r2   c                    \        V P                  VP                  4       F!  w  r#\        W#4      '       g    R # W#Jg   K    R# 	  R# )FT)zipr9   r5   )r<   r@   xys   &&  r/   __le___Match.__le__h   s;    

EKK0DAa##z 1
 r2   r;   N)
__name__
__module____qualname____firstlineno__	__slots__r=   rA   rG   __static_attributes____classdictcell__)__classdict__s   @r/   r8   r8   ^   s      	I) r2   r8   c                   \          UUu. uF.  w  r#\        W4      '       g   K  \        W4      '       g   K+  W#3NK0  	  pppV'       g   \        # \        R V 4       4      P                  w  rV\        R V 4       4      P                  w  rx\         WV3,          p	\         W3,          p
WJdS   \
        P                  ! RV P                   RVP                   RVP                   RVP                   R2	\        ^R7       V	# u uppi )zH
Find the most specific approximate match, assuming single inheritance.
c              3   4   "   T F  p\        V!  x  K  	  R # 5ir(   )r8   .0ms   & r/   	<genexpr>_dispatch_kl.<locals>.<genexpr>   s     5WWs   c              3   F   "   T F  p\        \        V4      !  x  K  	  R # 5ir(   )r8   reversedrS   s   & r/   rV   rW      s     AA68A;/s   !zAmbiguous kl_divergence(z, z). Please register_kl())
stacklevel)	r)   r5   NotImplementedminr9   warningswarnrI   RuntimeWarning)r-   r.   super_psuper_qmatchesleft_pleft_qright_qright_pleft_fun	right_funs   &&         r/   _dispatch_klrj   q   s     !- ,Gf& 	+5f+F 	 ,  
  5W55;;NFAAAGGGFN+HW-.I &v&7r&//9J K""(//!2"W5E5E4FaI		
 O+s   D D D c                8    \         P                  ! V \        4      # )zA
Helper function for obtaining infinite KL Divergence throughout
)torch	full_liker   tensors   &r/   _infinite_likerp      s     ??63''r2   c                @    \         P                  P                  W 4      # )z*
Utility function for calculating x log x
)rl   specialxlogyrn   s   &r/   _x_log_xrt      s     ==v..r2   c                    V P                  R4      pV P                  R4      pV P                  RW!,          4      P                  ^4      P                  R4      pVP                  V P                  RR 4      # )zh
Utility function for calculating the trace of XX^{T} with X having arbitrary trailing batch dimensions
N)sizereshapepowsumshape)bmatnrU   
flat_traces   &   r/   _batch_trace_XXTr      sa     			"A		"Ab!%(,,Q/33B7Jdjj"o..r2   c                <    V ^8  d   QhR\         R\         R\        /# )   pqreturn)r   r   )formats   "r/   __annotate__r      s!      \ l v r2   c                t    \         \        V 4      \        V4      3,          pV\        J d:   \        RV P                  P                   RVP                  P                   24      hV! W4      #   \         d?    \        \        T 4      \        T4      4      pT\         \        T 4      \        T4      3&    Li ; i)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   KeyErrorrj   r\   NotImplementedError	__class__rI   )r   r   r,   s   && r/   r%   r%      s    &,$q'47*+ n!6q{{7K7K6LLYZYdYdYmYmXno
 	
 q9  ,47DG,(+DGT!W$%,s   !A. .AB76B7c                    V P                   \        P                  P                  P	                  VP
                  ) 4      \        P                  P                  P	                  V P
                  ) 4      ,
          ,          p\        W!P                   ^ 8H  &   ^ W P                   ^ 8H  &   ^V P                   ,
          \        P                  P                  P	                  VP
                  4      \        P                  P                  P	                  V P
                  4      ,
          ,          p\        W1P                   ^8H  &   ^ W0P                   ^8H  &   W#,           # r   )probsrl   nn
functionalsoftpluslogitsr   r   r   t1t2s   &&  r/   _kl_bernoulli_bernoullir      s    	
$$ahhY/
((


&
&y
1	2
B Bww!|Bww!|
agg+$$QXX.1D1D1M1Mahh1WW
B Bww!|Bww!|7Nr2   c                 6   V P                   V P                  ,           pVP                   VP                  ,           pVP                   P                  4       VP                  P                  4       ,           VP                  4       ,           pV P                   P                  4       V P                  P                  4       ,           VP                  4       ,           pV P                   VP                   ,
          \        P                  ! V P                   4      ,          pV P                  VP                  ,
          \        P                  ! V P                  4      ,          pW2,
          \        P                  ! V4      ,          pWE,
          V,           V,           V,           # r(   )concentration1concentration0lgammarl   digamma)	r   r   sum_params_psum_params_qr   r   t3t4t5s	   &&       r/   _kl_beta_betar      s   ##a&6&66L##a&6&66L	
			 	 	"Q%5%5%<%<%>	>,AVAVAX	XB	
			 	 	"Q%5%5%<%<%>	>,AVAVAX	XB


Q--
-q?O?O1P	PB


Q--
-q?O?O1P	PB

%|)D	DB7R<"r!!r2   c                    V P                   VP                   8  P                  4       '       d   \        R 4      hV P                   V P                  V P                  VP                  ,
          ,          V P                  ) P                  4       ,           VP                  ) P                  4       ,
          ,          pV P                   VP                   8  p\        W#,          4      W#&   V# )zKKL between Binomials where q.total_count > p.total_count is not implemented)total_countanyr   r   r   log1prp   )r   r   klinf_idxss   &&  r/   _kl_binomial_binomialr      s     	
%**,,!Y
 	
 
	188ahh&'AGG8*:*:*<<?O?O?QQ
B }}q}},H!",/BLIr2   c                    V P                   V P                  VP                  ,
          ,          p\        W!P                   ^ 8H  P                  V4      &   ^ W P                   ^ 8H  P                  V4      &   VP	                  R4      # )r   rv   )r   r   r   	expand_asr{   )r   r   ts   && r/   _kl_categorical_categoricalr      sa    	188ahh&'A%(Aww!|q!"%&Aww!|q!"559r2   c                 V   V P                   V P                  VP                  ,
          ,          pV P                  4       \        P                  ! V P
                  ) 4      ,           pVP                  4       ) \        P                  ! VP
                  ) 4      ,
          pW#,           V,           # r(   )meanr   _cont_bern_log_normrl   r   r   r   r   r   r   r   s   &&   r/   -_kl_continuous_bernoulli_continuous_bernoullir      sp    	
188ahh&	'B	
			 5;;x#8	8B



!	!EKK$9	9B7R<r2   c                 F   V P                   P                  R4      pVP                   P                  R4      pVP                  4       VP                  4       ,
          pV P                   P                  4       VP                   P                  4       ,
          P                  R4      pV P                   VP                   ,
          pV P                   P                  4       VP                  4       P	                  R4      ,
          pWE,
          Wg,          P                  R4      ,           # )   rv   )concentrationr{   r   r   	unsqueeze)r   r   sum_p_concentrationsum_q_concentrationr   r   r   r   s   &&      r/   _kl_dirichlet_dirichletr     s     //--b1//--b1		#	#	%(;(B(B(D	DB
//
 
 
"Q__%;%;%=
=	B	B2	FB	
1??	*B	
	 	 	"%8%@%@%B%L%LR%P	PB7bg]]2&&&r2   c                 |    VP                   V P                   ,          pVP                  4       ) pW2,           ^,
          # r   ratelog)r   r   
rate_ratior   s   &&  r/   _kl_exponential_exponentialr     s/    !&&J
..
	B?Qr2   c                    \        V 4      \        V4      Jd   \        R 4      hV P                   Uu. uF   q"P                  4       P	                  4       NK"  	  ppVP                  pV P
                  ! V!  p\        P                  P                  VP                  4       VRR7      pVP
                  ! V!  V,
          p\        W4V4       F;  w  rp
W,
          V
,          pV\        V\        VP                  4      4      ,          pK=  	  V# u upi )zThe cross KL-divergence between different exponential families cannot                             be computed using Bregman divergencesT)create_graph)r4   r   _natural_paramsdetachrequires_grad__log_normalizerrl   autogradgradr{   rD   r"   lenevent_shape)r   r   np	p_nparams	q_nparams	lg_normal	gradientsresultpnpqnpgterms   &&          r/   _kl_expfamily_expfamilyr     s    Awd1g!C
 	
 9:8I8IJ8I"++-8IIJ!!I!!9-I##IMMOYT#RI	*Y6F9;!	Q.s1=='9:: < M Ks   &D
c                 2   VP                   V P                  VP                  ,          P                  4       ,          p\        P                  ! VP                   4      \        P                  ! V P                   4      ,
          pV P                   VP                   ,
          \        P
                  ! V P                   4      ,          pVP                  V P                  ,
          V P                   V P                  ,          ,          pW#,           V,           V,           # r(   )r   r   r   rl   r   r   r   r   r   r   r   r   s   &&    r/   _kl_gamma_gammar   ,  s    	
AFFQVVO002	2B	aoo	&aoo)F	FB
//AOO
+u}}Q__/M	MB
&&166/aoo6	7B7R<"r2   c                    V P                   VP                   ,          pVP                  VP                   ,          pV P                  VP                   ,          pVP                  4       ) V,
          V,           pV\        ,          p\        P
                  ! V^V,           P                  4       ,           V,
          4      pWV,           V,           ^\        ,           ,
          # r   )scalelocr   _euler_gammarl   expr   )r   r   ct1ct2ct3r   r   r   s   &&      r/   _kl_gumbel_gumbelr   5  s    
''AGG
C
%%!''/C
%%!''/C
'')c	C	B	|	B	3!c'))++c1	2B7R<1|+,,r2   c                     V P                  4       ) \        P                  ! VP                  ) 4      V P                  ,          ,
          VP                  ,
          # r(   )entropyrl   r   r   r   r   r   s   &&r/   _kl_geometric_geometricr   @  s6    IIK<%++qwwh/!''99AHHDDr2   c                 B    \        V P                  VP                  4      # r(   )_kl_normal_normal	base_distr   s   &&r/   _kl_halfnormal_halfnormalr   E  s    Q[[!++66r2   c                 b   V P                   VP                   ,          pV P                  VP                  ,
          P                  4       pVP                  4       ) pW1P                   ,          pV\        P
                  ! V) V P                   ,          4      ,          pWE,           V,           ^,
          # r   )r   r   absr   rl   r   )r   r   scale_ratioloc_abs_diffr   r   r   s   &&     r/   _kl_laplace_laplacer   J  sz     ''AGG#KEEAEEM&&(L
//
	B		B	uyy,!89	9B7R<!r2   c                 t   V P                   VP                   8w  d   \        R 4      h\        VP                  VP                  VP
                  4      \        V P                  V P                  V P
                  4      ,
          p\        VP                  VP                  VP                  V P                  ,
          VP
                  4      pVP                  P                  VP                  P                  R4      ,          p\        P                  P                  VP
                  VRR7      pV P                  VP                  ,          P                  R4      p\        V P                  VP                  P                  4       P                  R4      ,          4      p\        WPP                  P!                  4       P                  R4      ,          4      p\        VP#                  V P                  4      4      p	Wg,           V,
          V	,
          p
RW*,           V,           V P                   ^ ,          ,
          ,          # )zKL-divergence between two Low Rank Multivariate Normals with                          different event shapes cannot be computedFupper      ?rw   rv   )r   
ValueErrorr   _unbroadcasted_cov_factor_unbroadcasted_cov_diag_capacitance_trilr   r   mTr   rl   linalgsolve_triangularr{   r   rsqrtsqrtmatmul)r   r   term1term3	qWt_qDinvAterm21term22term23term24term2s   &&         r/   7_kl_lowrankmultivariatenormal_lowrankmultivariatenormalr  U  s   }}%E
 	

 "	##Q%>%>@S@S	##Q%>%>@S@S	E
 '	##	!!			E ++..1J1J1T1TUW1XXI%%a&9&99E%RA''!*C*CCHHLF	##a&?&?&E&E&G&Q&QRT&UUF a";";"@"@"B"L"LR"PPQFahhq'B'BCDFOf$v-E%-%'!--*::;;r2   c                    V P                   VP                   8w  d   \        R 4      h\        VP                  VP                  VP
                  4      ^V P                  P                  RRR7      P                  4       P                  R4      ,          ,
          p\        VP                  VP                  VP                  V P                  ,
          VP
                  4      pVP                  P                  VP                  P                  R4      ,          p\        P                  P!                  VP
                  VRR7      p\#        V P                  VP                  P%                  4       P                  R4      ,          4      p\#        VP'                  V P                  4      4      pWg,
          pRW(,           V,           V P                   ^ ,          ,
          ,          # )KL-divergence between two (Low Rank) Multivariate Normals with                          different event shapes cannot be computeddim1dim2Fr   r   rw   rv   )r   r   r   r   r   r   _unbroadcasted_scale_trildiagonalr   r{   r   r   r   r   rl   r   r   r   r   r   )	r   r   r   r   r   r   r   r  r  s	   &&       r/   0_kl_multivariatenormal_lowrankmultivariatenormalr  w  sx   }}%E
 	

 "	##Q%>%>@S@S	A''00br0BFFHLLRPPQE '	##	!!			E ++..1J1J1T1TUW1XXI%%a&9&99E%RA	##a&?&?&E&E&G&Q&QRT&UUF ahhq'B'BCDFOE%-%'!--*::;;r2   c                    V P                   VP                   8w  d   \        R 4      h^VP                  P                  RRR7      P	                  4       P                  R4      ,          \        V P                  V P                  V P                  4      ,
          p\        VP                  VP                  V P                  ,
          4      p\        P                  P                  VP                  P                  RR V P                  P                  RR 4      pV P                   ^ ,          pVP                  P!                  WEV3,           4      pV P                  P!                  WEV P"                  P%                  R4      3,           4      p\        P&                  ! V P                  P)                  4       4      P!                  WEV3,           4      p\+        \        P,                  P/                  WgRR7      4      p	\+        \        P,                  P/                  WhRR7      4      p
W,           pRW+,           V,           V P                   ^ ,          ,
          ,          # )r  r  NFr   r   rw   rv   )r   r   r  r  r   r{   r   r   r   r   r   r   rl   _C_infer_sizer|   expand
cov_factorrx   
diag_embedr   r   r   r   )r   r   r   r   combined_batch_shaper~   q_scale_trilp_cov_factor
p_cov_diagr   r  r  s   &&          r/   0_kl_lowrankmultivariatenormal_multivariatenormalr    s   }}%E
 	

 ++44"24FJJLPP
 	##Q%>%>@S@S	E
 q::QUUQUU]LE !88//	##))#2.0K0K0Q0QRUSU0V 	
aA..556JQRV6STL..551<<#4#4R#899L !!!";";"@"@"BCJJ1v%J %%l%NF %%le%LF OE%-%'!--*::;;r2   c                 ~   V P                   VP                   8w  d   \        R 4      hVP                  P                  RRR7      P	                  4       P                  R4      V P                  P                  RRR7      P	                  4       P                  R4      ,
          p\        P                  P                  VP                  P                  RR V P                  P                  RR 4      pV P                   ^ ,          pVP                  P                  W4V3,           4      pV P                  P                  W4V3,           4      p\        \        P                  P                  WVRR7      4      p\        VP                  VP                  V P                  ,
          4      pVRWx,           V,
          ,          ,           # )zvKL-divergence between two Multivariate Normals with                          different event shapes cannot be computedr  NFr   r   rw   rv   )r   r   r  r  r   r{   rl   r  r  r|   r  r   r   r   r   r   )	r   r   
half_term1r  r~   r  p_scale_trilr  r   s	   &&       r/   )_kl_multivariatenormal_multivariatenormalr    sx    	}}%E
 	

 ,,552B5GKKMQQ
	##,,"2,>BBDHHLMJ !88//	##))#2.0K0K0Q0QRUSU0V 	
aA..556JQRV6STL..556JQRV6STL%%l%NE q::QUUQUU]LEu}q0111r2   c                 *   V P                   VP                   ,          P                  ^4      pV P                  VP                  ,
          VP                   ,          P                  ^4      pRW#,           ^,
          VP                  4       ,
          ,          # r   r   r   rz   r   r   )r   r   	var_ratior   s   &&  r/   r   r     sa    177"''*I55155=AGG
#	(	(	+B).1$y}}677r2   c                 B    \        V P                  VP                  4      # r(   )r   _categoricalr   s   &&r/   '_kl_onehotcategorical_onehotcategoricalr#    s    &q~~q~~FFr2   c                 p   V P                   VP                   ,          pVP                  V P                  ,          pVP                  VP                  4       ,          pVP                  4       ) pWE,           V,           ^,
          p\        W`P                  P
                  VP                  P
                  8  &   V# r   )r   alphar   r   supportlower_bound)r   r   r   alpha_ratior   r   r   s   &&     r/   _kl_pareto_paretor)    s     ''AGG#K''AGG#K	
;??$	$B
//
	BW{"Q&F<?F99  199#8#889Mr2   c                     V P                   V P                   P                  4       VP                   P                  4       ,
          ,          V P                   VP                   ,
          ,
          # r(   r   r   s   &&r/   _kl_poisson_poissonr+    s;    66QVVZZ\AFFJJL01QVVaff_EEr2   c                     V P                   VP                   8w  d   \        hV P                  VP                  8w  d   \        h\        V P                  VP                  4      # r(   )
transformsr   r   r%   r   r   s   &&r/   _kl_transformed_transformedr.    sC    ||q||#!!}}%!!akk22r2   c                    VP                   VP                  ,
          V P                   V P                  ,
          ,          P                  4       p\        W!P                  V P                  8  VP                   V P                   8  ,          &   V# r(   )highlowr   r   r   r   r   s   && r/   _kl_uniform_uniformr3    sW    vv~!&&155.1668F25FEEAEEMaffqvvo./Mr2   c                     V P                  4       ) V P                  VP                  P                  4       ,          VP                  ,
          ,
          # r(   )r   r   r   r   r   s   &&r/   _kl_bernoulli_poissonr5    s1    IIK<177QVVZZ\1AFF:;;r2   c                     V P                  4       ) V P                  VP                  ,          ,
          \        P                  ! VP
                  ) 4      ,
          VP                  4       ,
          # r(   )r   r   r   rl   r   r   r   r   s   &&r/   _kl_beta_continuous_bernoullir7    sS     

&&188
	
++qwwh
	  


!	"r2   c                 ,    \        V P                  4      # r(   )rp   r   r   s   &&r/   _kl_beta_infinityr9    s    !**++r2   c                     V P                  4       ) VP                  P                  4       ,
          VP                  V P                  V P                  V P                  ,           ,          ,          ,           # r(   )r   r   r   r   r   r   s   &&r/   _kl_beta_exponentialr;    sT     

&&**,	
&&A$$(8(81;K;K(KL
M	Nr2   c                 &   V P                  4       ) pVP                  P                  4       VP                  VP                  P	                  4       ,          ,
          pVP                  ^,
          V P
                  P                  4       V P
                  V P                  ,           P                  4       ,
          ,          pVP                  V P
                  ,          V P
                  V P                  ,           ,          pW#,           V,
          V,           # r   )r   r   r   r   r   r   r   r   r   s   &&    r/   _kl_beta_gammar=    s    
))+B	
			!AOOaffjjl$B	BB
//A
	  "a&6&69I9I&I%R%R%TT
B 
!""	"a&6&69I9I&I	JB7R<"r2   c                 x   V P                   V P                   V P                  ,           ,          pVP                  P                  ^4      pV P	                  4       ) pRV^,          \
        P                  ,          P                  4       ,          pV^V,
          ,          V P                   V P                  ,           ^,           ,          VP                  ^4      ,           R,          pVP                  V,          pVP                  P                  ^4      R,          pWE,           Wg,
          V,           V,          ,           # r  )	r   r   r   rz   r   mathpir   r   )	r   r   E_beta
var_normalr   r   r   r   r   s	   &&       r/   _kl_beta_normalrC  ,  s    !1!1A4D4D!DEFQJ
))+B	
Q(--/	/B!f*!1!1A4D4D!Dq!HI
**Q-	
B 
B	
1	B7bglj000r2   c                 *   V P                  4       ) VP                  VP                  ,
          P                  4       ,           p\        W!P                  V P
                  P                  8  VP                  V P
                  P                  8  ,          &   V# r(   )r   r0  r1  r   r   r&  r'  upper_boundr2  s   && r/   _kl_beta_uniformrF  ;  sa    iik\QVVaee^0022FQTFEEAII)))affqyy7L7L.LMNMr2   c                 ,    \        V P                  4      # r(   )rp   r   r   s   &&r/   !_kl_continuous_bernoulli_infinityrH  E  s    !''""r2   c                     V P                  4       ) \        P                  ! VP                  4      ,
          VP                  V P                  ,          ,           # r(   )r   rl   r   r   r   r   s   &&r/   $_kl_continuous_bernoulli_exponentialrJ  J  s3    IIK<%))AFF++affqvvo==r2   c                 h   V P                  4       ) pR \        P                  ! R\        P                  ,          4      \        P
                  ! VP                  VP                  ,          4      ,           ,          \        P                  ! VP                  4      ,           pV P                  \        P
                  ! V P                  4      ,           RVP                  ,          V P                  ,          ,
          R\        P
                  ! VP                  4      ,          ,          pW#,           V,           # )r   g       @)
r   r?  r   r@  rl   squarer   r   variancer   r   s   &&   r/   _kl_continuous_bernoulli_normalrN  S  s    
))+B	tww'%,,quuqww*GG	H599	L 
B **u||AFF+
+cAEEkAFF.B
Bell177##
B 7R<r2   c           	         V P                  4       ) VP                  VP                  ,
          P                  4       ,           p\        P
                  ! \        P                  ! \        P                  ! VP                  V P                  P                  4      \        P                  ! VP                  V P                  P                  4      4      \        P                  ! V4      \        ,          V4      # r(   )r   r0  r1  r   rl   wheremaxger&  r'  lerE  	ones_liker   r2  s   && r/    _kl_continuous_bernoulli_uniformrU  _  s    iik\QVVaee^0022F;;		HHQUUAII112HHQVVQYY223	
 	#% r2   c                 ,    \        V P                  4      # r(   rp   r   r   s   &&r/   _kl_exponential_infinityrX  l  s    
 !&&!!r2   c                 8   VP                   V P                   ,          pVP                  ) \        P                  ! V4      ,          pVV,           VP                  P	                  4       ,           VP                  \
        ,          ,           ^\
        ,           ,
          # r   )r   r   rl   r   r   r   )r   r   ratior   s   &&  r/   _kl_exponential_gammar[  t  st    FFQVVOE
//	EIIe,	,B

	
//
 
 
"	# //L
(	) |		r2   c                 F   V P                   VP                  ,          pVP                  VP                  ,          pVP                  4       ^,
          p\        P
                  ! V4      V,          V^,           ,          pVP                  4       pWC,
          V,           V,           # r   )r   r   r   r   rl   r   
reciprocal)r   r   scale_rate_prodloc_scale_ratior   r   r   s   &&     r/   _kl_exponential_gumbelr`    sv    ffqww&OeeaggoO					"B	?	#o	519L	MB		#	#	%B"$r))r2   c                    VP                   P                  ^4      pV P                  P                  ^4      pR\        P                  ! W2,          ^,          \
        P                  ,          4      ,          pVP                  4       pVP                  V P                  ,          pVP                  P                  ^4      R,          pV^,
          WV,
          V,           V,          ,           # r  )	r   rz   r   rl   r   r?  r@  r]  r   )r   r   rB  rate_sqrr   r   r   r   s   &&      r/   _kl_exponential_normalrc    s    QJvvzz!}H	uyy.2TWW<=	=B				B	
B	
1	B6RWr\Z///r2   c                 ,    \        V P                  4      # r(   )rp   r   r   s   &&r/   _kl_gamma_infinityre    s    
 !//**r2   c                     V P                  4       ) VP                  P                  4       ,
          VP                  V P                  ,          V P                  ,          ,           # r(   )r   r   r   r   r   s   &&r/   _kl_gamma_exponentialrg    s:    IIK<!&&**,&!//)AAFF)JJJr2   c                 N   V P                   VP                  ,          pVP                  VP                  ,          pV P                  ^,
          V P                  P	                  4       ,          V P                  P                  4       ,
          V P                  ,
          pVP                  4       V P                  V,          ,           p\        P                  ! V4      ^VP                  4       ,           P                  V P                  ) 4      ,          V,
          pWE,           V,           # r   )r   r   r   r   r   r   r   rl   r   r]  rz   )r   r   beta_scale_prodr_  r   r   r   s   &&     r/   _kl_gamma_gumbelrj    s    ffqww&OeeaggoO	
1	 7 7 99
//
 
 
"	#
//	 
 
			?!B	BB		/"))++
0
0!//1A
B	C
	 
 7R<r2   c                    VP                   P                  ^4      pV P                  P                  ^4      pR\        P                  ! W2,          ^,          \
        P                  ,          4      ,          V P                  ,
          V P                  P                  4       ,
          pRV P                  P                  ^4      V P                  ,           ,          V,          pVP                  V P                  ,          V P                  ,          pRVP                  P                  ^4      ,          pVV P                  ^,
          V P                  P                  4       ,          ,           WV,
          V,           V,          ,           # r  )r   rz   r   rl   r   r?  r@  r   r   r   r   )r   r   rB  beta_sqrr   r   r   r   s   &&      r/   _kl_gamma_normalrm    s   QJvvzz!}Heii-1DGG;<<
//	
//
 
 
"	# 
 
##A&8	9H	DB	
	 166	)B	quuyy|	B
??Q!//"9"9";
;	<7R<:
%	&r2   c                 ,    \        V P                  4      # r(   rp   r   r   s   &&r/   _kl_gumbel_infinityrp         !%%  r2   c                 *   V P                   VP                   ,          pV\        P                  ! ^\        P                  ,          4      ,          P	                  4       p\        P                  V,          R,          P                  ^4      ^,          pV P                  V P                   \        ,          ,           VP                  ,
          VP                   ,          P                  ^4      R,          pV) V,           V,           \        ^,           ,
          # r  )r   r?  r   r@  r   rz   r   r   )r   r   param_ratior   r   r   s   &&    r/   _kl_gumbel_normalrt    s    ''AGG#K
		!dgg+.
.	3	3	5B
''K
#
%	*	*1	-	1B55177\))AEE1QWW
<	A	A!	Ds	JB38b=L1,--r2   c                 ,    \        V P                  4      # r(   ro  r   s   &&r/   _kl_laplace_infinityrv    rq  r2   c                    VP                   P                  ^4      pV P                   P                  ^4      V,          pR\        P                  ! ^V,          \        P
                  ,          4      ,          pRV P                  P                  ^4      ,          pV P                  VP                  ,          pRVP                  P                  ^4      ,          pV) V,           WV,
          V,           V,          ,           ^,
          # r  )r   rz   rl   r   r?  r@  r   )r   r   rB  scale_sqr_var_ratior   r   r   r   s   &&      r/   _kl_laplace_normalry    s    QJ''++a.:5	uyy00477:;	;B	quuyy|	B	
B	quuyy|	B3$$"
'BBQFFr2   c                 ,    \        V P                  4      # r(   ro  r   s   &&r/   _kl_normal_infinityr{    rq  r2   c                    V P                   VP                  ,          pV P                  VP                  ,          P                  ^4      pVP                   VP                  ,          pVP                  4       R,          pW$,
          p\        P
                  ! V) RV,          ,           V,           4      pV) V,           V,           R^\        P                  ! ^\        P                  ,          4      ,           ,          ,
          # r  )r   r   rz   r   rl   r   r?  r@  )r   r   mean_scale_ratiovar_scale_sqr_ratior_  r   r   r   s   &&      r/   _kl_normal_gumbelr    s    uuqww77QWW,11!4eeaggoO		 	 	"S	(B		+B	$$s-@'@@?R	SB38b=C1txxDGG'<#<=>>r2   c                    V P                   VP                   ,
          pV P                  VP                  ,          pW P                  ,          p\        P                  ! V4      p\        P
                  ! ^\        P                  ,          4      V P                  ,          \        P                  ! RVP                  ^4      ,          4      ,          pV\        P                  ! \        P
                  ! R4      V,          4      ,          pV) Wg,           VP                  ,          ,           R^\        P                  ! R\        P                  ,          4      ,           ,          ,
          # )r   r   g      )
r   r   rl   r   r?  r   r@  r   rz   erf)r   r   loc_diffr   loc_diff_scale_ratior   r   r   s   &&      r/   _kl_normal_laplacer    s    uuquu}H''AGG#K#gg-	;	B		!dgg+(599T<P<T<TUV<W5W+XX  
EIIdiin/CCD	DB3"'QWW$$q488C$''M3J/J(KLLr2   c                 ,    \        V P                  4      # r(   )rp   r   r   s   &&r/   _kl_pareto_infinityr    s     !''""r2   c                 b   V P                   VP                  ,          pV P                  V,          P                  4       pV P                  P	                  4       pV P                  V,          V P                  ^,
          ,          pW4,
          V,           ^,
          p\
        W`P                  ^8*  &   V# r   )r   r   r%  r   r]  r   )r   r   r^  r   r   r   r   s   &&     r/   _kl_pareto_exponentialr  "  s}    gg&O
''O
#	(	(	*B	
			B	
?	"aggk	2BWr\AFF77a<Mr2   c                 r   V P                   P                  4       V P                  P                  4       ,           pV P                  P                  4       V,
          pVP                  P                  4       VP                  VP                  P                  4       ,          ,
          p^VP                  ,
          V,          pVP                  V P                  ,          V P                   ,          V P                  ^,
          ,          pW4,           V,           V,           ^,
          p\        WpP                  ^8*  &   V# r   )r   r   r%  r]  r   r   r   r   r   r   common_termr   r   r   r   r   s   &&      r/   _kl_pareto_gammar  -  s    ''++-!''"4"4"66K	
	$B	
			!AOOaffjjl$B	BB
aoo
	,B	
!''	AGG	#qww{	3BWr\B"FF77a<Mr2   c                    ^VP                   P                  ^4      ,          pV P                   V P                  ^,
          ,          p\        P                  ! ^\        P
                  ,          4      VP                   ,          V P                  ,          V P                   ,          P                  4       pV P                  P                  4       pV P                  VP                  ^4      ,          V P                  ^,
          ,          pV P                  V,          VP                  ,
          P                  ^4      pWE,
          Wg,           V,          ,           ^,
          p\        WP                  ^8*  &   V# r   )
r   rz   r%  r?  r   r@  r   r]  r   r   )	r   r   rB  r  r   r   r   r   r   s	   &&       r/   _kl_pareto_normalr  <  s    QWW[[^#J''QWWq[)K
))AK
 177
*QWW
4qww
>	C	C	EB	
			B	
;??1%	%1	5B
''K
!%%
'	,	,Q	/BW:--1FF77a<Mr2   c                 ,    \        V P                  4      # r(   rW  r   s   &&r/   _kl_poisson_infinityr  I  s     !&&!!r2   c                 |   V P                   V P                  ,
          p\        P                  ! V4      pVP                  ^,
          \        V P                   4      \        V P                  4      ,
          V,
          ,          V,          pVP                  ^,
          \        ^V P                   ,
          4      \        ^V P                  ,
          4      ,
          V,           ,          V,          pVP                  P                  4       VP                  P                  4       ,           VP                  VP                  ,           P                  4       ,
          pWV,           V,
          V,
          p\        WpP                   VP                  P                  8  V P                  VP                  P                  8  ,          &   V# r   )r0  r1  rl   r   r   rt   r   r   r   r&  rE  r'  r  s   &&      r/   _kl_uniform_betar  O  sE   &&155.K	;	B	
		A	AFFhquuo-;	=
	  
		A	AJ(1quu9"55C	E
	  	
!



!
!
#	$a...
6
6
8	9 
 Wr\BFQTFFFQYY***quuqyy7L7L/LMNMr2   c           	      B   V P                  4       ) V P                  VP                  ,          ,
          \        P                  ! VP
                  ) 4      ,
          VP                  4       ,
          p\        P                  ! \        P                  ! \        P                  ! V P                  VP                  P                  4      \        P                  ! V P                  VP                  P                  4      4      \        P                   ! V4      \"        ,          V4      # r(   )r   r   r   rl   r   r   r   rP  rQ  rR  r0  r&  rE  rS  r1  r'  rT  r   r2  s   && r/    _kl_uniform_continuous_bernoullir  g  s     

&&188
	
++qwwh
	  


!	"  ;;		HHQVVQYY223HHQUUAII112	
 	#% r2   c                 D   VP                   V P                  V P                  ,           ,          ^,          V P                  V P                  ,
          VP                   ,          P                  4       ,
          p\        W P                  VP
                  P                  8  &   V# r  )r   r0  r1  r   r   r&  r'  r2  s   && r/   _kl_uniform_exponetialr  y  sd    VVqvv~&*qvv~.G-L-L-NNF,/F55199((()Mr2   c                    V P                   V P                  ,
          pVP                  4       pVP                  P	                  4       VP                  VP
                  P                  4       ,          ,
          p^VP                  ,
          \        V P                   4      \        V P                  4      ,
          V,
          ,          V,          pVP
                  V P                   V P                  ,           ,          ^,          pV) V,           V,           V,           p\        WpP                  VP                  P                  8  &   V# r   )
r0  r1  r   r   r   r   rt   r   r&  r'  r  s   &&      r/   _kl_uniform_gammar    s    &&155.K		B	
			!AOOaffjjl$B	BB	
Q__	AFFhquuo-;	=
	 
 
166AEE>	"Q	&BS2X]RF,/F55199((()Mr2   c                    VP                   V P                  V P                  ,
          ,          pV P                  VP                  ,
          VP                   ,          pV P                  VP                  ,
          VP                   ,          pVP	                  4       R W4,           ,          ,           pV\
        P                  ! V) 4      \
        P                  ! V) 4      ,
          ,          pWV,
          # )r   )r   r0  r1  r   r   rl   r   )r   r   r  high_loc_difflow_loc_diffr   r   s   &&     r/   _kl_uniform_gumbelr    s    ''QVVaee^,KVVaee^qww.MEEAEEMQWW,L		SM$@A	AB			=.1EII|m4LL	MB7Nr2   c                    V P                   V P                  ,
          p\        P                  ! \        P                  ^,          4      VP
                  ,          V,          P                  4       pVP                  ^4      ^,          pV P                   V P                  ,           ^VP                  ,          ,
          ^,          P                  ^4      pVRWE,           ,          VP
                  P                  ^4      ,          ,           # r  )	r0  r1  r?  r   r@  r   r   rz   r   )r   r   r  r   r   r   s   &&    r/   _kl_uniform_normalr    s    &&155.K
))DGGaK
 177
*[
8	=	=	?B
		1		"B66AEE>AI%
*	/	/	2Brw!''++a.000r2   c                    V P                   V P                  ,
          pVP                  VP                  P	                  VP                  4      ,          V,          P                  4       p\        V P                   4      \        V P                  4      ,
          V,
          V,          pWAP                  ^,           ,          V,
          p\        WPP                  VP                  P                  8  &   V# r   )
r0  r1  r%  r   rz   r   rt   r   r&  r'  )r   r   support_uniformr   r   r   s   &&    r/   _kl_uniform_paretor    s    ffquunO
''AGGKK(
(O
<	A	A	CB
166
Xaee_
,
>/	QB77Q;"$F,/F55199((()Mr2   c                     V P                   VP                   8w  d   \        h\        V P                  VP                  4      p\	        W P                   4      # r(   )reinterpreted_batch_ndimsr   r%   r   r"   r2  s   && r/   _kl_independent_independentr    sA    ""a&A&AA!!1;;4F&"="=>>r2   c                 L   V P                   VP                   ,           P                  ^4      V P                  VP                  ,
          P                  ^4      ,           P                  4       p^V P                   ,          VP                   ,          P                  4       pW#,
          # r  r  r   s   &&  r/   _kl_cauchy_cauchyr    sl     77QWW
!
!!
$':':1'=
=	B	B	DB
agg+
	$	$	&B7Nr2   c                 &   R.p \        \        R R7       F1  w  rV P                  RVP                   RVP                   R24       K3  	  RP	                  V 4      p\
        P                  '       d    \
        ;P                  V,          un        R# R# )	zHAppends a list of implemented KL functions to the doc for kl_divergence.zLKL divergence is currently implemented for the following distribution pairs:c                 N    V ^ ,          P                   V ^,          P                   3# r   )rI   )p_qs   &r/   <lambda>_add_kl_info.<locals>.<lambda>  s    s1vA&Hr2   )keyz* :class:`~torch.distributions.z#` and :class:`~torch.distributions.`z
	N)sortedr)   appendrI   joinr%   __doc__)rowsr   r   kl_infos       r/   _add_kl_infor    s     	WD H 	-ajj\9\]^]g]g\hhij	
 kk$G( r2   c                    V ^8  d   Qh/ ^ \         9   d,   \        \        \        \        3,          \        3,          ;R&   ^\         9   d,   \        \        \        \        3,          \        3,          ;R&   # )r   r)   r*   )__conditional_annotations__dicttupler4   r   )r   s   "r/   r   r      sb    N d	$*x O T T	$*x U r2   )r  r?  r^   collections.abcr   	functoolsr   rl   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)   r*   __all__r$   r8   rj   rp   rt   r   r%   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r#  r)  r+  r.  r3  r5  r7  r9  r;  r=  rC  rF  rH  rJ  rN  rU  rX  r[  r`  rc  re  rg  rj  rm  rp  rt  rv  ry  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   )r  s   @r/   <module>r     s	     $ $       $  5   & ) $     # $  
 H  2   =  A
   
    /
*(V   $8(//L Y	" # T4" " Xx  ! [+& '  "56 7 Y	"' #' [+& '  12 3" UE  VV- - Y	"E #E Z$7 %7 Wg  &(AB< C<B !:;< <<: &(:;!< <!<H !342 520 VV8 8  12G 3G VV  WgF F $&=>3 ?3 Wg  Y < !< T&' ( T6, , T;   T5  T61 1 T7   &)# *#  +.> />  &) *  '*	 +	 [$[-.[&!['"" # " /  " [% 	 !	 [&!* "* [&!0 "0 UDU'(UFUG+   ) + UK K !K UF ( UF $ VTV()V[!VUVVVW!    " * ! VV. . WdW)*Wk"WeWfWg!    # + ! WfG G VTV()V[!VUVVVW!    " * ! VV? ? VW	M 	M VTV()VW#  * # V[! " VU  VV	 	 Wi Wh"   !" Wd . W)* +" Wk" # We  Wf  Wf1 1 Wf  [+&? '? VV )r2   