use pyo3::prelude::*;
mod batch;
mod caloritronics;
mod dynamics;
mod effects;
mod llb;
mod materials;
mod simulation;
mod vector;
pub use batch::{batch_rk4_multistep, batch_rk4_step};
pub use caloritronics::{PyOnsagerMatrix, PySpinCaloritronicsMaterial};
pub use dynamics::PyLlgSimulator;
pub use effects::PyInverseSpinHall;
pub use llb::{PyLlbMaterial, PyLlbSolver};
pub use materials::{PyFerromagnet, PySpinInterface};
pub use simulation::PySpinPumpingSimulation;
pub use vector::PyVector3;
#[pymodule]
pub fn spintronics(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<PyVector3>()?;
m.add_class::<PyFerromagnet>()?;
m.add_class::<PySpinInterface>()?;
m.add_class::<PyInverseSpinHall>()?;
m.add_class::<PyLlgSimulator>()?;
m.add_class::<PyLlbMaterial>()?;
m.add_class::<PyLlbSolver>()?;
m.add_class::<PyOnsagerMatrix>()?;
m.add_class::<PySpinCaloritronicsMaterial>()?;
m.add_class::<PySpinPumpingSimulation>()?;
m.add_function(wrap_pyfunction!(batch_rk4_step, m)?)?;
m.add_function(wrap_pyfunction!(batch_rk4_multistep, m)?)?;
m.add("HBAR", crate::constants::HBAR)?;
m.add("GAMMA", crate::constants::GAMMA)?;
m.add("E_CHARGE", crate::constants::E_CHARGE)?;
m.add("MU_B", crate::constants::MU_B)?;
m.add("KB", crate::constants::KB)?;
Ok(())
}