diff --git a/.github/workflows/test_benchmark_collection_models.yml b/.github/workflows/test_benchmark_collection_models.yml index 023fe077e6..7c7aacb992 100644 --- a/.github/workflows/test_benchmark_collection_models.yml +++ b/.github/workflows/test_benchmark_collection_models.yml @@ -52,6 +52,10 @@ jobs: AMICI_PARALLEL_COMPILE="" pip3 install -v --user \ $(ls -t python/sdist/dist/amici-*.tar.gz | head -1)[petab,test,vis] + - run: | + python3 -m pip uninstall -y petab && python3 -m pip install git+https://github.com/petab-dev/libpetab-python.git@develop \ + && python3 -m pip install -U sympy + # retrieve test models - name: Download and test benchmark collection run: | diff --git a/.github/workflows/test_petab_test_suite.yml b/.github/workflows/test_petab_test_suite.yml index 7e9a93c494..64277fe267 100644 --- a/.github/workflows/test_petab_test_suite.yml +++ b/.github/workflows/test_petab_test_suite.yml @@ -58,7 +58,7 @@ jobs: - name: Install petab run: | source ./venv/bin/activate \ - && pip3 install wheel pytest shyaml pytest-cov pysb + && pip3 install wheel pytest shyaml pytest-cov pysb>=1.16 # retrieve test models - name: Download and install PEtab test suite @@ -68,11 +68,20 @@ jobs: && source ./venv/bin/activate \ && cd petab_test_suite && pip3 install -e . + - name: Install petab + run: | + source ./venv/bin/activate \ + && python3 -m pip uninstall -y petab \ + && python3 -m pip install git+https://github.com/petab-dev/libpetab-python.git@develop \ + && python3 -m pip install git+https://github.com/FFroehlich/pysb@fix_pattern_matching \ + && python3 -m pip install sympy>=1.12.1 + + - name: Run PEtab-related unit tests run: | source ./venv/bin/activate \ && pytest --cov-report=xml:coverage.xml \ - --cov=./ python/tests/test_*petab*.py python/tests/petab/ + --cov=./ python/tests/test_*petab*.py python/tests/petab_/ # run test models - name: Run PEtab test suite diff --git a/.github/workflows/test_python_ver_matrix.yml b/.github/workflows/test_python_ver_matrix.yml index 01d455b18a..da2669b866 100644 --- a/.github/workflows/test_python_ver_matrix.yml +++ b/.github/workflows/test_python_ver_matrix.yml @@ -57,6 +57,9 @@ jobs: - run: source venv/bin/activate && pip3 install git+https://github.com/sympy/sympy.git@master if: matrix.python-version == '3.12' + - run: source venv/bin/activate && pip3 install "sympy>=1.12.1" + if: matrix.python-version != '3.12' + - name: Python tests run: | source venv/bin/activate \ diff --git a/CHANGELOG.md b/CHANGELOG.md index b466d2d491..e60a72eb4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,37 @@ # Changelog +See also our [versioning policy](https://amici.readthedocs.io/en/latest/versioning_policy.html). + ## v0.X Series +### v0.26.0 (2024-07-06) + +AMICI v0.26.0 requires sympy>=1.12.1 and petab>=0.4.0. + +**Policy changes** + +* Updated AMICI's [versioning / deprecation policy](https://amici.readthedocs.io/en/develop/versioning_policy.html) + + We will start removing deprecated features that had a deprecation warning + for longer than six months in the next minor release. + +**Deprecations** + +* Passing individual tables to `amici_import_petab` is now deprecated. + Use a `petab.Problem` instance instead. + + by @dweindl in https://github.com/AMICI-dev/AMICI/pull/2464 + +**Fixes** + +* Fixed a bug where during installation of AMICI, an incorrect sundials CMake + would be used resulting in installation errors. + + by @dweindl in https://github.com/AMICI-dev/AMICI/pull/2468 + +**Full Changelog**: https://github.com/AMICI-dev/AMICI/compare/v0.25.2...v0.26.0 + + ### v0.25.2 (2024-06-16) **Fixes** diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b0c95321b..9b0374b3a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,9 +142,9 @@ else() set(VENDORED_SUNDIALS_BUILD_DIR ${VENDORED_SUNDIALS_DIR}/build) set(VENDORED_SUNDIALS_INSTALL_DIR ${VENDORED_SUNDIALS_BUILD_DIR}) endif() +set(SUNDIALS_ROOT "${VENDORED_SUNDIALS_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}") find_package( - SUNDIALS REQUIRED PATHS - "${VENDORED_SUNDIALS_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/sundials/") + SUNDIALS REQUIRED CONFIG PATHS "${SUNDIALS_ROOT}/cmake/sundials/") message(STATUS "Found SUNDIALS: ${SUNDIALS_DIR}") set(GSL_LITE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/gsl") diff --git a/documentation/amici_refs.bib b/documentation/amici_refs.bib index b14d0e18b0..7321d97194 100644 --- a/documentation/amici_refs.bib +++ b/documentation/amici_refs.bib @@ -1069,18 +1069,19 @@ @Article{LakrisenkoSta2023 } @Article{ContentoCas2023, - author = {Lorenzo Contento and Noemi Castelletti and Elba Raimúndez and Ronan {Le Gleut} and Yannik Schälte and Paul Stapor and Ludwig Christian Hinske and Michael Hoelscher and Andreas Wieser and Katja Radon and Christiane Fuchs and Jan Hasenauer}, - journal = {Epidemics}, - title = {Integrative modelling of reported case numbers and seroprevalence reveals time-dependent test efficiency and infectious contacts}, - year = {2023}, - issn = {1755-4365}, - pages = {100681}, - volume = {43}, - abstract = {Mathematical models have been widely used during the ongoing SARS-CoV-2 pandemic for data interpretation, forecasting, and policy making. However, most models are based on officially reported case numbers, which depend on test availability and test strategies. The time dependence of these factors renders interpretation difficult and might even result in estimation biases. Here, we present a computational modelling framework that allows for the integration of reported case numbers with seroprevalence estimates obtained from representative population cohorts. To account for the time dependence of infection and testing rates, we embed flexible splines in an epidemiological model. The parameters of these splines are estimated, along with the other parameters, from the available data using a Bayesian approach. The application of this approach to the official case numbers reported for Munich (Germany) and the seroprevalence reported by the prospective COVID-19 Cohort Munich (KoCo19) provides first estimates for the time dependence of the under-reporting factor. Furthermore, we estimate how the effectiveness of non-pharmaceutical interventions and of the testing strategy evolves over time. Overall, our results show that the integration of temporally highly resolved and representative data is beneficial for accurate epidemiological analyses.}, - creationdate = {2023-04-15T07:59:57}, - doi = {10.1016/j.epidem.2023.100681}, - keywords = {Compartmental model, Parameter estimation, Uncertainty quantification, COVID-19}, - url = {https://www.sciencedirect.com/science/article/pii/S1755436523000178}, + author = {Lorenzo Contento and Noemi Castelletti and Elba Raimúndez and Ronan {Le Gleut} and Yannik Schälte and Paul Stapor and Ludwig Christian Hinske and Michael Hoelscher and Andreas Wieser and Katja Radon and Christiane Fuchs and Jan Hasenauer}, + journal = {Epidemics}, + title = {Integrative modelling of reported case numbers and seroprevalence reveals time-dependent test efficiency and infectious contacts}, + year = {2023}, + issn = {1755-4365}, + pages = {100681}, + volume = {43}, + abstract = {Mathematical models have been widely used during the ongoing SARS-CoV-2 pandemic for data interpretation, forecasting, and policy making. However, most models are based on officially reported case numbers, which depend on test availability and test strategies. The time dependence of these factors renders interpretation difficult and might even result in estimation biases. Here, we present a computational modelling framework that allows for the integration of reported case numbers with seroprevalence estimates obtained from representative population cohorts. To account for the time dependence of infection and testing rates, we embed flexible splines in an epidemiological model. The parameters of these splines are estimated, along with the other parameters, from the available data using a Bayesian approach. The application of this approach to the official case numbers reported for Munich (Germany) and the seroprevalence reported by the prospective COVID-19 Cohort Munich (KoCo19) provides first estimates for the time dependence of the under-reporting factor. Furthermore, we estimate how the effectiveness of non-pharmaceutical interventions and of the testing strategy evolves over time. Overall, our results show that the integration of temporally highly resolved and representative data is beneficial for accurate epidemiological analyses.}, + creationdate = {2023-04-15T07:59:57}, + doi = {10.1016/j.epidem.2023.100681}, + keywords = {Compartmental model, Parameter estimation, Uncertainty quantification, COVID-19}, + modificationdate = {2024-06-28T08:27:57}, + url = {https://www.sciencedirect.com/science/article/pii/S1755436523000178}, } @Article{FroehlichGer2023, @@ -1332,6 +1333,31 @@ @PhdThesis{Mutsuddy2024 url = {https://tigerprints.clemson.edu/all_dissertations/3572}, } +@Misc{PhilippsKoe2024, + author = {Maren Philipps and Antonia Körner and Jakob Vanhoefer and Dilan Pathirana and Jan Hasenauer}, + title = {Non-Negative Universal Differential Equations With Applications in Systems Biology}, + year = {2024}, + archiveprefix = {arXiv}, + creationdate = {2024-06-28T08:27:59}, + eprint = {2406.14246}, + modificationdate = {2024-06-28T08:27:59}, + primaryclass = {q-bio.QM}, + url = {https://arxiv.org/abs/2406.14246}, +} + +@Article{BaltussenJon2024, + author = {Baltussen, Mathieu G. and de Jong, Thijs J. and Duez, Quentin and Robinson, William E. and Huck, Wilhelm T. S.}, + journal = {Nature}, + title = {Chemical reservoir computation in a self-organizing reaction network}, + year = {2024}, + issn = {1476-4687}, + month = jun, + creationdate = {2024-06-29T14:03:08}, + doi = {10.1038/s41586-024-07567-x}, + modificationdate = {2024-06-29T14:03:08}, + publisher = {Springer Science and Business Media LLC}, +} + @Comment{jabref-meta: databaseType:bibtex;} @Comment{jabref-meta: grouping: diff --git a/documentation/background.rst b/documentation/background.rst index 2a2e748672..f47c077d46 100644 --- a/documentation/background.rst +++ b/documentation/background.rst @@ -32,14 +32,22 @@ publications: * Lakrisenko, Polina, Paul Stapor, Stephan Grein, Łukasz Paszkowski, Dilan Pathirana, Fabian Fröhlich, Glenn Terje Lines, Daniel Weindl, - and Jan Hasenauer. 2022. + and Jan Hasenauer. 2023. **Efficient Computation of Adjoint Sensitivities at Steady-State in ODE Models - of Biochemical Reaction Networks.** *bioRxiv* 2022.08.08.503176. - DOI: `10.1101/2022.08.08.503176 `_. + of Biochemical Reaction Networks.** *PLoS Comput Biol* 19(1): e1010783. + DOI: `10.1371/journal.pcbi.1010783 `_. + +* L. Contento, P. Stapor, D. Weindl, and J. Hasenauer. 2023. + **A more expressive spline representation for SBML models improves code generation performance in AMICI**, + In: Pang, J., Niehren, J. (eds) Computational Methods in Systems Biology. + CMSB 2023. *Lecture Notes in Computer Science*, vol 14137. Springer, Cham. + DOI: `10.1007/978-3-031-42697-1_3 `_. + Preprint available at `bioRxiv `_. + +* Lakrisenko, Polina, Dilan Pathirana, Daniel Weindl, and Jan Hasenauer. 2024. + **Exploration of methods for computing sensitivities in ODE models at dynamic and steady states.** *arXiv:2405.16524 [q-bio.QM]*. + DOI: `10.48550/arXiv.2405.16524 `_. -* L. Contento, P. Stapor, D. Weindl, and J. Hasenauer, "A more expressive spline - representation for SBML models improves code generation performance in AMICI," - bioRxiv, 2023, DOI: `10.1101/2023.06.29.547120 `_. .. note:: diff --git a/documentation/index.rst b/documentation/index.rst index 73343e76c1..63fc3261ab 100644 --- a/documentation/index.rst +++ b/documentation/index.rst @@ -27,6 +27,7 @@ Welcome to AMICI's documentation! references background changelog + versioning_policy glossary contributing diff --git a/documentation/python_installation.rst b/documentation/python_installation.rst index eb7d499227..d1e5f37f0a 100644 --- a/documentation/python_installation.rst +++ b/documentation/python_installation.rst @@ -31,8 +31,8 @@ If this does not work for you, please follow the full instructions below. Installation on Linux +++++++++++++++++++++ -Ubuntu 22.04 ------------- +Ubuntu 22.04 / 24.04 +-------------------- Install the AMICI dependencies via ``apt`` (this requires superuser privileges): @@ -44,8 +44,8 @@ Install the AMICI dependencies via ``apt`` # optionally for HDF5 support: sudo apt install libhdf5-serial-dev - # optionally for boost support (thread-specific CPU times, extended math functions, serialization) - libboost-chrono-dev libboost-math-dev libboost-serialization-dev + # optionally for boost support (thread-specific CPU times, extended math functions, serialization) + libboost-chrono-dev libboost-math-dev libboost-serialization-dev Install AMICI: @@ -203,9 +203,8 @@ Newer installations could be located under so that it matches your directory structure. This will download OpenBLAS and compile it, creating - - C:\\BLAS\\OpenBLAS\\lib\\openblas.lib - C:\\BLAS\\OpenBLAS\\bin\\openblas.dll +``C:\\BLAS\\OpenBLAS\\lib\\openblas.lib`` and +``C:\\BLAS\\OpenBLAS\\bin\\openblas.dll``. You will also need to define two environment variables: @@ -231,8 +230,8 @@ Now you need to make sure that all required DLLs are within the scope of the ``PATH`` variable. In particular, the following directories need to be included in ``PATH``: - C:\\BLAS\\OpenBLAS\\bin - C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\ucrt\\DLLs\\x64 +* ``C:\BLAS\OpenBLAS\bin`` +* ``C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64`` The first one is needed for ``openblas.dll`` and the second is needed for the Windows Universal C Runtime. @@ -240,7 +239,7 @@ Windows Universal C Runtime. If any DLLs are missing in the ``PATH`` variable, Python will return the following error upon ``import amici``: - ImportError: DLL load failed: The specified module could not be found. +``ImportError: DLL load failed: The specified module could not be found.`` Almost all of the DLLs are standard Windows DLLs and should be included in either Windows or Visual Studio. But, in case it is necessary to test this, @@ -361,16 +360,19 @@ environment variables: | | Default: ``ON`` | | +----------------------------+----------------------------------+---------------------------------+ -Installation under Anaconda ---------------------------- +Installation under conda +------------------------ + +There is no amici conda recipe available yet. However, you can install AMICI +using pip in a conda environment. -To use an Anaconda installation of Python -`https://www.anaconda.com/distribution/ `_, -Python>=3.7), proceed as follows: +.. note:: + + It is possible, but we currently don't recommend using conda for installing + AMICI, as it commonly leads to conflicts with system installations of + libraries and compilers. -Since Anaconda provides own versions of some packages which might not -work with AMICI (in particular the ``gcc`` compiler), create a minimal -virtual environment via: +Create a minimal conda environment via: .. code-block:: bash @@ -416,7 +418,7 @@ Now, you are ready to use AMICI in the virtual environment. .. note:: - **Anaconda on Mac** + **conda on Mac** If the above installation does not work for you, try installing AMICI via: @@ -438,6 +440,9 @@ Now, you are ready to use AMICI in the virtual environment. (For further discussion see https://github.com/AMICI-dev/AMICI/issues/357) +Known issues: + +* ``CMAKE_AR-NOTFOUND: not found``: Try ``conda install binutils``. Optional Boost support ---------------------- diff --git a/documentation/recreate_reference_list.py b/documentation/recreate_reference_list.py index 7750173ce1..a188f1daa0 100755 --- a/documentation/recreate_reference_list.py +++ b/documentation/recreate_reference_list.py @@ -75,7 +75,10 @@ def main(): ) f.write( "If you applied AMICI in your work and your publication is " - "missing, please let us know via a new GitHub issue.\n\n" + "missing, please let us know via a new\n" + "[GitHub issue](https://github.com/AMICI-dev/AMICI/issues/new" + "?labels=documentation&title=Add+publication" + "&body=AMICI+was+used+in+this+manuscript:+DOI).\n\n" ) f.write( """ diff --git a/documentation/references.md b/documentation/references.md index f17da06c55..cd103843fa 100644 --- a/documentation/references.md +++ b/documentation/references.md @@ -1,8 +1,9 @@ # References -List of publications using AMICI. Total number is 87. +List of publications using AMICI. Total number is 89. -If you applied AMICI in your work and your publication is missing, please let us know via a new GitHub issue. +If you applied AMICI in your work and your publication is missing, please let us know via a new +[GitHub issue](https://github.com/AMICI-dev/AMICI/issues/new?labels=documentation&title=Add+publication&body=AMICI+was+used+in+this+manuscript:+DOI).