Python Integration

std::autodiff is fully handled by the Rust compiler and therefore should not cause any issues with Python integration. An example for maturin/PyO3 is provided below. You will still need to enable lto=fat in your Cargo.toml and adjust the module name to match your project, otherwise python won't be able to find your functions. The first #[pyfunction] macro will only be applied to the original function f. We therefore add a small wrapper function df_py and apply the #[pyfunction] macro to it.

```rs #![feature(autodiff)] use std::autodiff::autodiff; use pyo3::prelude::*; #[pyfunction] #[autodiff(df, Reverse, Active, Active)] fn f(x: f32) -> f32 { x * x } // Will return x*x and 2*x #[pyfunction] fn df_py(x: f32) -> (f32, f32) { df(x, 1.0) } // Remember to adjust the name of the module to match your project #[pymodule] fn my_module(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(f_py, m)?)?; m.add_function(wrap_pyfunction!(df_py, m)?)?; Ok(()) }