def _compute_non_batch_kl(self, loc_a, scale_a, loc_b, scale_b):
<EOL>covariance_a = np.dot(scale_a, scale_a.T)<EOL>covariance_b = np.dot(scale_b, scale_b.T)<EOL>covariance_b_inv = np.linalg.inv(covariance_b)<EOL>t = np.trace(covariance_b_inv.dot(covariance_a))<EOL>q = (loc_b - loc_a).dot(covariance_b_inv).dot(loc_b - loc_a)<EOL>k = loc_a.shape[<NUM_LIT:0>]<EOL>l = np.log(np.linalg.det(covariance_b) / np.linalg.det(covariance_a))<EOL>return <NUM_LIT:0.5> * (t + q - k + l)<EOL>
Non-batch KL for N(loc_a, scale_a), N(loc_b, scale_b).