pub trait CpuLogpFunc: HasDims {
type LogpError: Debug + Send + Sync + Error + LogpError + 'static;
type FlowParameters;
type ExpandedVector: Storable<Self>;
// Required methods
fn dim(&self) -> usize;
fn logp(
&mut self,
position: &[f64],
gradient: &mut [f64],
) -> Result<f64, Self::LogpError>;
fn expand_vector<R>(
&mut self,
rng: &mut R,
array: &[f64],
) -> Result<Self::ExpandedVector, CpuMathError>
where R: Rng + ?Sized;
// Provided methods
fn vector_coord(&self) -> Option<Value> { ... }
fn inv_transform_normalize(
&mut self,
_params: &Self::FlowParameters,
_untransformed_position: &[f64],
_untransformed_gradient: &[f64],
_transformed_position: &mut [f64],
_transformed_gradient: &mut [f64],
) -> Result<f64, Self::LogpError> { ... }
fn init_from_untransformed_position(
&mut self,
_params: &Self::FlowParameters,
_untransformed_position: &[f64],
_untransformed_gradient: &mut [f64],
_transformed_position: &mut [f64],
_transformed_gradient: &mut [f64],
) -> Result<(f64, f64), Self::LogpError> { ... }
fn init_from_transformed_position(
&mut self,
_params: &Self::FlowParameters,
_untransformed_position: &mut [f64],
_untransformed_gradient: &mut [f64],
_transformed_position: &[f64],
_transformed_gradient: &mut [f64],
) -> Result<(f64, f64), Self::LogpError> { ... }
fn update_transformation<'a, R: Rng + ?Sized>(
&'a mut self,
_rng: &mut R,
_untransformed_positions: impl ExactSizeIterator<Item = &'a [f64]>,
_untransformed_gradients: impl ExactSizeIterator<Item = &'a [f64]>,
_untransformed_logp: impl ExactSizeIterator<Item = &'a f64>,
_params: &'a mut Self::FlowParameters,
) -> Result<(), Self::LogpError> { ... }
fn new_transformation<R: Rng + ?Sized>(
&mut self,
_rng: &mut R,
_untransformed_position: &[f64],
_untransformed_gradient: &[f64],
_chain: u64,
) -> Result<Self::FlowParameters, Self::LogpError> { ... }
fn transformation_id(
&self,
_params: &Self::FlowParameters,
) -> Result<i64, Self::LogpError> { ... }
}
Required Associated Types§
type LogpError: Debug + Send + Sync + Error + LogpError + 'static
type FlowParameters
type ExpandedVector: Storable<Self>
Required Methods§
fn dim(&self) -> usize
fn logp( &mut self, position: &[f64], gradient: &mut [f64], ) -> Result<f64, Self::LogpError>
fn expand_vector<R>( &mut self, rng: &mut R, array: &[f64], ) -> Result<Self::ExpandedVector, CpuMathError>
Provided Methods§
fn vector_coord(&self) -> Option<Value>
fn inv_transform_normalize( &mut self, _params: &Self::FlowParameters, _untransformed_position: &[f64], _untransformed_gradient: &[f64], _transformed_position: &mut [f64], _transformed_gradient: &mut [f64], ) -> Result<f64, Self::LogpError>
fn init_from_untransformed_position( &mut self, _params: &Self::FlowParameters, _untransformed_position: &[f64], _untransformed_gradient: &mut [f64], _transformed_position: &mut [f64], _transformed_gradient: &mut [f64], ) -> Result<(f64, f64), Self::LogpError>
fn init_from_transformed_position( &mut self, _params: &Self::FlowParameters, _untransformed_position: &mut [f64], _untransformed_gradient: &mut [f64], _transformed_position: &[f64], _transformed_gradient: &mut [f64], ) -> Result<(f64, f64), Self::LogpError>
fn update_transformation<'a, R: Rng + ?Sized>( &'a mut self, _rng: &mut R, _untransformed_positions: impl ExactSizeIterator<Item = &'a [f64]>, _untransformed_gradients: impl ExactSizeIterator<Item = &'a [f64]>, _untransformed_logp: impl ExactSizeIterator<Item = &'a f64>, _params: &'a mut Self::FlowParameters, ) -> Result<(), Self::LogpError>
fn new_transformation<R: Rng + ?Sized>( &mut self, _rng: &mut R, _untransformed_position: &[f64], _untransformed_gradient: &[f64], _chain: u64, ) -> Result<Self::FlowParameters, Self::LogpError>
fn transformation_id( &self, _params: &Self::FlowParameters, ) -> Result<i64, Self::LogpError>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.