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.
Files changed (212) hide show
  1. isodec-2.0.0b2/.github/workflows/docs.yml +48 -0
  2. isodec-2.0.0b2/.github/workflows/publish.yml +203 -0
  3. isodec-2.0.0b2/.github/workflows/tests.yml +111 -0
  4. isodec-2.0.0b2/.gitignore +13 -0
  5. isodec-2.0.0b2/.gitmodules +3 -0
  6. isodec-2.0.0b2/CITATION.cff +44 -0
  7. isodec-2.0.0b2/LICENSE +28 -0
  8. isodec-2.0.0b2/MANIFEST.in +15 -0
  9. isodec-2.0.0b2/PKG-INFO +121 -0
  10. isodec-2.0.0b2/PUBLISHING.md +41 -0
  11. isodec-2.0.0b2/README.md +71 -0
  12. isodec-2.0.0b2/THIRD_PARTY_NOTICES.md +12 -0
  13. isodec-2.0.0b2/docs/api.md +24 -0
  14. isodec-2.0.0b2/docs/command-line.md +9 -0
  15. isodec-2.0.0b2/docs/development.md +23 -0
  16. isodec-2.0.0b2/docs/getting-started.md +23 -0
  17. isodec-2.0.0b2/docs/index.md +15 -0
  18. isodec-2.0.0b2/extern/IsoGen/.github/workflows/docs.yml +68 -0
  19. isodec-2.0.0b2/extern/IsoGen/.github/workflows/publish.yml +378 -0
  20. isodec-2.0.0b2/extern/IsoGen/.github/workflows/tests.yml +136 -0
  21. isodec-2.0.0b2/extern/IsoGen/.gitignore +14 -0
  22. isodec-2.0.0b2/extern/IsoGen/CITATION.cff +139 -0
  23. isodec-2.0.0b2/extern/IsoGen/LICENSE +11 -0
  24. isodec-2.0.0b2/extern/IsoGen/MANIFEST.in +12 -0
  25. isodec-2.0.0b2/extern/IsoGen/PUBLISHING.md +140 -0
  26. isodec-2.0.0b2/extern/IsoGen/README.md +382 -0
  27. isodec-2.0.0b2/extern/IsoGen/THIRD_PARTY_NOTICES.md +22 -0
  28. isodec-2.0.0b2/extern/IsoGen/benchmarks/compare_performance.py +89 -0
  29. isodec-2.0.0b2/extern/IsoGen/benchmarks/wheel_performance.py +131 -0
  30. isodec-2.0.0b2/extern/IsoGen/bin/intel-software-development-tools-license -overview-august-2024.pdf +0 -0
  31. isodec-2.0.0b2/extern/IsoGen/bin/isogen.dll +0 -0
  32. isodec-2.0.0b2/extern/IsoGen/bin/isogen.lib +0 -0
  33. isodec-2.0.0b2/extern/IsoGen/bin/isogen.so +0 -0
  34. isodec-2.0.0b2/extern/IsoGen/bin/isogen_test +0 -0
  35. isodec-2.0.0b2/extern/IsoGen/bin/isogen_test.exe +0 -0
  36. isodec-2.0.0b2/extern/IsoGen/bin/libmmd.dll +0 -0
  37. isodec-2.0.0b2/extern/IsoGen/bin/svml_dispmd.dll +0 -0
  38. isodec-2.0.0b2/extern/IsoGen/docs/api.md +133 -0
  39. isodec-2.0.0b2/extern/IsoGen/docs/command-line.md +50 -0
  40. isodec-2.0.0b2/extern/IsoGen/docs/development.md +82 -0
  41. isodec-2.0.0b2/extern/IsoGen/docs/getting-started.md +138 -0
  42. isodec-2.0.0b2/extern/IsoGen/docs/index.md +37 -0
  43. isodec-2.0.0b2/extern/IsoGen/docs/isotope-distributions.md +110 -0
  44. isodec-2.0.0b2/extern/IsoGen/docs/mass-calculations.md +104 -0
  45. isodec-2.0.0b2/extern/IsoGen/isogen/__init__.py +57 -0
  46. isodec-2.0.0b2/extern/IsoGen/isogen/__main__.py +198 -0
  47. isodec-2.0.0b2/extern/IsoGen/isogen/_version.py +3 -0
  48. isodec-2.0.0b2/extern/IsoGen/isogen/bin_to_header.py +55 -0
  49. isodec-2.0.0b2/extern/IsoGen/isogen/comp_model_parameters/dna_polycoefs.txt +44 -0
  50. isodec-2.0.0b2/extern/IsoGen/isogen/comp_model_parameters/rna_polycoefs.txt +44 -0
  51. isodec-2.0.0b2/extern/IsoGen/isogen/isogen.py +87 -0
  52. isodec-2.0.0b2/extern/IsoGen/isogen/isogen_base.py +476 -0
  53. isodec-2.0.0b2/extern/IsoGen/isogen/isogen_tools.py +396 -0
  54. isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom.py +73 -0
  55. isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom_synthetic_training.py +63 -0
  56. isodec-2.0.0b2/extern/IsoGen/isogen/isogenatom_trainingdata.py +57 -0
  57. isodec-2.0.0b2/extern/IsoGen/isogen/isogenmass.py +353 -0
  58. isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep.py +179 -0
  59. isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep_synthetic_training.py +96 -0
  60. isodec-2.0.0b2/extern/IsoGen/isogen/isogenpep_trainingdata.py +471 -0
  61. isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna.py +132 -0
  62. isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna_averagine.py +135 -0
  63. isodec-2.0.0b2/extern/IsoGen/isogen/isogenrna_trainingdata.py +428 -0
  64. isodec-2.0.0b2/extern/IsoGen/isogen/isogenwrapper.py +661 -0
  65. isodec-2.0.0b2/extern/IsoGen/isogen/mass.py +675 -0
  66. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model128.bin +0 -0
  67. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model128.pth +0 -0
  68. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model32.bin +0 -0
  69. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model32.pth +0 -0
  70. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model64.bin +0 -0
  71. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogen_rnaveragine_model64.pth +0 -0
  72. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_1024.bin +0 -0
  73. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_1024.pth +0 -0
  74. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_128.bin +0 -0
  75. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_128.pth +0 -0
  76. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_32.bin +0 -0
  77. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_32.pth +0 -0
  78. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_64.bin +0 -0
  79. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_64.pth +0 -0
  80. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_8.bin +3 -0
  81. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenmass_model_8.pth +0 -0
  82. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model.bin +0 -0
  83. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model.pth +0 -0
  84. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_128.bin +0 -0
  85. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_128.pth +0 -0
  86. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_16.bin +0 -0
  87. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_16.pth +0 -0
  88. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_64.bin +0 -0
  89. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenpep_model_64.pth +0 -0
  90. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenprot_model.bin +0 -0
  91. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenprot_model.pth +0 -0
  92. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_128.bin +0 -0
  93. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_128.pth +0 -0
  94. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_64.bin +0 -0
  95. isodec-2.0.0b2/extern/IsoGen/isogen/models/isogenrna_model_64.pth +0 -0
  96. isodec-2.0.0b2/extern/IsoGen/isogen/plot_tests.py +88 -0
  97. isodec-2.0.0b2/extern/IsoGen/isogen/rna_compositional_model.py +163 -0
  98. isodec-2.0.0b2/extern/IsoGen/isogen/timing_test.py +436 -0
  99. isodec-2.0.0b2/extern/IsoGen/mkdocs.yml +23 -0
  100. isodec-2.0.0b2/extern/IsoGen/pyproject.toml +111 -0
  101. isodec-2.0.0b2/extern/IsoGen/release.py +141 -0
  102. isodec-2.0.0b2/extern/IsoGen/src/CMakeLists.txt +176 -0
  103. isodec-2.0.0b2/extern/IsoGen/src/compilelinux.sh +4 -0
  104. isodec-2.0.0b2/extern/IsoGen/src/fftw/COPYING +340 -0
  105. isodec-2.0.0b2/extern/IsoGen/src/fftw/COPYRIGHT +19 -0
  106. isodec-2.0.0b2/extern/IsoGen/src/fftw/fftw3.h +522 -0
  107. isodec-2.0.0b2/extern/IsoGen/src/fftw/fftw3.lib +0 -0
  108. isodec-2.0.0b2/extern/IsoGen/src/find_avx.cmake +51 -0
  109. isodec-2.0.0b2/extern/IsoGen/src/isogen_models.c +114 -0
  110. isodec-2.0.0b2/extern/IsoGen/src/isogen_models.h +22 -0
  111. isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model128.h +11267 -0
  112. isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model32.h +771 -0
  113. isodec-2.0.0b2/extern/IsoGen/src/isogen_rnaveragine_model64.h +2905 -0
  114. isodec-2.0.0b2/extern/IsoGen/src/isogen_test.cpp +67 -0
  115. isodec-2.0.0b2/extern/IsoGen/src/isogenatom.c +249 -0
  116. isodec-2.0.0b2/extern/IsoGen/src/isogenatom.h +55 -0
  117. isodec-2.0.0b2/extern/IsoGen/src/isogendep.c +2627 -0
  118. isodec-2.0.0b2/extern/IsoGen/src/isogendep.h +84 -0
  119. isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_128.h +11273 -0
  120. isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_32.h +777 -0
  121. isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_64.h +2911 -0
  122. isodec-2.0.0b2/extern/IsoGen/src/isogenmass_model_8.h +73 -0
  123. isodec-2.0.0b2/extern/IsoGen/src/isogenpep.c +914 -0
  124. isodec-2.0.0b2/extern/IsoGen/src/isogenpep.h +41 -0
  125. isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_128.h +11907 -0
  126. isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_16.h +303 -0
  127. isodec-2.0.0b2/extern/IsoGen/src/isogenpep_model_64.h +3225 -0
  128. isodec-2.0.0b2/extern/IsoGen/src/isogenrna.c +519 -0
  129. isodec-2.0.0b2/extern/IsoGen/src/isogenrna.h +35 -0
  130. isodec-2.0.0b2/extern/IsoGen/src/isogenrna_model_128.h +11231 -0
  131. isodec-2.0.0b2/extern/IsoGen/src/isogenrna_model_64.h +2889 -0
  132. isodec-2.0.0b2/extern/IsoGen/tests/test_atom_wrapper.py +136 -0
  133. isodec-2.0.0b2/extern/IsoGen/tests/test_brain_native.py +161 -0
  134. isodec-2.0.0b2/extern/IsoGen/tests/test_custom_models.py +113 -0
  135. isodec-2.0.0b2/extern/IsoGen/tests/test_public_api.py +440 -0
  136. isodec-2.0.0b2/isodec/__init__.py +8 -0
  137. isodec-2.0.0b2/isodec/__main__.py +45 -0
  138. isodec-2.0.0b2/isodec/_version.py +3 -0
  139. isodec-2.0.0b2/isodec/altdecon.py +127 -0
  140. isodec-2.0.0b2/isodec/bin_to_header.py +56 -0
  141. isodec-2.0.0b2/isodec/c_interface.py +434 -0
  142. isodec-2.0.0b2/isodec/compare_tools.py +685 -0
  143. isodec-2.0.0b2/isodec/config.py +61 -0
  144. isodec-2.0.0b2/isodec/datatools.py +454 -0
  145. isodec-2.0.0b2/isodec/encoding.py +302 -0
  146. isodec-2.0.0b2/isodec/encoding_profile.py +257 -0
  147. isodec-2.0.0b2/isodec/engine.py +952 -0
  148. isodec-2.0.0b2/isodec/fwhm.py +121 -0
  149. isodec-2.0.0b2/isodec/io.py +79 -0
  150. isodec-2.0.0b2/isodec/isotope.py +83 -0
  151. isodec-2.0.0b2/isodec/match.py +1192 -0
  152. isodec-2.0.0b2/isodec/modelparams/phase_model_1.bin +0 -0
  153. isodec-2.0.0b2/isodec/modelparams/phase_model_1.pth +0 -0
  154. isodec-2.0.0b2/isodec/modelparams/phase_model_4.bin +0 -0
  155. isodec-2.0.0b2/isodec/modelparams/phase_model_4.pth +0 -0
  156. isodec-2.0.0b2/isodec/modelparams/phase_model_8.bin +0 -0
  157. isodec-2.0.0b2/isodec/modelparams/phase_model_8.pth +0 -0
  158. isodec-2.0.0b2/isodec/modelparams/phase_model_b_1_0.bin +0 -0
  159. isodec-2.0.0b2/isodec/modelparams/phase_model_b_1_0.pth +0 -0
  160. isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_0.bin +0 -0
  161. isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_0.pth +0 -0
  162. isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_1.bin +0 -0
  163. isodec-2.0.0b2/isodec/modelparams/phase_model_b_4_1.pth +0 -0
  164. isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_0.bin +0 -0
  165. isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_0.pth +0 -0
  166. isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_1.bin +0 -0
  167. isodec-2.0.0b2/isodec/modelparams/phase_model_b_8_1.pth +0 -0
  168. isodec-2.0.0b2/isodec/modelparams/phase_model_c_1_0.bin +0 -0
  169. isodec-2.0.0b2/isodec/modelparams/phase_model_c_1_0.pth +0 -0
  170. isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_0.bin +0 -0
  171. isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_0.pth +0 -0
  172. isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_1.bin +0 -0
  173. isodec-2.0.0b2/isodec/modelparams/phase_model_c_4_1.pth +0 -0
  174. isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_0.bin +0 -0
  175. isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_0.pth +0 -0
  176. isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_1.bin +0 -0
  177. isodec-2.0.0b2/isodec/modelparams/phase_model_c_8_1.pth +0 -0
  178. isodec-2.0.0b2/isodec/modelparams/phase_model_p_1_0.bin +0 -0
  179. isodec-2.0.0b2/isodec/modelparams/phase_model_p_1_0.pth +0 -0
  180. isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_0.bin +0 -0
  181. isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_0.pth +0 -0
  182. isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_1.bin +0 -0
  183. isodec-2.0.0b2/isodec/modelparams/phase_model_p_4_1.pth +0 -0
  184. isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_0.bin +0 -0
  185. isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_0.pth +0 -0
  186. isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_1.bin +0 -0
  187. isodec-2.0.0b2/isodec/modelparams/phase_model_p_8_1.pth +0 -0
  188. isodec-2.0.0b2/isodec/models.py +553 -0
  189. isodec-2.0.0b2/isodec/msalign_export.py +211 -0
  190. isodec-2.0.0b2/isodec/plots.py +254 -0
  191. isodec-2.0.0b2/isodec/runtime.py +277 -0
  192. isodec-2.0.0b2/isodec/src/CMakeLists.txt +86 -0
  193. isodec-2.0.0b2/isodec/src/compilelinux.sh +11 -0
  194. isodec-2.0.0b2/isodec/src/isodec_test.cpp +41 -0
  195. isodec-2.0.0b2/isodec/src/isodeclib.c +1537 -0
  196. isodec-2.0.0b2/isodec/src/isodeclib.h +100 -0
  197. isodec-2.0.0b2/isodec/src/phase_model_4.h +16753 -0
  198. isodec-2.0.0b2/isodec/src/phase_model_8.h +60153 -0
  199. isodec-2.0.0b2/isodec/tools.py +112 -0
  200. isodec-2.0.0b2/isodec/train.py +37 -0
  201. isodec-2.0.0b2/isodec/train_profile.py +102 -0
  202. isodec-2.0.0b2/isodec/trainingdata.py +211 -0
  203. isodec-2.0.0b2/isodec/trainingdata_profile.py +192 -0
  204. isodec-2.0.0b2/mkdocs.yml +12 -0
  205. isodec-2.0.0b2/pyproject.toml +96 -0
  206. isodec-2.0.0b2/release.py +33 -0
  207. isodec-2.0.0b2/tests/conftest.py +22 -0
  208. isodec-2.0.0b2/tests/test_isogen_integration.py +37 -0
  209. isodec-2.0.0b2/tests/test_native_api.py +75 -0
  210. isodec-2.0.0b2/tests/test_spectrum.txt +3537 -0
  211. isodec-2.0.0b2/tests/test_spectrum_output.py +63 -0
  212. 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,13 @@
1
+ /isodec/src/.idea/
2
+ /isodec/src/cmake-build-release-intel-oneapi/
3
+ /isodec/src/cmake-build-release-wsl/
4
+ /isodec/src/CMakeFiles/
5
+ /.idea
6
+ /.venv/
7
+ /build/
8
+ /dist/
9
+ /site/
10
+ /.pytest_cache/
11
+ /**/__pycache__/
12
+ /*.egg-info/
13
+ /wheelhouse/
@@ -0,0 +1,3 @@
1
+ [submodule "extern/IsoGen"]
2
+ path = extern/IsoGen
3
+ url = https://github.com/michaelmarty/IsoGen.git
@@ -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
@@ -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.