isodec 2.0.0b2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- isodec-2.0.0b2/.github/workflows/docs.yml +48 -0
- isodec-2.0.0b2/.github/workflows/publish.yml +203 -0
- isodec-2.0.0b2/.github/workflows/tests.yml +111 -0
- isodec-2.0.0b2/.gitignore +13 -0
- isodec-2.0.0b2/.gitmodules +3 -0
- isodec-2.0.0b2/CITATION.cff +44 -0
- isodec-2.0.0b2/LICENSE +28 -0
- isodec-2.0.0b2/MANIFEST.in +15 -0
- isodec-2.0.0b2/PKG-INFO +121 -0
- isodec-2.0.0b2/PUBLISHING.md +41 -0
- isodec-2.0.0b2/README.md +71 -0
- isodec-2.0.0b2/THIRD_PARTY_NOTICES.md +12 -0
- isodec-2.0.0b2/docs/api.md +24 -0
- isodec-2.0.0b2/docs/command-line.md +9 -0
- isodec-2.0.0b2/docs/development.md +23 -0
- isodec-2.0.0b2/docs/getting-started.md +23 -0
- isodec-2.0.0b2/docs/index.md +15 -0
- isodec-2.0.0b2/extern/IsoGen/.github/workflows/docs.yml +68 -0
- isodec-2.0.0b2/extern/IsoGen/.github/workflows/publish.yml +378 -0
- isodec-2.0.0b2/extern/IsoGen/.github/workflows/tests.yml +136 -0
- isodec-2.0.0b2/extern/IsoGen/.gitignore +14 -0
- isodec-2.0.0b2/extern/IsoGen/CITATION.cff +139 -0
- isodec-2.0.0b2/extern/IsoGen/LICENSE +11 -0
- isodec-2.0.0b2/extern/IsoGen/MANIFEST.in +12 -0
- isodec-2.0.0b2/extern/IsoGen/PUBLISHING.md +140 -0
- isodec-2.0.0b2/extern/IsoGen/README.md +382 -0
- isodec-2.0.0b2/extern/IsoGen/THIRD_PARTY_NOTICES.md +22 -0
- isodec-2.0.0b2/extern/IsoGen/benchmarks/compare_performance.py +89 -0
- isodec-2.0.0b2/extern/IsoGen/benchmarks/wheel_performance.py +131 -0
- isodec-2.0.0b2/extern/IsoGen/bin/intel-software-development-tools-license -overview-august-2024.pdf +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/isogen.dll +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/isogen.lib +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/isogen.so +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/isogen_test +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/isogen_test.exe +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/libmmd.dll +0 -0
- isodec-2.0.0b2/extern/IsoGen/bin/svml_dispmd.dll +0 -0
- isodec-2.0.0b2/extern/IsoGen/docs/api.md +133 -0
- isodec-2.0.0b2/extern/IsoGen/docs/command-line.md +50 -0
- isodec-2.0.0b2/extern/IsoGen/docs/development.md +82 -0
- isodec-2.0.0b2/extern/IsoGen/docs/getting-started.md +138 -0
- isodec-2.0.0b2/extern/IsoGen/docs/index.md +37 -0
- isodec-2.0.0b2/extern/IsoGen/docs/isotope-distributions.md +110 -0
- isodec-2.0.0b2/extern/IsoGen/docs/mass-calculations.md +104 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/__init__.py +57 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/__main__.py +198 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/_version.py +3 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/bin_to_header.py +55 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/comp_model_parameters/dna_polycoefs.txt +44 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/comp_model_parameters/rna_polycoefs.txt +44 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogen.py +87 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogen_base.py +476 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogen_tools.py +396 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom.py +73 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom_synthetic_training.py +63 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom_trainingdata.py +57 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenmass.py +353 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep.py +179 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep_synthetic_training.py +96 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep_trainingdata.py +471 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna.py +132 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna_averagine.py +135 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna_trainingdata.py +428 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/isogenwrapper.py +661 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/mass.py +675 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model128.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model128.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model32.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model32.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model64.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model64.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_1024.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_1024.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_128.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_128.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_32.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_32.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_64.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_64.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_8.bin +3 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_8.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_128.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_128.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_16.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_16.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_64.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_64.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenprot_model.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenprot_model.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_128.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_128.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_64.bin +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_64.pth +0 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/plot_tests.py +88 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/rna_compositional_model.py +163 -0
- isodec-2.0.0b2/extern/IsoGen/isogen/timing_test.py +436 -0
- isodec-2.0.0b2/extern/IsoGen/mkdocs.yml +23 -0
- isodec-2.0.0b2/extern/IsoGen/pyproject.toml +111 -0
- isodec-2.0.0b2/extern/IsoGen/release.py +141 -0
- isodec-2.0.0b2/extern/IsoGen/src/CMakeLists.txt +176 -0
- isodec-2.0.0b2/extern/IsoGen/src/compilelinux.sh +4 -0
- isodec-2.0.0b2/extern/IsoGen/src/fftw/COPYING +340 -0
- isodec-2.0.0b2/extern/IsoGen/src/fftw/COPYRIGHT +19 -0
- isodec-2.0.0b2/extern/IsoGen/src/fftw/fftw3.h +522 -0
- isodec-2.0.0b2/extern/IsoGen/src/fftw/fftw3.lib +0 -0
- isodec-2.0.0b2/extern/IsoGen/src/find_avx.cmake +51 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_models.c +114 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_models.h +22 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model128.h +11267 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model32.h +771 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model64.h +2905 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogen_test.cpp +67 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenatom.c +249 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenatom.h +55 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogendep.c +2627 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogendep.h +84 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_128.h +11273 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_32.h +777 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_64.h +2911 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_8.h +73 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenpep.c +914 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenpep.h +41 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_128.h +11907 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_16.h +303 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_64.h +3225 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenrna.c +519 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenrna.h +35 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenrna_model_128.h +11231 -0
- isodec-2.0.0b2/extern/IsoGen/src/isogenrna_model_64.h +2889 -0
- isodec-2.0.0b2/extern/IsoGen/tests/test_atom_wrapper.py +136 -0
- isodec-2.0.0b2/extern/IsoGen/tests/test_brain_native.py +161 -0
- isodec-2.0.0b2/extern/IsoGen/tests/test_custom_models.py +113 -0
- isodec-2.0.0b2/extern/IsoGen/tests/test_public_api.py +440 -0
- isodec-2.0.0b2/isodec/__init__.py +8 -0
- isodec-2.0.0b2/isodec/__main__.py +45 -0
- isodec-2.0.0b2/isodec/_version.py +3 -0
- isodec-2.0.0b2/isodec/altdecon.py +127 -0
- isodec-2.0.0b2/isodec/bin_to_header.py +56 -0
- isodec-2.0.0b2/isodec/c_interface.py +434 -0
- isodec-2.0.0b2/isodec/compare_tools.py +685 -0
- isodec-2.0.0b2/isodec/config.py +61 -0
- isodec-2.0.0b2/isodec/datatools.py +454 -0
- isodec-2.0.0b2/isodec/encoding.py +302 -0
- isodec-2.0.0b2/isodec/encoding_profile.py +257 -0
- isodec-2.0.0b2/isodec/engine.py +952 -0
- isodec-2.0.0b2/isodec/fwhm.py +121 -0
- isodec-2.0.0b2/isodec/io.py +79 -0
- isodec-2.0.0b2/isodec/isotope.py +83 -0
- isodec-2.0.0b2/isodec/match.py +1192 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_4.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_4.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_8.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_8.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_1_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_1_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_1_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_1_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_1_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_1_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_1.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_0.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_0.pth +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_1.bin +0 -0
- isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_1.pth +0 -0
- isodec-2.0.0b2/isodec/models.py +553 -0
- isodec-2.0.0b2/isodec/msalign_export.py +211 -0
- isodec-2.0.0b2/isodec/plots.py +254 -0
- isodec-2.0.0b2/isodec/runtime.py +277 -0
- isodec-2.0.0b2/isodec/src/CMakeLists.txt +86 -0
- isodec-2.0.0b2/isodec/src/compilelinux.sh +11 -0
- isodec-2.0.0b2/isodec/src/isodec_test.cpp +41 -0
- isodec-2.0.0b2/isodec/src/isodeclib.c +1537 -0
- isodec-2.0.0b2/isodec/src/isodeclib.h +100 -0
- isodec-2.0.0b2/isodec/src/phase_model_4.h +16753 -0
- isodec-2.0.0b2/isodec/src/phase_model_8.h +60153 -0
- isodec-2.0.0b2/isodec/tools.py +112 -0
- isodec-2.0.0b2/isodec/train.py +37 -0
- isodec-2.0.0b2/isodec/train_profile.py +102 -0
- isodec-2.0.0b2/isodec/trainingdata.py +211 -0
- isodec-2.0.0b2/isodec/trainingdata_profile.py +192 -0
- isodec-2.0.0b2/mkdocs.yml +12 -0
- isodec-2.0.0b2/pyproject.toml +96 -0
- isodec-2.0.0b2/release.py +33 -0
- isodec-2.0.0b2/tests/conftest.py +22 -0
- isodec-2.0.0b2/tests/test_isogen_integration.py +37 -0
- isodec-2.0.0b2/tests/test_native_api.py +75 -0
- isodec-2.0.0b2/tests/test_spectrum.txt +3537 -0
- isodec-2.0.0b2/tests/test_spectrum_output.py +63 -0
- isodec-2.0.0b2/tests/test_tools.py +22 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths: ["docs/**", "mkdocs.yml", "pyproject.toml", ".github/workflows/docs.yml"]
|
|
7
|
+
pull_request:
|
|
8
|
+
paths: ["docs/**", "mkdocs.yml", "pyproject.toml", ".github/workflows/docs.yml"]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
pages: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: pages
|
|
18
|
+
cancel-in-progress: false
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
build:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v6
|
|
25
|
+
with:
|
|
26
|
+
submodules: recursive
|
|
27
|
+
- uses: actions/setup-python@v6
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.13"
|
|
30
|
+
- uses: actions/configure-pages@v6
|
|
31
|
+
if: github.event_name != 'pull_request'
|
|
32
|
+
- run: python -m pip install ".[docs]"
|
|
33
|
+
- run: python -m mkdocs build --strict
|
|
34
|
+
- uses: actions/upload-pages-artifact@v5
|
|
35
|
+
if: github.event_name != 'pull_request'
|
|
36
|
+
with:
|
|
37
|
+
path: site
|
|
38
|
+
|
|
39
|
+
deploy:
|
|
40
|
+
if: github.event_name != 'pull_request'
|
|
41
|
+
needs: build
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
environment:
|
|
44
|
+
name: github-pages
|
|
45
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/deploy-pages@v5
|
|
48
|
+
id: deployment
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
name: Build and publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
publish_to_pypi:
|
|
7
|
+
description: Also publish release artifacts to PyPI?
|
|
8
|
+
required: true
|
|
9
|
+
default: "false"
|
|
10
|
+
type: choice
|
|
11
|
+
options: ["false", "true"]
|
|
12
|
+
release:
|
|
13
|
+
types: [published]
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
env:
|
|
19
|
+
ONEAPI_WINDOWS_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/bae85ab1-cfcd-4251-8d42-a0c27949ea33/intel-oneapi-toolkit-2026.0.0.193_offline.exe
|
|
20
|
+
ONEAPI_WINDOWS_VERSION: 2026.0.0.193
|
|
21
|
+
ONEAPI_WINDOWS_COMPONENTS: intel.oneapi.win.cpp-dpcpp-common
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
metadata:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
outputs:
|
|
27
|
+
version: ${{ steps.version.outputs.version }}
|
|
28
|
+
tag: ${{ steps.version.outputs.tag }}
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v6
|
|
31
|
+
- id: version
|
|
32
|
+
shell: bash
|
|
33
|
+
env:
|
|
34
|
+
PUBLISHED_TAG: ${{ github.event.release.tag_name }}
|
|
35
|
+
run: |
|
|
36
|
+
version="$(sed -nE 's/^__version__[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/p' isodec/_version.py)"
|
|
37
|
+
test -n "$version"
|
|
38
|
+
tag="v$version"
|
|
39
|
+
if [[ "${{ github.event_name }}" == "release" && "$PUBLISHED_TAG" != "$tag" ]]; then
|
|
40
|
+
echo "Release tag does not match isodec/_version.py" >&2
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
44
|
+
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
45
|
+
|
|
46
|
+
windows:
|
|
47
|
+
runs-on: windows-latest
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v6
|
|
50
|
+
with:
|
|
51
|
+
submodules: recursive
|
|
52
|
+
- uses: actions/setup-python@v6
|
|
53
|
+
with:
|
|
54
|
+
python-version: "3.13"
|
|
55
|
+
- run: python -m pip install --upgrade build
|
|
56
|
+
- name: Build and test MSVC comparison wheel
|
|
57
|
+
shell: pwsh
|
|
58
|
+
run: |
|
|
59
|
+
python -m build --wheel --outdir dist-msvc
|
|
60
|
+
python -m venv "${{ runner.temp }}\msvc-test"
|
|
61
|
+
$python = "${{ runner.temp }}\msvc-test\Scripts\python.exe"
|
|
62
|
+
$wheel = (Get-ChildItem 'dist-msvc\*.whl').FullName
|
|
63
|
+
& $python -m pip install $wheel pytest
|
|
64
|
+
Push-Location "${{ runner.temp }}"
|
|
65
|
+
& $python -m pytest "${{ github.workspace }}\tests" --import-mode=importlib
|
|
66
|
+
Pop-Location
|
|
67
|
+
- name: Install Intel oneAPI compiler
|
|
68
|
+
shell: cmd
|
|
69
|
+
run: |
|
|
70
|
+
curl.exe --fail --location --retry 5 --output "%RUNNER_TEMP%\oneapi.exe" "%ONEAPI_WINDOWS_URL%"
|
|
71
|
+
start /b /wait "" "%RUNNER_TEMP%\oneapi.exe" -s -x -f "%RUNNER_TEMP%\oneapi-extracted" --log extract.log
|
|
72
|
+
"%RUNNER_TEMP%\oneapi-extracted\bootstrapper.exe" -s --action install --components=%ONEAPI_WINDOWS_COMPONENTS% --eula=accept -p=NEED_VS2022_INTEGRATION=0 --log-dir=.
|
|
73
|
+
- name: Build Intel release wheel
|
|
74
|
+
shell: cmd
|
|
75
|
+
run: |
|
|
76
|
+
call "C:\Program Files (x86)\Intel\oneAPI\setvars-vcvarsall.bat" vs2022
|
|
77
|
+
call "C:\Program Files (x86)\Intel\oneAPI\compiler\latest\env\vars.bat"
|
|
78
|
+
set "CC=icx-cl"
|
|
79
|
+
set "CXX=icx-cl"
|
|
80
|
+
set "CMAKE_GENERATOR=Ninja"
|
|
81
|
+
set "CMAKE_ARGS=-DISODEC_REQUIRE_INTELLLVM=ON -DISOGEN_REQUIRE_INTELLLVM=ON"
|
|
82
|
+
python -m build --wheel --outdir dist
|
|
83
|
+
- uses: actions/upload-artifact@v7
|
|
84
|
+
with:
|
|
85
|
+
name: wheel-Windows
|
|
86
|
+
path: dist/*.whl
|
|
87
|
+
if-no-files-found: error
|
|
88
|
+
|
|
89
|
+
linux:
|
|
90
|
+
runs-on: ubuntu-latest
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v6
|
|
93
|
+
with:
|
|
94
|
+
submodules: recursive
|
|
95
|
+
- uses: actions/setup-python@v6
|
|
96
|
+
with:
|
|
97
|
+
python-version: "3.13"
|
|
98
|
+
- run: sudo apt-get update && sudo apt-get install --yes libfftw3-dev
|
|
99
|
+
- run: python -m pip install --upgrade build auditwheel patchelf
|
|
100
|
+
- run: python -m build --wheel
|
|
101
|
+
- run: mkdir wheelhouse && auditwheel repair dist/*.whl --wheel-dir wheelhouse
|
|
102
|
+
- run: rm dist/*.whl && mv wheelhouse/*.whl dist/
|
|
103
|
+
- uses: actions/upload-artifact@v7
|
|
104
|
+
with:
|
|
105
|
+
name: wheel-Linux
|
|
106
|
+
path: dist/*.whl
|
|
107
|
+
if-no-files-found: error
|
|
108
|
+
|
|
109
|
+
macos:
|
|
110
|
+
strategy:
|
|
111
|
+
matrix:
|
|
112
|
+
include:
|
|
113
|
+
- runner: macos-15-intel
|
|
114
|
+
arch: x86_64
|
|
115
|
+
- runner: macos-14
|
|
116
|
+
arch: arm64
|
|
117
|
+
runs-on: ${{ matrix.runner }}
|
|
118
|
+
steps:
|
|
119
|
+
- uses: actions/checkout@v6
|
|
120
|
+
with:
|
|
121
|
+
submodules: recursive
|
|
122
|
+
- uses: actions/setup-python@v6
|
|
123
|
+
with:
|
|
124
|
+
python-version: "3.13"
|
|
125
|
+
- name: Install macOS native dependency
|
|
126
|
+
run: |
|
|
127
|
+
brew untap aws/tap 2>/dev/null || true
|
|
128
|
+
brew install fftw
|
|
129
|
+
- run: python -m pip install --upgrade build delocate
|
|
130
|
+
- run: python -m build --wheel
|
|
131
|
+
- run: mkdir wheelhouse && delocate-wheel --require-archs "${{ matrix.arch }}" -w wheelhouse -v dist/*.whl
|
|
132
|
+
- run: rm dist/*.whl && mv wheelhouse/*.whl dist/
|
|
133
|
+
- uses: actions/upload-artifact@v7
|
|
134
|
+
with:
|
|
135
|
+
name: wheel-macOS-${{ matrix.arch }}
|
|
136
|
+
path: dist/*.whl
|
|
137
|
+
if-no-files-found: error
|
|
138
|
+
|
|
139
|
+
sdist:
|
|
140
|
+
runs-on: ubuntu-latest
|
|
141
|
+
steps:
|
|
142
|
+
- uses: actions/checkout@v6
|
|
143
|
+
with:
|
|
144
|
+
submodules: recursive
|
|
145
|
+
- uses: actions/setup-python@v6
|
|
146
|
+
with:
|
|
147
|
+
python-version: "3.13"
|
|
148
|
+
- run: python -m pip install --upgrade build twine
|
|
149
|
+
- run: python -m build --sdist
|
|
150
|
+
- run: python -m twine check dist/*
|
|
151
|
+
- uses: actions/upload-artifact@v7
|
|
152
|
+
with:
|
|
153
|
+
name: source-distribution
|
|
154
|
+
path: dist/*.tar.gz
|
|
155
|
+
if-no-files-found: error
|
|
156
|
+
|
|
157
|
+
github-release:
|
|
158
|
+
if: github.event_name == 'workflow_dispatch'
|
|
159
|
+
needs: [metadata, windows, linux, macos, sdist]
|
|
160
|
+
runs-on: ubuntu-latest
|
|
161
|
+
permissions:
|
|
162
|
+
contents: write
|
|
163
|
+
steps:
|
|
164
|
+
- uses: actions/download-artifact@v8
|
|
165
|
+
with:
|
|
166
|
+
pattern: wheel-*
|
|
167
|
+
path: dist
|
|
168
|
+
merge-multiple: true
|
|
169
|
+
- uses: actions/download-artifact@v8
|
|
170
|
+
with:
|
|
171
|
+
name: source-distribution
|
|
172
|
+
path: dist
|
|
173
|
+
- env:
|
|
174
|
+
GH_TOKEN: ${{ github.token }}
|
|
175
|
+
RELEASE_TAG: ${{ needs.metadata.outputs.tag }}
|
|
176
|
+
run: gh release create "$RELEASE_TAG" dist/* --repo "$GITHUB_REPOSITORY" --target "$GITHUB_SHA" --title "$RELEASE_TAG" --generate-notes
|
|
177
|
+
|
|
178
|
+
publish:
|
|
179
|
+
if: >-
|
|
180
|
+
always() &&
|
|
181
|
+
(github.event_name == 'release' || github.event.inputs.publish_to_pypi == 'true') &&
|
|
182
|
+
(github.event_name == 'release' || needs.github-release.result == 'success') &&
|
|
183
|
+
needs.metadata.result == 'success' && needs.windows.result == 'success' &&
|
|
184
|
+
needs.linux.result == 'success' && needs.macos.result == 'success' &&
|
|
185
|
+
needs.sdist.result == 'success'
|
|
186
|
+
needs: [metadata, windows, linux, macos, sdist, github-release]
|
|
187
|
+
runs-on: ubuntu-latest
|
|
188
|
+
environment:
|
|
189
|
+
name: pypi
|
|
190
|
+
url: https://pypi.org/p/isodec
|
|
191
|
+
permissions:
|
|
192
|
+
id-token: write
|
|
193
|
+
steps:
|
|
194
|
+
- uses: actions/download-artifact@v8
|
|
195
|
+
with:
|
|
196
|
+
pattern: wheel-*
|
|
197
|
+
path: dist
|
|
198
|
+
merge-multiple: true
|
|
199
|
+
- uses: actions/download-artifact@v8
|
|
200
|
+
with:
|
|
201
|
+
name: source-distribution
|
|
202
|
+
path: dist
|
|
203
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: ${{ matrix.os }} / Python ${{ matrix.python-version }}
|
|
13
|
+
runs-on: ${{ matrix.os }}
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
include:
|
|
18
|
+
- os: ubuntu-latest
|
|
19
|
+
python-version: "3.9"
|
|
20
|
+
- os: ubuntu-latest
|
|
21
|
+
python-version: "3.10"
|
|
22
|
+
- os: ubuntu-latest
|
|
23
|
+
python-version: "3.11"
|
|
24
|
+
- os: ubuntu-latest
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
- os: ubuntu-latest
|
|
27
|
+
python-version: "3.13"
|
|
28
|
+
- os: windows-latest
|
|
29
|
+
python-version: "3.13"
|
|
30
|
+
- os: macos-14
|
|
31
|
+
python-version: "3.13"
|
|
32
|
+
- os: macos-15-intel
|
|
33
|
+
python-version: "3.13"
|
|
34
|
+
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v6
|
|
37
|
+
with:
|
|
38
|
+
submodules: recursive
|
|
39
|
+
|
|
40
|
+
- uses: actions/setup-python@v6
|
|
41
|
+
with:
|
|
42
|
+
python-version: ${{ matrix.python-version }}
|
|
43
|
+
|
|
44
|
+
- name: Install Linux native dependency
|
|
45
|
+
if: runner.os == 'Linux'
|
|
46
|
+
run: sudo apt-get update && sudo apt-get install --yes libfftw3-dev
|
|
47
|
+
|
|
48
|
+
- name: Install macOS native dependency
|
|
49
|
+
if: runner.os == 'macOS'
|
|
50
|
+
run: |
|
|
51
|
+
brew untap aws/tap 2>/dev/null || true
|
|
52
|
+
brew install fftw
|
|
53
|
+
|
|
54
|
+
- name: Install package and test dependencies
|
|
55
|
+
run: python -m pip install ".[test]"
|
|
56
|
+
|
|
57
|
+
- name: Run tests outside the source tree
|
|
58
|
+
working-directory: ${{ runner.temp }}
|
|
59
|
+
run: python -m pytest "${{ github.workspace }}/tests" --import-mode=importlib
|
|
60
|
+
|
|
61
|
+
linux-arm64:
|
|
62
|
+
name: ubuntu-24.04-arm / Python 3.13
|
|
63
|
+
runs-on: ubuntu-24.04-arm
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v6
|
|
66
|
+
with:
|
|
67
|
+
submodules: recursive
|
|
68
|
+
|
|
69
|
+
- uses: actions/setup-python@v6
|
|
70
|
+
with:
|
|
71
|
+
python-version: "3.13"
|
|
72
|
+
architecture: arm64
|
|
73
|
+
|
|
74
|
+
- name: Install FFTW
|
|
75
|
+
run: sudo apt-get update && sudo apt-get install --yes libfftw3-dev
|
|
76
|
+
|
|
77
|
+
- name: Install package and test dependencies
|
|
78
|
+
run: python -m pip install ".[test]"
|
|
79
|
+
|
|
80
|
+
- name: Run native ARM64 regression tests
|
|
81
|
+
working-directory: ${{ runner.temp }}
|
|
82
|
+
run: python -m pytest "${{ github.workspace }}/tests" --import-mode=importlib
|
|
83
|
+
|
|
84
|
+
windows-arm64:
|
|
85
|
+
name: windows-11-arm / Python 3.14
|
|
86
|
+
runs-on: windows-11-arm
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v6
|
|
89
|
+
with:
|
|
90
|
+
submodules: recursive
|
|
91
|
+
|
|
92
|
+
- uses: actions/setup-python@v6
|
|
93
|
+
with:
|
|
94
|
+
python-version: "3.14"
|
|
95
|
+
architecture: arm64
|
|
96
|
+
|
|
97
|
+
- name: Install ARM64 FFTW with vcpkg
|
|
98
|
+
shell: pwsh
|
|
99
|
+
run: |
|
|
100
|
+
$vcpkgRoot = (Resolve-Path -LiteralPath $env:VCPKG_INSTALLATION_ROOT).Path.Replace('\', '/')
|
|
101
|
+
& "$vcpkgRoot/vcpkg.exe" install fftw3:arm64-windows
|
|
102
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
103
|
+
"CMAKE_GENERATOR_PLATFORM=ARM64" >> $env:GITHUB_ENV
|
|
104
|
+
"CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE=$vcpkgRoot/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=arm64-windows -DFFTW3_ROOT=$vcpkgRoot/installed/arm64-windows" >> $env:GITHUB_ENV
|
|
105
|
+
|
|
106
|
+
- name: Install package and test dependencies
|
|
107
|
+
run: python -m pip install ".[test]"
|
|
108
|
+
|
|
109
|
+
- name: Run native ARM64 regression tests
|
|
110
|
+
working-directory: ${{ runner.temp }}
|
|
111
|
+
run: python -m pytest "${{ github.workspace }}/tests" --import-mode=importlib
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: If you use IsoDec, please cite the IsoDec and IsoGen method papers.
|
|
3
|
+
title: IsoDec
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- family-names: Marty
|
|
7
|
+
given-names: Michael T.
|
|
8
|
+
email: mtmarty@utexas.edu
|
|
9
|
+
abstract: Charge-state assignment and deconvolution of isotopically resolved mass spectra.
|
|
10
|
+
version: "2.0.0"
|
|
11
|
+
repository-code: "https://github.com/michaelmarty/IsoDec"
|
|
12
|
+
url: "https://michaelmarty.github.io/IsoDec/"
|
|
13
|
+
license: BSD-3-Clause
|
|
14
|
+
keywords:
|
|
15
|
+
- mass spectrometry
|
|
16
|
+
- charge-state assignment
|
|
17
|
+
- deconvolution
|
|
18
|
+
- isotope distribution
|
|
19
|
+
|
|
20
|
+
preferred-citation:
|
|
21
|
+
type: article
|
|
22
|
+
authors:
|
|
23
|
+
- family-names: Pavek
|
|
24
|
+
given-names: John G.
|
|
25
|
+
- family-names: Bollis
|
|
26
|
+
given-names: Nicholas E.
|
|
27
|
+
- family-names: Grimes
|
|
28
|
+
given-names: Josiah
|
|
29
|
+
- family-names: Shortreed
|
|
30
|
+
given-names: Michael R.
|
|
31
|
+
- family-names: Smith
|
|
32
|
+
given-names: Lloyd M.
|
|
33
|
+
- family-names: Marty
|
|
34
|
+
given-names: Michael T.
|
|
35
|
+
title: "A Fast Neural Network for Isotopic Charge State Assignment"
|
|
36
|
+
journal: Journal of the American Chemical Society
|
|
37
|
+
year: 2025
|
|
38
|
+
month: 6
|
|
39
|
+
volume: 147
|
|
40
|
+
issue: 25
|
|
41
|
+
start: 21610
|
|
42
|
+
end: 21620
|
|
43
|
+
doi: 10.1021/jacs.5c03162
|
|
44
|
+
url: "https://doi.org/10.1021/jacs.5c03162"
|
isodec-2.0.0b2/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Michael Marty
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
include .gitmodules
|
|
2
|
+
include LICENSE
|
|
3
|
+
include README.md
|
|
4
|
+
include PUBLISHING.md
|
|
5
|
+
include THIRD_PARTY_NOTICES.md
|
|
6
|
+
include pyproject.toml
|
|
7
|
+
include mkdocs.yml
|
|
8
|
+
recursive-include docs *.md
|
|
9
|
+
recursive-include tests *.py *.txt
|
|
10
|
+
recursive-include isodec *.py *.c *.h *.bin *.pth *.cmake CMakeLists.txt
|
|
11
|
+
include extern/IsoGen/LICENSE
|
|
12
|
+
recursive-include extern/IsoGen/src *.c *.cpp *.h *.lib CMakeLists.txt COPYING COPYRIGHT
|
|
13
|
+
prune isodec/src/cmake-build-release-intel-oneapi
|
|
14
|
+
prune isodec/src/cmake-build-release-wsl
|
|
15
|
+
prune isodec/src/CMakeFiles
|
isodec-2.0.0b2/PKG-INFO
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: isodec
|
|
3
|
+
Version: 2.0.0b2
|
|
4
|
+
Summary: Charge-state assignment and deconvolution of isotopically resolved mass spectra
|
|
5
|
+
Keywords: mass spectrometry,charge state,deconvolution,isotope distribution
|
|
6
|
+
Author-Email: "Michael T. Marty" <mtmarty@utexas.edu>
|
|
7
|
+
License-Expression: BSD-3-Clause
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
10
|
+
License-File: extern/IsoGen/LICENSE
|
|
11
|
+
License-File: extern/IsoGen/src/fftw/COPYING
|
|
12
|
+
License-File: extern/IsoGen/src/fftw/COPYRIGHT
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
25
|
+
Project-URL: Homepage, https://github.com/michaelmarty/IsoDec
|
|
26
|
+
Project-URL: Repository, https://github.com/michaelmarty/IsoDec
|
|
27
|
+
Project-URL: Issues, https://github.com/michaelmarty/IsoDec/issues
|
|
28
|
+
Project-URL: Documentation, https://michaelmarty.github.io/IsoDec/
|
|
29
|
+
Requires-Python: >=3.9
|
|
30
|
+
Requires-Dist: matplotlib>=3.7
|
|
31
|
+
Requires-Dist: numba<0.62,>=0.57; sys_platform == "darwin" and platform_machine == "x86_64"
|
|
32
|
+
Requires-Dist: numba>=0.57; sys_platform != "darwin" or platform_machine != "x86_64"
|
|
33
|
+
Requires-Dist: numpy>=1.23
|
|
34
|
+
Requires-Dist: pandas>=2.0
|
|
35
|
+
Requires-Dist: pyisogen>=1.0.8
|
|
36
|
+
Requires-Dist: scipy>=1.9
|
|
37
|
+
Provides-Extra: test
|
|
38
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
39
|
+
Provides-Extra: docs
|
|
40
|
+
Requires-Dist: mkdocs>=1.6; extra == "docs"
|
|
41
|
+
Provides-Extra: training
|
|
42
|
+
Requires-Dist: matchms>=0.26; extra == "training"
|
|
43
|
+
Requires-Dist: torch>=2.1; extra == "training"
|
|
44
|
+
Provides-Extra: unidec
|
|
45
|
+
Requires-Dist: UniDec>=8.2.1; extra == "unidec"
|
|
46
|
+
Provides-Extra: release
|
|
47
|
+
Requires-Dist: build>=1.2; extra == "release"
|
|
48
|
+
Requires-Dist: twine>=5; extra == "release"
|
|
49
|
+
Description-Content-Type: text/markdown
|
|
50
|
+
|
|
51
|
+
# IsoDec
|
|
52
|
+
|
|
53
|
+
IsoDec assigns charge states and deconvolves isotopically resolved mass
|
|
54
|
+
spectrometry data. Its native core uses [IsoGen](https://github.com/michaelmarty/IsoGen)
|
|
55
|
+
for peptide and RNA isotope distributions.
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
Install a published wheel:
|
|
60
|
+
|
|
61
|
+
```shell
|
|
62
|
+
python -m pip install isodec
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
IsoDec supports Python 3.9 and newer on 64-bit Windows, Linux, and macOS.
|
|
66
|
+
Compatible wheels include the native IsoDec and IsoGen libraries. A source
|
|
67
|
+
build requires CMake 3.22.1 or newer, a C/C++ compiler, FFTW, and an initialized
|
|
68
|
+
IsoGen submodule:
|
|
69
|
+
|
|
70
|
+
```shell
|
|
71
|
+
git clone --recurse-submodules https://github.com/michaelmarty/IsoDec.git
|
|
72
|
+
python -m pip install ./IsoDec
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Python usage
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
import numpy as np
|
|
79
|
+
from isodec import IsoDecRuntime
|
|
80
|
+
|
|
81
|
+
spectrum = np.loadtxt("spectrum.txt")
|
|
82
|
+
engine = IsoDecRuntime()
|
|
83
|
+
peaks = engine.batch_process_spectrum(spectrum, centroided=True)
|
|
84
|
+
|
|
85
|
+
for peak in peaks:
|
|
86
|
+
print(peak.mz, peak.z, peak.monoiso, peak.matchedintensity)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
TXT, DAT, CSV, and NPZ single-scan spectra are supported without UniDec. Raw
|
|
90
|
+
vendor files, mzML/mzXML, and I2MS import use UniDec's extensive importer stack:
|
|
91
|
+
|
|
92
|
+
```shell
|
|
93
|
+
python -m pip install "isodec[unidec]"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Command line
|
|
97
|
+
|
|
98
|
+
```shell
|
|
99
|
+
isodec spectrum.txt --centroided -o assigned_peaks.tsv
|
|
100
|
+
python -m isodec --help
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Development
|
|
104
|
+
|
|
105
|
+
```shell
|
|
106
|
+
git submodule update --init --recursive
|
|
107
|
+
python -m pip install -e ".[test]"
|
|
108
|
+
python -m pytest
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Documentation sources live in `docs/` and are built with MkDocs. Release and
|
|
112
|
+
wheel-building details are in [PUBLISHING.md](PUBLISHING.md).
|
|
113
|
+
|
|
114
|
+
## License and citation
|
|
115
|
+
|
|
116
|
+
IsoDec is released under the BSD 3-Clause License. See
|
|
117
|
+
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) for IsoGen, FFTW, and Intel
|
|
118
|
+
runtime notices. When using IsoDec, please cite Pavek et al.,
|
|
119
|
+
“[A Fast Neural Network for Isotopic Charge State Assignment](https://doi.org/10.1021/jacs.5c03162),”
|
|
120
|
+
*J. Am. Chem. Soc.* **2025**, *147*, 21610–21620. Machine-readable metadata is
|
|
121
|
+
provided in [CITATION.cff](CITATION.cff).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Building and publishing IsoDec
|
|
2
|
+
|
|
3
|
+
IsoDec uses scikit-build-core. Every wheel compiles `isodeclib` and the pinned
|
|
4
|
+
IsoGen submodule, then installs both native libraries beside one another in
|
|
5
|
+
`isodec/bin`.
|
|
6
|
+
|
|
7
|
+
## Prepare a release
|
|
8
|
+
|
|
9
|
+
1. Update `isodec/_version.py` and `CITATION.cff`.
|
|
10
|
+
2. Update release notes and verify the intended IsoGen submodule commit.
|
|
11
|
+
3. Run `git submodule update --init --recursive` and the full test suite.
|
|
12
|
+
4. Review `THIRD_PARTY_NOTICES.md` and the bundled license files.
|
|
13
|
+
5. Push the release commit and run the **Build and publish** workflow.
|
|
14
|
+
|
|
15
|
+
The workflow builds Windows, Linux, macOS Intel, and macOS Apple Silicon
|
|
16
|
+
wheels plus a source distribution. A manual run creates the matching GitHub
|
|
17
|
+
release and can publish through PyPI trusted publishing.
|
|
18
|
+
|
|
19
|
+
## Local build
|
|
20
|
+
|
|
21
|
+
```shell
|
|
22
|
+
git submodule update --init --recursive
|
|
23
|
+
python -m pip install --upgrade build twine
|
|
24
|
+
python -m build
|
|
25
|
+
python -m twine check dist/*
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Source builds require CMake, a C/C++ compiler, and FFTW. Windows uses the FFTW
|
|
29
|
+
import library in IsoGen. Linux distributions typically provide FFTW through
|
|
30
|
+
`libfftw3-dev`; on macOS use `brew install fftw`.
|
|
31
|
+
|
|
32
|
+
Test the wheel in a clean environment from outside the repository:
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
python -m venv wheel-test
|
|
36
|
+
wheel-test/Scripts/python -m pip install dist/isodec-*.whl
|
|
37
|
+
wheel-test/Scripts/python -m pytest tests --import-mode=importlib
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Use `wheel-test/bin/python` on Linux and macOS. Linux wheels are repaired with
|
|
41
|
+
auditwheel and macOS wheels with delocate so FFTW is bundled.
|