1use pyo3::prelude::*;
18
19pub mod domain;
20pub mod eval;
21pub mod expression;
22pub mod matrix;
23pub mod polynomial;
24pub mod solve;
25
26pub use domain::{PyFiniteField, PyIntegerDomain, PyRationalDomain};
27pub use eval::PyExpressionEvaluator;
28pub use expression::Expression;
29pub use matrix::PyMatrix;
30pub use polynomial::{PyPolynomial, PyPolynomialFactor};
31pub use solve::{
32 PyDiophantineSolution, py_solve_diophantine, py_solve_linear_integer, py_solve_linear_rational,
33};
34
35#[pymodule]
40fn ocas(m: &Bound<'_, PyModule>) -> PyResult<()> {
41 m.add("__version__", env!("CARGO_PKG_VERSION"))?;
42
43 m.add_class::<Expression>()?;
44 m.add_class::<PyExpressionEvaluator>()?;
45 m.add_class::<PyDiophantineSolution>()?;
46 m.add_class::<PyPolynomial>()?;
47 m.add_class::<PyPolynomialFactor>()?;
48 m.add_class::<PyMatrix>()?;
49 m.add_class::<PyIntegerDomain>()?;
50 m.add_class::<PyRationalDomain>()?;
51 m.add_class::<PyFiniteField>()?;
52
53 m.add_function(wrap_pyfunction!(py_solve_linear_rational, m)?)?;
54 m.add_function(wrap_pyfunction!(py_solve_linear_integer, m)?)?;
55 m.add_function(wrap_pyfunction!(py_solve_diophantine, m)?)?;
56
57 Ok(())
58}