diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 0de5c4ff8..8cee31544 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -4,7 +4,7 @@ on: workflow_dispatch: jobs: - build-and-deploy-microservices: + configure-environment: runs-on: ubuntu-latest steps: # Step 1: Checkout repository @@ -28,6 +28,31 @@ jobs: sudo apt-get install -y python3 python3-pip pip install pyyaml + build-base-image: + needs: configure-environment + runs-on: ubuntu-latest + steps: + - name: Get base image version + run: | + BASE_VERSION=$(echo ./assets/.BASE_VERSION) + echo "BASE_VERSION=$BASE_VERSION" >> $GITHUB_ENV + echo "Base Version: $BASE_VERSION" + + - name: Build base image + run: | + sudo chmod +x ./assets/scripts/build_base.sh + ./assets/scripts/build_base.sh ${{ env.BASE_VERSION }} + + - name: Push base image to GHCR + run: | + sudo chmod +x ./assets/scripts/push_base.sh + sudo chmod +x ./assets/scripts/push_image.sh + ./assets/scripts/push_base.sh ${{ env.BASE_VERSION }} ${{ secrets.REPO_ADMIN_GH_USERNAME }} + + get-microservice-versions: + needs: build-base-image + runs-on: ubuntu-latest + steps: # Step 5: Extract API container version - name: Extract API container version id: extract_api_version @@ -50,6 +75,10 @@ jobs: echo "API_VERSION=${{ env.API_VERSION }}" echo "WORKER_VERSION=${{ env.WORKER_VERSION }}" + build-microservice-images: + needs: get-microservice-versions + runs-on: ubuntu-latest + steps: # Step 8: Set up Docker Buildx - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -58,6 +87,10 @@ jobs: - name: Build Docker containers with Docker Compose run: docker-compose build --no-cache + deploy-microservice-images: + needs: build-microservice-images + runs-on: ubuntu-latest + steps: # Step 10: Change permissions for push script - name: Change push script permissions run: chmod +x ./assets/scripts/push_image.sh diff --git a/compose_worker/Dockerfile-compose_worker b/compose_worker/Dockerfile-compose_worker index c83ba07fa..75ba8cef1 100644 --- a/compose_worker/Dockerfile-compose_worker +++ b/compose_worker/Dockerfile-compose_worker @@ -53,7 +53,7 @@ COPY . /app/worker ENV PATH="/root/.local/bin:$PATH" # Install only worker deps TODO: include toml in base deps -RUN poetry add toml --group=worker --lock && poetry install --only=worker --no-cache +RUN poetry install --only=worker --no-cache # Install Assimulo from source for Pysces RUN apt-get update \ @@ -71,14 +71,16 @@ RUN apt-get update \ # && rm -rf build \ # && poetry run python3 setup.py install --sundials-home=/usr/local --blas-home=/usr/lib/x86_64-linux-gnu -# install masspy TODO: do this -# RUN poetry run pip install biosimulators-masspy - # revert numpy back to original spec RUN poetry remove numpy # RUN poetry run pip install numpy==$(poetry run python3 -c "import toml; print(toml.load('/app/pyproject.toml')['tool']['poetry']['group']['worker']['dependencies']['numpy'].strip('<'))") \ # && poetry lock +# install masspy TODO: implement this +RUN git clone https://github.com/biosimulators/Biosimulators_MASSpy.git \ + && cd Biosimulators_MASSpy \ + && rm pyproject.toml + WORKDIR /app/worker RUN python3 -c "import os;files=os.listdir();import shutil;[shutil.rmtree(f) if '__pycache__' in f else None for f in files]" diff --git a/poetry.lock b/poetry.lock index 366237e6c..6bed2b092 100644 --- a/poetry.lock +++ b/poetry.lock @@ -644,6 +644,32 @@ GitPython = "*" ninja = "*" setuptools-scm = "*" +[[package]] +name = "cobra" +version = "0.18.1" +description = "COBRApy is a package for constraints-based modeling of biological networks" +optional = false +python-versions = "*" +files = [ + {file = "cobra-0.18.1-py2.py3-none-any.whl", hash = "sha256:027807437de57f4f63fc4ceadf13c569c8baffd5acf1e4c1ecc1e07260edd966"}, + {file = "cobra-0.18.1.tar.gz", hash = "sha256:c1ba04b4eff13f83692cbbbe99c3240fa079d89cb41d50b08b597141a7c91eeb"}, +] + +[package.dependencies] +depinfo = "*" +future = "*" +numpy = ">=1.13" +optlang = ">=1.4.2" +pandas = ">=0.17.0" +python-libsbml-experimental = "5.18.1" +"ruamel.yaml" = ">=0.16" +six = "*" +swiglpk = "*" + +[package.extras] +all = ["scipy"] +array = ["scipy"] + [[package]] name = "colorama" version = "0.4.6" @@ -917,6 +943,21 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "depinfo" +version = "2.2.0" +description = "List any package's direct dependencies and their versions." +optional = false +python-versions = ">=3.7" +files = [ + {file = "depinfo-2.2.0-py3-none-any.whl", hash = "sha256:3d9ba933e7a9d718b9915f75c844a38c5603cd3cdba1816ab95e0b148b100d8f"}, + {file = "depinfo-2.2.0.tar.gz", hash = "sha256:e0971be11519a823b126c875e17ad3ad8adaa6a86737395b9dbcef3ca0e77b0c"}, +] + +[package.extras] +development = ["black", "isort", "tox"] +rich = ["rich"] + [[package]] name = "dill" version = "0.3.9" @@ -1228,6 +1269,17 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "future" +version = "1.0.0" +description = "Clean single-source support for Python 3 and 2" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, + {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, +] + [[package]] name = "gitdb" version = "4.0.11" @@ -2133,6 +2185,35 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +[[package]] +name = "masspy" +version = "0.1.7" +description = "MASSpy is a package for dynamic modeling of biological processes." +optional = false +python-versions = "~=3.7" +files = [ + {file = "masspy-0.1.7-py3-none-any.whl", hash = "sha256:cde84d3744e8143d6a5a0b9d51a656874aabeea3de1f61371c234420df29b17c"}, + {file = "masspy-0.1.7.tar.gz", hash = "sha256:1e7e7b73cc0706305a551c97884f9c38904525c543688ac806a120e48dc349fa"}, +] + +[package.dependencies] +cobra = "<0.24.0" +libroadrunner = ">=2.2,<3.0" +numpy = "*" +optlang = "*" +pandas = "*" +scipy = "*" +six = "*" +sympy = "*" +tabulate = "*" + +[package.extras] +all = ["bumpversion", "gurobipy", "ipykernel", "ipywidgets", "matplotlib", "nbsphinx", "notebook", "pandoc", "pre-commit", "sphinx", "sphinx-autoapi", "sphinx-rtd-theme", "sphinxcontrib-bibtex (>=2.2,<3.0)", "towncrier", "tox"] +development = ["bumpversion", "pre-commit", "towncrier", "tox"] +docs = ["gurobipy", "ipykernel", "ipywidgets", "matplotlib", "nbsphinx", "notebook", "pandoc", "sphinx", "sphinx-autoapi", "sphinx-rtd-theme", "sphinxcontrib-bibtex (>=2.2,<3.0)"] +tests = ["coverage[toml]", "pytest", "pytest-cov"] +visualization = ["matplotlib"] + [[package]] name = "matplotlib" version = "3.9.2" @@ -2374,6 +2455,24 @@ files = [ [package.dependencies] et-xmlfile = "*" +[[package]] +name = "optlang" +version = "1.8.2" +description = "Formulate optimization problems using sympy expressions and solve them using interfaces to third-party optimization software (e.g. GLPK)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "optlang-1.8.2-py2.py3-none-any.whl", hash = "sha256:e990ab097564919c815e11fa9b6301a0af052a73f53c8fb994ad404f38150515"}, + {file = "optlang-1.8.2.tar.gz", hash = "sha256:52215bd75c265299f450bb904a890a91992446fff668d8f8e98968afbcb591c9"}, +] + +[package.dependencies] +swiglpk = ">=5.0.8" +sympy = ">=1.12.0" + +[package.extras] +development = ["black", "isort", "tox"] + [[package]] name = "orjson" version = "3.10.10" @@ -3640,6 +3739,49 @@ files = [ {file = "python_libsbml-5.20.4.tar.gz", hash = "sha256:b055f98fe65be258ae266fde343157cbf41e3ed3fc19b3698f2a66afc74cdaf8"}, ] +[[package]] +name = "python-libsbml-experimental" +version = "5.18.1" +description = "LibSBML Python API" +optional = false +python-versions = "*" +files = [ + {file = "python-libsbml-experimental-5.18.1.tar.gz", hash = "sha256:0d532219867a0bef09785f100dc272f96e516a2f512cb9b3219197bef31465af"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27m-macosx_10_6_x86_64.whl", hash = "sha256:0aa42428ccc9904d5d74881847e801f717c6163c8affe20990bf7ad482dfc62c"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cdc84da5785d554b5ca493b812ac7bc1bcf9404fbbbc7a0cdd986698ac2031af"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:e389bff2e2d535923fc1ffe39bdc6993bc7556a322a7211597625b19b53fb8fe"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27m-win32.whl", hash = "sha256:e03e1b94fb88f385df9152bca4eb0557aa6b9236e21b407274322b0a4c5c9f5b"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27m-win_amd64.whl", hash = "sha256:bd415145a2e184005d232bbb7e8e2024f511b54899b4da3ef02177516df6d37a"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:e9fd2c52dbb7b1cf7e77f9461fd19dd7fb57d580ae8ba8115d8d470d5363fbb6"}, + {file = "python_libsbml_experimental-5.18.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cac52de007734b0a3a7a5c4e29259d0549a965f5706441c153bae92f7ed8f4f9"}, + {file = "python_libsbml_experimental-5.18.1-cp33-cp33m-win32.whl", hash = "sha256:56992e684317862f98609f574fc20969e9eb7f070d20df5ff87fe37ab3fdd052"}, + {file = "python_libsbml_experimental-5.18.1-cp33-cp33m-win_amd64.whl", hash = "sha256:0477294fdb8a1293ee003089403ef3465c1673fe4e86cc4d7f15bdecbcd60135"}, + {file = "python_libsbml_experimental-5.18.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:19c9444fb7a6b32cee58057f8072505a634fea93ca60af67ea14c89973ea1ec0"}, + {file = "python_libsbml_experimental-5.18.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:eb7c6eb54a59b6a05c4c4e6a08a49ecd1ea4f9937fdeb409eea5c83057d22a44"}, + {file = "python_libsbml_experimental-5.18.1-cp34-cp34m-win32.whl", hash = "sha256:1c82bda361b4c19538caea688404c36f015c6a1b04ead5012f4d043a99f3e73a"}, + {file = "python_libsbml_experimental-5.18.1-cp34-cp34m-win_amd64.whl", hash = "sha256:dc6bc0506fa87c72b2ff1d3665e15934192e05932ff287b9578272e51a0b84cf"}, + {file = "python_libsbml_experimental-5.18.1-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:e9fc04696a5d46f4f3da15fd3327ead7db1f9b0154792fa8b03749a75d592cb7"}, + {file = "python_libsbml_experimental-5.18.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2fd010d86fc699b3dcbf9fd7bea119c114ae872262f38d78e79e6c6966cf6b2b"}, + {file = "python_libsbml_experimental-5.18.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:0e64f329fb94fee0c7c10d402c9ed330df9d086680f31947f23ceb1ede5b1217"}, + {file = "python_libsbml_experimental-5.18.1-cp35-cp35m-win32.whl", hash = "sha256:335f8d33661b3f5b6f756e9dd39e2789a90e59b674517f6e66f4b075eeb6c40e"}, + {file = "python_libsbml_experimental-5.18.1-cp35-cp35m-win_amd64.whl", hash = "sha256:815d88ac0c0532b08c56a36613d692bc1d6e95417cbade0562e11d808c955a4a"}, + {file = "python_libsbml_experimental-5.18.1-cp36-cp36m-macosx_10_7_x86_64.whl", hash = "sha256:b9e927ea2d3c886a285092d420b54b660b00dc205a98dfc3f5b114161a2c8fb8"}, + {file = "python_libsbml_experimental-5.18.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b032e68566c82efd9d8ee9d6aa3bf8342a712874f5d94de6f27041631d0bab1f"}, + {file = "python_libsbml_experimental-5.18.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d68d7ff23e75e6f0fed133b52ab66fd6de92955ab5843e6e50d06e20d1c6268d"}, + {file = "python_libsbml_experimental-5.18.1-cp36-cp36m-win32.whl", hash = "sha256:78bdcc2c148586373a91db26e07eb8df22b2a8b6120d3bd9e159ffedf6c9b581"}, + {file = "python_libsbml_experimental-5.18.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f34bdac48fdbc301148c5373f2978a97ffdf3da0e08b8d914a3f90d90765ba97"}, + {file = "python_libsbml_experimental-5.18.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:bb73c3bbebc9938b96fab2b1297bf69225718345546af19bfea44b191f94802c"}, + {file = "python_libsbml_experimental-5.18.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a6cd2df9b34015bc88de3a872bdd1efa7d303b5cb17566fc4ef09e455e937d76"}, + {file = "python_libsbml_experimental-5.18.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:421a8ec26155f0ce8d2c6820c1bdbf0f940b3e685555a704f2044d78f9503040"}, + {file = "python_libsbml_experimental-5.18.1-cp37-cp37m-win32.whl", hash = "sha256:3196b674ab74b6c2f6f6315e5f7ba3791393103eca8b3fb87840869cc41d164f"}, + {file = "python_libsbml_experimental-5.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ed0977fe09cf9e3406caeb2a96d1cfe3fd44b3a221f7f891919158bd40215e6a"}, + {file = "python_libsbml_experimental-5.18.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff3fa037a4d1bf94c741d76cd47358c49f87b9766cd591cc137ac5d92528f2b5"}, + {file = "python_libsbml_experimental-5.18.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:185b08e5c970595d1410ff35a112fa9c8ec0f65938b3b0568e00327e8a84ff31"}, + {file = "python_libsbml_experimental-5.18.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2e7eee315b05e1ff7eb247a2262deaeb02f06441b09f63057a5952dc25975909"}, + {file = "python_libsbml_experimental-5.18.1-cp38-cp38-win32.whl", hash = "sha256:f0b85a1f82a07f9c02e40774955470af91777cb56fb8db1ec0a948fa77d055a9"}, + {file = "python_libsbml_experimental-5.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:14329407ebb2f01ef11c4bfd01fb893d20759823ddec60d6bb63ea2dd4a3838c"}, +] + [[package]] name = "python-libsedml" version = "2.0.32" @@ -4144,6 +4286,74 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, + {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, +] + [[package]] name = "scipy" version = "1.14.1" @@ -4481,6 +4691,73 @@ anyio = ">=3.4.0,<5" [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] +[[package]] +name = "swiglpk" +version = "5.0.10" +description = "swiglpk - Simple swig bindings for the GNU Linear Programming Kit" +optional = false +python-versions = "*" +files = [ + {file = "swiglpk-5.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:841e87ac08dc7497a3cc738fce188d15140fa800d101c64b1bb8e8fd555c32ae"}, + {file = "swiglpk-5.0.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6e22baa37630f5cdc0c634d7046eeb4a31b53914611f4a5bdd1bf53f336c21f2"}, + {file = "swiglpk-5.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193bec2c50844024155477bd72a3fd7ef12044578f03b8afd7bbc4c33ca05fd9"}, + {file = "swiglpk-5.0.10-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb54cb336c84cf0d5c32452a59ec404439707aad0cce50a7ae8c3056f8f2185e"}, + {file = "swiglpk-5.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16750aed2d9dc76c51aa285648d754bec4fa9b6aec31f1e1313b95172078edfe"}, + {file = "swiglpk-5.0.10-cp310-cp310-win32.whl", hash = "sha256:9741e58948fd82f2a6afe067d490152c4bb06dedf221a737d506064f38379ef6"}, + {file = "swiglpk-5.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:c325dc74d7ae1c15f9e9fbc3eac032ecfecad483591afd4c0046050f51640328"}, + {file = "swiglpk-5.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b29876e77c9e76a9cea411cb3d34a8b52f1de9cf5909caa88293a2303012eb23"}, + {file = "swiglpk-5.0.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41df9c17cee06ac864acdb0a7f16d848dcc6bcdbb982950893f06cc97b148470"}, + {file = "swiglpk-5.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ce82748c96dfced697affbed9c22088306f7608601f12f1593e2792ae3ae244"}, + {file = "swiglpk-5.0.10-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e30d85a194991c58acdc3d0374fb524e139d025e76ba46b734f8119316ab9a8d"}, + {file = "swiglpk-5.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b769b09c7af80101095cf1c3f341ac1c7c1f049905ec5da0925c998bbe0cb809"}, + {file = "swiglpk-5.0.10-cp311-cp311-win32.whl", hash = "sha256:53751ffd429d8adf95aa02ed8a52b5da257958d17dc5a0f344f56379888ac956"}, + {file = "swiglpk-5.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:eeb066918316034ec9c8dbed0e1e5e14df22761aab7eeb952868eed3716ae344"}, + {file = "swiglpk-5.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7862f2a12f09337ef17f1518532f14d4a77a246437eacb4a431f596a7df608e"}, + {file = "swiglpk-5.0.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e0b1fd9a5d0c20020bb4a624f94ca16b659fdda5e0c59686f88e5d683ab4441b"}, + {file = "swiglpk-5.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b1bf4dff2938bc551a4aadaf86b027d1d503d7ef60f8e01d037d88030831c0"}, + {file = "swiglpk-5.0.10-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67156fc1224b82735904d2a0b049664976ff8a0708e15d3e8c823249e3803c6c"}, + {file = "swiglpk-5.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:110e8ac831e44a4e09bd7ab1f7b88a4b6ae92b923191e206bccd413ff840ec5c"}, + {file = "swiglpk-5.0.10-cp312-cp312-win32.whl", hash = "sha256:6d9a7e63e9a73a44771413c4d8c59d3442bd63e71b6f01710a1a0c6348030621"}, + {file = "swiglpk-5.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:d28aac8db80bafc4a91b2d5b6a96791de96eb2d4fea32b8210b11743a0722d42"}, + {file = "swiglpk-5.0.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:78c2a5cad1645a348989b7dc57019313655d9ed060a17451fdb66893fc15b1a8"}, + {file = "swiglpk-5.0.10-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e526b9e7f40b4d3776e917d495070569fac9f225be7009222ab295d50bbef154"}, + {file = "swiglpk-5.0.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2587fa19af29a00daa6993c81de9eb4925224dfbed25a76a449caef51d1b023"}, + {file = "swiglpk-5.0.10-cp36-cp36m-win32.whl", hash = "sha256:b81c8e232d70f2f8f297ce4acb3f9abc86a5f8369158e7284c8e5d35c057aba6"}, + {file = "swiglpk-5.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:921b0e402f22d71f981d79269063e4afb6089c6fbdba82443b7aee216236538d"}, + {file = "swiglpk-5.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:14a8f3ccf19473be851383e9e01f6e902b925250f664f4872a6660a30590e5ea"}, + {file = "swiglpk-5.0.10-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebc186a995b70365146fb0598b1e496f981640d9d40fd9abbb63bd73d6f30ae8"}, + {file = "swiglpk-5.0.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666407c5cef0fd7aa6941fb6a65b34437242f89dea8076f2bd60fbb3590cf43c"}, + {file = "swiglpk-5.0.10-cp37-cp37m-win32.whl", hash = "sha256:8bd58680d7895e27dbe309534df0657b5226d07256373cc1eb135a5cecb3ba72"}, + {file = "swiglpk-5.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:11d4b151b8780b81951d3bcdb9a2a746d4371213f27044149b20851cfc60757f"}, + {file = "swiglpk-5.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b55dea4fd9c30ce6ab5571d0980a01a849c02aca509025cef120afe22e341770"}, + {file = "swiglpk-5.0.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c130b2f24a353dc201dc1df4c802da15334290b92a310754b8859b40121dc40"}, + {file = "swiglpk-5.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfdccd027f0ee51618056c5b40be00d6e51020202e706d2aac3d7ac969b1b55a"}, + {file = "swiglpk-5.0.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a67ebaf25f13387a40be7c13d008b515832a44f8e21961d247aec456d94b2a8"}, + {file = "swiglpk-5.0.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7db9410b670a4618c7d9d026f6b9f6c136136b46f9e12489dd2496a1e21898"}, + {file = "swiglpk-5.0.10-cp38-cp38-win32.whl", hash = "sha256:a3c3854389ba2ddbfd530e0d0b86f3d782b4a566238d3e8099e5786d4ea18d38"}, + {file = "swiglpk-5.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:95078fd733bfe3cbed9827516b3e70dbc88818bd35b6e50fae6aed0cf7159545"}, + {file = "swiglpk-5.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:88c26db27649011d18a098e2397621e00e9196e0c64458079d1d909a5fbc8798"}, + {file = "swiglpk-5.0.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b054eda591c244ad959978516c28f698109bb7c139226ac069361c4a12ce649a"}, + {file = "swiglpk-5.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ae2a33071a40b86c5034740a9d90f05321b416230bf459b11c7cf641d8fbb62"}, + {file = "swiglpk-5.0.10-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ca118d8adba2b3276c8439bf495ba2237d00c17f0df9c1caea841dd4cee8bbc"}, + {file = "swiglpk-5.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23dda3fe6cd062d7eca28250dbae3b9e456019c5d979bad501b68f09706dec08"}, + {file = "swiglpk-5.0.10-cp39-cp39-win32.whl", hash = "sha256:f7a27c31f51bd0ff4aa9bb58125d3168ca66119f4d7144cff067081225b77a98"}, + {file = "swiglpk-5.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:979073e206e6bfe443e4fd6fd66b4b42bc202d657a71416b679b24a2ec248466"}, + {file = "swiglpk-5.0.10-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fb8b722e8dc9e88348ebae54ca19c045dcc6377ce38972d3ae0fbaf9aa4d565f"}, + {file = "swiglpk-5.0.10-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36b99ef9205aa6bea5d8070ef1e07a6a82ebf7449a008c383b9701f50eb0e835"}, + {file = "swiglpk-5.0.10-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8491ff795b6a146b3ff429c67f04aed5cdc01dc90a7ece8d1b8e1bf22a2e06"}, + {file = "swiglpk-5.0.10-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c348b1ac6c0bd28853553cf005447b0cc661fd8daccc1ebc9aba5b0b0605c8c9"}, + {file = "swiglpk-5.0.10-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:234a2d7e4186d927488f8a81f1fffe15d6cc79643a4270cded6c39e3c7b0b682"}, + {file = "swiglpk-5.0.10-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5412c9959e7dfafc846bde5aadebbc049acab3e8dbda889ad989fd99d76dad79"}, + {file = "swiglpk-5.0.10-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ecb5b9d7cf41f162438ded7bc5f5f2a756e7ec1062b4de61496094b607c99aa0"}, + {file = "swiglpk-5.0.10-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0206eecb1a47ca91fd4d1339e560167943ec65439f0b3a17eb350d4ff63b4c0c"}, + {file = "swiglpk-5.0.10-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a920fbedec663d0b2e7cef41a35a03057808040ffe0111d26d457142e248cd4"}, + {file = "swiglpk-5.0.10-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b7d7298b0d97665eb655658fdbfcc0fa9c4d9ee632ec0d4096a9a7280a68b05b"}, + {file = "swiglpk-5.0.10-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4954c1c7ce070afa94dbeb503532c11bdc801585a87188a23594c48a90a89cb1"}, + {file = "swiglpk-5.0.10-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c58d62a753542f3092674f382d85b9f13f2cdcc0bf89f1adf7db354a839e6f"}, + {file = "swiglpk-5.0.10.tar.gz", hash = "sha256:57ac34ad334da95dd168114bfdb50ae10a2a6a3ddef21e4941f46fe430c5a7e1"}, +] + [[package]] name = "sympy" version = "1.13.3" @@ -4498,6 +4775,20 @@ mpmath = ">=1.1.0,<1.4" [package.extras] dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "tellurium" version = "2.2.10" @@ -4759,4 +5050,4 @@ pyYaml = "*" [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "d432d7569c92ca60b9d1233f3d0daaec8bf05c22547555ee36fd81a49a22b0ef" +content-hash = "da946c7337cc3fd35d58a8b21aa449df5c569959b8240b8591897d1ec12e427e" diff --git a/pyproject.toml b/pyproject.toml index 7e9faa6a1..3b8022bbe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ google-cloud-storage = "^2.18.2" pymongo = {version = "^4.10.1", extras = ["srv"]} python-multipart = "^0.0.12" fastapi = "^0.115.3" +toml = "^0.10.2" [tool.poetry.group.api.dependencies] @@ -25,21 +26,22 @@ pydantic = "^2.9.2" uvicorn = "^0.32.0" pyyaml = "^6.0.2" httpx = "^0.27.2" -toml = "^0.10.2" [tool.poetry.group.worker.dependencies] numpy = "<2" +cobra = "<0.24.0" biosimulators-amici = "^0.1.24" biosimulators-copasi = "^0.2.22" -biosimulators-pysces = "^0.1.33" biosimulators-tellurium = "^0.1.44" +biosimulators-pysces = "^0.1.33" smoldyn = "^2.73" process-bigraph = "^0.0.21" simulariumio = "^1.11.0" cython = "^3.0.11" wheel = "^0.44.0" - +masspy = "^0.1.7" +docker = "^7.1.0" [tool.poetry.group.dev.dependencies] pytest = "^8.3.3"