use candle_core::{Result, Tensor};
pub fn kl_categorical_uniform(logits: &Tensor, prior_alpha: f64) -> Result<Tensor> {
let log_sm = candle_nn::ops::log_softmax(logits, 1)?;
let sm = log_sm.exp()?;
let d = sm.dim(1)? as f64;
let log_prior = (prior_alpha / d).ln();
let neg_entropy = sm.broadcast_mul(&log_sm)?.sum_all()?;
let total_distributions = sm.elem_count() as f64 / d;
neg_entropy - log_prior * total_distributions
}
pub fn pip_from_alpha(alpha: &Tensor) -> Result<Tensor> {
let one_minus = (1.0 - alpha)?.clamp(1e-10, 1.0)?;
let log_one_minus = one_minus.log()?;
let sum_log = log_one_minus.sum(0)?;
1.0 - sum_log.exp()?
}