#![no_std]
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
pub mod error;
pub mod ring;
#[cfg(feature = "int")]
mod limb;
#[cfg(feature = "int")]
pub mod int;
#[cfg(feature = "int")]
pub mod nat;
#[cfg(feature = "int")]
pub mod random;
#[cfg(feature = "int")]
mod ecm;
#[cfg(feature = "int")]
mod qsieve;
#[cfg(feature = "num-traits")]
mod num_traits_impls;
#[cfg(feature = "rational")]
pub mod rational;
#[cfg(feature = "rational")]
pub mod inf_rational;
#[cfg(feature = "int")]
pub mod mod_int;
#[cfg(feature = "dyadic")]
pub mod dyadic;
#[cfg(feature = "padic")]
pub mod padic;
#[cfg(feature = "decimal")]
pub mod decimal;
#[cfg(feature = "complex")]
pub mod complex;
#[cfg(feature = "galois")]
pub mod galois;
#[cfg(feature = "poly")]
pub mod poly;
#[cfg(feature = "matrix")]
pub mod matrix;
#[cfg(all(feature = "poly", feature = "rational"))]
mod poly_factor;
#[cfg(all(feature = "poly", feature = "int"))]
mod poly_finite_field;
#[cfg(feature = "lattice")]
pub mod lattice;
#[cfg(feature = "identify")]
pub mod identify;
#[cfg(feature = "dlog")]
pub mod dlog;
#[cfg(feature = "primality")]
pub mod primality;
#[cfg(feature = "algebraic")]
pub mod quadratic;
#[cfg(feature = "algebraic")]
pub mod algebraic;
#[cfg(feature = "elliptic")]
pub mod elliptic;
#[cfg(feature = "float")]
pub mod float;
#[cfg(feature = "float")]
mod float_consts;
#[cfg(feature = "float")]
mod float_mp;
#[cfg(feature = "float")]
mod float_mp_consts;
#[cfg(feature = "float")]
pub mod fixed_float;
#[cfg(feature = "interval")]
pub mod interval;
#[cfg(feature = "ball")]
pub mod ball;
#[cfg(feature = "ball")]
pub mod ball_solve;
#[cfg(feature = "ffi")]
pub mod ffi;
#[cfg(feature = "serde")]
mod serde_impls;
pub use error::{Error, Result};
pub use ring::{Field, Ring};
#[cfg(feature = "int")]
pub use ring::FiniteField;
#[cfg(all(feature = "poly", feature = "int"))]
pub use poly_finite_field::FactorOverField;
#[cfg(feature = "int")]
pub use int::{Int, Sign};
#[cfg(feature = "int")]
pub use nat::{Nat, Reciprocal, u_gcd, u64_gcd};
#[cfg(feature = "int")]
pub use random::{RandomSource, SeedRng};
#[cfg(feature = "rational")]
pub use inf_rational::InfRational;
#[cfg(feature = "rational")]
pub use rational::Rational;
#[cfg(feature = "int")]
pub use mod_int::ModInt;
#[cfg(feature = "dyadic")]
pub use dyadic::Dyadic;
#[cfg(feature = "padic")]
pub use padic::Padic;
#[cfg(feature = "decimal")]
pub use decimal::{Decimal, Rounding};
#[cfg(feature = "complex")]
pub use complex::Complex;
#[cfg(feature = "galois")]
pub use galois::{GaloisField, GfElement};
#[cfg(feature = "poly")]
pub use poly::Poly;
#[cfg(feature = "matrix")]
pub use matrix::{FieldMatrix, Matrix, RingMatrix};
#[cfg(feature = "lattice")]
pub use lattice::{lll_reduce, lll_reduce_delta};
#[cfg(feature = "identify")]
pub use identify::{Identification, identify, identify_with, machin_like};
#[cfg(feature = "dlog")]
pub use dlog::{bsgs, discrete_log, pohlig_hellman, pollard_rho};
#[cfg(feature = "primality")]
pub use primality::{Primality, PrimalityCertificate, prove_prime};
#[cfg(feature = "algebraic")]
pub use algebraic::Algebraic;
#[cfg(feature = "algebraic")]
pub use quadratic::Quadratic;
#[cfg(feature = "elliptic")]
pub use elliptic::{EllipticCurve, Point};
#[cfg(feature = "float")]
pub use fixed_float::FixedFloat;
#[cfg(feature = "float")]
pub use float::{Float, RoundingMode};
#[cfg(feature = "ball")]
pub use ball::Ball;
#[cfg(feature = "ball")]
pub use ball_solve::bisect_root;
#[cfg(feature = "interval")]
pub use interval::Interval;
pub const VERSION: &str = env!("CARGO_PKG_VERSION");