fpzip_rs/lib.rs
1//! # fpzip-rs
2//!
3//! Lossless and lossy compression for multi-dimensional floating-point arrays.
4//!
5//! A faithful Rust port of Peter Lindstrom's
6//! [FPZip](https://computing.llnl.gov/projects/fpzip) algorithm, producing
7//! byte-identical output with the C++ reference implementation. Compresses
8//! `f32` and `f64` arrays with 1D, 2D, 3D, and 4D support.
9//!
10//! # Quick Start
11//!
12//! ```
13//! use fpzip_rs::{compress_f32, decompress_f32};
14//!
15//! let data: Vec<f32> = (0..1000).map(|i| (i as f32 * 0.01).sin()).collect();
16//! let compressed = compress_f32(&data, 10, 10, 10, 1).unwrap();
17//! let decompressed = decompress_f32(&compressed).unwrap();
18//! assert_eq!(data, decompressed);
19//! ```
20//!
21//! # Lossy Compression
22//!
23//! Use [`FpZipCompressor`] with [`prec`](FpZipCompressor::prec) to set reduced
24//! bit precision for lossy compression with better ratios:
25//!
26//! ```
27//! use fpzip_rs::FpZipCompressor;
28//!
29//! let data: Vec<f32> = (0..64).map(|i| i as f32 * 0.1).collect();
30//! let compressed = FpZipCompressor::new(4)
31//! .ny(4)
32//! .nz(4)
33//! .prec(16) // 16-bit precision (lossy)
34//! .compress_f32(&data)
35//! .unwrap();
36//! ```
37
38#![cfg_attr(not(feature = "std"), no_std)]
39
40#[cfg(feature = "alloc")]
41extern crate alloc;
42
43pub mod codec;
44pub mod compressor;
45pub mod core;
46pub mod decoder;
47pub mod encoder;
48pub mod error;
49pub mod header;
50
51// Re-exports for convenience
52pub use compressor::{
53 compress_f32, compress_f32_into, compress_f64, compress_f64_into, decompress_f32,
54 decompress_f32_into, decompress_f64, decompress_f64_into, max_compressed_size, read_header,
55 FpZipCompressor,
56};
57pub use error::{FpZipError, Result};
58pub use header::{FpZipHeader, FpZipType};
59
60#[cfg(feature = "std")]
61pub use compressor::{
62 compress_f32_to_writer, compress_f64_to_writer, decompress_f32_from_reader,
63 decompress_f64_from_reader,
64};