IsoSpecPy 2.2.0__tar.gz → 2.2.2__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 (216) hide show
  1. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/.github/workflows/build_wheels.yml +10 -12
  2. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/Makefile +4 -4
  3. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/cwrapper.cpp +4 -4
  4. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fixedEnvelopes.cpp +7 -4
  5. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoSpec++.h +1 -1
  6. {IsoSpecPy-2.2.0/IsoSpecR/src → IsoSpecPy-2.2.2/IsoSpec++}/marginalTrek++.cpp +44 -6
  7. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/marginalTrek++.h +7 -0
  8. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/mman.cpp +9 -5
  9. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/pod_vector.h +54 -20
  10. IsoSpecPy-2.2.2/IsoSpec++/test.cpp +6 -0
  11. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Formulas.py +1 -1
  12. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/__init__.py +1 -1
  13. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/isoFFI.py +2 -2
  14. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/PKG-INFO +5 -4
  15. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/SOURCES.txt +2 -0
  16. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/cwrapper.cpp +4 -4
  17. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fixedEnvelopes.cpp +7 -4
  18. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoSpec++.h +1 -1
  19. {IsoSpecPy-2.2.0/IsoSpec++ → IsoSpecPy-2.2.2/IsoSpecR/src}/marginalTrek++.cpp +44 -6
  20. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/marginalTrek++.h +7 -0
  21. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/mman.cpp +9 -5
  22. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/pod_vector.h +54 -20
  23. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/PKG-INFO +5 -4
  24. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/setup.py +8 -4
  25. IsoSpecPy-2.2.2/tests/C++/test_marginal_ordered.cpp +57 -0
  26. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CHANGELOG +0 -0
  27. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeLists.txt +0 -0
  28. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/doxyfile.in +0 -0
  29. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/isospec_logo2_high.svg.in +0 -0
  30. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/isospec_logo2_long.svg.in +0 -0
  31. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/FindIsoSpec++.cmake +0 -0
  32. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/IsoSpec++Config.cmake.in +0 -0
  33. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/pkgconfig/libisospec++.pc.in +0 -0
  34. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/outputColors.cmake +0 -0
  35. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/systemUname.cmake +0 -0
  36. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/apple-macport-toolchain.cmake +0 -0
  37. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/mxe-toolchain.cmake +0 -0
  38. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/unix-toolchain.cmake +0 -0
  39. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake +0 -0
  40. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/COMPILING +0 -0
  41. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/radiolabelling.cpp +0 -0
  42. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/water.cpp +0 -0
  43. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/CMakeLists.txt +0 -0
  44. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/custom_elements.py +0 -0
  45. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/fasta.py +0 -0
  46. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/radiolabelling.py +0 -0
  47. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/water.py +0 -0
  48. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/R/radiolabelling.R +0 -0
  49. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/R/water.R +0 -0
  50. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/INSTALL +0 -0
  51. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/CMakeLists.txt +0 -0
  52. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/CPPLINT.cfg +0 -0
  53. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/IsoSpecConfig.cmake.in +0 -0
  54. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/allocator.cpp +0 -0
  55. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/allocator.h +0 -0
  56. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/btrd.h +0 -0
  57. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/conf.h +0 -0
  58. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/cwrapper.h +0 -0
  59. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/dirtyAllocator.cpp +0 -0
  60. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/dirtyAllocator.h +0 -0
  61. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/element_tables.cpp +0 -0
  62. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/element_tables.h +0 -0
  63. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fasta.cpp +0 -0
  64. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fasta.h +0 -0
  65. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fixedEnvelopes.h +0 -0
  66. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoMath.cpp +0 -0
  67. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoMath.h +0 -0
  68. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoSpec++.cpp +0 -0
  69. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/misc.cpp +0 -0
  70. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/misc.h +0 -0
  71. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/mman.h +0 -0
  72. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/operators.cpp +0 -0
  73. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/operators.h +0 -0
  74. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/platform.h +0 -0
  75. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/platform_incl.h +0 -0
  76. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/python-build.cpp +0 -0
  77. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/summator.h +0 -0
  78. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/unity-build.cpp +0 -0
  79. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Advanced.py +0 -0
  80. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Distributions.py +0 -0
  81. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/IsoSpecPy.py +0 -0
  82. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/IsoSpecPyOld.py +0 -0
  83. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/PeriodicTbl.py +0 -0
  84. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/approximations.py +0 -0
  85. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/confs_passthrough.py +0 -0
  86. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/dependency_links.txt +0 -0
  87. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/not-zip-safe +0 -0
  88. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/requires.txt +0 -0
  89. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/top_level.txt +0 -0
  90. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/.Rbuildignore +0 -0
  91. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/DESCRIPTION +0 -0
  92. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/LICENCE +0 -0
  93. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/NAMESPACE +0 -0
  94. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/IsoSpecR.R +0 -0
  95. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/RcppExports.R +0 -0
  96. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/add_custom_isotopes.R +0 -0
  97. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/data_description.R +0 -0
  98. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/sysdata.rda +0 -0
  99. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/data/isotopicData.rda +0 -0
  100. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/inst/CITATION +0 -0
  101. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/IsoSpecify.Rd +0 -0
  102. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/custom_isotopes_example.Rd +0 -0
  103. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/isotopicData.Rd +0 -0
  104. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/IsoSpecR_init.c +0 -0
  105. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/RcppExports.cpp +0 -0
  106. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/Rinterface.cpp +0 -0
  107. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/allocator.cpp +0 -0
  108. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/allocator.h +0 -0
  109. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/btrd.h +0 -0
  110. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/conf.h +0 -0
  111. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/cwrapper.h +0 -0
  112. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/dirtyAllocator.cpp +0 -0
  113. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/dirtyAllocator.h +0 -0
  114. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/element_tables.cpp +0 -0
  115. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/element_tables.h +0 -0
  116. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fasta.cpp +0 -0
  117. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fasta.h +0 -0
  118. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fixedEnvelopes.h +0 -0
  119. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoMath.cpp +0 -0
  120. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoMath.h +0 -0
  121. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoSpec++.cpp +0 -0
  122. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/misc.cpp +0 -0
  123. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/misc.h +0 -0
  124. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/mman.h +0 -0
  125. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/operators.cpp +0 -0
  126. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/operators.h +0 -0
  127. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/platform.h +0 -0
  128. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/platform_incl.h +0 -0
  129. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/summator.h +0 -0
  130. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/unity-build.cpp +0 -0
  131. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat/envipat.Rd +0 -0
  132. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat/test-numerical-stability.R +0 -0
  133. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat.R +0 -0
  134. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/LICENCE +0 -0
  135. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/MANIFEST.in +0 -0
  136. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Makefile +0 -0
  137. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/README +0 -0
  138. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/TODO.md +0 -0
  139. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/changelog +0 -0
  140. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/control +0 -0
  141. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/copyright +0 -0
  142. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/doxyfile +0 -0
  143. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.install +0 -0
  144. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.links +0 -0
  145. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.manpages +0 -0
  146. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-doc.doc-base +0 -0
  147. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-doc.install +0 -0
  148. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++2.install +0 -0
  149. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++2.links +0 -0
  150. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/0001-Ensure-the-header-files-are-found-in-the-system.patch +0 -0
  151. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/0002-Remove-the-mtune-native-march-native.patch +0 -0
  152. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/series +0 -0
  153. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/repack.sh +0 -0
  154. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/replace-mathjax-cloudflare-url-local-file.sh +0 -0
  155. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/rules +0 -0
  156. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/shlibs.local +0 -0
  157. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/source/format +0 -0
  158. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/source_package_build.bash +0 -0
  159. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/upstream/metadata +0 -0
  160. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/watch +0 -0
  161. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/distances.py +0 -0
  162. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/flows.py +0 -0
  163. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/gradients.py +0 -0
  164. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/parameters.py +0 -0
  165. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/test_spectra.py +0 -0
  166. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/isobuild.py +0 -0
  167. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/log_vs_natural.cpp +0 -0
  168. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/threshold-search/exp1.cpp +0 -0
  169. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/CMakeLists.txt +0 -0
  170. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/doxyfile +0 -0
  171. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_high_versioned.png +0 -0
  172. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_high_versioned.svg +0 -0
  173. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_long_versioned.png +0 -0
  174. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_long_versioned.svg +0 -0
  175. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/logo2_high.pdf +0 -0
  176. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/logo2_long.pdf +0 -0
  177. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/logo2_high.pdf +0 -0
  178. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/logo2_long.pdf +0 -0
  179. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/setup.cfg +0 -0
  180. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/Makefile +0 -0
  181. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_IsoOrderedGenerator.c +0 -0
  182. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_IsoThresholdGenerator.c +0 -0
  183. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_arrays.c +0 -0
  184. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/IsoThresholdGenerator.cpp +0 -0
  185. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/Makefile +0 -0
  186. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/element_zero.cpp +0 -0
  187. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/empty_iso.cpp +0 -0
  188. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_layered.cpp +0 -0
  189. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_layered_generator.cpp +0 -0
  190. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_ordered.cpp +0 -0
  191. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_stochastic.cpp +0 -0
  192. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold.cpp +0 -0
  193. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold_profile.cpp +0 -0
  194. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold_simple.cpp +0 -0
  195. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/layered-test.cpp +0 -0
  196. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/main_test.cpp +0 -0
  197. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/marginal-test.cpp +0 -0
  198. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/mass_range.cpp +0 -0
  199. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/nr_conf.cpp +0 -0
  200. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/tabulator_test.cpp +0 -0
  201. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/titin-test.cpp +0 -0
  202. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/wasserstein_matching.cpp +0 -0
  203. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_IsoSpecPy.py +0 -0
  204. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_all_configs_output.py +0 -0
  205. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_estimates.py +0 -0
  206. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_iface.py +0 -0
  207. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_mass_predict.py +0 -0
  208. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_sampling.py +0 -0
  209. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/correctness/envipat_results.tar.xz +0 -0
  210. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/correctness/molecules_2_cpp.R +0 -0
  211. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/IsoSpecCppyy/__init__.py +0 -0
  212. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/cpt.py +0 -0
  213. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/overhead-cppyy.py +0 -0
  214. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/overhead.py +0 -0
  215. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tools/gen.py +0 -0
  216. {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tools/rcheck.sh +0 -0
@@ -3,7 +3,7 @@ name: Build
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - version_2_2
6
+ # - version_2_2
7
7
  - ci_wheels
8
8
  tags:
9
9
  - v*
@@ -15,25 +15,23 @@ jobs:
15
15
  strategy:
16
16
  matrix:
17
17
  #os: [ubuntu-20.04, windows-2019, macos-10.15]
18
- os: [windows-2019]
18
+ os: [windows-latest, macos-14]
19
19
 
20
20
  steps:
21
- - uses: actions/checkout@v2
21
+ - uses: actions/checkout@v4
22
22
 
23
- # - name: Install Visual C++ for Python 2.7
24
- # if: runner.os == 'Windows'
25
- # run: choco install vcpython27 -f -y
23
+ # Used to host cibuildwheel
24
+ - uses: actions/setup-python@v3
25
+
26
+ - name: Install cibuildwheel
27
+ run: python -m pip install cibuildwheel
26
28
 
27
29
  - name: Build wheels
28
- uses: joerick/cibuildwheel@v1.10.0
30
+ run: python -m cibuildwheel --output-dir wheelhouse
29
31
  # to supply options, put them in 'env', like:
30
- # env:
31
- # CIBW_SOME_OPTION: value
32
32
  env:
33
- CIBW_SKIP: cp27-* pp27-*
34
33
  GITHUB_BUILDING_WHEELS: 1
35
34
 
36
- - uses: actions/upload-artifact@v2
35
+ - uses: actions/upload-artifact@v4
37
36
  with:
38
37
  path: ./wheelhouse/*.whl
39
-
@@ -1,6 +1,6 @@
1
1
  OPTFLAGS=-O3 -march=native -mtune=native
2
2
  DEBUGFLAGS=-O0 -g -Werror -DISOSPEC_DEBUG -DDEBUG -D_GLIBCXX_DEBUG
3
- CXXFLAGS=-std=c++17 -Wall -pedantic -Wextra -Wshadow -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-include-dirs -Wno-old-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wno-sign-conversion -Wsign-promo -Wswitch-default -Wundef -Werror
3
+ CXXFLAGS=-std=c++11 -Wall -pedantic -Wextra -Wshadow -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-include-dirs -Wno-old-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wno-sign-conversion -Wsign-promo -Wswitch-default -Wundef
4
4
  SRCFILES=cwrapper.cpp allocator.cpp dirtyAllocator.cpp isoSpec++.cpp isoMath.cpp marginalTrek++.cpp operators.cpp element_tables.cpp misc.cpp mman.cpp fixedEnvelopes.cpp fasta.cpp
5
5
 
6
6
  all: unitylib
@@ -22,11 +22,11 @@ clean:
22
22
 
23
23
  windows:
24
24
  #g++ -O3 -std=gnu++1z -O3 -shared -static -static-libstdc++ -static-libgcc unity-build.cpp -o ../IsoSpecPy/IsoSpec++.dll
25
- x86_64-w64-mingw32-g++.exe -std=c++17 -O3 -shared -static -static-libstdc++ unity-build.cpp -o ../IsoSpecPy/IsoSpecPy/prebuilt-libIsoSpec++-2.1.0-x64.dll
26
- i686-w64-mingw32-g++.exe -std=c++17 -O3 -shared -static -static-libstdc++ unity-build.cpp -o ../IsoSpecPy/IsoSpecPy/prebuilt-libIsoSpec++-2.1.0-x32.dll
25
+ x86_64-w64-mingw32-g++.exe -std=c++11 -O3 -shared -static -static-libstdc++ unity-build.cpp -o ../IsoSpecPy/IsoSpecPy/prebuilt-libIsoSpec++-2.1.0-x64.dll
26
+ i686-w64-mingw32-g++.exe -std=c++11 -O3 -shared -static -static-libstdc++ unity-build.cpp -o ../IsoSpecPy/IsoSpecPy/prebuilt-libIsoSpec++-2.1.0-x32.dll
27
27
  check:
28
28
  cpplint *.cpp *.h
29
- #cppcheck --std=c++17 --language=c++ --enable=style,portability,missingInclude,performance -q --force *.cpp *.h --suppress=memleakOnRealloc:*:* --inline-suppr --template={file}:{line}\ \({severity}\)\ \<{id}\>:\ {message}
29
+ #cppcheck --std=c++11 --language=c++ --enable=style,portability,missingInclude,performance -q --force *.cpp *.h --suppress=memleakOnRealloc:*:* --inline-suppr --template={file}:{line}\ \({severity}\)\ \<{id}\>:\ {message}
30
30
 
31
31
  check11:
32
32
  $(CXX) -std=c++11 -Wall -pedantic -Wextra -Wshadow -fsyntax-only unity-build.cpp
@@ -357,10 +357,10 @@ double abyssalWassersteinDistanceGrad(void* const* envelopes, const double* scal
357
357
  struct ws_match_res wassersteinMatch(void* tabulator1, void* tabulator2, double flow_dist, double other_scale)
358
358
  {
359
359
  struct ws_match_res res;
360
- auto [t1, t2, t3] = reinterpret_cast<FixedEnvelope*>(tabulator1)->WassersteinMatch(*reinterpret_cast<FixedEnvelope*>(tabulator2), flow_dist, other_scale);
361
- res.res1 = t1;
362
- res.res2 = t2;
363
- res.flow = t3;
360
+ auto tuple = reinterpret_cast<FixedEnvelope*>(tabulator1)->WassersteinMatch(*reinterpret_cast<FixedEnvelope*>(tabulator2), flow_dist, other_scale);
361
+ res.res1 = std::get<0>(tuple);
362
+ res.res2 = std::get<1>(tuple);
363
+ res.flow = std::get<2>(tuple);
364
364
  return res;
365
365
  }
366
366
 
@@ -153,11 +153,11 @@ template<typename T> void reorder_array(T* arr, size_t* order, size_t size, bool
153
153
 
154
154
  void FixedEnvelope::sort_by(double* order)
155
155
  {
156
- size_t* indices = new size_t[_confs_no];
157
-
158
156
  if(_confs_no <= 1)
159
157
  return;
160
158
 
159
+ size_t* indices = new size_t[_confs_no];
160
+
161
161
  for(size_t ii = 0; ii < _confs_no; ii++)
162
162
  indices[ii] = ii;
163
163
 
@@ -443,7 +443,9 @@ double FixedEnvelope::AbyssalWassersteinDistance(FixedEnvelope& other, double ab
443
443
 
444
444
  while(!finished())
445
445
  {
446
- auto [m, p] = next();
446
+ auto pair = next();
447
+ double m = pair.first;
448
+ double p = pair.second;
447
449
  if(!carried.empty() && carried[0].second * p > 0.0)
448
450
  {
449
451
  carried.emplace_back(m, p);
@@ -452,7 +454,8 @@ double FixedEnvelope::AbyssalWassersteinDistance(FixedEnvelope& other, double ab
452
454
 
453
455
  while(!carried.empty())
454
456
  {
455
- auto& [cm, cp] = carried.back();
457
+ double cm = carried.back().first;
458
+ double cp = carried.back().second;
456
459
  if(m - cm >= abyss_depth)
457
460
  {
458
461
  for(auto it = carried.cbegin(); it != carried.cend(); it++)
@@ -64,7 +64,7 @@ class ISOSPEC_EXPORT_SYMBOL Iso {
64
64
  int* isotopeNumbers; /*!< A table with numbers of isotopes for each element. */
65
65
  int* atomCounts; /*!< A table with numbers of isotopes for each element. */
66
66
  unsigned int confSize; /*!< The number of bytes needed to represent the counts of isotopes present in the extended chemical formula. */
67
- int allDim; /*!< The total number of isotopes of elements present in a chemical formula, e.g. for H20 it is 2+3=5. */
67
+ int allDim; /*!< The total number of isotopes of elements present in a chemical formula, e.g. for H2O (water) it is 2+3=5. */
68
68
  Marginal** marginals; /*!< The table of pointers to the distributions of individual subisotopologues. */
69
69
 
70
70
  bool doMarginalsNeedSorting() const;
@@ -329,14 +329,20 @@ Marginal(std::move(m)),
329
329
  current_count(0),
330
330
  orderMarginal(atom_lProbs, isotopeNo),
331
331
  pq(),
332
- allocator(isotopeNo, tabSize)
332
+ allocator(isotopeNo, tabSize),
333
+ min_lprob(*std::min_element(atom_lProbs, atom_lProbs+isotopeNo))
333
334
  {
334
335
  int* initialConf = allocator.makeCopy(mode_conf);
335
336
 
336
- pq.push({unnormalized_logProb(mode_conf), initialConf});
337
+ pq.push({mode_lprob, initialConf});
337
338
 
338
339
  current_count = 0;
339
340
 
341
+ fringe.resize_and_wipe(1);
342
+
343
+ current_bucket = 0;
344
+ initialized_until = 1;
345
+
340
346
  add_next_conf();
341
347
  }
342
348
 
@@ -347,9 +353,25 @@ bool MarginalTrek::add_next_conf()
347
353
  Add next configuration.
348
354
  If visited all, return false.
349
355
  */
350
- if(pq.size() < 1) return false;
356
+ if(pq.empty())
357
+ {
358
+ current_bucket++;
359
+ while(current_bucket < initialized_until && fringe[current_bucket].empty())
360
+ {
361
+ // std::cout << "EMPTY bucket, id: " << current_bucket << std::endl;
362
+ current_bucket++;
363
+ }
364
+
365
+ // std::cout << "Entering bucket, size: " << fringe[current_bucket].size() << std::endl;
351
366
 
352
- double logprob = pq.top().first + loggamma_nominator;
367
+ if(current_bucket >= initialized_until)
368
+ return false;
369
+
370
+ // std::cout << "Fringe size at pop: " << fringe[current_bucket].size() << std::endl;
371
+ pq = std::priority_queue<ProbAndConfPtr, pod_vector<ProbAndConfPtr> >(std::less<ProbAndConfPtr>(), pod_vector<ProbAndConfPtr>(std::move(fringe[current_bucket])));
372
+ };
373
+
374
+ double logprob = pq.top().first;
353
375
  Conf topConf = pq.top().second;
354
376
 
355
377
  pq.pop();
@@ -379,9 +401,22 @@ bool MarginalTrek::add_next_conf()
379
401
  ++acceptedCandidate[i];
380
402
  --acceptedCandidate[j];
381
403
 
382
- double new_prob = unnormalized_logProb(acceptedCandidate);
404
+ double new_prob = logProb(acceptedCandidate);
405
+ size_t bucket_nr = bucket_no(new_prob);
406
+
407
+ if(bucket_nr >= initialized_until)
408
+ {
409
+ // std::cout << "Extending to: " << bucket_nr << std::endl;
410
+ initialized_until = bucket_nr+1;
411
+ fringe.resize_and_wipe(initialized_until);
412
+ }
413
+
414
+ ISOSPEC_IMPOSSIBLE(bucket_nr < current_bucket);
415
+ if(bucket_nr == current_bucket)
416
+ pq.push({new_prob, acceptedCandidate});
417
+ else
418
+ fringe[bucket_nr].push_back({new_prob, acceptedCandidate});
383
419
 
384
- pq.push({new_prob, acceptedCandidate});
385
420
  }
386
421
 
387
422
  if( topConf[i] > mode_conf[i] )
@@ -398,6 +433,9 @@ bool MarginalTrek::add_next_conf()
398
433
 
399
434
  MarginalTrek::~MarginalTrek()
400
435
  {
436
+ const size_t fringe_size = fringe.size();
437
+ for(size_t ii = 0; ii < fringe_size; ii++)
438
+ fringe[ii].clear();
401
439
  }
402
440
 
403
441
 
@@ -178,14 +178,21 @@ class MarginalTrek : public Marginal
178
178
  int current_count;
179
179
  const ConfOrderMarginal orderMarginal;
180
180
  std::priority_queue<ProbAndConfPtr, pod_vector<ProbAndConfPtr> > pq;
181
+ pod_vector<unsafe_pod_vector<ProbAndConfPtr> > fringe;
181
182
  Allocator<int> allocator;
182
183
  pod_vector<double> _conf_lprobs;
183
184
  pod_vector<double> _conf_masses;
184
185
  pod_vector<int*> _confs;
185
186
 
187
+ const double min_lprob;
188
+ size_t current_bucket;
189
+ size_t initialized_until;
190
+
186
191
  //! Proceed to the next configuration and memoize it (as it will be surely needed).
187
192
  bool add_next_conf();
188
193
 
194
+ size_t bucket_no(double lprob) { return static_cast<size_t>( (mode_lprob - lprob) * 100.0 ); }
195
+
189
196
  public:
190
197
  //! Move constructor: specializes the Marginal class.
191
198
  /*!
@@ -26,7 +26,7 @@
26
26
  #endif /* FILE_MAP_EXECUTE */
27
27
 
28
28
 
29
- static int __map_mman_error(const DWORD err, const int deferr)
29
+ static int __map_mman_error(const DWORD err, const int /* deferr */)
30
30
  {
31
31
  if (err == 0)
32
32
  return 0;
@@ -72,7 +72,7 @@ static DWORD __map_mmap_prot_file(const int prot)
72
72
  return desiredAccess;
73
73
  }
74
74
 
75
- void* mmap(void *addr, size_t len, int prot, int flags, int fildes, OffsetType off)
75
+ void* mmap(void * /* addr */, size_t len, int prot, int flags, int fildes, OffsetType off)
76
76
  {
77
77
  HANDLE fm, h;
78
78
 
@@ -143,7 +143,7 @@ void* mmap(void *addr, size_t len, int prot, int flags, int fildes, OffsetType o
143
143
  return map;
144
144
  }
145
145
 
146
- int munmap(void *addr, size_t len)
146
+ int munmap(void *addr, size_t /* len */)
147
147
  {
148
148
  if (UnmapViewOfFile(addr))
149
149
  return 0;
@@ -153,6 +153,10 @@ int munmap(void *addr, size_t len)
153
153
  return -1;
154
154
  }
155
155
 
156
+ #if 0
157
+ // Unused by IsoSpec
158
+
159
+
156
160
  int _mprotect(void *addr, size_t len, int prot)
157
161
  {
158
162
  DWORD newProtect = __map_mmap_prot_page(prot);
@@ -166,7 +170,7 @@ int _mprotect(void *addr, size_t len, int prot)
166
170
  return -1;
167
171
  }
168
172
 
169
- int msync(void *addr, size_t len, int flags)
173
+ int msync(void *addr, size_t len, int /* flags */)
170
174
  {
171
175
  if (FlushViewOfFile(addr, len))
172
176
  return 0;
@@ -195,6 +199,6 @@ int munlock(const void *addr, size_t len)
195
199
 
196
200
  return -1;
197
201
  }
198
-
202
+ #endif
199
203
 
200
204
  #endif
@@ -18,10 +18,12 @@
18
18
 
19
19
  #include <type_traits>
20
20
  #include <cstdlib>
21
+ #include <cstddef>
21
22
  #include <utility>
22
23
  #include <new>
23
24
  #include <algorithm>
24
25
  #include "platform.h"
26
+ #include "conf.h"
25
27
 
26
28
 
27
29
 
@@ -29,10 +31,6 @@ template<typename T> class unsafe_pod_vector;
29
31
 
30
32
  template<typename T> class pod_vector
31
33
  {
32
- #if !ISOSPEC_BUILDING_R
33
- static_assert(std::is_trivially_copyable<T>::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
34
- #endif
35
-
36
34
  T* backend_past_end;
37
35
  T* first_free;
38
36
  T* store;
@@ -40,6 +38,10 @@ template<typename T> class pod_vector
40
38
  public:
41
39
  explicit pod_vector(size_t initial_size = 16)
42
40
  {
41
+ #if !ISOSPEC_BUILDING_R
42
+ static_assert(std::is_trivially_copyable<T>::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
43
+ #endif
44
+
43
45
  store = reinterpret_cast<T*>(malloc(sizeof(T) * initial_size));
44
46
  if(store == NULL)
45
47
  throw std::bad_alloc();
@@ -49,6 +51,15 @@ template<typename T> class pod_vector
49
51
 
50
52
  pod_vector(const pod_vector<T>& other) = delete;
51
53
  pod_vector& operator=(const pod_vector<T>& other) = delete;
54
+ pod_vector& operator=(pod_vector<T>&& other)
55
+ {
56
+ free(store);
57
+ backend_past_end = other.backend_past_end;
58
+ first_free = other.first_free;
59
+ store = other.store;
60
+ other.backend_past_end = other.first_free = other.store = NULL;
61
+ return *this;
62
+ }
52
63
 
53
64
  pod_vector(pod_vector<T>&& other)
54
65
  {
@@ -58,22 +69,24 @@ template<typename T> class pod_vector
58
69
  other.backend_past_end = other.first_free = other.store = NULL;
59
70
  }
60
71
 
61
- ~pod_vector() { free(store); }
72
+ ~pod_vector() { free(store); backend_past_end = first_free = store = NULL; }
62
73
 
63
74
  explicit pod_vector(unsafe_pod_vector<T>&& other)
64
75
  {
65
76
  backend_past_end = other.backend_past_end;
66
77
  first_free = other.first_free;
67
78
  store = other.store;
79
+ other.backend_past_end = other.first_free = other.store = NULL;
68
80
  }
69
81
 
70
82
  void fast_reserve(size_t n)
71
83
  {
72
84
  ISOSPEC_IMPOSSIBLE(n < static_cast<size_t>(backend_past_end - store));
85
+ const std::ptrdiff_t store_used_size = first_free - store;
73
86
  T* new_store = reinterpret_cast<T*>(realloc(store, n * sizeof(T)));
74
87
  if(new_store == NULL)
75
88
  throw std::bad_alloc();
76
- first_free = new_store + (first_free - store);
89
+ first_free = new_store + store_used_size;
77
90
  backend_past_end = new_store + n;
78
91
  store = new_store;
79
92
  }
@@ -84,6 +97,28 @@ template<typename T> class pod_vector
84
97
  fast_reserve(n);
85
98
  }
86
99
 
100
+ void resize(size_t new_size)
101
+ {
102
+ ISOSPEC_IMPOSSIBLE(static_cast<std::ptrdiff_t>(new_size) < first_free - store);
103
+ size_t cap = capacity();
104
+ if(cap < new_size)
105
+ {
106
+ do {
107
+ cap = cap * 2;
108
+ } while(cap < new_size);
109
+ fast_reserve(cap);
110
+ }
111
+ first_free = store + new_size;
112
+ }
113
+
114
+ void resize_and_wipe(size_t new_size)
115
+ {
116
+ size_t old_size = size();
117
+ ISOSPEC_IMPOSSIBLE(new_size <= old_size);
118
+ resize(new_size);
119
+ memset(store+old_size, 0, (new_size-old_size) * sizeof(T));
120
+ }
121
+
87
122
  ISOSPEC_FORCE_INLINE void nocheck_push_back(const T& val) noexcept
88
123
  {
89
124
  ISOSPEC_IMPOSSIBLE(first_free >= backend_past_end);
@@ -188,10 +223,6 @@ template<typename T> class pod_vector
188
223
 
189
224
  template<typename T> class unsafe_pod_vector
190
225
  {
191
- #if !ISOSPEC_BUILDING_R
192
- static_assert(std::is_trivially_copyable<T>::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
193
- static_assert(std::is_trivially_copyable<unsafe_pod_vector<T> >::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
194
- #endif
195
226
 
196
227
  T* backend_past_end;
197
228
  T* first_free;
@@ -200,10 +231,20 @@ template<typename T> class unsafe_pod_vector
200
231
  public:
201
232
  unsafe_pod_vector() = default;
202
233
 
203
- void init() { memset(this, 0, sizeof(*this)); }
234
+ void init() {
235
+ #if !ISOSPEC_BUILDING_R
236
+ static_assert(std::is_trivially_copyable<T>::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
237
+ static_assert(std::is_trivially_copyable<unsafe_pod_vector<T> >::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
238
+ #endif
239
+ memset(this, 0, sizeof(*this));
240
+ }
204
241
 
205
242
  void init(size_t initial_size)
206
243
  {
244
+ #if !ISOSPEC_BUILDING_R
245
+ static_assert(std::is_trivially_copyable<T>::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
246
+ static_assert(std::is_trivially_copyable<unsafe_pod_vector<T> >::value, "Cannot use a pod_vector with a non-Plain Old Data type.");
247
+ #endif
207
248
  store = reinterpret_cast<T*>(malloc(sizeof(T) * initial_size));
208
249
  if(store == NULL)
209
250
  throw std::bad_alloc();
@@ -213,16 +254,10 @@ template<typename T> class unsafe_pod_vector
213
254
 
214
255
  unsafe_pod_vector(const pod_vector<T>& other) = delete; // NOLINT(runtime/explicit) - seriously? Deleted constructors have to be marked explicit?
215
256
  unsafe_pod_vector& operator=(const pod_vector<T>& other) = delete;
216
-
217
- unsafe_pod_vector(unsafe_pod_vector<T>&& other)
218
- {
219
- memcpy(this, *other, sizeof(*this));
220
- }
257
+ //unsafe_pod_vector(unsafe_pod_vector<T>&& other) = default;
221
258
 
222
259
  ~unsafe_pod_vector() = default;
223
260
 
224
- void free() { free(store); }
225
-
226
261
  void fast_reserve(size_t n)
227
262
  {
228
263
  ISOSPEC_IMPOSSIBLE(n < static_cast<size_t>(backend_past_end - store));
@@ -257,7 +292,7 @@ template<typename T> class unsafe_pod_vector
257
292
  void resize_and_wipe(size_t new_size)
258
293
  {
259
294
  size_t old_size = size();
260
- ISOSPEC_IMPOSSIBLE(new_size < old_size);
295
+ ISOSPEC_IMPOSSIBLE(new_size <= old_size);
261
296
  resize(new_size);
262
297
  memset(store+old_size, 0, (new_size-old_size) * sizeof(T));
263
298
  }
@@ -362,4 +397,3 @@ template<typename T> class unsafe_pod_vector
362
397
 
363
398
  friend class pod_vector<T>;
364
399
  };
365
-
@@ -0,0 +1,6 @@
1
+ #include "isoSpec++.h"
2
+
3
+ int main() {
4
+ auto orderedGenerator = IsoSpec::IsoOrderedGenerator("H2O1");
5
+ orderedGenerator.advanceToNextConfiguration();
6
+ }
@@ -14,7 +14,7 @@ cholesterol = "C27H46O1"
14
14
  caffeine = "C8H10N4O2"
15
15
  water = "H2O1"
16
16
  glucose = "C6H12O6"
17
- surcose = "C12H22O11"
17
+ sucrose = "C12H22O11"
18
18
  horse_myoglobin = "C769H1212N210O218S2"
19
19
  oxygen = "O2"
20
20
 
@@ -1,7 +1,7 @@
1
1
  from .IsoSpecPy import *
2
2
 
3
3
 
4
- __version__ = "2.2.0"
4
+ __version__ = "2.2.2"
5
5
 
6
6
  # Old, deprecated name, for compatibility with 1.9.X only
7
7
  IsoLayered = IsoTotalProb
@@ -152,9 +152,9 @@ sure you want to do that, edit the source and disable this check.''')
152
152
  extension = ['.so', '.dylib', '.dll']
153
153
  try:
154
154
  if platform.system() == 'Linux':
155
- extension = ['.so']
155
+ extension = ['.so', 'pyd']
156
156
  elif platform.system() == 'Windows':
157
- extension = ['.dll']
157
+ extension = ['.dll', '.pyd']
158
158
  except:
159
159
  pass
160
160
 
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: IsoSpecPy
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: Python interface to IsoSpec++ isotopic envelope calculator library
5
5
  Home-page: http://matteolacki.github.io/IsoSpec/
6
6
  Author: Mateusz Lacki & Michal Startek
7
7
  Author-email: matteo.lacki@gmail.com
8
8
  License: 2-clause BSD
9
9
  Keywords: isotopic envelope mass spectrometry
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 5 - Production/Stable
12
11
  Classifier: Intended Audience :: Science/Research
13
12
  Classifier: Topic :: Scientific/Engineering :: Chemistry
@@ -23,8 +22,10 @@ Classifier: Programming Language :: Python :: 3.6
23
22
  Classifier: Programming Language :: Python :: 3.7
24
23
  Classifier: Programming Language :: Python :: 3.8
25
24
  Classifier: Programming Language :: Python :: 3.9
26
- Provides-Extra: test
27
25
  License-File: LICENCE
26
+ Requires-Dist: cffi
27
+ Provides-Extra: test
28
+ Requires-Dist: pytest; extra == "test"
29
+ Requires-Dist: numpy; extra == "test"
28
30
 
29
31
  Python interface to IsoSpec++ isotopic envelope calculator library
30
-
@@ -65,6 +65,7 @@ IsoSpec++/platform_incl.h
65
65
  IsoSpec++/pod_vector.h
66
66
  IsoSpec++/python-build.cpp
67
67
  IsoSpec++/summator.h
68
+ IsoSpec++/test.cpp
68
69
  IsoSpec++/unity-build.cpp
69
70
  IsoSpecPy/Advanced.py
70
71
  IsoSpecPy/Distributions.py
@@ -194,6 +195,7 @@ tests/C++/marginal-test.cpp
194
195
  tests/C++/mass_range.cpp
195
196
  tests/C++/nr_conf.cpp
196
197
  tests/C++/tabulator_test.cpp
198
+ tests/C++/test_marginal_ordered.cpp
197
199
  tests/C++/titin-test.cpp
198
200
  tests/C++/wasserstein_matching.cpp
199
201
  tests/Python/test_IsoSpecPy.py
@@ -357,10 +357,10 @@ double abyssalWassersteinDistanceGrad(void* const* envelopes, const double* scal
357
357
  struct ws_match_res wassersteinMatch(void* tabulator1, void* tabulator2, double flow_dist, double other_scale)
358
358
  {
359
359
  struct ws_match_res res;
360
- auto [t1, t2, t3] = reinterpret_cast<FixedEnvelope*>(tabulator1)->WassersteinMatch(*reinterpret_cast<FixedEnvelope*>(tabulator2), flow_dist, other_scale);
361
- res.res1 = t1;
362
- res.res2 = t2;
363
- res.flow = t3;
360
+ auto tuple = reinterpret_cast<FixedEnvelope*>(tabulator1)->WassersteinMatch(*reinterpret_cast<FixedEnvelope*>(tabulator2), flow_dist, other_scale);
361
+ res.res1 = std::get<0>(tuple);
362
+ res.res2 = std::get<1>(tuple);
363
+ res.flow = std::get<2>(tuple);
364
364
  return res;
365
365
  }
366
366
 
@@ -153,11 +153,11 @@ template<typename T> void reorder_array(T* arr, size_t* order, size_t size, bool
153
153
 
154
154
  void FixedEnvelope::sort_by(double* order)
155
155
  {
156
- size_t* indices = new size_t[_confs_no];
157
-
158
156
  if(_confs_no <= 1)
159
157
  return;
160
158
 
159
+ size_t* indices = new size_t[_confs_no];
160
+
161
161
  for(size_t ii = 0; ii < _confs_no; ii++)
162
162
  indices[ii] = ii;
163
163
 
@@ -443,7 +443,9 @@ double FixedEnvelope::AbyssalWassersteinDistance(FixedEnvelope& other, double ab
443
443
 
444
444
  while(!finished())
445
445
  {
446
- auto [m, p] = next();
446
+ auto pair = next();
447
+ double m = pair.first;
448
+ double p = pair.second;
447
449
  if(!carried.empty() && carried[0].second * p > 0.0)
448
450
  {
449
451
  carried.emplace_back(m, p);
@@ -452,7 +454,8 @@ double FixedEnvelope::AbyssalWassersteinDistance(FixedEnvelope& other, double ab
452
454
 
453
455
  while(!carried.empty())
454
456
  {
455
- auto& [cm, cp] = carried.back();
457
+ double cm = carried.back().first;
458
+ double cp = carried.back().second;
456
459
  if(m - cm >= abyss_depth)
457
460
  {
458
461
  for(auto it = carried.cbegin(); it != carried.cend(); it++)
@@ -64,7 +64,7 @@ class ISOSPEC_EXPORT_SYMBOL Iso {
64
64
  int* isotopeNumbers; /*!< A table with numbers of isotopes for each element. */
65
65
  int* atomCounts; /*!< A table with numbers of isotopes for each element. */
66
66
  unsigned int confSize; /*!< The number of bytes needed to represent the counts of isotopes present in the extended chemical formula. */
67
- int allDim; /*!< The total number of isotopes of elements present in a chemical formula, e.g. for H20 it is 2+3=5. */
67
+ int allDim; /*!< The total number of isotopes of elements present in a chemical formula, e.g. for H2O (water) it is 2+3=5. */
68
68
  Marginal** marginals; /*!< The table of pointers to the distributions of individual subisotopologues. */
69
69
 
70
70
  bool doMarginalsNeedSorting() const;