use deep_causality_algebra::RealField;
use deep_causality_num::FromPrimitive;
use deep_causality_uncertain::ProbabilisticType;
use super::dropout_verbosity::DropoutVerbosity;
use super::uncertain_boundary_source::UncertainBoundarySource;
#[derive(Debug, Clone, Copy)]
pub struct UncertainInflowZone<R> {
wall_axis: usize,
max_side: bool,
flow_axis: usize,
source: UncertainBoundarySource<R>,
}
impl<R> UncertainInflowZone<R>
where
R: RealField + FromPrimitive + ProbabilisticType + core::fmt::Debug,
{
pub fn new(wall_axis: usize, max_side: bool, flow_axis: usize, default_inflow: R) -> Self {
Self {
wall_axis,
max_side,
flow_axis,
source: UncertainBoundarySource::new(default_inflow),
}
}
pub fn with_presence_gate(
mut self,
threshold: f64,
confidence: f64,
epsilon: f64,
max_samples: usize,
) -> Self {
self.source = self
.source
.with_presence_gate(threshold, confidence, epsilon, max_samples);
self
}
pub fn with_collapse_samples(mut self, collapse_samples: usize) -> Self {
self.source = self.source.with_collapse_samples(collapse_samples);
self
}
pub fn with_qmc_collapse(mut self, base_seed: u64) -> Self {
self.source = self.source.with_qmc_collapse(base_seed);
self
}
pub fn with_verbosity(mut self, verbosity: DropoutVerbosity) -> Self {
self.source = self.source.with_verbosity(verbosity);
self
}
pub fn wall_axis(&self) -> usize {
self.wall_axis
}
pub fn max_side(&self) -> bool {
self.max_side
}
pub fn flow_axis(&self) -> usize {
self.flow_axis
}
pub fn source(&self) -> &UncertainBoundarySource<R> {
&self.source
}
pub fn default_inflow(&self) -> R {
self.source.default_value()
}
}