Skip to main content

Drop-in replacement for fisher-py without dotnet required

Project description

native-fisher-py

PyPI version Tests Documentation Status

Why native-fisher-py?

native-fisher-py is a high-performance, drop-in replacement for the legacy fisher-py reader. While the original fisher-py relies on pythonnet and a local .NET runtime (which often fails in CI/CD or specialized Linux environments), native-fisher-py utilizes .NET NativeAOT and Rust to provide a self-contained, high-speed binary bridge.

Features

  • Drop-in Replacement: Designed to match the fisher_py.RawFile API for seamless migration.
  • Zero .NET Dependency: No local .NET runtime or pythonnet required on the host machine. Everything is bundled.
  • Cross-Platform: Native binaries for macOS (ARM64/x64), Linux (x64), and Windows (x64).
  • Turbo-charged Performance: Significantly faster metadata discovery and spectral extraction than the legacy Python bridge.

How it works

This project is a clean native bridge to the official Thermo Fisher libraries. It uses a three-layer architecture to provide cross-platform compatibility:

  1. Official DLLs: We use the original .dll assemblies provided by Thermo Fisher Scientific.
  2. C# NativeAOT Wrapper: A thin, compiled layer (ThermoNativeReader) interfaces directly with the official DLLs and exports a simple C-compatible API.
  3. Rust PyO3 Layer: A high-performance Rust bridge (native-fisher-py) provides the Python bindings and handles memory safety and NumPy integration.

This approach ensures that we maintain binary-level parity with the official reader while providing a lightweight, dependency-free experience for Python users.

Quick Start

# Just change the import, the rest of your code stays the same!
from native_fisher_py import RawFile

with RawFile("data.raw") as raw:
    print(f"Number of scans: {raw.number_of_scans}")
    
    # Get spectral data as high-speed NumPy arrays
    m, i, c, meta = raw.get_scan_from_scan_number(1)
    print(f"First peak at {m[0]} m/z with intensity {i[0]}")

Migrating from fisher-py

If you are currently using fisher-py, migration is as simple as:

  1. pip install native-fisher-py
  2. Update your imports:
- from fisher_py import RawFile
+ from native_fisher_py import RawFile
  1. (Optional) Uninstall the old package: pip uninstall fisher-py

All core methods (get_scan_from_scan_number, get_spectrum, get_chromatogram, get_ms2_scan_number_from_retention_time, etc.) are implemented with identical signatures and return types.

Quick Local Build

For convenience, you can run the included build.sh script to build both parts of the project:

./build.sh

Step-by-Step Manual Build

To build the project from source, you need .NET 8 SDK, Rust (cargo/maturin), and clang.

1. Build the C# NativeAOT Core

Navigate to the C# project and publish the NativeAOT shared library for your platform:

cd native/ThermoNativeReader

# Example for Apple Silicon (macOS arm64)
dotnet publish -r osx-arm64 -c Release -p:PublishAot=true

# Example for Linux (x64)
# dotnet publish -r linux-x64 -c Release -p:PublishAot=true

The output will be in publish/ThermoNativeReader.dylib (or .so / .dll).

2. Build the Rust Bridge

Navigate to the native_fisher_py folder and use maturin to build and install the Python package. You must point to the location of the C# library.

cd native_fisher_py

# Point to your build from Step 1
export THERMO_NATIVE_LIB=$(pwd)/../native/ThermoNativeReader/bin/Release/net8.0/osx-arm64/publish/ThermoNativeReader.dylib

maturin develop

Credits & Legal Notice

This project is powered by the Thermo Fisher Scientific RawFileReader (copyright © 2016-2026 Thermo Fisher Scientific, Inc.). All rights reserved.

The native-fisher-py package includes the official RawFileReader libraries, which remain the property of Thermo Fisher Scientific. By using this software, you agree to the terms specified in their license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

native_fisher_py-0.2.2-cp39-abi3-win_amd64.whl (4.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

native_fisher_py-0.2.2-cp39-abi3-manylinux_2_34_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.34+ x86-64

native_fisher_py-0.2.2-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (10.8 MB view details)

Uploaded CPython 3.9+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file native_fisher_py-0.2.2-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for native_fisher_py-0.2.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 901b6bd93e2ae425061db9ad700e292f0d842bcdb50eb4ef9b949e9f4c7a8127
MD5 dc9054fd1ab677690c093c80864a49ce
BLAKE2b-256 ece45751ad653479990c7c7a0d0f4901a8790f652927090d8c02fb2a1bd70aa9

See more details on using hashes here.

Provenance

The following attestation bundles were made for native_fisher_py-0.2.2-cp39-abi3-win_amd64.whl:

Publisher: release.yml on z3rone-org/native-fisher-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file native_fisher_py-0.2.2-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for native_fisher_py-0.2.2-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8be03ccc79c3a7568b70a8bd77a1c1018d5b1aad93d4d113135501502851be96
MD5 865d823d9038c5e1a7e9948cd2a582ca
BLAKE2b-256 406f62b25bdaea805c588a7c1779fc7b8b3accb50b8be9d3f2ad3c4ed944109d

See more details on using hashes here.

Provenance

The following attestation bundles were made for native_fisher_py-0.2.2-cp39-abi3-manylinux_2_34_x86_64.whl:

Publisher: release.yml on z3rone-org/native-fisher-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file native_fisher_py-0.2.2-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for native_fisher_py-0.2.2-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ea9e4fb7b35cc4de7f5563bebe51b7952d48f086e68192759ab6425022873731
MD5 cf770a64089e9a199c1bfde958ac0a1c
BLAKE2b-256 e8adf0101a2753e2d7e042f8649b93c2020b74f1aaeb6c042a72c34d981948f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for native_fisher_py-0.2.2-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on z3rone-org/native-fisher-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page