pub mod activation;
pub mod container;
pub mod conv;
pub mod dropout;
pub mod linear;
pub mod loss;
pub mod module;
pub mod normalization;
pub mod pooling;
pub use container::{PyModuleList, PySequential};
pub use conv::{PyConv1d, PyConv2d};
pub use dropout::{PyAlphaDropout, PyDropout, PyDropout2d, PyDropout3d};
pub use linear::PyLinear;
pub use module::PyModule as PyNNModule;
pub use normalization::{PyBatchNorm1d, PyBatchNorm2d, PyLayerNorm};
pub use pooling::{PyAdaptiveAvgPool2d, PyAdaptiveMaxPool2d, PyAvgPool2d, PyMaxPool2d};
use pyo3::prelude::*;
use pyo3::types::{PyModule, PyModuleMethods};
pub fn register_nn_module(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<PyNNModule>()?;
m.add_class::<PyLinear>()?;
m.add_class::<PyConv1d>()?;
m.add_class::<PyConv2d>()?;
m.add_class::<PyBatchNorm1d>()?;
m.add_class::<PyBatchNorm2d>()?;
m.add_class::<PyLayerNorm>()?;
m.add_class::<PyDropout>()?;
m.add_class::<PyDropout2d>()?;
m.add_class::<PyDropout3d>()?;
m.add_class::<PyAlphaDropout>()?;
m.add_class::<PyMaxPool2d>()?;
m.add_class::<PyAvgPool2d>()?;
m.add_class::<PyAdaptiveAvgPool2d>()?;
m.add_class::<PyAdaptiveMaxPool2d>()?;
m.add_class::<PySequential>()?;
m.add_class::<PyModuleList>()?;
Ok(())
}