use pyo3::prelude::*;
pub mod domain;
pub mod eval;
pub mod expression;
pub mod matrix;
pub mod polynomial;
pub mod solve;
pub use domain::{PyFiniteField, PyIntegerDomain, PyRationalDomain};
pub use eval::PyExpressionEvaluator;
pub use expression::Expression;
pub use matrix::PyMatrix;
pub use polynomial::{PyPolynomial, PyPolynomialFactor};
pub use solve::{
PyDiophantineSolution, py_solve_diophantine, py_solve_linear_integer, py_solve_linear_rational,
};
#[pymodule]
fn ocas(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add("__version__", env!("CARGO_PKG_VERSION"))?;
m.add_class::<Expression>()?;
m.add_class::<PyExpressionEvaluator>()?;
m.add_class::<PyDiophantineSolution>()?;
m.add_class::<PyPolynomial>()?;
m.add_class::<PyPolynomialFactor>()?;
m.add_class::<PyMatrix>()?;
m.add_class::<PyIntegerDomain>()?;
m.add_class::<PyRationalDomain>()?;
m.add_class::<PyFiniteField>()?;
m.add_function(wrap_pyfunction!(py_solve_linear_rational, m)?)?;
m.add_function(wrap_pyfunction!(py_solve_linear_integer, m)?)?;
m.add_function(wrap_pyfunction!(py_solve_diophantine, m)?)?;
Ok(())
}