pub mod defuzzify;
pub mod fuzzy_pid;
pub mod inference;
pub mod membership;
pub mod rule_base;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FuzzyError {
InvalidParameter(&'static str),
CapacityExceeded,
DivisionByZero,
InsufficientSamples,
}
impl core::fmt::Display for FuzzyError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
FuzzyError::InvalidParameter(msg) => write!(f, "InvalidParameter: {msg}"),
FuzzyError::CapacityExceeded => write!(f, "CapacityExceeded"),
FuzzyError::DivisionByZero => write!(f, "DivisionByZero"),
FuzzyError::InsufficientSamples => write!(f, "InsufficientSamples"),
}
}
}
pub use membership::{
BellShaped, Gaussian, MembershipFn, Sigmoid, Singleton, Trapezoidal, Triangular,
};
pub use rule_base::{
fnv1a_hash, Antecedent, Condition, Consequent, FuzzyRule, FuzzySet, LinguisticVar, RuleBase,
TNorm, MAX_ANTECEDENTS,
};
pub use inference::{
single_condition_antecedent, MamdaniEngine, SugenoEngine, SugenoRule, MAMDANI_SAMPLE_COUNT,
};
pub use defuzzify::{
bisector_of_area, centroid_of_gravity, largest_of_maxima, mean_of_maxima, smallest_of_maxima,
};
pub use fuzzy_pid::{FuzzyPid, FuzzyPidConfig};