1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
//! `rust-numpy` provides Rust interfaces for [NumPy C APIs](https://docs.scipy.org/doc/numpy/reference/c-api.html), //! especially for [ndarray](https://www.numpy.org/devdocs/reference/arrays.ndarray.html) class. //! //! It uses [pyo3](https://github.com/PyO3/pyo3) for rust bindings to cpython, and uses //! [ndarray](https://github.com/bluss/ndarray) for rust side matrix library. //! //! For numpy dependency, it calls `import numpy.core` internally. So you just need numpy //! installed by `pip install numpy` or other ways in your python environment. //! You can use both system environment and `virtualenv`. //! //! This library loads numpy module automatically. So if numpy is not installed, it simply panics, //! instead of returing a result. //! //! # Example //! //! ``` //! #[macro_use] //! extern crate ndarray; //! use pyo3::prelude::Python; //! use numpy::{ToPyArray, PyArray}; //! fn main() { //! let gil = Python::acquire_gil(); //! let py = gil.python(); //! let py_array = array![[1i64, 2], [3, 4]].to_pyarray(py); //! assert_eq!( //! py_array.as_array(), //! array![[1i64, 2], [3, 4]] //! ); //! } //! ``` #![feature(specialization)] #![deny(rust_2018_idioms)] #[macro_use] extern crate cfg_if; #[macro_use] extern crate pyo3; pub mod array; pub mod convert; pub mod error; pub mod npyffi; mod slice_box; pub mod types; pub use crate::array::{ get_array_module, PyArray, PyArray1, PyArray2, PyArray3, PyArray4, PyArray5, PyArray6, PyArrayDyn, }; pub use crate::convert::{IntoPyArray, NpyIndex, ToNpyDims, ToPyArray}; pub use crate::error::{ArrayShape, ErrorKind, IntoPyErr, IntoPyResult}; pub use crate::npyffi::{PY_ARRAY_API, PY_UFUNC_API}; pub use crate::types::{c32, c64, NpyDataType, TypeNum}; pub use ndarray::{Ix1, Ix2, Ix3, Ix4, Ix5, Ix6, IxDyn}; /// Test readme #[doc(hidden)] pub mod doc_test { macro_rules! doc_comment { ($x:expr, $($tt:tt)*) => { #[doc = $x] $($tt)* }; } macro_rules! doctest { ($x: literal, $y:ident) => { doc_comment!(include_str!($x), mod $y {}); }; } doctest!("../README.md", readme_md); }