#![cfg_attr(docsrs, feature(doc_cfg))]
use std::sync::atomic::AtomicBool;
#[cfg(feature = "python_export")]
pub mod api;
#[cfg(not(feature = "python_export"))]
mod api;
pub mod atom;
pub mod coefficient;
mod collect;
mod derivative;
pub mod domains;
pub mod evaluate;
mod expand;
pub mod id;
pub mod license;
mod normalize;
pub mod parser;
pub mod poly;
pub mod printer;
pub mod solve;
pub mod state;
pub mod streaming;
pub mod tensors;
pub mod transcendental;
pub mod transformer;
pub mod utils;
pub mod prelude {
pub use crate::rand::{Rng, RngCore, SeedableRng};
pub use crate::{
create_hyperdual_from_components, create_hyperdual_single_derivative, function, get_symbol,
hide_namespace, initialize, namespace, parse, parse_lit, symbol, symbol_group, tag,
try_parse, try_parse_lit, try_symbol, try_symbol_group,
};
pub use crate::atom::{
AliasedAtom, Atom, AtomCore, AtomIndex, AtomOrView, AtomType, AtomView, EvaluationError,
EvaluationInfo, FunctionArgument, FunctionBuilder, Indeterminate, InlineNum, InlineVar,
PolynomialConversionError, SeriesError, Symbol, TensorCanonicalizationError, UserData,
UserDataKey,
};
pub use crate::coefficient::{Coefficient, CoefficientView, ConvertToRing};
pub use crate::domains::{
EuclideanDomain, Field, OrderedRing, RealEmbedding, Ring, RingOps, SampleableRing, Set,
algebraic::{
AlgebraicContext, AlgebraicEmbedding, AlgebraicExtension, AlgebraicNumber,
AlgebraicQuotient, Root,
},
atom::AtomField,
dual::HyperDual,
factorized_rational_polynomial::FactorizedRationalPolynomial,
finite_field::{FiniteField, FiniteFieldCore, FiniteFieldElement, Z2, Zp, Zp64},
float::{
Complex, Constructible, DoubleFloat, ErrorPropagatingFloat, F64, Float, FloatLike,
Real, RealLike, SingleFloat,
},
integer::{Integer, IntegerRing, Z},
rational::{Q, Rational},
rational_polynomial::{
LogarithmicIntegralTerm, RationalIntegral, RationalPolynomial, RationalPolynomialField,
},
};
#[cfg(feature = "native_code_generation")]
pub use crate::evaluate::{
BatchEvaluator, CompileOptions, CompiledCode, CompiledComplexEvaluator, CompiledNumber,
CompiledRealEvaluator, CompiledSimdComplexEvaluator, CompiledSimdRealEvaluator,
EvaluatorLoader, ExportNumber, ExportSettings, ExportedCode, InlineASM,
JITCompilationSettings,
};
pub use crate::evaluate::{
Dualizer, EvaluationDomain, EvaluationFn, EvaluatorBuilder, ExportedInstructions,
ExportedSubEvaluator, ExpressionEvaluator, ExternalFunction, FunctionMap, Instruction,
OperationCount, OptimizationSettings, Vectorize,
};
pub use crate::id::{
AtomTreeIterator, BorrowReplacement, Condition, ConditionResult, Match, MatchError,
MatchSettings, MatchStack, Pattern, PatternAtomTreeIterator, PatternRestriction, Relation,
ReplaceBuilder, ReplaceIterator, ReplaceSettings, ReplaceWith, Replacement,
WildcardRestriction,
};
pub use crate::numerical_integration::{
ContinuousGrid, DiscreteGrid, Grid, MonteCarloRng, Sample,
};
pub use crate::parser::{ParseMode, ParseSettings, Token};
pub use crate::poly::{
CoefficientToExpression, Exponent, GrevLexOrder, IntoVariableMap, LexOrder, MonomialOrder,
PolyVariable, PolynomialResultant, PositiveExponent,
factor::Factorize,
gcd::PolynomialGCD,
groebner::{
GroebnerBasis, ParameterField, ParametricExtension, ParametricRoot, ParametricSolution,
PolynomialSolution,
},
polynomial::{
MultivariatePolynomial, PolynomialRing, PolynomialSamplingPolicy,
PositiveRealRootCountError,
},
series::{Series, SeriesDepth},
univariate::{
UnivariatePolynomial, UnivariatePolynomialRing, UnivariatePolynomialSamplingPolicy,
},
};
pub use crate::printer::{
AtomPrinter, CanonicalOrderingSettings, PrintMode, PrintOptions, PrintState,
};
pub use crate::solve::{
Complexes, Integers, Rationals, Reals, Solution, SolutionCondition, SolutionSet,
SolveBuilder, SolveCoverage, SolveDomain, SolveError,
};
pub use crate::license::LicenseManager;
pub use crate::state::State;
pub use crate::streaming::{TermStreamer, TermStreamerConfig};
pub use crate::tensors::{
CanonicalTensor,
matrix::{Matrix, Vector},
};
pub use crate::transcendental::TranscendentalFunctions;
pub use crate::transformer::Transformer;
}
pub use evaluate::OperationCount;
pub use graphica as graph; #[doc(hidden)]
pub use inventory as _inventory;
pub use numerica::*;
#[cfg(feature = "faster_alloc")]
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
pub struct GlobalSettings {
pub initialize_tracing: AtomicBool,
pub use_hu_monagan_poly_gcd: AtomicBool,
pub force_hu_monagan_poly_gcd: AtomicBool,
pub use_univariate_factorization: AtomicBool,
pub use_bivariate_factorization: AtomicBool,
}
pub static GLOBAL_SETTINGS: GlobalSettings = GlobalSettings {
initialize_tracing: AtomicBool::new(true),
use_hu_monagan_poly_gcd: AtomicBool::new(true),
force_hu_monagan_poly_gcd: AtomicBool::new(false),
use_univariate_factorization: AtomicBool::new(true),
use_bivariate_factorization: AtomicBool::new(true),
};
#[macro_export]
macro_rules! error {
($($arg:tt)*) => {
if $crate::GLOBAL_SETTINGS.initialize_tracing.load(std::sync::atomic::Ordering::Relaxed) {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
.from_env_lossy(),
)
.try_init();
$crate::GLOBAL_SETTINGS.initialize_tracing.store(false, std::sync::atomic::Ordering::Relaxed);
}
tracing::error!($($arg)*);
};
}
#[macro_export]
macro_rules! warn {
($($arg:tt)*) => {
if $crate::GLOBAL_SETTINGS.initialize_tracing.load(std::sync::atomic::Ordering::Relaxed) {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
.from_env_lossy(),
)
.try_init();
$crate::GLOBAL_SETTINGS.initialize_tracing.store(false, std::sync::atomic::Ordering::Relaxed);
}
tracing::warn!($($arg)*);
};
}
#[macro_export]
macro_rules! info {
($($arg:tt)*) => {
if $crate::GLOBAL_SETTINGS.initialize_tracing.load(std::sync::atomic::Ordering::Relaxed) {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
.from_env_lossy(),
)
.try_init();
$crate::GLOBAL_SETTINGS.initialize_tracing.store(false, std::sync::atomic::Ordering::Relaxed);
}
tracing::info!($($arg)*);
};
}