From e969c6d116617a2218baf3381b78a35c9c9631cc Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 11 Oct 2024 13:41:53 +0200 Subject: [PATCH 01/14] update requirements.txt --- requirements.txt | 58 +++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1f988c3e..1f37f0dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,28 +1,30 @@ -aiofile==3.8.7 ; python_version >= "3.8" and python_version < "4" -anyio==3.7.0 ; python_version >= "3.8" and python_version < "4.0" -caio==0.9.12 ; python_version >= "3.8" and python_version < "4" -click==8.1.3 ; python_version >= "3.8" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" -exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" -fastapi==0.95.2 ; python_version >= "3.8" and python_version < "4.0" -h11==0.14.0 ; python_version >= "3.8" and python_version < "4.0" -idna==3.4 ; python_version >= "3.8" and python_version < "4.0" -importlib-metadata==6.6.0 ; python_version >= "3.8" and python_version < "4.0" -mangum==0.17.0 ; python_version >= "3.8" and python_version < "4.0" -markdown==3.4.3 ; python_version >= "3.8" and python_version < "4.0" -numpy==1.24.3 ; python_version >= "3.8" and python_version < "4.0" -pandas==2.0.2 ; python_version >= "3.8" and python_version < "4.0" -pydantic==1.10.9 ; python_version >= "3.8" and python_version < "4.0" -python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0" -pytz==2023.3 ; python_version >= "3.8" and python_version < "4.0" -pyyaml==6.0 ; python_version >= "3.8" and python_version < "4.0" -rapidfuzz==3.1.1 ; python_version >= "3.8" and python_version < "4.0" -scipy==1.9.3 ; python_version >= "3.8" and python_version < "4.0" -six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" -sniffio==1.3.0 ; python_version >= "3.8" and python_version < "4.0" -starlette==0.27.0 ; python_version >= "3.8" and python_version < "4.0" -toml==0.10.2 ; python_version >= "3.8" and python_version < "4.0" -typing-extensions==4.6.3 ; python_version >= "3.8" and python_version < "4.0" -tzdata==2023.3 ; python_version >= "3.8" and python_version < "4.0" -uvicorn==0.22.0 ; python_version >= "3.8" and python_version < "4.0" -zipp==3.15.0 ; python_version >= "3.8" and python_version < "4.0" +aiofile==3.8.8 ; python_version >= "3.9" and python_version < "4" +annotated-types==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +anyio==4.3.0 ; python_version >= "3.9" and python_version < "4.0" +caio==0.9.13 ; python_version >= "3.9" and python_version < "4" +click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" +exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11" +fastapi==0.115.0 ; python_version >= "3.9" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0" +idna==3.7 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==6.11.0 ; python_version >= "3.9" and python_version < "4.0" +mangum==0.17.0 ; python_version >= "3.9" and python_version < "4.0" +markdown==3.5.2 ; python_version >= "3.9" and python_version < "4.0" +numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0" +pandas==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic-core==2.23.4 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.9.2 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +rapidfuzz==3.6.2 ; python_version >= "3.9" and python_version < "4.0" +scipy==1.12.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +sniffio==1.3.1 ; python_version >= "3.9" and python_version < "4.0" +starlette==0.38.5 ; python_version >= "3.9" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "4.0" +tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" +uvicorn==0.22.0 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.19.1 ; python_version >= "3.9" and python_version < "4.0" From 045ef81faa0ca5e7dd857df1c5581c791d6c4840 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:31:05 +0000 Subject: [PATCH 02/14] generate requirements.txt from poetry --- requirements.txt | 58 +++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1f988c3e..1f37f0dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,28 +1,30 @@ -aiofile==3.8.7 ; python_version >= "3.8" and python_version < "4" -anyio==3.7.0 ; python_version >= "3.8" and python_version < "4.0" -caio==0.9.12 ; python_version >= "3.8" and python_version < "4" -click==8.1.3 ; python_version >= "3.8" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" -exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" -fastapi==0.95.2 ; python_version >= "3.8" and python_version < "4.0" -h11==0.14.0 ; python_version >= "3.8" and python_version < "4.0" -idna==3.4 ; python_version >= "3.8" and python_version < "4.0" -importlib-metadata==6.6.0 ; python_version >= "3.8" and python_version < "4.0" -mangum==0.17.0 ; python_version >= "3.8" and python_version < "4.0" -markdown==3.4.3 ; python_version >= "3.8" and python_version < "4.0" -numpy==1.24.3 ; python_version >= "3.8" and python_version < "4.0" -pandas==2.0.2 ; python_version >= "3.8" and python_version < "4.0" -pydantic==1.10.9 ; python_version >= "3.8" and python_version < "4.0" -python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0" -pytz==2023.3 ; python_version >= "3.8" and python_version < "4.0" -pyyaml==6.0 ; python_version >= "3.8" and python_version < "4.0" -rapidfuzz==3.1.1 ; python_version >= "3.8" and python_version < "4.0" -scipy==1.9.3 ; python_version >= "3.8" and python_version < "4.0" -six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" -sniffio==1.3.0 ; python_version >= "3.8" and python_version < "4.0" -starlette==0.27.0 ; python_version >= "3.8" and python_version < "4.0" -toml==0.10.2 ; python_version >= "3.8" and python_version < "4.0" -typing-extensions==4.6.3 ; python_version >= "3.8" and python_version < "4.0" -tzdata==2023.3 ; python_version >= "3.8" and python_version < "4.0" -uvicorn==0.22.0 ; python_version >= "3.8" and python_version < "4.0" -zipp==3.15.0 ; python_version >= "3.8" and python_version < "4.0" +aiofile==3.8.8 ; python_version >= "3.9" and python_version < "4" +annotated-types==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +anyio==4.3.0 ; python_version >= "3.9" and python_version < "4.0" +caio==0.9.13 ; python_version >= "3.9" and python_version < "4" +click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" +exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11" +fastapi==0.115.0 ; python_version >= "3.9" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0" +idna==3.7 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==6.11.0 ; python_version >= "3.9" and python_version < "4.0" +mangum==0.17.0 ; python_version >= "3.9" and python_version < "4.0" +markdown==3.5.2 ; python_version >= "3.9" and python_version < "4.0" +numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0" +pandas==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic-core==2.23.4 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.9.2 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +rapidfuzz==3.6.2 ; python_version >= "3.9" and python_version < "4.0" +scipy==1.12.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +sniffio==1.3.1 ; python_version >= "3.9" and python_version < "4.0" +starlette==0.38.5 ; python_version >= "3.9" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "4.0" +tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" +uvicorn==0.22.0 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.19.1 ; python_version >= "3.9" and python_version < "4.0" From d89094c44e2032304a290e333395b78fdda3934f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:51:32 +0000 Subject: [PATCH 03/14] generate requirements.txt from poetry --- requirements.txt | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1f37f0dd..1d598d72 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,30 +1,30 @@ -aiofile==3.8.8 ; python_version >= "3.9" and python_version < "4" +aiofile==3.9.0 ; python_version >= "3.9" and python_version < "4" annotated-types==0.7.0 ; python_version >= "3.9" and python_version < "4.0" -anyio==4.3.0 ; python_version >= "3.9" and python_version < "4.0" -caio==0.9.13 ; python_version >= "3.9" and python_version < "4" +anyio==4.7.0 ; python_version >= "3.9" and python_version < "4.0" +caio==0.9.17 ; python_version >= "3.9" and python_version < "4" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" -exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11" -fastapi==0.115.0 ; python_version >= "3.9" and python_version < "4.0" +exceptiongroup==1.2.2 ; python_version >= "3.9" and python_version < "3.11" +fastapi==0.115.6 ; python_version >= "3.9" and python_version < "4.0" h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0" -idna==3.7 ; python_version >= "3.9" and python_version < "4.0" +idna==3.10 ; python_version >= "3.9" and python_version < "4.0" importlib-metadata==6.11.0 ; python_version >= "3.9" and python_version < "4.0" mangum==0.17.0 ; python_version >= "3.9" and python_version < "4.0" -markdown==3.5.2 ; python_version >= "3.9" and python_version < "4.0" +markdown==3.7 ; python_version >= "3.9" and python_version < "4.0" numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0" -pandas==2.2.1 ; python_version >= "3.9" and python_version < "4.0" -pydantic-core==2.23.4 ; python_version >= "3.9" and python_version < "4.0" -pydantic==2.9.2 ; python_version >= "3.9" and python_version < "4.0" +pandas==2.2.3 ; python_version >= "3.9" and python_version < "4.0" +pydantic-core==2.27.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.10.3 ; python_version >= "3.9" and python_version < "4.0" python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" -pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" -pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" -rapidfuzz==3.6.2 ; python_version >= "3.9" and python_version < "4.0" -scipy==1.12.0 ; python_version >= "3.9" and python_version < "4.0" -six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.2 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.2 ; python_version >= "3.9" and python_version < "4.0" +rapidfuzz==3.10.1 ; python_version >= "3.9" and python_version < "4.0" +scipy==1.13.1 ; python_version >= "3.9" and python_version < "4.0" +six==1.17.0 ; python_version >= "3.9" and python_version < "4.0" sniffio==1.3.1 ; python_version >= "3.9" and python_version < "4.0" -starlette==0.38.5 ; python_version >= "3.9" and python_version < "4.0" +starlette==0.41.3 ; python_version >= "3.9" and python_version < "4.0" toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "4.0" -tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" +tzdata==2024.2 ; python_version >= "3.9" and python_version < "4.0" uvicorn==0.22.0 ; python_version >= "3.9" and python_version < "4.0" -zipp==3.19.1 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.21.0 ; python_version >= "3.9" and python_version < "4.0" From ff95a063f20001f001773fb28aff600aa203a0eb Mon Sep 17 00:00:00 2001 From: Simon Shillaker Date: Wed, 11 Dec 2024 08:38:42 +0100 Subject: [PATCH 04/14] chore(python): update to 3.12 --- .../build_client_sdk_with_poetry.yml | 4 +- ...generate_requirements_for_clever_cloud.yml | 6 +- .github/workflows/release.yml | 4 +- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- Makefile | 4 +- poetry.lock | 179 ++++++++++-------- pyproject.toml | 8 +- 8 files changed, 115 insertions(+), 94 deletions(-) diff --git a/.github/workflows/build_client_sdk_with_poetry.yml b/.github/workflows/build_client_sdk_with_poetry.yml index 4d6d1e5d..28f1c57b 100644 --- a/.github/workflows/build_client_sdk_with_poetry.yml +++ b/.github/workflows/build_client_sdk_with_poetry.yml @@ -29,7 +29,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.12' - name: Install pipenv run: | @@ -70,7 +70,7 @@ jobs: - name: Build the pip package and push it run: | sudo chown -R $(whoami) boaviztapi_sdk - SDK_VERSION=$(poetry version -s) + SDK_VERSION=$(poetry version -s) echo "SDK_VERSION == ${SDK_VERSION}" cd boaviztapi_sdk sed -i "s/^VERSION.*/VERSION = \"${SDK_VERSION}\"/" setup.py diff --git a/.github/workflows/generate_requirements_for_clever_cloud.yml b/.github/workflows/generate_requirements_for_clever_cloud.yml index 5750387c..ed98ba92 100644 --- a/.github/workflows/generate_requirements_for_clever_cloud.yml +++ b/.github/workflows/generate_requirements_for_clever_cloud.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.9' # Choose your Python version + python-version: '3.12' # Choose your Python version - name: Install Poetry run: | @@ -33,14 +33,14 @@ jobs: - name: Install dependencies run: poetry install - + - name: Export requirements.txt run: | poetry export --without-hashes --format=requirements.txt > requirements.txt - run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" + git config --local user.name "github-actions[bot]" - run: git add requirements.txt - run: git commit --m 'generate requirements.txt from poetry' || exit 0 - run: git push diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28789f29..1dab22cb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.12' - name: Install pipenv run: | @@ -42,7 +42,7 @@ jobs: if: steps.cache-pipenv.outputs.cache-hit != 'true' run: | make install - + - name: Run test suite run: make test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e8d2a941..546e0b83 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: test: strategy: matrix: - version: ["3.9", "3.10", "3.11"] + version: ["3.10", "3.11", "3.12"] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/Dockerfile b/Dockerfile index 658b3951..6d3253aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG PY_VERSION=3.9 +ARG PY_VERSION=3.12 FROM python:$PY_VERSION-slim AS build-env ARG VERSION diff --git a/Makefile b/Makefile index 264e4322..272b1147 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ TIMESTAMP := $(shell date "+%H.%M-%m-%d-%y") DOCKER_NAME := boavizta/boaviztapi:${CURRENT_VERSION} SEMVERS := major minor patch -MINIMUM_PY_VERSION=3.9 -MAXIMUM_PY_VERSION=3.11 +MINIMUM_PY_VERSION=3.10 +MAXIMUM_PY_VERSION=3.12 clean: find . -name "*.pyc" -exec rm -rf {} \; diff --git a/poetry.lock b/poetry.lock index b77d2415..8cff4d58 100644 --- a/poetry.lock +++ b/poetry.lock @@ -449,9 +449,6 @@ files = [ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -552,7 +549,6 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -580,7 +576,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -668,47 +663,66 @@ dev = ["coverage", "flake8", "mypy", "pyyaml"] [[package]] name = "numpy" -version = "1.26.4" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] @@ -1396,45 +1410,53 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "scipy" -version = "1.13.1" +version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +python-versions = ">=3.10" +files = [ + {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, + {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, + {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, + {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, + {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, + {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, + {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, + {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, + {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, + {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.3" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "six" @@ -1471,7 +1493,6 @@ files = [ [package.dependencies] anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] @@ -1679,5 +1700,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "d4692946650cbf26459f93f175682d78a74a63c1836b9ad549c1a868c8fcd729" +python-versions = "^3.10" +content-hash = "2fe37d689f8ac53cccb92f5856fac1fb72366a5e09f3275aa44be3b40b5b4932" diff --git a/pyproject.toml b/pyproject.toml index 24297b9d..5c133187 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,14 +6,14 @@ authors = [] readme = "README.md" [tool.poetry.dependencies] -python = "^3.9" +python = "^3.10" pydantic = "^2.9.2" fastapi = "^0.115.0" uvicorn = "^0.22" -pandas = "^2.0" +pandas = "^2.2.3" aiofile = "^3.8" -numpy = "^1.24" -scipy = "^1.9" +numpy = "^2.2.0" +scipy = "^1.14.1" rapidfuzz = "^3.0" markdown = "^3.4" mangum = "^0.17" From a7570aad891183fad34e2d184f0704db39eff33c Mon Sep 17 00:00:00 2001 From: Simon Shillaker Date: Wed, 11 Dec 2024 08:56:57 +0100 Subject: [PATCH 05/14] (docs): small tweaks --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index e60371f1..38f41cc9 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,13 @@ Boavizta integrates various data and methodologies, which are combined and made Transparency and the popularization of scientific knowledge are of utmost importance in this project, and key aspects include open-sourcing the code, versioning the impact factors, and thoroughly documenting the project. -In the interest of transparency and scientific popularization, the opening of the code, the versioning of the impact factors and the documentation of the project are critical points. +In the interest of transparency and scientific popularization, the opening of the code, the versioning of the impact factors and the documentation of the project are critical points. The system follows a bottom-up approach in its development, organized into layers. The initial layer focuses on equipment. The second layer focues on the impacts of digital services (e.g. cloud instances) or systems. However, assessing the overall global impact of ICT is currently beyond the project's scope. ## :fast_forward: Test it yourself (no installation) -* See our pedagogical front-end app (using the API) : +* See our pedagogical front-end app (using the API): * See the OpenAPI specification: @@ -44,7 +44,7 @@ The system follows a bottom-up approach in its development, organized into layer $ docker run -p 5000:5000 ghcr.io/boavizta/boaviztapi:latest ``` -Access API at http://localhost:5000 +Access the API at http://localhost:5000. ### Install using pip package @@ -52,7 +52,7 @@ Access API at http://localhost:5000 $ pip3 install boaviztapi ``` -Then you can run the server locally with : +Run the server locally with: ```bash $ uvicorn boaviztapi.main:app --host=localhost --port 5000 @@ -62,17 +62,17 @@ $ uvicorn boaviztapi.main:app --host=localhost --port 5000 ### Prerequisite -Python 3 mandatory, python >=3.9 recommended, poetry recommended +Python 3 mandatory, Python >=3.10 and [Poetry](https://python-poetry.org/) strongly recommended. ### Setup poetry -Install poetry. +Install poetry (see the [install instructions](https://python-poetry.org/docs/) for more details): ```bash $ pip3 install poetry ``` -Install dependencies and create a python virtual environment. +Install dependencies and create a Python virtual environment: ```bash $ make install @@ -83,23 +83,23 @@ $ poetry shell **Once in the poetry environment** -Development server uses [uvicorn](https://www.uvicorn.org/) and [fastapi](https://fastapi.tiangolo.com/), you can launch development server with the `uvicorn` CLI. +The development server uses [uvicorn](https://www.uvicorn.org/) and [FastAPI](https://fastapi.tiangolo.com/). You can launch the development server with the `uvicorn` CLI. ```bash $ uvicorn boaviztapi.main:app --host=localhost --port 5000 ``` -You can run the tests with `pytest`. +You can run the tests with `pytest` via `make test`. ### Create your own docker image and run it -Build application package +Build application package: ```sh make install ``` -Build docker image +Build Docker image: ```sh # using the makefile (recommended) @@ -109,7 +109,7 @@ make docker-build docker build --build-arg VERSION=`poetry version -s` . ``` -Run docker image +Run Docker image: ```sh docker run -p 5000:5000/tcp boavizta/boaviztapi:latest @@ -146,7 +146,7 @@ Once API server is launched API swagger is available at [httsp://localhost:5000/ ## :woman: Contributing -See [contributing.md](./CONTRIBUTING.md) +See [contributing.md](./CONTRIBUTING.md). You can build a source distribution (installable with pip) with `make build`. @@ -162,10 +162,10 @@ We use [Semantic Versioning 2.0.0](https://semver.org/) ## :two: Publishing -You can run : +You can run: ```shell -API_TOKEN= make distribute +API_TOKEN= make distribute ``` ## :scroll: License From 55d83a63e61818522ba31d6b81c1ef553626ad5f Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Wed, 11 Dec 2024 19:03:11 +0100 Subject: [PATCH 06/14] Update pyproject.toml to v1.3.5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a3ab5ccd..956e459a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "boaviztapi" -version = "1.3.4" +version = "1.3.5" description = "An API to access Boavizta's methodologies and footprint reference data" authors = [] readme = "README.md" From c5f0522b93d19076c71d89352231a080deb1292a Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Wed, 11 Dec 2024 19:25:07 +0100 Subject: [PATCH 07/14] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 956e459a..d46bf2c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "boaviztapi" -version = "1.3.5" +version = "1.3.6" description = "An API to access Boavizta's methodologies and footprint reference data" authors = [] readme = "README.md" From ef7d3e063222685c0a84f408d9be3ab654a6a028 Mon Sep 17 00:00:00 2001 From: Simon Shillaker <554768+Shillaker@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:24:27 +0100 Subject: [PATCH 08/14] fix(docker): fix Docker build and update dev instructions for running image locally (#353) --- Dockerfile | 4 ++-- Makefile | 5 ++++- README.md | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6d3253aa..e916fb19 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 COPY --from=build-env /app /app -COPY --from=build-env /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages -ENV PYTHONPATH=/usr/local/lib/python3.9/site-packages +COPY --from=build-env /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages +ENV PYTHONPATH=/usr/local/lib/python3.12/site-packages WORKDIR /app diff --git a/Makefile b/Makefile index 272b1147..32a94b12 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CURRENT_VERSION := $(shell poetry version -s || sed -n '3s/.*version = "\(.*\)"/\1/p' pyproject.toml) -TIMESTAMP := $(shell date "+%H.%M-%m-%d-%y") +TIMESTAMP := $(shell date "+%m-%d-%y") DOCKER_NAME := boavizta/boaviztapi:${CURRENT_VERSION} SEMVERS := major minor patch @@ -64,3 +64,6 @@ docker-build: docker-build-development: docker build -t boavizta/boaviztapi:${TIMESTAMP} . --build-arg VERSION=${TIMESTAMP} + +docker-run-development: + docker run -p 5000:5000 boavizta/boaviztapi:${TIMESTAMP} diff --git a/README.md b/README.md index 38f41cc9..272143e3 100644 --- a/README.md +++ b/README.md @@ -112,13 +112,15 @@ docker build --build-arg VERSION=`poetry version -s` . Run Docker image: ```sh -docker run -p 5000:5000/tcp boavizta/boaviztapi:latest +docker run -p 5000:5000/tcp boavizta/boaviztapi:`poetry version -s` ``` #### Alternative (if you don't have Python or Poetry) ```sh make docker-build-development + +make docker-run-development ``` ### Deploy to AWS as serverless application From 895b7584791833188e3c39391efcd78af9398e61 Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Thu, 12 Dec 2024 13:20:51 +0100 Subject: [PATCH 09/14] Launch run (#355) Co-authored-by: Simon Shillaker Co-authored-by: Simon Shillaker <554768+Shillaker@users.noreply.github.com> --- .../build_client_sdk_with_poetry.yml | 4 +- ...generate_requirements_for_clever_cloud.yml | 6 +- .github/workflows/release.yml | 4 +- .github/workflows/test.yml | 2 +- Dockerfile | 6 +- Makefile | 9 +- README.md | 34 ++-- boaviztapi/data/archetypes/server.csv | 1 + boaviztapi/service/impacts_computation.py | 102 +++++----- poetry.lock | 179 ++++++++++-------- pyproject.toml | 10 +- tests/api/test_cloud.py | 1 + tests/api/test_component.py | 114 +++++------ tests/unit/test_bottom_up.py | 26 +-- tests/unit/test_data.py | 35 ++++ tests/unit/test_verbose.py | 56 +++--- 16 files changed, 327 insertions(+), 262 deletions(-) create mode 100644 tests/unit/test_data.py diff --git a/.github/workflows/build_client_sdk_with_poetry.yml b/.github/workflows/build_client_sdk_with_poetry.yml index 4d6d1e5d..28f1c57b 100644 --- a/.github/workflows/build_client_sdk_with_poetry.yml +++ b/.github/workflows/build_client_sdk_with_poetry.yml @@ -29,7 +29,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.12' - name: Install pipenv run: | @@ -70,7 +70,7 @@ jobs: - name: Build the pip package and push it run: | sudo chown -R $(whoami) boaviztapi_sdk - SDK_VERSION=$(poetry version -s) + SDK_VERSION=$(poetry version -s) echo "SDK_VERSION == ${SDK_VERSION}" cd boaviztapi_sdk sed -i "s/^VERSION.*/VERSION = \"${SDK_VERSION}\"/" setup.py diff --git a/.github/workflows/generate_requirements_for_clever_cloud.yml b/.github/workflows/generate_requirements_for_clever_cloud.yml index 5750387c..ed98ba92 100644 --- a/.github/workflows/generate_requirements_for_clever_cloud.yml +++ b/.github/workflows/generate_requirements_for_clever_cloud.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.9' # Choose your Python version + python-version: '3.12' # Choose your Python version - name: Install Poetry run: | @@ -33,14 +33,14 @@ jobs: - name: Install dependencies run: poetry install - + - name: Export requirements.txt run: | poetry export --without-hashes --format=requirements.txt > requirements.txt - run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" + git config --local user.name "github-actions[bot]" - run: git add requirements.txt - run: git commit --m 'generate requirements.txt from poetry' || exit 0 - run: git push diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28789f29..1dab22cb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.12' - name: Install pipenv run: | @@ -42,7 +42,7 @@ jobs: if: steps.cache-pipenv.outputs.cache-hit != 'true' run: | make install - + - name: Run test suite run: make test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e8d2a941..546e0b83 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: test: strategy: matrix: - version: ["3.9", "3.10", "3.11"] + version: ["3.10", "3.11", "3.12"] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/Dockerfile b/Dockerfile index 658b3951..e916fb19 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG PY_VERSION=3.9 +ARG PY_VERSION=3.12 FROM python:$PY_VERSION-slim AS build-env ARG VERSION @@ -26,8 +26,8 @@ ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 COPY --from=build-env /app /app -COPY --from=build-env /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages -ENV PYTHONPATH=/usr/local/lib/python3.9/site-packages +COPY --from=build-env /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages +ENV PYTHONPATH=/usr/local/lib/python3.12/site-packages WORKDIR /app diff --git a/Makefile b/Makefile index 264e4322..32a94b12 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ CURRENT_VERSION := $(shell poetry version -s || sed -n '3s/.*version = "\(.*\)"/\1/p' pyproject.toml) -TIMESTAMP := $(shell date "+%H.%M-%m-%d-%y") +TIMESTAMP := $(shell date "+%m-%d-%y") DOCKER_NAME := boavizta/boaviztapi:${CURRENT_VERSION} SEMVERS := major minor patch -MINIMUM_PY_VERSION=3.9 -MAXIMUM_PY_VERSION=3.11 +MINIMUM_PY_VERSION=3.10 +MAXIMUM_PY_VERSION=3.12 clean: find . -name "*.pyc" -exec rm -rf {} \; @@ -64,3 +64,6 @@ docker-build: docker-build-development: docker build -t boavizta/boaviztapi:${TIMESTAMP} . --build-arg VERSION=${TIMESTAMP} + +docker-run-development: + docker run -p 5000:5000 boavizta/boaviztapi:${TIMESTAMP} diff --git a/README.md b/README.md index e60371f1..272143e3 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,13 @@ Boavizta integrates various data and methodologies, which are combined and made Transparency and the popularization of scientific knowledge are of utmost importance in this project, and key aspects include open-sourcing the code, versioning the impact factors, and thoroughly documenting the project. -In the interest of transparency and scientific popularization, the opening of the code, the versioning of the impact factors and the documentation of the project are critical points. +In the interest of transparency and scientific popularization, the opening of the code, the versioning of the impact factors and the documentation of the project are critical points. The system follows a bottom-up approach in its development, organized into layers. The initial layer focuses on equipment. The second layer focues on the impacts of digital services (e.g. cloud instances) or systems. However, assessing the overall global impact of ICT is currently beyond the project's scope. ## :fast_forward: Test it yourself (no installation) -* See our pedagogical front-end app (using the API) : +* See our pedagogical front-end app (using the API): * See the OpenAPI specification: @@ -44,7 +44,7 @@ The system follows a bottom-up approach in its development, organized into layer $ docker run -p 5000:5000 ghcr.io/boavizta/boaviztapi:latest ``` -Access API at http://localhost:5000 +Access the API at http://localhost:5000. ### Install using pip package @@ -52,7 +52,7 @@ Access API at http://localhost:5000 $ pip3 install boaviztapi ``` -Then you can run the server locally with : +Run the server locally with: ```bash $ uvicorn boaviztapi.main:app --host=localhost --port 5000 @@ -62,17 +62,17 @@ $ uvicorn boaviztapi.main:app --host=localhost --port 5000 ### Prerequisite -Python 3 mandatory, python >=3.9 recommended, poetry recommended +Python 3 mandatory, Python >=3.10 and [Poetry](https://python-poetry.org/) strongly recommended. ### Setup poetry -Install poetry. +Install poetry (see the [install instructions](https://python-poetry.org/docs/) for more details): ```bash $ pip3 install poetry ``` -Install dependencies and create a python virtual environment. +Install dependencies and create a Python virtual environment: ```bash $ make install @@ -83,23 +83,23 @@ $ poetry shell **Once in the poetry environment** -Development server uses [uvicorn](https://www.uvicorn.org/) and [fastapi](https://fastapi.tiangolo.com/), you can launch development server with the `uvicorn` CLI. +The development server uses [uvicorn](https://www.uvicorn.org/) and [FastAPI](https://fastapi.tiangolo.com/). You can launch the development server with the `uvicorn` CLI. ```bash $ uvicorn boaviztapi.main:app --host=localhost --port 5000 ``` -You can run the tests with `pytest`. +You can run the tests with `pytest` via `make test`. ### Create your own docker image and run it -Build application package +Build application package: ```sh make install ``` -Build docker image +Build Docker image: ```sh # using the makefile (recommended) @@ -109,16 +109,18 @@ make docker-build docker build --build-arg VERSION=`poetry version -s` . ``` -Run docker image +Run Docker image: ```sh -docker run -p 5000:5000/tcp boavizta/boaviztapi:latest +docker run -p 5000:5000/tcp boavizta/boaviztapi:`poetry version -s` ``` #### Alternative (if you don't have Python or Poetry) ```sh make docker-build-development + +make docker-run-development ``` ### Deploy to AWS as serverless application @@ -146,7 +148,7 @@ Once API server is launched API swagger is available at [httsp://localhost:5000/ ## :woman: Contributing -See [contributing.md](./CONTRIBUTING.md) +See [contributing.md](./CONTRIBUTING.md). You can build a source distribution (installable with pip) with `make build`. @@ -162,10 +164,10 @@ We use [Semantic Versioning 2.0.0](https://semver.org/) ## :two: Publishing -You can run : +You can run: ```shell -API_TOKEN= make distribute +API_TOKEN= make distribute ``` ## :scroll: License diff --git a/boaviztapi/data/archetypes/server.csv b/boaviztapi/data/archetypes/server.csv index d6234182..9e26f81b 100644 --- a/boaviztapi/data/archetypes/server.csv +++ b/boaviztapi/data/archetypes/server.csv @@ -201,3 +201,4 @@ scw_pop2hm.base,Scaleway,rack,2,32,,AMD EPYC 7543,128,16,32,2,234,0,0,0,,0,2,0,5 scw_pro2.base,Scaleway,rack,2,32,,AMD EPYC 7543,128,24,32,2,468,0,0,0,,0,2,0,50;0;100,1,52560,0.33;0.2;0.6, scw_renders.base,Scaleway,rack,2,20,,Intel Xeon Gold 6148,40,12,32,2,3750,0,0,8,Nvidia Tesla P100,24,4,0,50;0;100,1,52560,0.33;0.2;0.6, scw_stardust1.base,Scaleway,rack,1,16,,AMD EPYC 7281,64,8,32,5,976,0,0,0,,0,2,0,50;0;100,1,52560,0.33;0.2;0.6, +platform_aws_t4g,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified \ No newline at end of file diff --git a/boaviztapi/service/impacts_computation.py b/boaviztapi/service/impacts_computation.py index fd04031e..02f515ba 100644 --- a/boaviztapi/service/impacts_computation.py +++ b/boaviztapi/service/impacts_computation.py @@ -6,7 +6,7 @@ from boaviztapi.model.device.server import DeviceServer from boaviztapi.model.services.cloud_instance import Service, ServiceCloudInstance from boaviztapi.model.component import ComponentCPU, ComponentCase, ComponentPowerSupply, ComponentRAM, Component, \ - ComponentAssembly, ComponentHDD, ComponentSSD + ComponentAssembly, ComponentHDD, ComponentSSD, ComponentMotherboard from boaviztapi.model.component.functional_block import ComponentFunctionalBlock from boaviztapi.model.device import Device from boaviztapi.model.device.iot import DeviceIoT @@ -25,9 +25,9 @@ def compute_single_impact(model: Union[Component, Device, Service], impact, min_impact, max_impact, warnings = impact_function(criteria, duration, model) result = Impact( - value=impact * model.units.value * allocation, - min=min_impact * model.units.min * allocation, - max=max_impact * model.units.max * allocation, + value=impact * allocation, + min=min_impact * allocation, + max=max_impact * allocation, warnings=list(set(warnings)) ) @@ -66,23 +66,23 @@ def simple_impact_use(impact_type: str, duration: int, model: Union[Component, D impact_factor = model.usage.elec_factors[impact_type] - impacts = impact_factor.value * (model.usage.avg_power.value / 1000) * model.usage.use_time_ratio.value * duration - max_impact = impact_factor.max * (model.usage.avg_power.max / 1000) * model.usage.use_time_ratio.min * duration - min_impact = impact_factor.min * (model.usage.avg_power.min / 1000) * model.usage.use_time_ratio.max * duration + impacts = impact_factor.value * (model.usage.avg_power.value / 1000) * model.usage.use_time_ratio.value * duration * model.units.value + max_impact = impact_factor.max * (model.usage.avg_power.max / 1000) * model.usage.use_time_ratio.min * duration * model.units.max + min_impact = impact_factor.min * (model.usage.avg_power.min / 1000) * model.usage.use_time_ratio.max * duration * model.units.min return impacts, min_impact, max_impact, [] def simple_embedded(impact_type: str, duration: int, model: [Device, Component, Service]) -> ComputedImpacts: if hasattr(model, 'type') and model.type is not None: - impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) - min_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) - max_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) + impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) * model.units.value + min_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) * model.units.min + max_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)[model.type.value]["impact"]) * model.units.max else: - impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) - min_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) - max_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) + impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) * model.units.value + min_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) * model.units.min + max_impact = float(get_impact_factor(item=model.NAME, impact_type=impact_type)["impact"]) * model.units.max warnings = ["Generic data used for impact calculation."] @@ -125,9 +125,9 @@ def cpu_impact_embedded(impact_type: str, duration: int, cpu: ComponentCPU) -> C ) impact = Impact( - value=cpu.die_size.value * cpu_die_impact.value + cpu_impact.value, - min=cpu.die_size.min * cpu_die_impact.min + cpu_impact.min, - max=cpu.die_size.max * cpu_die_impact.max + cpu_impact.max) + value=(cpu.die_size.value * cpu_die_impact.value + cpu_impact.value) * cpu.units.value, + min=(cpu.die_size.min * cpu_die_impact.min + cpu_impact.min) * cpu.units.min, + max=(cpu.die_size.max * cpu_die_impact.max + cpu_impact.max ) * cpu.units.max) impact.allocate(duration, cpu.usage.hours_life_time) @@ -136,9 +136,9 @@ def cpu_impact_embedded(impact_type: str, duration: int, cpu: ComponentCPU) -> C def assembly_impact_embedded(impact_type: str, duration: int, model: ComponentAssembly) -> ComputedImpacts: impact = Impact( - value=get_impact_factor(item='assembly', impact_type=impact_type)['impact'], - min=get_impact_factor(item='assembly', impact_type=impact_type)['impact'], - max=get_impact_factor(item='assembly', impact_type=impact_type)['impact'] + value=get_impact_factor(item='assembly', impact_type=impact_type)['impact'] * model.units.value, + min=get_impact_factor(item='assembly', impact_type=impact_type)['impact'] * model.units.min, + max=get_impact_factor(item='assembly', impact_type=impact_type)['impact'] * model.units.max ) impact.allocate(duration, model.usage.hours_life_time) @@ -155,9 +155,9 @@ def casing_impact_embedded(impact_type: str, duration: int, case: ComponentCase) computed_impact = impact_manufacture_rack(impact_type, case) impact = Impact( - value=computed_impact[0], - min=computed_impact[1], - max=computed_impact[2] + value=computed_impact[0] * case.units.value, + min=computed_impact[1] * case.units.min, + max=computed_impact[2] * case.units.max ) impact.allocate(duration, case.usage.hours_life_time) @@ -180,7 +180,7 @@ def impact_manufacture_rack(impact_type: str, case: ComponentCase) -> ComputedIm else: return impact_factor.value, blade_impact[1], impact_factor.max, [ "End of life is not included in the calculation"] - return impact_factor.value, impact_factor.min, impact_factor.max, ["End of life is not included in the calculation"] + return impact_factor.value * case.units.value, impact_factor.min * case.units.min, impact_factor.max * case.units.max, ["End of life is not included in the calculation"] def impact_manufacture_blade(impact_type: str, case: ComponentCase) -> ComputedImpacts: @@ -195,7 +195,7 @@ def impact_manufacture_blade(impact_type: str, case: ComponentCase) -> ComputedI else: return impact.value, rack_impact[1], impact.max, ["End of life is not included in the calculation"] - return impact.value, impact.min, impact.max, ["End of life is not included in the calculation"] + return impact.value * case.units.value, impact.min * case.units.min, impact.max * case.units.max, ["End of life is not included in the calculation"] def get_impact_constants_blade(impact_type: str) -> Tuple[Impact, Impact]: @@ -225,9 +225,9 @@ def compute_impact_manufacture_blade(impact_blade_server: Impact, def iot_functional_blocks_impact_embedded(impact_type: str, duration: int, function_blocks: ComponentFunctionalBlock) -> ComputedImpacts: impact = Impact( - value=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type), - min=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type), - max=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type) + value=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type) * function_blocks.units.value, + min=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type) * function_blocks.units.min, + max=get_iot_impact_factor(function_blocks.IMPACT_KEY, function_blocks.hsl_level.value, impact_type) * function_blocks.units.max ) impact.allocate(duration, function_blocks.usage.hours_life_time) @@ -237,9 +237,9 @@ def iot_functional_blocks_impact_embedded(impact_type: str, duration: int, def hdd_impact_embedded(impact_type: str, duration: int, hdd: ComponentHDD) -> ComputedImpacts: impact = Impact( - value=get_impact_factor(item='hdd', impact_type=impact_type)['impact'], - min=get_impact_factor(item='hdd', impact_type=impact_type)['impact'], - max=get_impact_factor(item='hdd', impact_type=impact_type)['impact'] + value=get_impact_factor(item='hdd', impact_type=impact_type)['impact'] * hdd.units.value, + min=get_impact_factor(item='hdd', impact_type=impact_type)['impact'] * hdd.units.min, + max=get_impact_factor(item='hdd', impact_type=impact_type)['impact'] * hdd.units.max ) impact.allocate(duration, hdd.usage.hours_life_time) @@ -247,11 +247,11 @@ def hdd_impact_embedded(impact_type: str, duration: int, hdd: ComponentHDD) -> C return impact.value, impact.min, impact.max, ["End of life is not included in the calculation"] -def motherboard_impact_embedded(impact_type: str, duration: int, motherboard: Motherboard) -> ComputedImpacts: +def motherboard_impact_embedded(impact_type: str, duration: int, motherboard: ComponentMotherboard) -> ComputedImpacts: impact = Impact( - value=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'], - min=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'], - max=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'] + value=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'] * motherboard.units.value, + min=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'] * motherboard.units.min, + max=get_impact_factor(item='motherboard', impact_type=impact_type)['impact'] * motherboard.units.max ) impact.allocate(duration, motherboard.usage.hours_life_time) @@ -278,9 +278,9 @@ def server_power_supply_impact_embedded(impact_type: str, duration: int, ) impact = Impact( - value=power_supply.unit_weight.value * impact_factor.value, - min=power_supply.unit_weight.min * impact_factor.min, - max=power_supply.unit_weight.max * impact_factor.max + value=power_supply.unit_weight.value * impact_factor.value * power_supply.units.value, + min=power_supply.unit_weight.min * impact_factor.min * power_supply.units.min, + max=power_supply.unit_weight.max * impact_factor.max * power_supply.units.max ) impact.allocate(duration, power_supply.usage.hours_life_time) @@ -302,9 +302,9 @@ def ram_impact_embedded(impact_type: str, duration: int, ram: ComponentRAM) -> C ) impact = Impact( - value=(ram.capacity.value / ram.density.value) * ram_die_impact.value + ram_impact.value, - min=(ram.capacity.min / ram.density.max) * ram_die_impact.min + ram_impact.min, - max=(ram.capacity.max / ram.density.min) * ram_die_impact.max + ram_impact.max + value=((ram.capacity.value / ram.density.value) * ram_die_impact.value + ram_impact.value) * ram.units.value, + min=((ram.capacity.min / ram.density.max) * ram_die_impact.min + ram_impact.min) * ram.units.min, + max=((ram.capacity.max / ram.density.min) * ram_die_impact.max + ram_impact.max) * ram.units.max ) impact.allocate(duration, ram.usage.hours_life_time) @@ -348,9 +348,9 @@ def ssd_impact_embedded(impact_type: str, duration: int, ssd: ComponentSSD) -> C ) impact = Impact( - value=(ssd.capacity.value / ssd.density.value) * ssd_die_impact.value + ssd_impact.value, - min=(ssd.capacity.min / ssd.density.max) * ssd_die_impact.min + ssd_impact.min, - max=(ssd.capacity.max / ssd.density.min) * ssd_die_impact.max + ssd_impact.max + value=((ssd.capacity.value / ssd.density.value) * ssd_die_impact.value + ssd_impact.value) * ssd.units.value, + min=((ssd.capacity.min / ssd.density.max) * ssd_die_impact.min + ssd_impact.min) * ssd.units.min, + max=((ssd.capacity.max / ssd.density.min) * ssd_die_impact.max + ssd_impact.max) * ssd.units.max ) impact.allocate(duration, ssd.usage.hours_life_time) @@ -371,7 +371,7 @@ def iot_impact_embedded(impact_type: str, duration: int, iot_device: DeviceIoT) max_impacts.append(single_impact.max) warnings = warnings + single_impact.warnings - return sum(impacts), sum(min_impacts), sum(max_impacts), warnings + return sum(impacts) * iot_device.units.value, sum(min_impacts) * iot_device.units.min, sum(max_impacts) * iot_device.units.max, warnings def iot_impact_use(impact_type: str, duration: int, iot_device: DeviceIoT) -> ComputedImpacts: @@ -380,11 +380,11 @@ def iot_impact_use(impact_type: str, duration: int, iot_device: DeviceIoT) -> Co impact_factor = iot_device.usage.elec_factors[impact_type] impact = impact_factor.value * ( - iot_device.usage.avg_power.value / 1000) * iot_device.usage.use_time_ratio.value * duration + iot_device.usage.avg_power.value / 1000) * iot_device.usage.use_time_ratio.value * duration * iot_device.units.value min_impact = impact_factor.min * ( - iot_device.usage.avg_power.min / 1000) * iot_device.usage.use_time_ratio.min * duration + iot_device.usage.avg_power.min / 1000) * iot_device.usage.use_time_ratio.min * duration * iot_device.units.min max_impact = impact_factor.max * ( - iot_device.usage.avg_power.max / 1000) * iot_device.usage.use_time_ratio.max * duration + iot_device.usage.avg_power.max / 1000) * iot_device.usage.use_time_ratio.max * duration * iot_device.units.max return impact, min_impact, max_impact, [] @@ -419,7 +419,7 @@ def server_impact_embedded(impact_type: str, duration: int, server: DeviceServer impact.allocate(duration, server.usage.hours_life_time) - return impact.value, impact.min, impact.max, warnings + return impact.value * server.units.value, impact.min * server.units.min, impact.max * server.units.max, warnings def server_impact_use(impact_type: str, duration: int, server: DeviceServer) -> ComputedImpacts: @@ -438,9 +438,9 @@ def server_impact_use(impact_type: str, duration: int, server: DeviceServer) -> for ram in server.ram: compute_single_impact(ram, USE, impact_type, duration) - impact = impact_factor.value * (server.usage.avg_power.value / 1000) * server.usage.use_time_ratio.value * duration - min_impact = impact_factor.min * (server.usage.avg_power.min / 1000) * server.usage.use_time_ratio.min * duration - max_impact = impact_factor.max * (server.usage.avg_power.max / 1000) * server.usage.use_time_ratio.max * duration + impact = impact_factor.value * (server.usage.avg_power.value / 1000) * server.usage.use_time_ratio.value * duration * server.units.value + min_impact = impact_factor.min * (server.usage.avg_power.min / 1000) * server.usage.use_time_ratio.min * duration * server.units.min + max_impact = impact_factor.max * (server.usage.avg_power.max / 1000) * server.usage.use_time_ratio.max * duration * server.units.max return impact, min_impact, max_impact, [] diff --git a/poetry.lock b/poetry.lock index b77d2415..8cff4d58 100644 --- a/poetry.lock +++ b/poetry.lock @@ -449,9 +449,6 @@ files = [ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -552,7 +549,6 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -580,7 +576,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -668,47 +663,66 @@ dev = ["coverage", "flake8", "mypy", "pyyaml"] [[package]] name = "numpy" -version = "1.26.4" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] @@ -1396,45 +1410,53 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "scipy" -version = "1.13.1" +version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +python-versions = ">=3.10" +files = [ + {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, + {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, + {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, + {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, + {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, + {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, + {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, + {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, + {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, + {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, + {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, + {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, + {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, + {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, + {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, + {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.3" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "six" @@ -1471,7 +1493,6 @@ files = [ [package.dependencies] anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] @@ -1679,5 +1700,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "d4692946650cbf26459f93f175682d78a74a63c1836b9ad549c1a868c8fcd729" +python-versions = "^3.10" +content-hash = "2fe37d689f8ac53cccb92f5856fac1fb72366a5e09f3275aa44be3b40b5b4932" diff --git a/pyproject.toml b/pyproject.toml index 24297b9d..d46bf2c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,19 +1,19 @@ [tool.poetry] name = "boaviztapi" -version = "1.3.3" +version = "1.3.6" description = "An API to access Boavizta's methodologies and footprint reference data" authors = [] readme = "README.md" [tool.poetry.dependencies] -python = "^3.9" +python = "^3.10" pydantic = "^2.9.2" fastapi = "^0.115.0" uvicorn = "^0.22" -pandas = "^2.0" +pandas = "^2.2.3" aiofile = "^3.8" -numpy = "^1.24" -scipy = "^1.9" +numpy = "^2.2.0" +scipy = "^1.14.1" rapidfuzz = "^3.0" markdown = "^3.4" mangum = "^0.17" diff --git a/tests/api/test_cloud.py b/tests/api/test_cloud.py index ab2ba03c..242d1247 100644 --- a/tests/api/test_cloud.py +++ b/tests/api/test_cloud.py @@ -991,3 +991,4 @@ async def test_empty_usage_scw_dev1_l(): ) await test.check_result() + diff --git a/tests/api/test_component.py b/tests/api/test_component.py index 3f3fbd4f..d0b94b60 100644 --- a/tests/api/test_component.py +++ b/tests/api/test_component.py @@ -244,31 +244,33 @@ async def test_multiple_cpu(): "units": 3, "core_units": 12, "die_size_per_core": 24.5}) assert res.json() == {'impacts': {'adp': {'description': 'Use of minerals and fossil ressources', - 'embedded': {'max': 0.06121, - 'min': 0.06121, - 'value': 0.06121, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'kgSbeq', - 'use': {'max': 0.01145, 'min': 0.0005689, 'value': 0.003}}, - 'gwp': {'description': 'Total climate change', - 'embedded': {'max': 44.8, - 'min': 44.8, - 'value': 44.8, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'kgCO2eq', - 'use': {'max': 38790.0, 'min': 991.3, 'value': 16000.0}}, - 'pe': {'description': 'Consumption of primary energy', - 'embedded': {'max': 701.7, - 'min': 701.7, - 'value': 701.7, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'MJ', - 'use': {'max': 20180000.0, - 'min': 560.3, - 'value': 1000000.0}}}} + 'embedded': {'max': 0.06121, + 'min': 0.06121, + 'value': 0.06121, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'kgSbeq', + 'use': {'max': 0.003816, + 'min': 0.0001896, + 'value': 0.0009}}, + 'gwp': {'description': 'Total climate change', + 'embedded': {'max': 44.8, + 'min': 44.8, + 'value': 44.8, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'kgCO2eq', + 'use': {'max': 12930.0, 'min': 330.4, 'value': 5000.0}}, + 'pe': {'description': 'Consumption of primary energy', + 'embedded': {'max': 701.7, + 'min': 701.7, + 'value': 701.7, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'MJ', + 'use': {'max': 6726000.0, + 'min': 186.8, + 'value': 200000.0}}}} @pytest.mark.asyncio @@ -545,37 +547,37 @@ async def test_complete_ram(): res = await ac.post('/v1/component/ram?verbose=false', json={"units": 12, "capacity": 32, "density": 1.79}) assert res.json() == {'impacts': {'adp': {'description': 'Use of minerals and fossil ressources', - 'embedded': {'max': 0.0338, - 'min': 0.0338, - 'value': 0.0338, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'kgSbeq', - 'use': {'max': 0.009134, - 'min': 0.000454, - 'value': 0.0022}}, - 'gwp': {'description': 'Total climate change', - 'embedded': {'max': 534.6, - 'min': 534.6, - 'value': 534.6, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'kgCO2eq', - 'use': {'max': 30950.0, 'min': 791.0, 'value': 13000.0}}, - 'pe': {'description': 'Consumption of primary energy', - 'embedded': {'max': 6745.0, - 'min': 6745.0, - 'value': 6745.0, - 'warnings': ['End of life is not included in ' - 'the calculation']}, - 'unit': 'MJ', - 'use': {'max': 16100000.0, - 'min': 447.1, - 'value': 400000.0, - 'warnings': ['Uncertainty from technical ' - 'characteristics is very important. ' - 'Results should be interpreted with ' - 'caution (see min and max values)']}}}} + 'embedded': {'max': 0.0338, + 'min': 0.0338, + 'value': 0.0338, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'kgSbeq', + 'use': {'max': 0.0007612, + 'min': 3.783e-05, + 'value': 0.00018}}, + 'gwp': {'description': 'Total climate change', + 'embedded': {'max': 534.6, + 'min': 534.6, + 'value': 534.6, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'kgCO2eq', + 'use': {'max': 2579.0, 'min': 65.92, 'value': 1100.0}}, + 'pe': {'description': 'Consumption of primary energy', + 'embedded': {'max': 6745.0, + 'min': 6745.0, + 'value': 6745.0, + 'warnings': ['End of life is not included in ' + 'the calculation']}, + 'unit': 'MJ', + 'use': {'max': 1342000.0, + 'min': 37.26, + 'value': 40000.0, + 'warnings': ['Uncertainty from technical ' + 'characteristics is very important. ' + 'Results should be interpreted with ' + 'caution (see min and max values)']}}}} @pytest.mark.asyncio diff --git a/tests/unit/test_bottom_up.py b/tests/unit/test_bottom_up.py index 1eea2500..0ddd6842 100644 --- a/tests/unit/test_bottom_up.py +++ b/tests/unit/test_bottom_up.py @@ -38,7 +38,7 @@ def test_bottom_up_component_cpu_complete(complete_cpu_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgSbeq', - 'use': {'max': 0.005088, 'min': 0.0002528, 'value': 0.0012}}, + 'use': {'max': 0.002544, 'min': 0.0001264, 'value': 0.0006}}, 'gwp': {'description': 'Total climate change', 'embedded': {'max': 41.45, 'min': 41.45, @@ -46,7 +46,7 @@ def test_bottom_up_component_cpu_complete(complete_cpu_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgCO2eq', - 'use': {'max': 17240.0, 'min': 440.6, 'value': 7000.0}}, + 'use': {'max': 8620.0, 'min': 220.3, 'value': 3600.0}}, 'pe': {'description': 'Consumption of primary energy', 'embedded': {'max': 623.6, 'min': 623.6, @@ -54,7 +54,7 @@ def test_bottom_up_component_cpu_complete(complete_cpu_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'MJ', - 'use': {'max': 8967000.0, 'min': 249.0, 'value': 200000.0}}} + 'use': {'max': 4484000.0, 'min': 124.5, 'value': 100000.0}}} def test_bottom_up_component_cpu_incomplete(incomplete_cpu_model): @@ -220,7 +220,7 @@ def test_bottom_up_component_ram_complete(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgSbeq', - 'use': {'max': 0.009134, 'min': 0.000454, 'value': 0.0022}}, + 'use': {'max': 0.0007612, 'min': 3.783e-05, 'value': 0.00018}}, 'gwp': {'description': 'Total climate change', 'embedded': {'max': 534.6, 'min': 534.6, @@ -228,7 +228,7 @@ def test_bottom_up_component_ram_complete(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgCO2eq', - 'use': {'max': 30950.0, 'min': 791.0, 'value': 13000.0}}, + 'use': {'max': 2579.0, 'min': 65.92, 'value': 1100.0}}, 'pe': {'description': 'Consumption of primary energy', 'embedded': {'max': 6745.0, 'min': 6745.0, @@ -236,9 +236,9 @@ def test_bottom_up_component_ram_complete(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'MJ', - 'use': {'max': 16100000.0, - 'min': 447.1, - 'value': 400000.0, + 'use': {'max': 1342000.0, + 'min': 37.26, + 'value': 40000.0, 'warnings': ['Uncertainty from technical characteristics is ' 'very important. Results should be interpreted ' 'with caution (see min and max values)']}}} @@ -253,7 +253,7 @@ def test_bottom_up_component_ram_incomplete(incomplete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgSbeq', - 'use': {'max': 0.009134, 'min': 0.000454, 'value': 0.0022}}, + 'use': {'max': 0.0007612, 'min': 3.783e-05, 'value': 0.00018}}, 'gwp': {'description': 'Total climate change', 'embedded': {'max': 4287.0, 'min': 104.9, @@ -261,7 +261,7 @@ def test_bottom_up_component_ram_incomplete(incomplete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgCO2eq', - 'use': {'max': 30950.0, 'min': 791.0, 'value': 13000.0}}, + 'use': {'max': 2579.0, 'min': 65.92, 'value': 1100.0}}, 'pe': {'description': 'Consumption of primary energy', 'embedded': {'max': 53300.0, 'min': 1412.0, @@ -269,9 +269,9 @@ def test_bottom_up_component_ram_incomplete(incomplete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'MJ', - 'use': {'max': 16100000.0, - 'min': 447.1, - 'value': 400000.0, + 'use': {'max': 1342000.0, + 'min': 37.26, + 'value': 40000.0, 'warnings': ['Uncertainty from technical characteristics is ' 'very important. Results should be interpreted ' 'with caution (see min and max values)']}}} diff --git a/tests/unit/test_data.py b/tests/unit/test_data.py new file mode 100644 index 00000000..a4c1b148 --- /dev/null +++ b/tests/unit/test_data.py @@ -0,0 +1,35 @@ +import csv +import os.path + +import pytest + +cloud_path = os.path.join(os.path.dirname(__file__), "../../boaviztapi/data/archetypes/cloud/") +providers_path = os.path.join(os.path.dirname(__file__),"../../boaviztapi/data/archetypes/cloud/providers.csv") +servers_patch = os.path.join(os.path.dirname(__file__),"../../boaviztapi/data/archetypes/server.csv") + +@pytest.fixture +def providers(): + with open(providers_path, 'r') as f: + reader = csv.DictReader(f) + return [row['provider.name'] for row in reader] + +@pytest.fixture +def valid_platforms(): + with open(servers_patch, 'r') as f: + reader = csv.DictReader(f) + return {row['id'] for row in reader} + + +def test_platform_exists_in_server_csv(providers, valid_platforms): + for provider_name in providers: + provider_csv_path = f"{cloud_path}/{provider_name}.csv" + + try: + with open(provider_csv_path, 'r') as f: + reader = csv.DictReader(f) + for row in reader: + platform = row.get('platform', '').strip() + if platform not in valid_platforms: + pytest.fail(f"Platform '{platform}' for provider '{provider_name}' not found in server.csv") + except FileNotFoundError: + pytest.fail(f"CSV file for provider '{provider_name}' not found: {provider_csv_path}") \ No newline at end of file diff --git a/tests/unit/test_verbose.py b/tests/unit/test_verbose.py index 886e5dfe..3d973269 100644 --- a/tests/unit/test_verbose.py +++ b/tests/unit/test_verbose.py @@ -9,29 +9,29 @@ def test_verbose_component_cpu_1(complete_cpu_model): assert verbose["die_size_per_core"] == {'status': 'INPUT', 'unit': 'mm2', 'value': 24.5} assert verbose["impacts"] == {'adp': {'description': 'Use of minerals and fossil ressources', - 'embedded': {'max': 0.04081, - 'min': 0.04081, - 'value': 0.04081, - 'warnings': ['End of life is not included in the ' - 'calculation']}, - 'unit': 'kgSbeq', - 'use': {'max': 0.005088, 'min': 0.0002528, 'value': 0.0012}}, - 'gwp': {'description': 'Total climate change', - 'embedded': {'max': 41.45, - 'min': 41.45, - 'value': 41.45, - 'warnings': ['End of life is not included in the ' - 'calculation']}, - 'unit': 'kgCO2eq', - 'use': {'max': 17240.0, 'min': 440.6, 'value': 7000.0}}, - 'pe': {'description': 'Consumption of primary energy', - 'embedded': {'max': 623.6, - 'min': 623.6, - 'value': 623.6, - 'warnings': ['End of life is not included in the ' - 'calculation']}, - 'unit': 'MJ', - 'use': {'max': 8967000.0, 'min': 249.0, 'value': 200000.0}}} + 'embedded': {'max': 0.04081, + 'min': 0.04081, + 'value': 0.04081, + 'warnings': ['End of life is not included in the ' + 'calculation']}, + 'unit': 'kgSbeq', + 'use': {'max': 0.002544, 'min': 0.0001264, 'value': 0.0006}}, + 'gwp': {'description': 'Total climate change', + 'embedded': {'max': 41.45, + 'min': 41.45, + 'value': 41.45, + 'warnings': ['End of life is not included in the ' + 'calculation']}, + 'unit': 'kgCO2eq', + 'use': {'max': 8620.0, 'min': 220.3, 'value': 3600.0}}, + 'pe': {'description': 'Consumption of primary energy', + 'embedded': {'max': 623.6, + 'min': 623.6, + 'value': 623.6, + 'warnings': ['End of life is not included in the ' + 'calculation']}, + 'unit': 'MJ', + 'use': {'max': 4484000.0, 'min': 124.5, 'value': 100000.0}}} def test_verbose_component_cpu_2(incomplete_cpu_model): @@ -75,7 +75,7 @@ def test_verbose_component_ram(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgSbeq', - 'use': {'max': 0.009134, 'min': 0.000454, 'value': 0.0022}}, + 'use': {'max': 0.0007612, 'min': 3.783e-05, 'value': 0.00018}}, 'gwp': {'description': 'Total climate change', 'embedded': {'max': 534.6, 'min': 534.6, @@ -83,7 +83,7 @@ def test_verbose_component_ram(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'kgCO2eq', - 'use': {'max': 30950.0, 'min': 791.0, 'value': 13000.0}}, + 'use': {'max': 2579.0, 'min': 65.92, 'value': 1100.0}}, 'pe': {'description': 'Consumption of primary energy', 'embedded': {'max': 6745.0, 'min': 6745.0, @@ -91,9 +91,9 @@ def test_verbose_component_ram(complete_ram_model): 'warnings': ['End of life is not included in the ' 'calculation']}, 'unit': 'MJ', - 'use': {'max': 16100000.0, - 'min': 447.1, - 'value': 400000.0, + 'use': {'max': 1342000.0, + 'min': 37.26, + 'value': 40000.0, 'warnings': ['Uncertainty from technical characteristics is ' 'very important. Results should be interpreted ' 'with caution (see min and max values)']}}} From 6175111fbc3e1d7ea5307956ceca808da417926b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:21:25 +0000 Subject: [PATCH 10/14] generate requirements.txt from poetry --- requirements.txt | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1d598d72..1946589e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,30 +1,30 @@ -aiofile==3.9.0 ; python_version >= "3.9" and python_version < "4" -annotated-types==0.7.0 ; python_version >= "3.9" and python_version < "4.0" -anyio==4.7.0 ; python_version >= "3.9" and python_version < "4.0" -caio==0.9.17 ; python_version >= "3.9" and python_version < "4" -click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" -exceptiongroup==1.2.2 ; python_version >= "3.9" and python_version < "3.11" -fastapi==0.115.6 ; python_version >= "3.9" and python_version < "4.0" -h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0" -idna==3.10 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.11.0 ; python_version >= "3.9" and python_version < "4.0" -mangum==0.17.0 ; python_version >= "3.9" and python_version < "4.0" -markdown==3.7 ; python_version >= "3.9" and python_version < "4.0" -numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0" -pandas==2.2.3 ; python_version >= "3.9" and python_version < "4.0" -pydantic-core==2.27.1 ; python_version >= "3.9" and python_version < "4.0" -pydantic==2.10.3 ; python_version >= "3.9" and python_version < "4.0" -python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" -pytz==2024.2 ; python_version >= "3.9" and python_version < "4.0" -pyyaml==6.0.2 ; python_version >= "3.9" and python_version < "4.0" -rapidfuzz==3.10.1 ; python_version >= "3.9" and python_version < "4.0" -scipy==1.13.1 ; python_version >= "3.9" and python_version < "4.0" -six==1.17.0 ; python_version >= "3.9" and python_version < "4.0" -sniffio==1.3.1 ; python_version >= "3.9" and python_version < "4.0" -starlette==0.41.3 ; python_version >= "3.9" and python_version < "4.0" -toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" -typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "4.0" -tzdata==2024.2 ; python_version >= "3.9" and python_version < "4.0" -uvicorn==0.22.0 ; python_version >= "3.9" and python_version < "4.0" -zipp==3.21.0 ; python_version >= "3.9" and python_version < "4.0" +aiofile==3.9.0 ; python_version >= "3.10" and python_version < "4" +annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "4.0" +anyio==4.7.0 ; python_version >= "3.10" and python_version < "4.0" +caio==0.9.17 ; python_version >= "3.10" and python_version < "4" +click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" +exceptiongroup==1.2.2 ; python_version >= "3.10" and python_version < "3.11" +fastapi==0.115.6 ; python_version >= "3.10" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" +idna==3.10 ; python_version >= "3.10" and python_version < "4.0" +importlib-metadata==6.11.0 ; python_version >= "3.10" and python_version < "4.0" +mangum==0.17.0 ; python_version >= "3.10" and python_version < "4.0" +markdown==3.7 ; python_version >= "3.10" and python_version < "4.0" +numpy==2.2.0 ; python_version >= "3.10" and python_version < "4.0" +pandas==2.2.3 ; python_version >= "3.10" and python_version < "4.0" +pydantic-core==2.27.1 ; python_version >= "3.10" and python_version < "4.0" +pydantic==2.10.3 ; python_version >= "3.10" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" +pytz==2024.2 ; python_version >= "3.10" and python_version < "4.0" +pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0" +rapidfuzz==3.10.1 ; python_version >= "3.10" and python_version < "4.0" +scipy==1.14.1 ; python_version >= "3.10" and python_version < "4.0" +six==1.17.0 ; python_version >= "3.10" and python_version < "4.0" +sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0" +starlette==0.41.3 ; python_version >= "3.10" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.10" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "4.0" +tzdata==2024.2 ; python_version >= "3.10" and python_version < "4.0" +uvicorn==0.22.0 ; python_version >= "3.10" and python_version < "4.0" +zipp==3.21.0 ; python_version >= "3.10" and python_version < "4.0" From 4681866023e72996c58a9b81858ade0877ff16d3 Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Fri, 13 Dec 2024 10:27:33 +0100 Subject: [PATCH 11/14] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d46bf2c7..31e895e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "boaviztapi" -version = "1.3.6" +version = "1.3.7" description = "An API to access Boavizta's methodologies and footprint reference data" authors = [] readme = "README.md" From 6ff75d8497b59de3b1185a29e0b17f91bfd0e7a0 Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Fri, 13 Dec 2024 10:28:35 +0100 Subject: [PATCH 12/14] Change life time of AWS servers from 4 to 6 years (#354) (#357) Co-authored-by: David Co-authored-by: Simon Shillaker Co-authored-by: Simon Shillaker <554768+Shillaker@users.noreply.github.com> --- boaviztapi/data/archetypes/server.csv | 240 +++++++++--------- .../data/utils/complete_AWS_EC2/addData.go | 2 +- 2 files changed, 121 insertions(+), 121 deletions(-) diff --git a/boaviztapi/data/archetypes/server.csv b/boaviztapi/data/archetypes/server.csv index 9e26f81b..d3dfbbd8 100644 --- a/boaviztapi/data/archetypes/server.csv +++ b/boaviztapi/data/archetypes/server.csv @@ -16,125 +16,125 @@ platfom_gpucompute_medium,,rack,2,24;18;48,,,,12;10;16,64,1;1;2,1000,0,0,8,,24,2 platfom_gpucompute_high,,rack,2,24;18;48,,,,12;10;16,64,2;1;2,2000,0,0,8,,32,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,Using generic GPU compute platform platfom_gpucompute_veryhigh,,rack,2,24;18;48,,,,14;10;18,64,2;1;2,2000,0,0,8,,80,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,Using generic GPU compute platform dellR740,Dell,rack,2,24,24.5,,48,12,32,1,400,,,,,,2;1;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6, -a1.metal,AWS,rack,1,,,Annapurna Labs Graviton,,2,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5.18xlarge,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5.metal,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5a.24xlarge,AWS,rack,1,,,AMD EPYC 7R32,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5ad.24xlarge,AWS,rack,1,,,AMD EPYC 7R32,,12,16,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5d.18xlarge,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,2,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,12,16,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -g2.8xlarge,AWS,rack,2,,,Intel Xeon E5-2670,,15,4,2,120,0,0,4,K520,4,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -g4dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,2,900,0,0,8,T4,16,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -hs1.8xlarge,AWS,rack,2,,,Intel Xeon E5-2670,,61,4,0,0,2,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -i3.metal,AWS,rack,2,,,Intel Xeon E5-2686 v4,,16,32,8,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -i3en.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,8,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -inf1.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,6,32,0,0,0,0,16,AWS Inferentia,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5a.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5ad.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m5zn.metal,AWS,rack,2,,,Intel Xeon Platinum 8252C,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -mac1.metal,AWS,rack,1,,,Intel Core i7-8700B,,1,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -p3dn.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,2,900,0,0,8,Tesla V100,32,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -p4d.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,36,32,1,8000,0,0,8,Tesla A100,40,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5a.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5ad.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5b.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -ra3.16xlarge,AWS,rack,2,,,Intel Xeon E5-2676 v3,,12,32,0,64000,6,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -u-12tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -u-18tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -u-24tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -u-6tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -u-9tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x1.32xlarge,AWS,rack,4,,,Intel Xeon E7-8880 v3,,61,32,2,1920,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x1e.32xlarge,AWS,rack,4,,,Intel Xeon E7-8880 v3,,61,64,2,1920,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x2gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,64,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -z1d.metal,AWS,rack,2,,,Intel Xeon Platinum 8151,,12,32,2,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;111,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c7gd.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c7gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3E,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -c7i.48xlarge,AWS,rack,6,,,Intel Xeon Platinum 8488C,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -g5.48xlarge,AWS,rack,2,,,AMD EPYC 7R32,,24,32,2,3800,0,0,8,NVIDIA A10G,24,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -g5g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,4,32,0,0,0,0,2,NVIDIA T4G Tensor Core,16,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -hpc7g.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -i4g.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,4,3750,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -i4i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,8,3750,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -im4gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,4,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -inf2.48xlarge,AWS,rack,2,,,AMD EPYC 7R13,,24,32,0,0,0,0,12,AWS Inferentia2,32,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -is4gen.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,12,32,8,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -m7i.48xlarge,AWS,rack,2,,,Intel Xeon Platinum 8488C,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -mac2.metal,AWS,rack,1,,,Apple M1,,1,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -p4de.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,36,32,8,1000,0,0,8,NVIDIA A100,80,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -p5.48xlarge,AWS,rack,2,,,AMD EPYC 7R13,,64,32,8,3800,0,0,8,NVIDIA H100,80,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r7gd.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,16,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -r7iz.32xlarge,AWS,rack,2,,,Intel Xeon Gold 6455B,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -trn1.32xlarge,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,16,AWS Inferentia,32,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -vt1.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,6,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x2idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,64,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x2iedn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,128,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -x2iezn.metal,AWS,rack,2,,,Intel Xeon Platinum 8252C,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_c1,AWS,rack,2,,,Intel Xeon E5-2651 v2,,21,2,4,420,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_c3,AWS,rack,2,,,Intel Xeon E5-2680 v2,,30,2,2,320,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_c4,AWS,rack,2,,,Intel Xeon E5-2666 v3,,30,2,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_cc2,AWS,rack,2,,,Intel Xeon E5-2670,,30,2,4,840,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_cr1,AWS,rack,2,,,Intel Xeon E5-2670,,61,4,2,120,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_d2,AWS,rack,2,,,Intel Xeon E5-2676 v3,,61,4,0,0,24,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_d3,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,8,32,0,0,24,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_d3en,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,6,32,0,0,24,14000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_dc2,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,2,2560,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_dl1,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,24,32,4,1000,0,0,8,Intel Gaudi,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_ds2,AWS,rack,2,,,Intel Xeon E5-2676 v3,,61,4,0,0,1,16000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_f1,AWS,rack,2,,,Intel Xeon E5-2686 v4,,61,16,1,940,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_g4ad,AWS,rack,1,,,AMD EPYC 7R32,,12,32,1,2400,0,0,4,Radeon Pro V520,16,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_h1,AWS,rack,2,,,Intel Xeon E5-2686 v4,,8,32,0,0,8,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_i2,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,8,800,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_m2,AWS,rack,2,,,Intel Xeon E5-2665,,35,8,2,840,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_m3,AWS,rack,2,,,Intel Xeon E5-2670,,30,8,2,80,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_m4-a,AWS,rack,2,,,Intel Xeon E5-2686 v4,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_m4-b,AWS,rack,2,,,Intel Xeon E5-2676 v3,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_m5-b,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_p2,AWS,rack,2,,,Intel Xeon E5-2686 v4,,183,4,0,0,0,0,16,Tesla K80,24,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_p3,AWS,rack,2,,,Intel Xeon E5-2686 v4,,24,32,0,0,0,0,8,Tesla V100,32,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_r3,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,2,320,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_r4,AWS,rack,2,,,Intel Xeon E5-2686 v4,,61,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_t1,AWS,rack,2,,,Intel Xeon E5-2670,,18,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_t2-a,AWS,rack,2,,,Intel Xeon E5-2676 v3,,9,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_t2-b,AWS,rack,2,,,Intel Xeon E5-2686 v4,,36,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_t3,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified -platform_aws_t3a,AWS,rack,2,,,AMD EPYC 7571,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified +a1.metal,AWS,rack,1,,,Annapurna Labs Graviton,,2,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5.18xlarge,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5.metal,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5a.24xlarge,AWS,rack,1,,,AMD EPYC 7R32,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5ad.24xlarge,AWS,rack,1,,,AMD EPYC 7R32,,12,16,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5d.18xlarge,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,2,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,12,16,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8124M,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,8,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +g2.8xlarge,AWS,rack,2,,,Intel Xeon E5-2670,,15,4,2,120,0,0,4,K520,4,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +g4dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,2,900,0,0,8,T4,16,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +hs1.8xlarge,AWS,rack,2,,,Intel Xeon E5-2670,,61,4,0,0,2,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +i3.metal,AWS,rack,2,,,Intel Xeon E5-2686 v4,,16,32,8,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +i3en.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,8,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +inf1.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,6,32,0,0,0,0,16,AWS Inferentia,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5a.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5ad.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m5zn.metal,AWS,rack,2,,,Intel Xeon Platinum 8252C,,12,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +mac1.metal,AWS,rack,1,,,Intel Core i7-8700B,,1,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +p3dn.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,2,900,0,0,8,Tesla V100,32,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +p4d.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,36,32,1,8000,0,0,8,Tesla A100,40,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5.metal,AWS,rack,2,,,Intel Xeon Platinum 8175M,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5a.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5ad.24xlarge,AWS,rack,2,,,AMD EPYC 7571,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5b.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5d.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5dn.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,4,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r5n.metal,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +ra3.16xlarge,AWS,rack,2,,,Intel Xeon E5-2676 v3,,12,32,0,64000,6,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +u-12tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +u-18tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +u-24tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +u-6tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +u-9tb1.metal,AWS,rack,8,,,Intel Xeon Platinum 8176M,,96,256,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x1.32xlarge,AWS,rack,4,,,Intel Xeon E7-8880 v3,,61,32,2,1920,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x1e.32xlarge,AWS,rack,4,,,Intel Xeon E7-8880 v3,,61,64,2,1920,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x2gd.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,16,64,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +z1d.metal,AWS,rack,2,,,Intel Xeon Platinum 8151,,12,32,2,900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;111,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c7gd.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c7gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3E,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +c7i.48xlarge,AWS,rack,6,,,Intel Xeon Platinum 8488C,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +g5.48xlarge,AWS,rack,2,,,AMD EPYC 7R32,,24,32,2,3800,0,0,8,NVIDIA A10G,24,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +g5g.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,4,32,0,0,0,0,2,NVIDIA T4G Tensor Core,16,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +hpc7g.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,4,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +i4g.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,16,32,4,3750,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +i4i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,8,3750,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +im4gn.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,4,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +inf2.48xlarge,AWS,rack,2,,,AMD EPYC 7R13,,24,32,0,0,0,0,12,AWS Inferentia2,32,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +is4gen.metal,AWS,rack,1,,,Annapurna Labs Graviton2,,12,32,8,7500,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +m7i.48xlarge,AWS,rack,2,,,Intel Xeon Platinum 8488C,,24,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +mac2.metal,AWS,rack,1,,,Apple M1,,1,16,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +p4de.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,36,32,8,1000,0,0,8,NVIDIA A100,80,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +p5.48xlarge,AWS,rack,2,,,AMD EPYC 7R13,,64,32,8,3800,0,0,8,NVIDIA H100,80,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6a.metal,AWS,rack,2,,,AMD EPYC 7R13,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6i.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6id.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,4,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r6in.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r7a.metal-48xl,AWS,rack,2,,,AMD EPYC 9R14,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r7g.metal,AWS,rack,1,,,Annapurna Labs Graviton3,,16,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r7gd.16xlarge,AWS,rack,1,,,Annapurna Labs Graviton3,,16,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +r7iz.32xlarge,AWS,rack,2,,,Intel Xeon Gold 6455B,,32,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +trn1.32xlarge,AWS,rack,2,,,Intel Xeon Platinum 8375C,,16,32,4,1900,0,0,16,AWS Inferentia,32,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +vt1.24xlarge,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,6,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x2idn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,64,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x2iedn.metal,AWS,rack,2,,,Intel Xeon Platinum 8375C,,128,32,2,1900,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +x2iezn.metal,AWS,rack,2,,,Intel Xeon Platinum 8252C,,48,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_c1,AWS,rack,2,,,Intel Xeon E5-2651 v2,,21,2,4,420,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_c3,AWS,rack,2,,,Intel Xeon E5-2680 v2,,30,2,2,320,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_c4,AWS,rack,2,,,Intel Xeon E5-2666 v3,,30,2,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_cc2,AWS,rack,2,,,Intel Xeon E5-2670,,30,2,4,840,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_cr1,AWS,rack,2,,,Intel Xeon E5-2670,,61,4,2,120,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_d2,AWS,rack,2,,,Intel Xeon E5-2676 v3,,61,4,0,0,24,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_d3,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,8,32,0,0,24,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_d3en,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,6,32,0,0,24,14000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_dc2,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,2,2560,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_dl1,AWS,rack,2,,,Intel Xeon Platinum 8275CL,,24,32,4,1000,0,0,8,Intel Gaudi,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_ds2,AWS,rack,2,,,Intel Xeon E5-2676 v3,,61,4,0,0,1,16000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_f1,AWS,rack,2,,,Intel Xeon E5-2686 v4,,61,16,1,940,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_g4ad,AWS,rack,1,,,AMD EPYC 7R32,,12,32,1,2400,0,0,4,Radeon Pro V520,16,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_h1,AWS,rack,2,,,Intel Xeon E5-2686 v4,,8,32,0,0,8,2000,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_i2,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,8,800,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_m2,AWS,rack,2,,,Intel Xeon E5-2665,,35,8,2,840,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_m3,AWS,rack,2,,,Intel Xeon E5-2670,,30,8,2,80,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_m4-a,AWS,rack,2,,,Intel Xeon E5-2686 v4,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_m4-b,AWS,rack,2,,,Intel Xeon E5-2676 v3,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_m5-b,AWS,rack,2,,,Intel Xeon Platinum 8259CL,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_p2,AWS,rack,2,,,Intel Xeon E5-2686 v4,,183,4,0,0,0,0,16,Tesla K80,24,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_p3,AWS,rack,2,,,Intel Xeon E5-2686 v4,,24,32,0,0,0,0,8,Tesla V100,32,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_r3,AWS,rack,2,,,Intel Xeon E5-2670 v2,,61,4,2,320,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_r4,AWS,rack,2,,,Intel Xeon E5-2686 v4,,61,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_t1,AWS,rack,2,,,Intel Xeon E5-2670,,18,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_t2-a,AWS,rack,2,,,Intel Xeon E5-2676 v3,,9,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_t2-b,AWS,rack,2,,,Intel Xeon E5-2686 v4,,36,8,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_t3,AWS,rack,2,,,Intel Xeon Platinum 8175M,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified +platform_aws_t3a,AWS,rack,2,,,AMD EPYC 7571,,12,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified Dadsv5-Type1,Azure,rack,1.0,,,AMD EPYC 7763,,48.0,16.0,3.0,2048.0,0.0,0.0,0.0,,,2;2;2,2.99;1;5,50;0;100,1,52560.0,0.33;0.2;0.6,RAM units and per unit capacity not verified. RAM capacity from Azure docs was: 768 GiB Dasv4-Type2,Azure,rack,1.0,,,AMD EPYC 7763,,48.0,16.0,1.0,2048.0,0.0,0.0,0.0,,,2;2;2,2.99;1;5,50;0;100,1,52560.0,0.33;0.2;0.6,RAM units and per unit capacity not verified. RAM capacity from Azure docs was: 768 GiB Dasv4-Type1,Azure,rack,2.0,,,AMD EPYC 7452,,42.0,16.0,1.0,2048.0,0.0,0.0,0.0,,,2;2;2,2.99;1;5,50;0;100,1,52560.0,0.33;0.2;0.6,RAM units and per unit capacity not verified. RAM capacity from Azure docs was: 672 GiB @@ -201,4 +201,4 @@ scw_pop2hm.base,Scaleway,rack,2,32,,AMD EPYC 7543,128,16,32,2,234,0,0,0,,0,2,0,5 scw_pro2.base,Scaleway,rack,2,32,,AMD EPYC 7543,128,24,32,2,468,0,0,0,,0,2,0,50;0;100,1,52560,0.33;0.2;0.6, scw_renders.base,Scaleway,rack,2,20,,Intel Xeon Gold 6148,40,12,32,2,3750,0,0,8,Nvidia Tesla P100,24,4,0,50;0;100,1,52560,0.33;0.2;0.6, scw_stardust1.base,Scaleway,rack,1,16,,AMD EPYC 7281,64,8,32,5,976,0,0,0,,0,2,0,50;0;100,1,52560,0.33;0.2;0.6, -platform_aws_t4g,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,35040,0.33;0.2;0.6,RAM configuration was not verified \ No newline at end of file +platform_aws_t4g,AWS,rack,1,,,Annapurna Labs Graviton2,,8,32,0,0,0,0,0,,0,2;2;2,2.99;1;5,50;0;100,1,52560,0.33;0.2;0.6,RAM configuration was not verified \ No newline at end of file diff --git a/boaviztapi/data/utils/complete_AWS_EC2/addData.go b/boaviztapi/data/utils/complete_AWS_EC2/addData.go index ebe06a04..a08a1b79 100644 --- a/boaviztapi/data/utils/complete_AWS_EC2/addData.go +++ b/boaviztapi/data/utils/complete_AWS_EC2/addData.go @@ -838,7 +838,7 @@ func getUsageUseTimeRatio(instance VantageExport) string { } func getUsageHoursLifeTime(instance VantageExport) string { - return "35040" // 4 years + return "52560" // 6 years } func getUsageOtherConsumptionRatio(instance VantageExport) string { From 577d0c074ee70cb69f4b72a5fd2b984e5aaf5e9c Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Fri, 13 Dec 2024 10:41:03 +0100 Subject: [PATCH 13/14] Delete .github/workflows/build_client.yml --- .github/workflows/build_client.yml | 66 ------------------------------ 1 file changed, 66 deletions(-) delete mode 100644 .github/workflows/build_client.yml diff --git a/.github/workflows/build_client.yml b/.github/workflows/build_client.yml deleted file mode 100644 index 5adfb941..00000000 --- a/.github/workflows/build_client.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: build_client_sdk - -# Disable automatic triggring of this legacy workflow (replaced by build_client_sdk_with_poetry) -on: workflow_dispatch - -# on: -# push: -# tags: -# - '*' -# paths-ignore: -# - 'docs/**' -# - 'test/**' -# - 'README.md' -# - 'CHANGELOG.md' -# - 'LICENSE' -# - 'Dockerfile' -# - 'CITATION' -# - 'book.toml' -# - 'CONTRIBUTING.md' - -env: - CARGO_TERM_COLOR: always - -jobs: - build: - name: build_python_client_sdk - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install python dependencies - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - name: Install requirements - run: | - sudo apt update -y - sudo apt install docker.io containerd runc wget python3-pip -y - pip3 install pipenv twine - - name: Run the API locally - run: | - python3 setup.py sdist - API_VERSION=$(cat boaviztapi/__init__.py | cut -d "'" -f 2) - echo "API_VERSION=${API_VERSION}" >> $GITHUB_ENV - docker build --build-arg VERSION=${API_VERSION} . --file Dockerfile --tag boaviztapi:latest - docker run -p "5000:5000" --name=boaviztapi -tid boaviztapi:latest - - name: Get logs from the API container in case of a failure - run: | - docker logs boaviztapi - - name: Get the openapi.json definition and generate the code - run: | - while [[ ! $(docker ps | grep boaviztapi) ]]; do sleep 1; echo "Waiting for BoaviztAPI container to boot"; done - wget http://127.0.0.1:5000/openapi.json - docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli generate -i /local/openapi.json -g python -o /local/boaviztapi_sdk --package-name boaviztapi_sdk - - name: Build the pip package and push it - run: | - sudo chown -R $(whoami) boaviztapi_sdk - SDK_VERSION=${{ env.API_VERSION }} - echo "SDK_VERSION == ${SDK_VERSION}" - cd boaviztapi_sdk - sed -i "s/^VERSION.*/VERSION = \"${SDK_VERSION}\"/" setup.py - sed -i "s/^ long_description=.*/long_description='Python SDK for boaviztAPI'/" setup.py - sed -i 's/ #.*//' setup.py - sed -i 's/ """.*//' setup.py - python3 setup.py sdist - pipenv run twine upload --repository pypi --username __token__ --password ${{ secrets.BPETIT_SECRET_PYPI_TOKEN }} dist/* From d75b34c4b8471f17c1dfc560d145a58c487344eb Mon Sep 17 00:00:00 2001 From: David Ekchajzer Date: Fri, 13 Dec 2024 10:41:11 +0100 Subject: [PATCH 14/14] Delete .github/workflows/build_client_sdk_with_poetry.yml --- .../build_client_sdk_with_poetry.yml | 84 ------------------- 1 file changed, 84 deletions(-) delete mode 100644 .github/workflows/build_client_sdk_with_poetry.yml diff --git a/.github/workflows/build_client_sdk_with_poetry.yml b/.github/workflows/build_client_sdk_with_poetry.yml deleted file mode 100644 index 28f1c57b..00000000 --- a/.github/workflows/build_client_sdk_with_poetry.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: build_client_sdk_with_poetry - -on: - push: - tags: - - '*' - paths-ignore: - - 'docs/**' - - 'test/**' - - 'README.md' - - 'CHANGELOG.md' - - 'LICENSE' - - 'Dockerfile' - - 'CITATION' - - 'book.toml' - - 'CONTRIBUTING.md' - -env: - CARGO_TERM_COLOR: always - -jobs: - build: - name: build_python_client_sdk - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - - name: Install pipenv - run: | - python -m pip install --upgrade poetry wheel twine - - - id: cache-pipenv - uses: actions/cache@v4 - with: - path: ~/.local/share/virtualenvs - key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }} - - - name: Install dependencies - if: steps.cache-pipenv.outputs.cache-hit != 'true' - run: | - make install - - - name: Build local api package - run: make build - - - name: Build the api Docker image - run: docker build --build-arg VERSION=$(poetry version -s) . --file Dockerfile --tag boaviztapi:latest - - - name: Run the API locally - run: | - docker run -p "5000:5000" --name=boaviztapi -tid boaviztapi:latest - - - name: Get logs from the API container in case of a failure - run: | - docker logs boaviztapi - - - name: Get the openapi.json definition and generate the code - run: | - while [[ ! $(docker ps | grep boaviztapi) ]]; do sleep 1; echo "Waiting for BoaviztAPI container to boot"; done - wget http://127.0.0.1:5000/openapi.json - docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli generate -i /local/openapi.json -g python -o /local/boaviztapi_sdk --package-name boaviztapi_sdk - - # Publish client SDK package - - name: Build the pip package and push it - run: | - sudo chown -R $(whoami) boaviztapi_sdk - SDK_VERSION=$(poetry version -s) - echo "SDK_VERSION == ${SDK_VERSION}" - cd boaviztapi_sdk - sed -i "s/^VERSION.*/VERSION = \"${SDK_VERSION}\"/" setup.py - sed -i "s/^ long_description=.*/ long_description='Python SDK for boaviztAPI',/" setup.py - sed -i '/ <p>.*/d' setup.py - sed -i '/ """.*/d' setup.py - python3 setup.py sdist - # Publish - pip3 install pipenv twine - pipenv run twine upload --repository pypi --username __token__ --password ${{ secrets.BPETIT_SECRET_PYPI_TOKEN }} dist/* -