From 146051e060b072e4adef1c2a20a031fd454665d1 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 25 Aug 2025 10:59:41 +0300 Subject: [PATCH 1/2] Use the half crate instead of requiring nightly feature f16 --- Cargo.lock | 1 + Cargo.toml | 3 ++- README.md | 6 +----- examples/generate_mrc_files.rs | 9 ++++----- src/lib.rs | 2 +- src/view.rs | 1 + 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a59a7c3..85d16ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -317,6 +317,7 @@ version = "0.1.0" dependencies = [ "bytemuck", "criterion", + "half", "memmap2", "tempfile", ] diff --git a/Cargo.toml b/Cargo.toml index 3fba9d0..2d114d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,8 +17,9 @@ bytemuck = { version = "1.15", default-features = false, features = ["derive"] } memmap2 = { version = "0.9", optional = true } [dev-dependencies] -tempfile = "3.8" criterion = { version = "0.5", features = ["html_reports"] } +half = "2.6.0" +tempfile = "3.8" [[example]] name = "test_real_mrc" diff --git a/README.md b/README.md index 040a52f..0107640 100644 --- a/README.md +++ b/README.md @@ -365,7 +365,7 @@ fn calculate_statistics(data: &[f32]) -> Statistics { | `std` | Standard library support | ✅ | File I/O, Error trait | | `mmap` | Memory-mapped I/O | ✅ | Large file processing | | `file` | File operations | ✅ | `MrcFile::open()` | -| `f16` | Half-precision support | ❌ | Requires nightly Rust | +| `f16` | Half-precision support | ❌ | | ### no_std Usage @@ -492,10 +492,6 @@ We welcome contributions! Here's how to get started: git clone https://github.com/your-org/mrc.git cd mrc -# Install nightly Rust (required for f16) -rustup install nightly -rustup override set nightly - # Install dependencies cargo build --all-features diff --git a/examples/generate_mrc_files.rs b/examples/generate_mrc_files.rs index c6541cc..86dc4e2 100644 --- a/examples/generate_mrc_files.rs +++ b/examples/generate_mrc_files.rs @@ -1,5 +1,4 @@ -#![feature(f16)] - +use half::f16; use mrc::Header; use mrc::Mode; use std::fs::File; @@ -90,7 +89,7 @@ fn create_ball_data_2d(mode: Mode, width: usize, height: usize, diameter: f32) - } else { 0.0f32 }; - let f16_value = value as f16; + let f16_value = f16::from_f32(value); data.extend_from_slice(&f16_value.to_le_bytes()); } } @@ -165,7 +164,7 @@ fn create_ball_data_3d( } else { 0.0f32 }; - let f16_value = value as f16; + let f16_value = f16::from_f32(value); data.extend_from_slice(&f16_value.to_le_bytes()); } } @@ -275,7 +274,7 @@ fn create_mrc_file(mode: i32, filename: &str) -> std::io::Result<()> { } Mode::Float16 => { for chunk in data.chunks_exact(2) { - let val = f16::from_le_bytes([chunk[0], chunk[1]]) as f32; + let val = f16::from_le_bytes([chunk[0], chunk[1]]).into(); min_val = min_val.min(val); max_val = max_val.max(val); sum += val as f64; diff --git a/src/lib.rs b/src/lib.rs index 0ad24d2..6040c9c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ #![no_std] -#![cfg_attr(feature = "f16", feature(f16))] +#[cfg(feature = "std")] extern crate alloc; mod header; diff --git a/src/view.rs b/src/view.rs index 412bca7..8a0c6fc 100644 --- a/src/view.rs +++ b/src/view.rs @@ -244,6 +244,7 @@ impl<'a> MrcViewMut<'a> { } Some(Mode::Float16) => { // 2-byte f16 types - use u16 for bytemuck compatibility + // TODO: this should return f16s when the f16 feature is enabled let data = self.view_mut::()?; for val in data.iter_mut() { let bytes = bytemuck::bytes_of_mut(val); From 4cffab6f1cd217e406f38d30326cc4bfdc052cdb Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 25 Aug 2025 11:00:02 +0300 Subject: [PATCH 2/2] Remove toolchain file --- rust-toolchain.toml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 rust-toolchain.toml diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index f80e421..0000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,4 +0,0 @@ -[toolchain] -channel = "nightly" -components = ["rustfmt", "clippy"] -targets = ["x86_64-unknown-linux-gnu"] \ No newline at end of file