use super::rules::{
AntiderivativeRule, DerivativeRule, DomainRangeData, MathIdentity, SpecialValue,
};
use crate::core::Expression;
use std::collections::HashMap;
#[derive(Clone)]
pub struct ElementaryProperties {
pub derivative_rule: Option<DerivativeRule>,
pub antiderivative_rule: Option<AntiderivativeRule>,
pub special_values: Vec<SpecialValue>,
pub identities: Box<Vec<MathIdentity>>,
pub domain_range: Box<DomainRangeData>,
pub periodicity: Option<Expression>,
pub wolfram_name: Option<&'static str>,
}
impl std::fmt::Debug for ElementaryProperties {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ElementaryProperties")
.field("derivative_rule", &self.derivative_rule)
.field("antiderivative_rule", &self.antiderivative_rule)
.field("special_values", &self.special_values)
.field("identities", &self.identities)
.field("domain_range", &self.domain_range)
.field("periodicity", &self.periodicity)
.field("wolfram_name", &self.wolfram_name)
.finish()
}
}
#[derive(Debug, Clone)]
pub struct UserProperties {
pub definition: Option<Expression>,
pub properties: Vec<UserProperty>,
pub derivatives: HashMap<crate::core::Symbol, Expression>,
pub domain: Option<super::rules::Domain>,
pub wolfram_name: Option<&'static str>,
}
#[derive(Debug, Clone)]
pub enum UserProperty {
Even,
Odd,
Periodic(Expression),
Monotonic,
Bounded,
}