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
//! This crate provides methods to read/write [`ndarray`]'s
//! [`ArrayBase`](ndarray::ArrayBase) type from/to [`.npy`] and [`.npz`] files.
//!
//! See the [repository] for information about the default features and how to
//! use this crate with Cargo.
//!
//! [repository]: https://github.com/jturner314/ndarray-npy
//! [`ndarray`]: https://github.com/bluss/ndarray
//! [`.npy`]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.lib.format.html
//! [`.npz`]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.savez.html
//!
//! # .npy Files
//!
//! - Reading
//!   - [`ReadNpyExt`] extension trait
//!   - [`read_npy`] convenience function
//! - Writing
//!   - [`WriteNpyExt`] extension trait
//!   - [`write_npy`] convenience function
//!   - [`write_zeroed_npy`] to write an `.npy` file (sparse if possible) of zeroed data
//! - Readonly viewing (primarily for use with memory-mapped files)
//!   - [`ViewNpyExt`] extension trait
//! - Mutable viewing (primarily for use with memory-mapped files)
//!   - [`ViewMutNpyExt`] extension trait
//!
//! It's possible to create `.npy` files larger than the available memory with
//! [`write_zeroed_npy`] and then modify them by memory-mapping and using
//! [`ViewMutNpyExt`].
//!
//! # .npz Files
//!
//! - Reading: [`NpzReader`]
//! - Writing: [`NpzWriter`]
//!
//! # Limitations
//!
//! * Parsing of `.npy` files is currently limited to files where the `descr`
//!   field of the [header dictionary] is a Python string literal of the form
//!   `'string'`, `"string"`, `'''string'''`, or `"""string"""`.
//!
//! * The element traits ([`WritableElement`], [`ReadableElement`],
//!   [`ViewElement`], and [`ViewMutElement`]) are currently implemented only
//!   for fixed-size integers up to 64 bits, floating point numbers, complex
//!   floating point numbers (if enabled with the crate feature), and [`bool`].
//!
//! The plan is to add support for more element types (including custom
//! user-defined structs) in the future.
//!
//! [header dictionary]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.lib.format.html#format-version-1-0

mod npy;
#[cfg(feature = "npz")]
mod npz;

pub use crate::npy::{
    read_npy, write_npy, write_zeroed_npy, ReadDataError, ReadNpyError, ReadNpyExt,
    ReadableElement, ViewDataError, ViewElement, ViewMutElement, ViewMutNpyExt, ViewNpyError,
    ViewNpyExt, WritableElement, WriteDataError, WriteNpyError, WriteNpyExt,
};
#[cfg(feature = "npz")]
pub use crate::npz::{NpzReader, NpzWriter, ReadNpzError, WriteNpzError};