use crate::DType;
use numr::error::Result;
use numr::ops::TensorOps;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub trait InformationTheoryAlgorithms<R: Runtime<DType = DType>>: TensorOps<R> {
fn entropy(&self, pk: &Tensor<R>, base: Option<f64>) -> Result<Tensor<R>>;
fn differential_entropy(&self, x: &Tensor<R>, k: usize) -> Result<Tensor<R>>;
fn kl_divergence(&self, pk: &Tensor<R>, qk: &Tensor<R>, base: Option<f64>)
-> Result<Tensor<R>>;
fn mutual_information(
&self,
x: &Tensor<R>,
y: &Tensor<R>,
bins: usize,
base: Option<f64>,
) -> Result<Tensor<R>>;
fn cross_entropy(&self, pk: &Tensor<R>, qk: &Tensor<R>, base: Option<f64>)
-> Result<Tensor<R>>;
fn nll_loss(&self, log_probs: &Tensor<R>, targets: &Tensor<R>) -> Result<Tensor<R>>;
}