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.
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/.github/workflows/build_wheels.yml +10 -12
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/Makefile +4 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/cwrapper.cpp +4 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fixedEnvelopes.cpp +7 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoSpec++.h +1 -1
- {IsoSpecPy-2.2.0/IsoSpecR/src → IsoSpecPy-2.2.2/IsoSpec++}/marginalTrek++.cpp +44 -6
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/marginalTrek++.h +7 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/mman.cpp +9 -5
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/pod_vector.h +54 -20
- IsoSpecPy-2.2.2/IsoSpec++/test.cpp +6 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Formulas.py +1 -1
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/__init__.py +1 -1
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/isoFFI.py +2 -2
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/PKG-INFO +5 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/SOURCES.txt +2 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/cwrapper.cpp +4 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fixedEnvelopes.cpp +7 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoSpec++.h +1 -1
- {IsoSpecPy-2.2.0/IsoSpec++ → IsoSpecPy-2.2.2/IsoSpecR/src}/marginalTrek++.cpp +44 -6
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/marginalTrek++.h +7 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/mman.cpp +9 -5
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/pod_vector.h +54 -20
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/PKG-INFO +5 -4
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/setup.py +8 -4
- IsoSpecPy-2.2.2/tests/C++/test_marginal_ordered.cpp +57 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CHANGELOG +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeLists.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/doxyfile.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/isospec_logo2_high.svg.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/isospec_logo2_long.svg.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/FindIsoSpec++.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/IsoSpec++Config.cmake.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/modules/pkgconfig/libisospec++.pc.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/outputColors.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/systemUname.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/apple-macport-toolchain.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/mxe-toolchain.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/unix-toolchain.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/COMPILING +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/radiolabelling.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/C++/water.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/CMakeLists.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/custom_elements.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/fasta.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/radiolabelling.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/Python/water.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/R/radiolabelling.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Examples/R/water.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/INSTALL +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/CMakeLists.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/CPPLINT.cfg +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/IsoSpecConfig.cmake.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/allocator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/allocator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/btrd.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/conf.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/cwrapper.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/dirtyAllocator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/dirtyAllocator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/element_tables.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/element_tables.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fasta.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fasta.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/fixedEnvelopes.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoMath.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoMath.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/isoSpec++.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/misc.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/misc.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/mman.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/operators.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/operators.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/platform.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/platform_incl.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/python-build.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/summator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpec++/unity-build.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Advanced.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/Distributions.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/IsoSpecPy.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/IsoSpecPyOld.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/PeriodicTbl.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/approximations.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy/confs_passthrough.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/dependency_links.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/not-zip-safe +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/requires.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecPy.egg-info/top_level.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/.Rbuildignore +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/DESCRIPTION +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/LICENCE +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/NAMESPACE +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/IsoSpecR.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/RcppExports.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/add_custom_isotopes.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/data_description.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/R/sysdata.rda +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/data/isotopicData.rda +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/inst/CITATION +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/IsoSpecify.Rd +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/custom_isotopes_example.Rd +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/man/isotopicData.Rd +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/IsoSpecR_init.c +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/RcppExports.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/Rinterface.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/allocator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/allocator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/btrd.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/conf.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/cwrapper.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/dirtyAllocator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/dirtyAllocator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/element_tables.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/element_tables.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fasta.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fasta.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/fixedEnvelopes.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoMath.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoMath.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/isoSpec++.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/misc.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/misc.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/mman.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/operators.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/operators.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/platform.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/platform_incl.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/summator.h +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/src/unity-build.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat/envipat.Rd +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat/test-numerical-stability.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/IsoSpecR/tests/testthat.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/LICENCE +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/MANIFEST.in +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/Makefile +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/README +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/TODO.md +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/changelog +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/control +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/copyright +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/doxyfile +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.install +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.links +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-dev.manpages +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-doc.doc-base +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++-doc.install +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++2.install +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/libisospec++2.links +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/0001-Ensure-the-header-files-are-found-in-the-system.patch +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/0002-Remove-the-mtune-native-march-native.patch +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/patches/series +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/repack.sh +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/replace-mathjax-cloudflare-url-local-file.sh +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/rules +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/shlibs.local +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/source/format +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/source_package_build.bash +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/upstream/metadata +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/debian/watch +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/distances.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/flows.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/gradients.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/parameters.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/abyss-wass-opt/test_spectra.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/isobuild.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/log_vs_natural.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/experiments/threshold-search/exp1.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/CMakeLists.txt +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/doxyfile +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_high_versioned.png +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_high_versioned.svg +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_long_versioned.png +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/isospec_logo2_long_versioned.svg +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/logo2_high.pdf +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/images/logo2_long.pdf +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/logo2_high.pdf +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/man/logo2_long.pdf +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/setup.cfg +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/Makefile +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_IsoOrderedGenerator.c +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_IsoThresholdGenerator.c +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C/test_arrays.c +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/IsoThresholdGenerator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/Makefile +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/element_zero.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/empty_iso.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_layered.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_layered_generator.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_ordered.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_stochastic.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold_profile.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/from_formula_threshold_simple.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/layered-test.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/main_test.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/marginal-test.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/mass_range.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/nr_conf.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/tabulator_test.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/titin-test.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/C++/wasserstein_matching.cpp +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_IsoSpecPy.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_all_configs_output.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_estimates.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_iface.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_mass_predict.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/Python/test_sampling.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/correctness/envipat_results.tar.xz +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/correctness/molecules_2_cpp.R +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/IsoSpecCppyy/__init__.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/cpt.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/overhead-cppyy.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tests/cppyy/overhead.py +0 -0
- {IsoSpecPy-2.2.0 → IsoSpecPy-2.2.2}/tools/gen.py +0 -0
- {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-
|
|
18
|
+
os: [windows-latest, macos-14]
|
|
19
19
|
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
22
|
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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@
|
|
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++
|
|
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++
|
|
26
|
-
i686-w64-mingw32-g++.exe -std=c++
|
|
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++
|
|
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
|
|
361
|
-
res.res1 =
|
|
362
|
-
res.res2 =
|
|
363
|
-
res.flow =
|
|
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
|
|
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
|
-
|
|
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
|
|
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({
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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 +
|
|
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() {
|
|
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
|
|
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
|
-
|
|
@@ -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.
|
|
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
|
|
361
|
-
res.res1 =
|
|
362
|
-
res.res2 =
|
|
363
|
-
res.flow =
|
|
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
|
|
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
|
-
|
|
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
|
|
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;
|