use std::fmt::Debug;
use crate::{Math, SamplerStats};
pub trait Transformation<M: Math>: SamplerStats<M> + Debug {
fn init_from_untransformed_position(
&self,
math: &mut M,
untransformed_position: &M::Vector,
untransformed_gradient: &mut M::Vector,
transformed_position: &mut M::Vector,
transformed_gradient: &mut M::Vector,
) -> Result<(f64, f64), M::LogpErr>;
fn init_from_transformed_position(
&self,
math: &mut M,
untransformed_position: &mut M::Vector,
untransformed_gradient: &mut M::Vector,
transformed_position: &M::Vector,
transformed_gradient: &mut M::Vector,
) -> Result<(f64, f64), M::LogpErr>;
fn inv_transform_normalize(
&self,
math: &mut M,
untransformed_position: &M::Vector,
untransformed_gradient: &M::Vector,
transformed_position: &mut M::Vector,
transformed_gradient: &mut M::Vector,
) -> Result<f64, M::LogpErr>;
fn transformation_id(&self, math: &mut M) -> i64;
fn next_stats_options(
&self,
_math: &mut M,
current: <Self as SamplerStats<M>>::StatsOptions,
) -> <Self as SamplerStats<M>>::StatsOptions {
current
}
}