pub mod error;
pub mod factor;
pub mod interp;
pub mod multipoly;
pub mod rational;
pub mod resultant;
pub mod real_roots;
pub mod unipoly;
#[cfg(feature = "groebner")]
pub mod groebner;
#[cfg(test)]
mod proptests;
pub use error::{ConversionError, FactorError};
pub use factor::{
factor_multivariate_z, factor_univariate_mod_p, factor_univariate_z, MultiPolyFactorization,
UniPolyFactorModP, UniPolyFactorization,
};
pub use interp::{sparse_interpolate, sparse_interpolate_univariate, SparseInterpError};
pub use multipoly::MultiPoly;
pub use rational::RationalFunction;
pub use resultant::{resultant, subresultant_prs, ResultantError};
pub use real_roots::{real_roots, real_roots_symbolic, refine_root, RealRootError, RootInterval};
pub use unipoly::UniPoly;
use crate::kernel::{ExprId, ExprPool};
pub fn poly_normal(
expr: ExprId,
vars: Vec<ExprId>,
pool: &ExprPool,
) -> Result<ExprId, ConversionError> {
let mp = MultiPoly::from_symbolic(expr, vars, pool)?;
Ok(mp.to_expr(pool))
}