From 41093bdd1de1f386557c7ef3178650dc430412cc Mon Sep 17 00:00:00 2001 From: mhucka Date: Mon, 15 Dec 2025 03:34:30 +0000 Subject: [PATCH 01/11] Add additional version constraints to requirements file This adds additional version constraints on dependencies that are necessary to generate a requirements.txt file that works with TensorFlow 2.16.2 and tf-keras. --- requirements.in | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/requirements.in b/requirements.in index 92c987272..c168b8827 100644 --- a/requirements.in +++ b/requirements.in @@ -18,14 +18,18 @@ # scripts/generate_requirements.sh. cirq-core~=1.3.0 cirq-google~=1.3.0 +numpy<2.0 tensorflow>=2.16,<2.17 tf-keras~=2.16.0 +scipy<=1.12.0 +sympy==1.14 -# TODO: the next ones are not truly core requirements. A better place should be -# found for them (long with others needed by scripts/*). They're here as a -# stop-gap measure until then. -yapf==0.43.0 -pylint==3.3.3 -nbformat==5.1.3 -nbclient==0.6.5 -tensorflow-docs +# This needs to match what TensorFlow uses to avoid problems with distutils. +setuptools==68.2.2 + +# The rest are transitive dependencies that need to be constrained either +# because pip may try to install incompatible versions, or the higher versions +# require Python 3.11+ and we want to maintain Python 3.10 compatibility. +jax<=0.5 +contourpy<=1.3.2; python_version < "3.11" +networkx<=3.4; python_version < "3.11" From b967ebac26397cf7647dfc016104fe21ff6fd08e Mon Sep 17 00:00:00 2001 From: mhucka Date: Mon, 15 Dec 2025 03:48:37 +0000 Subject: [PATCH 02/11] Remove python_version constraints The python_version actually means the constraint only applies to that Python version. We need the packages installed no matter the Python version; we just need the constraint on Python < 3.11. It's simpler and still works to not add the python_version, so let's just remove them. --- requirements.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index c168b8827..18e52d8f7 100644 --- a/requirements.in +++ b/requirements.in @@ -31,5 +31,5 @@ setuptools==68.2.2 # because pip may try to install incompatible versions, or the higher versions # require Python 3.11+ and we want to maintain Python 3.10 compatibility. jax<=0.5 -contourpy<=1.3.2; python_version < "3.11" -networkx<=3.4; python_version < "3.11" +contourpy<=1.3.2 +networkx<=3.4 From 911dd9df969871373f65e48f1652c47297b99355 Mon Sep 17 00:00:00 2001 From: mhucka Date: Mon, 15 Dec 2025 03:35:05 +0000 Subject: [PATCH 03/11] Update requirements.txt based on requiremets.in This is the output of running pip-compile on requirements.in. --- requirements.txt | 141 +++++++++++++++-------------------------------- 1 file changed, 44 insertions(+), 97 deletions(-) diff --git a/requirements.txt b/requirements.txt index ac86eb121..c427bfcab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,27 +1,17 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-strip-extras +# ./scripts/generate_requirements.sh # - -absl-py==2.1.0 +absl-py==2.3.1 # via # keras # tensorboard # tensorflow - # tensorflow-docs -astor==0.8.1 - # via tensorflow-docs -astroid==3.3.11 - # via pylint astunparse==1.6.3 # via tensorflow -attrs==25.4.0 - # via - # jsonschema - # referencing -cachetools==6.2.2 +cachetools==6.2.3 # via google-auth certifi==2025.11.12 # via requests @@ -34,18 +24,18 @@ cirq-core==1.3.0 cirq-google==1.3.0 # via -r requirements.in contourpy==1.3.2 - # via matplotlib + # via + # -r requirements.in + # matplotlib cycler==0.12.1 # via matplotlib -dill==0.4.0 - # via pylint duet==0.2.9 # via cirq-core flatbuffers==25.9.23 # via tensorflow -fonttools==4.60.1 +fonttools==4.61.1 # via matplotlib -gast==0.6.0 +gast==0.7.0 # via tensorflow google-api-core[grpc]==2.28.1 # via cirq-google @@ -57,13 +47,13 @@ googleapis-common-protos==1.72.0 # via # google-api-core # grpcio-status -grpcio==1.60.2 +grpcio==1.76.0 # via # google-api-core # grpcio-status # tensorboard # tensorflow -grpcio-status==1.60.2 +grpcio-status==1.62.3 # via google-api-core h5py==3.15.1 # via @@ -71,22 +61,10 @@ h5py==3.15.1 # tensorflow idna==3.11 # via requests -ipython-genutils==0.2.0 - # via nbformat -isort==5.13.2 - # via pylint -jinja2==3.1.6 - # via tensorflow-docs -jsonschema==4.25.1 - # via nbformat -jsonschema-specifications==2025.9.1 - # via jsonschema -jupyter-client==8.6.3 - # via nbclient -jupyter-core==5.9.1 - # via - # jupyter-client - # nbformat +jax==0.4.34 + # via -r requirements.in +jaxlib==0.4.34 + # via jax keras==3.12.0 # via tensorflow kiwisolver==1.4.9 @@ -98,39 +76,33 @@ markdown==3.10 markdown-it-py==4.0.0 # via rich markupsafe==3.0.3 - # via - # jinja2 - # werkzeug -matplotlib==3.10.7 + # via werkzeug +matplotlib==3.10.8 # via cirq-core -mccabe==0.7.0 - # via pylint mdurl==0.1.2 # via markdown-it-py ml-dtypes==0.3.2 # via + # jax + # jaxlib # keras # tensorflow mpmath==1.3.0 # via sympy namex==0.1.0 # via keras -nbclient==0.6.5 - # via -r requirements.in -nbformat==5.1.3 +networkx==3.4 # via # -r requirements.in - # nbclient - # tensorflow-docs -nest-asyncio==1.6.0 - # via nbclient -networkx==3.4.2 - # via cirq-core + # cirq-core numpy==1.26.4 # via + # -r requirements.in # cirq-core # contourpy # h5py + # jax + # jaxlib # keras # matplotlib # ml-dtypes @@ -139,7 +111,9 @@ numpy==1.26.4 # tensorboard # tensorflow opt-einsum==3.4.0 - # via tensorflow + # via + # jax + # tensorflow optree==0.18.0 # via keras packaging==25.0 @@ -147,15 +121,11 @@ packaging==25.0 # keras # matplotlib # tensorflow + # wheel pandas==2.3.3 # via cirq-core pillow==12.0.0 # via matplotlib -platformdirs==4.5.0 - # via - # jupyter-core - # pylint - # yapf proto-plus==1.26.1 # via # cirq-google @@ -169,7 +139,6 @@ protobuf==4.25.8 # proto-plus # tensorboard # tensorflow - # tensorflow-docs pyasn1==0.6.1 # via # pyasn1-modules @@ -178,39 +147,28 @@ pyasn1-modules==0.4.2 # via google-auth pygments==2.19.2 # via rich -pylint==3.3.3 - # via -r requirements.in pyparsing==3.2.5 # via matplotlib python-dateutil==2.9.0.post0 # via - # jupyter-client # matplotlib # pandas pytz==2025.2 # via pandas -pyyaml - # via tensorflow-docs -pyzmq==27.1.0 - # via jupyter-client -referencing==0.37.0 - # via - # jsonschema - # jsonschema-specifications requests==2.32.5 # via # google-api-core # tensorflow rich==14.2.0 # via keras -rpds-py==0.29.0 - # via - # jsonschema - # referencing rsa==4.9.1 # via google-auth -scipy==1.15.3 - # via cirq-core +scipy==1.12.0 + # via + # -r requirements.in + # cirq-core + # jax + # jaxlib six==1.17.0 # via # astunparse @@ -221,7 +179,9 @@ six==1.17.0 sortedcontainers==2.4.0 # via cirq-core sympy==1.14.0 - # via cirq-core + # via + # -r requirements.in + # cirq-core tensorboard==2.16.2 # via tensorflow tensorboard-data-server==0.7.2 @@ -230,47 +190,34 @@ tensorflow==2.16.2 # via # -r requirements.in # tf-keras -tensorflow-docs==2025.2.19.33219 - # via -r requirements.in tensorflow-io-gcs-filesystem==0.37.1 # via tensorflow termcolor==3.2.0 # via tensorflow tf-keras==2.16.0 # via -r requirements.in -tomlkit==0.13.3 - # via pylint -tornado==6.5.2 - # via jupyter-client tqdm==4.67.1 # via cirq-core -traitlets==5.14.3 - # via - # jupyter-client - # jupyter-core - # nbclient - # nbformat typing-extensions==4.15.0 # via # cirq-core + # grpcio # optree - # referencing # tensorflow -tzdata==2025.2 +tzdata==2025.3 # via pandas -urllib3==2.5.0 +urllib3==2.6.2 # via requests -werkzeug==3.1.3 +werkzeug==3.1.4 # via tensorboard -wheel==0.45.1 +wheel==0.46.1 # via astunparse -wrapt==1.17.3 +wrapt==2.0.1 # via tensorflow -yapf==0.43.0 - # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: setuptools==68.2.2 # via + # -r requirements.in # tensorboard # tensorflow From ca41ab5ff175b96a35d0e419aaf9cd7942d2436b Mon Sep 17 00:00:00 2001 From: mhucka Date: Tue, 23 Dec 2025 23:45:18 +0000 Subject: [PATCH 04/11] Update requirements.in to work for Python 3.9 This adds more constraints so that the result works on Python 3.9. --- requirements.in | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/requirements.in b/requirements.in index 18e52d8f7..10774615a 100644 --- a/requirements.in +++ b/requirements.in @@ -24,12 +24,19 @@ tf-keras~=2.16.0 scipy<=1.12.0 sympy==1.14 -# This needs to match what TensorFlow uses to avoid problems with distutils. -setuptools==68.2.2 +# This version is needed to build & work with Python 3.9. +setuptools==58.1.0 # The rest are transitive dependencies that need to be constrained either # because pip may try to install incompatible versions, or the higher versions -# require Python 3.11+ and we want to maintain Python 3.10 compatibility. -jax<=0.5 -contourpy<=1.3.2 -networkx<=3.4 +# require Python 3.10+ and we want to maintain Python 3.9 compatibility. +contourpy<=1.3.0 +h5py==3.10.0 +importlib_metadata<5 +jax<0.4.24 +jaxlib<0.4.24 +matplotlib<3.10 +networkx<3.3 +pillow<=11.0 +protobuf==4.25.8 +wrapt<2 From 90a13c14d61a2d25bf6c9feaffa77de9130e72e5 Mon Sep 17 00:00:00 2001 From: mhucka Date: Tue, 23 Dec 2025 23:46:13 +0000 Subject: [PATCH 05/11] Improve scripts/generate_requirements.txt --- scripts/generate_requirements.sh | 43 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/scripts/generate_requirements.sh b/scripts/generate_requirements.sh index 8868273e7..fc73dd357 100755 --- a/scripts/generate_requirements.sh +++ b/scripts/generate_requirements.sh @@ -15,29 +15,36 @@ # ============================================================================== # Summary: produce requirements.txt using pip-compile & munging the result. -# Usage: ./generate_requirements.sh +# Usage: ./scripts/generate_requirements.sh -set -eu +set -eo pipefail -# Find the top of the local TFQ git tree. Do it early in case this fails. -thisdir=$(CDPATH="" cd -- "$(dirname -- "$0")" && pwd -P) -repo_dir=$(git -C "${thisdir}" rev-parse --show-toplevel 2>/dev/null || \ - echo "${thisdir}/..") +# Go to the top of the local TFQ git tree. Do it early in case this fails. +thisdir=$(CDPATH="" cd -- "$(dirname -- "${0}")" && pwd -P) +repo_dir=$(git -C "${thisdir}" rev-parse --show-toplevel 2>/dev/null) +cd "${repo_dir}" -echo "Running pip-compile in ${repo_dir} …" -pip-compile -q --no-strip-extras --allow-unsafe +if ! pip show -qq pip-tools; then + echo "Error: 'pip-compile' not found. Please install 'pip-tools'." >&2 + exit 1 +fi -declare -a inplace_edit=(-i) -if [[ "$(uname -s)" == "Darwin" ]]; then - # macOS uses BSD sed, which requires a suffix for -i. - inplace_edit+=('') +# Don't force the use of a constraint file, but use it if exists. +declare -a constraint=() +pins_file="$(realpath --relative-to=. "${repo_dir}/requirements-pins.txt")" +if [[ -e "${pins_file}" ]]; then + constraint+=(--constraint "${pins_file}") fi -echo "Adjusting output of pip-compile …" -sed "${inplace_edit[@]}" \ - -e '/^--index-url/d' \ - -e '/^--extra-index-url/d' \ - -e 's/^pyyaml==.*/pyyaml/' \ - requirements.txt +# Tell pip-compile to reference this script in the requirements.txt header. +export CUSTOM_COMPILE_COMMAND="${0}" + +echo "Running pip-compile in ${repo_dir} …" +pip-compile -q \ + --rebuild \ + --allow-unsafe \ + --no-strip-extras \ + --no-emit-index-url \ + "${constraint[@]}" echo "Done." From 605b5e55921479034d7393e5b066e070f621d011 Mon Sep 17 00:00:00 2001 From: mhucka Date: Tue, 23 Dec 2025 23:46:35 +0000 Subject: [PATCH 06/11] Update requirements.txt based on latest requirements.in This version works with Python 3.9. --- requirements.txt | 82 +++++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 29 deletions(-) diff --git a/requirements.txt b/requirements.txt index c427bfcab..975fedf43 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.9 # by the following command: # # ./scripts/generate_requirements.sh @@ -11,7 +11,7 @@ absl-py==2.3.1 # tensorflow astunparse==1.6.3 # via tensorflow -cachetools==6.2.3 +cachetools==6.2.4 # via google-auth certifi==2025.11.12 # via requests @@ -23,7 +23,7 @@ cirq-core==1.3.0 # cirq-google cirq-google==1.3.0 # via -r requirements.in -contourpy==1.3.2 +contourpy==1.3.0 # via # -r requirements.in # matplotlib @@ -31,15 +31,17 @@ cycler==0.12.1 # via matplotlib duet==0.2.9 # via cirq-core -flatbuffers==25.9.23 +flatbuffers==25.12.19 # via tensorflow -fonttools==4.61.1 - # via matplotlib +fonttools==4.60.2 + # via + # -c requirements-pins.txt + # matplotlib gast==0.7.0 # via tensorflow google-api-core[grpc]==2.28.1 # via cirq-google -google-auth==2.43.0 +google-auth==2.45.0 # via google-api-core google-pasta==0.2.0 # via tensorflow @@ -55,30 +57,40 @@ grpcio==1.76.0 # tensorflow grpcio-status==1.62.3 # via google-api-core -h5py==3.15.1 +h5py==3.10.0 # via + # -r requirements.in # keras # tensorflow idna==3.11 # via requests -jax==0.4.34 +importlib-metadata==4.13.0 + # via + # -r requirements.in + # jax + # markdown +importlib-resources==6.5.2 + # via matplotlib +jax==0.4.23 + # via -r requirements.in +jaxlib==0.4.23 # via -r requirements.in -jaxlib==0.4.34 - # via jax -keras==3.12.0 +keras==3.10.0 # via tensorflow -kiwisolver==1.4.9 +kiwisolver==1.4.7 # via matplotlib libclang==18.1.1 # via tensorflow -markdown==3.10 +markdown==3.9 # via tensorboard -markdown-it-py==4.0.0 +markdown-it-py==3.0.0 # via rich markupsafe==3.0.3 # via werkzeug -matplotlib==3.10.8 - # via cirq-core +matplotlib==3.9.4 + # via + # -r requirements.in + # cirq-core mdurl==0.1.2 # via markdown-it-py ml-dtypes==0.3.2 @@ -91,7 +103,7 @@ mpmath==1.3.0 # via sympy namex==0.1.0 # via keras -networkx==3.4 +networkx==3.2.1 # via # -r requirements.in # cirq-core @@ -121,17 +133,19 @@ packaging==25.0 # keras # matplotlib # tensorflow - # wheel pandas==2.3.3 # via cirq-core -pillow==12.0.0 - # via matplotlib -proto-plus==1.26.1 +pillow==11.0.0 + # via + # -r requirements.in + # matplotlib +proto-plus==1.27.0 # via # cirq-google # google-api-core protobuf==4.25.8 # via + # -r requirements.in # cirq-google # google-api-core # googleapis-common-protos @@ -192,7 +206,7 @@ tensorflow==2.16.2 # tf-keras tensorflow-io-gcs-filesystem==0.37.1 # via tensorflow -termcolor==3.2.0 +termcolor==3.1.0 # via tensorflow tf-keras==2.16.0 # via -r requirements.in @@ -207,16 +221,26 @@ typing-extensions==4.15.0 tzdata==2025.3 # via pandas urllib3==2.6.2 - # via requests + # via + # -c requirements-pins.txt + # requests werkzeug==3.1.4 - # via tensorboard -wheel==0.46.1 + # via + # -c requirements-pins.txt + # tensorboard +wheel==0.45.1 # via astunparse -wrapt==2.0.1 - # via tensorflow +wrapt==1.17.3 + # via + # -r requirements.in + # tensorflow +zipp==3.23.0 + # via + # importlib-metadata + # importlib-resources # The following packages are considered to be unsafe in a requirements file: -setuptools==68.2.2 +setuptools==58.1.0 # via # -r requirements.in # tensorboard From 2e5188fed91c0303674545607cd1dbf71a9d26dc Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 15 Jan 2026 22:06:01 +0000 Subject: [PATCH 07/11] Undo the "set -eu" change because it's not needed After other changes in this script, using `set -eo pipefail` turns out to be unnecessary. Let's go back to what was there before to slightly reduce the noise in the diff. --- scripts/generate_requirements.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_requirements.sh b/scripts/generate_requirements.sh index fc73dd357..6212f1d74 100755 --- a/scripts/generate_requirements.sh +++ b/scripts/generate_requirements.sh @@ -17,7 +17,7 @@ # Summary: produce requirements.txt using pip-compile & munging the result. # Usage: ./scripts/generate_requirements.sh -set -eo pipefail +set -eu # Go to the top of the local TFQ git tree. Do it early in case this fails. thisdir=$(CDPATH="" cd -- "$(dirname -- "${0}")" && pwd -P) From 28a11a02201282dbfff645b4b2d22c4aebd35518 Mon Sep 17 00:00:00 2001 From: mhucka Date: Sat, 31 Jan 2026 01:40:06 +0000 Subject: [PATCH 08/11] Work around a problem with pyyaml The PyYAML library causes a lot of problems at `pip install` time; on some python & platform combos, it tries to uninstall an existing pyyaml that comes with the distutils package, and fails, with the result that the whole installation fails. Pyyaml is a transitive dependency brought in by something else and not something TFQ needs. The best solution I can come up with is to use pip-compile's feature for "unsafe" packages to leave pyyaml out of requirements.txt. --- scripts/generate_requirements.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/generate_requirements.sh b/scripts/generate_requirements.sh index 6212f1d74..07e25767a 100755 --- a/scripts/generate_requirements.sh +++ b/scripts/generate_requirements.sh @@ -29,22 +29,25 @@ if ! pip show -qq pip-tools; then exit 1 fi +# Special case: don't pin PyYAML in requirements.txt, because its inclusion can +# lead to pip trying to uninstall an existing version installed by distutils. +declare -a constraints=() +constraints+=(--unsafe-package pyyaml) + # Don't force the use of a constraint file, but use it if exists. -declare -a constraint=() pins_file="$(realpath --relative-to=. "${repo_dir}/requirements-pins.txt")" if [[ -e "${pins_file}" ]]; then - constraint+=(--constraint "${pins_file}") + constraints+=(--constraints "${pins_file}") fi -# Tell pip-compile to reference this script in the requirements.txt header. +# Have pip-compile mention this script in the requirements.txt header it writes. export CUSTOM_COMPILE_COMMAND="${0}" echo "Running pip-compile in ${repo_dir} …" pip-compile -q \ --rebuild \ - --allow-unsafe \ --no-strip-extras \ --no-emit-index-url \ - "${constraint[@]}" + "${constraints[@]}" echo "Done." From d37f19de112d06168c4331d1bae92073bcf855b3 Mon Sep 17 00:00:00 2001 From: mhucka Date: Sat, 31 Jan 2026 01:40:18 +0000 Subject: [PATCH 09/11] Reduce requirements as much as possible & add dev requirements --- requirements.in | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/requirements.in b/requirements.in index 10774615a..9d915088f 100644 --- a/requirements.in +++ b/requirements.in @@ -16,27 +16,24 @@ # Core development requirements for TensorFlow Quantum. This file is processed # by pip-compile (from pip-tools) to produce requirements.txt using the script # scripts/generate_requirements.sh. + cirq-core~=1.3.0 cirq-google~=1.3.0 +jax<0.5 +jaxlib<0.5 +keras==3.12.0 numpy<2.0 -tensorflow>=2.16,<2.17 -tf-keras~=2.16.0 -scipy<=1.12.0 +scipy~=1.15.3 sympy==1.14 +setuptools>58 +tensorflow>=2.17,<2.18 +tf-keras~=2.17.0 -# This version is needed to build & work with Python 3.9. -setuptools==58.1.0 - -# The rest are transitive dependencies that need to be constrained either -# because pip may try to install incompatible versions, or the higher versions -# require Python 3.10+ and we want to maintain Python 3.9 compatibility. -contourpy<=1.3.0 -h5py==3.10.0 -importlib_metadata<5 -jax<0.4.24 -jaxlib<0.4.24 -matplotlib<3.10 -networkx<3.3 -pillow<=11.0 -protobuf==4.25.8 -wrapt<2 +# TODO: the next ones are not truly core requirements. A better place should be +# found for them (long with others needed by scripts/*). They're here as a +# stop-gap measure until then. +yapf==0.43.0 +pylint==3.3.3 +nbformat==5.1.3 +nbclient==0.6.5 +tensorflow-docs From 84e1608b442aaefba6f48a204ac117f3ab6c1d17 Mon Sep 17 00:00:00 2001 From: mhucka Date: Sat, 31 Jan 2026 01:40:26 +0000 Subject: [PATCH 10/11] Latest version produced by generate_requirements.sh --- requirements.txt | 466 +++++++++++++---------------------------------- 1 file changed, 131 insertions(+), 335 deletions(-) diff --git a/requirements.txt b/requirements.txt index 95f2a8ac7..63d6c7fbb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # ./scripts/generate_requirements.sh @@ -9,165 +9,48 @@ absl-py==2.3.1 # keras # tensorboard # tensorflow + # tensorflow-docs +astor==0.8.1 + # via tensorflow-docs +astroid==3.3.11 + # via pylint astunparse==1.6.3 # via tensorflow -cachetools==6.2.4 - # via google-auth -certifi==2025.11.12 +attrs==25.4.0 + # via + # jsonschema + # referencing +certifi==2026.1.4 # via requests -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.4 # via requests -cirq-core==1.3.0 \ - --hash=sha256:d46771ddf4adb0867d3fb6da8c4484b73bada5bfaa58c19e2444aa8838270fd9 +cirq-core==1.3.0 # via # -r requirements.in # cirq-google -cirq-google==1.3.0 \ - --hash=sha256:aa802887679f64ef8359f77d5bbd5bb98dc076c35c152c3b7f172c6e09d4e667 +cirq-google==1.3.0 # via -r requirements.in contourpy==1.3.0 - # via - # -r requirements.in - # matplotlib + # via matplotlib cycler==0.12.1 # via matplotlib +dill==0.4.1 + # via pylint duet==0.2.9 # via cirq-core flatbuffers==25.12.19 # via tensorflow fonttools==4.60.2 - # via - # -c requirements-pins.txt - # matplotlib + # via matplotlib gast==0.7.0 # via tensorflow -google-api-core[grpc]==2.29.0 \ - --hash=sha256:84181be0f8e6b04006df75ddfe728f24489f0af57c96a529ff7cf45bc28797f7 \ - --hash=sha256:d30bc60980daa36e314b5d5a3e5958b0200cb44ca8fa1be2b614e932b75a3ea9 +google-api-core[grpc]==2.29.0 # via cirq-google -google-auth==2.45.0 +google-auth==2.47.0 # via google-api-core -google-pasta==0.2.0 \ - --hash=sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954 \ - --hash=sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed \ - --hash=sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e +google-pasta==0.2.0 # via tensorflow -googleapis-common-protos==1.72.0 \ - --hash=sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038 \ - --hash=sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5 +googleapis-common-protos==1.72.0 # via # google-api-core # grpcio-status @@ -181,87 +64,75 @@ grpcio-status==1.62.3 # via google-api-core h5py==3.10.0 # via - # -r requirements.in # keras # tensorflow -idna==3.11 \ - --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ - --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 +idna==3.11 # via requests -importlib-metadata==4.13.0 +ipython-genutils==0.2.0 + # via nbformat +isort==5.13.2 + # via pylint +jax==0.4.34 + # via -r requirements.in +jaxlib==0.4.34 # via # -r requirements.in # jax - # markdown -importlib-resources==6.5.2 - # via matplotlib -jax==0.4.23 - # via -r requirements.in -jaxlib==0.4.23 - # via -r requirements.in -keras==3.10.0 - # via tensorflow +jinja2==3.1.6 + # via tensorflow-docs +jsonschema==4.26.0 + # via nbformat +jsonschema-specifications==2025.9.1 + # via jsonschema +jupyter-client==8.8.0 + # via nbclient +jupyter-core==5.9.1 + # via + # jupyter-client + # nbformat +keras==3.12.0 + # via + # -r requirements.in + # tensorflow kiwisolver==1.4.7 # via matplotlib -libclang==18.1.1 \ - --hash=sha256:0b2e143f0fac830156feb56f9231ff8338c20aecfe72b4ffe96f19e5a1dbb69a \ - --hash=sha256:3f0e1f49f04d3cd198985fea0511576b0aee16f9ff0e0f0cad7f9c57ec3c20e8 \ - --hash=sha256:4dd2d3b82fab35e2bf9ca717d7b63ac990a3519c7e312f19fa8e86dcc712f7fb \ - --hash=sha256:54dda940a4a0491a9d1532bf071ea3ef26e6dbaf03b5000ed94dd7174e8f9592 \ - --hash=sha256:69f8eb8f65c279e765ffd28aaa7e9e364c776c17618af8bff22a8df58677ff4f \ - --hash=sha256:6f14c3f194704e5d09769108f03185fce7acaf1d1ae4bbb2f30a72c2400cb7c5 \ - --hash=sha256:83ce5045d101b669ac38e6da8e58765f12da2d3aafb3b9b98d88b286a60964d8 \ - --hash=sha256:a1214966d08d73d971287fc3ead8dfaf82eb07fb197680d8b3859dbbbbf78250 \ - --hash=sha256:c533091d8a3bbf7460a00cb6c1a71da93bffe148f172c7d03b1c31fbf8aa2a0b \ - --hash=sha256:cf4a99b05376513717ab5d82a0db832c56ccea4fd61a69dbb7bccf2dfb207dbe +libclang==18.1.1 # via tensorflow markdown==3.9 # via tensorboard markdown-it-py==3.0.0 # via rich markupsafe==3.0.3 - # via werkzeug -matplotlib==3.9.4 # via - # -r requirements.in - # cirq-core + # jinja2 + # werkzeug +matplotlib==3.9.4 + # via cirq-core +mccabe==0.7.0 + # via pylint mdurl==0.1.2 # via markdown-it-py -ml-dtypes==0.4.1 \ - --hash=sha256:126e7d679b8676d1a958f2651949fbfa182832c3cd08020d8facd94e4114f3e9 \ - --hash=sha256:15fdd922fea57e493844e5abb930b9c0bd0af217d9edd3724479fc3d7ce70e3f \ - --hash=sha256:1fe8b5b5e70cd67211db94b05cfd58dace592f24489b038dc6f9fe347d2e07d5 \ - --hash=sha256:274cc7193dd73b35fb26bef6c5d40ae3eb258359ee71cd82f6e96a8c948bdaa6 \ - --hash=sha256:2d55b588116a7085d6e074cf0cdb1d6fa3875c059dddc4d2c94a4cc81c23e975 \ - --hash=sha256:560be16dc1e3bdf7c087eb727e2cf9c0e6a3d87e9f415079d2491cc419b3ebf5 \ - --hash=sha256:74c6cfb5cf78535b103fde9ea3ded8e9f16f75bc07789054edc7776abfb3d752 \ - --hash=sha256:772426b08a6172a891274d581ce58ea2789cc8abc1c002a27223f314aaf894e7 \ - --hash=sha256:827d3ca2097085cf0355f8fdf092b888890bb1b1455f52801a2d7756f056f54b \ - --hash=sha256:8c09a6d11d8475c2a9fd2bc0695628aec105f97cab3b3a3fb7c9660348ff7d24 \ - --hash=sha256:9f5e8f75fa371020dd30f9196e7d73babae2abd51cf59bdd56cb4f8de7e13354 \ - --hash=sha256:ad0b757d445a20df39035c4cdeed457ec8b60d236020d2560dbc25887533cf50 \ - --hash=sha256:df0fb650d5c582a9e72bb5bd96cfebb2cdb889d89daff621c8fbc60295eba66c \ - --hash=sha256:e138a9b7a48079c900ea969341a5754019a1ad17ae27ee330f7ebf43f23877f9 \ - --hash=sha256:e35e486e97aee577d0890bc3bd9e9f9eece50c08c163304008587ec8cfe7575b \ - --hash=sha256:ef0d7e3fece227b49b544fa69e50e607ac20948f0043e9f76b44f35f229ea450 \ - --hash=sha256:fad5f2de464fd09127e49b7fd1252b9006fb43d2edc1ff112d390c324af5ca7a +ml-dtypes==0.3.2 # via # jax # jaxlib # keras # tensorflow -mpmath==1.3.0 \ - --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ - --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c +mpmath==1.3.0 # via sympy -namex==0.1.0 \ - --hash=sha256:117f03ccd302cc48e3f5c58a296838f6b89c83455ab8683a1e85f2a430aa4306 \ - --hash=sha256:e2012a474502f1e2251267062aae3114611f07df4224b6e06334c57b0f2ce87c +namex==0.1.0 # via keras -networkx==3.2.1 +nbclient==0.6.5 + # via -r requirements.in +nbformat==5.1.3 # via # -r requirements.in - # cirq-core + # nbclient + # tensorflow-docs +nest-asyncio==1.6.0 + # via nbclient +networkx==3.2.1 + # via cirq-core numpy==1.26.4 # via # -r requirements.in @@ -283,93 +154,27 @@ opt-einsum==3.4.0 # tensorflow optree==0.18.0 # via keras -packaging==25.0 \ - --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ - --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f +packaging==26.0 # via # keras # matplotlib # tensorboard # tensorflow -pandas==2.3.3 \ - --hash=sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7 \ - --hash=sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593 \ - --hash=sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5 \ - --hash=sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791 \ - --hash=sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73 \ - --hash=sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec \ - --hash=sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4 \ - --hash=sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5 \ - --hash=sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac \ - --hash=sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084 \ - --hash=sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c \ - --hash=sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87 \ - --hash=sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35 \ - --hash=sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250 \ - --hash=sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c \ - --hash=sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826 \ - --hash=sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9 \ - --hash=sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713 \ - --hash=sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1 \ - --hash=sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523 \ - --hash=sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3 \ - --hash=sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78 \ - --hash=sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53 \ - --hash=sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c \ - --hash=sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21 \ - --hash=sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5 \ - --hash=sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff \ - --hash=sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45 \ - --hash=sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110 \ - --hash=sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493 \ - --hash=sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b \ - --hash=sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450 \ - --hash=sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86 \ - --hash=sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8 \ - --hash=sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98 \ - --hash=sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89 \ - --hash=sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66 \ - --hash=sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b \ - --hash=sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8 \ - --hash=sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29 \ - --hash=sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6 \ - --hash=sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc \ - --hash=sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2 \ - --hash=sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788 \ - --hash=sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa \ - --hash=sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151 \ - --hash=sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838 \ - --hash=sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b \ - --hash=sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a \ - --hash=sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d \ - --hash=sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908 \ - --hash=sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0 \ - --hash=sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b \ - --hash=sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c \ - --hash=sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee +pandas==2.3.3 # via cirq-core pillow==11.0.0 + # via matplotlib +platformdirs==4.5.1 # via - # -r requirements.in - # matplotlib + # jupyter-core + # pylint + # yapf proto-plus==1.27.0 # via # cirq-google # google-api-core -protobuf==4.25.8 \ - --hash=sha256:077ff8badf2acf8bc474406706ad890466274191a48d0abd3bd6987107c9cde5 \ - --hash=sha256:15a0af558aa3b13efef102ae6e4f3efac06f1eea11afb3a57db2901447d9fb59 \ - --hash=sha256:27d498ffd1f21fb81d987a041c32d07857d1d107909f5134ba3350e1ce80a4af \ - --hash=sha256:504435d831565f7cfac9f0714440028907f1975e4bed228e58e72ecfff58a1e0 \ - --hash=sha256:6135cf8affe1fc6f76cced2641e4ea8d3e59518d1f24ae41ba97bcad82d397cd \ - --hash=sha256:83e6e54e93d2b696a92cad6e6efc924f3850f82b52e1563778dfab8b355101b0 \ - --hash=sha256:9ad7ef62d92baf5a8654fbb88dac7fa5594cfa70fd3440488a5ca3bfc6d795a7 \ - --hash=sha256:bd551eb1fe1d7e92c1af1d75bdfa572eff1ab0e5bf1736716814cdccdb2360f9 \ - --hash=sha256:ca809b42f4444f144f2115c4c1a747b9a404d590f18f37e9402422033e464e0f \ - --hash=sha256:d552c53d0415449c8d17ced5c341caba0d89dbf433698e1436c8fa0aae7808a3 \ - --hash=sha256:f4510b93a3bec6eba8fd8f1093e9d7fb0d4a24d1a81377c10c0e5bbfe9e4ed24 +protobuf==4.25.8 # via - # -r requirements.in # cirq-google # google-api-core # googleapis-common-protos @@ -377,46 +182,55 @@ protobuf==4.25.8 \ # proto-plus # tensorboard # tensorflow -pyasn1==0.6.1 + # tensorflow-docs +pyasn1==0.6.2 # via # pyasn1-modules # rsa -pyasn1-modules==0.4.2 \ - --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ - --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pyasn1-modules==0.4.2 # via google-auth -pygments==2.19.2 \ - --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ - --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b +pygments==2.19.2 # via rich -pyparsing==3.2.5 +pylint==3.3.3 + # via -r requirements.in +pyparsing==3.3.2 # via matplotlib -python-dateutil==2.9.0.post0 \ - --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ - --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-dateutil==2.9.0.post0 # via + # jupyter-client # matplotlib # pandas -pytz==2025.2 \ - --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \ - --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00 +pytz==2025.2 # via pandas +pyzmq==27.1.0 + # via jupyter-client +referencing==0.37.0 + # via + # jsonschema + # jsonschema-specifications requests==2.32.5 # via # google-api-core # tensorflow -rich==14.2.0 \ - --hash=sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4 \ - --hash=sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd +rich==14.2.0 # via keras +rpds-py==0.30.0 + # via + # jsonschema + # referencing rsa==4.9.1 # via google-auth -scipy==1.12.0 +scipy==1.15.3 # via # -r requirements.in # cirq-core # jax # jaxlib +setuptools==80.10.1 + # via + # -r requirements.in + # tensorboard + # tensorflow six==1.17.0 # via # astunparse @@ -424,82 +238,64 @@ six==1.17.0 # python-dateutil # tensorboard # tensorflow -sortedcontainers==2.4.0 \ - --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ - --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sortedcontainers==2.4.0 # via cirq-core sympy==1.14.0 # via # -r requirements.in # cirq-core -tensorboard==2.16.2 +tensorboard==2.17.1 # via tensorflow -tensorboard-data-server==0.7.2 \ - --hash=sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb \ - --hash=sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60 \ - --hash=sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530 +tensorboard-data-server==0.7.2 # via tensorboard -tensorflow==2.17.1 \ - --hash=sha256:0c3452ab09940cbc3be896641b256855ba92154b79a90c864c5b2be79db78a64 \ - --hash=sha256:4c23498b370c9d6b2521722b6acc89fab61e6a593e886df16bed3075584bf1c7 \ - --hash=sha256:595c220b0febe2295a150e0d870c742a75c56b145a63ed878f78d64aa43c6ca6 \ - --hash=sha256:61f45ca991cf3dddf0b1069674c455fdbf38edf749dab962bb4bb8a3f99fb25f \ - --hash=sha256:65a8cb84496da6abe08a579ef5cc8452c88affdb98a7e14ae84a0dd303798804 \ - --hash=sha256:67df8c8f2920cfc6d6585a23650e170abcc487f7cdeed13c1550df65d3265966 \ - --hash=sha256:68841e17e573301d8ba9192f929b8096b0b341567cb81414096305c723de68d0 \ - --hash=sha256:695741b80ea9b2603a8d3f423051476c02a9cf48f4721d18c4dafbe0a8a5ca91 \ - --hash=sha256:8aa202e17894dcb0582283e5a5c703391d793ccce11c5c02b1fe8f839ae09f3c \ - --hash=sha256:92c4bbd80013d3ce2f2908923907317286d80be15f8687eb02a54b0af4ff4351 \ - --hash=sha256:a6bd9474f1e0dedb7deb331c8e93cf2d5997da8781a1949f75c4a7cf8923d2e3 \ - --hash=sha256:bc41bc3e31d205dcf6e4b8afc0514de05445303d93fade03549085ef8c45a2b2 \ - --hash=sha256:d43698039fd057ee6d7c3f908c4e9a6e310be6e77adda419bae3fee5ca7192fe \ - --hash=sha256:d618cc21b0adf695fc8b4323f56ccd17c1408379422e1a177481d4fd8523fa8e \ - --hash=sha256:eacaa75fe3a9b912180a98a61dcc8f0fc23cddfbdbccfc43a654932506d6a3f8 \ - --hash=sha256:faf032fae35de0071f20850abd23d78e0e3ae116ce7fbfb9d034da2acc900543 +tensorflow==2.17.1 # via # -r requirements.in # tf-keras +tensorflow-docs==2025.2.19.33219 + # via -r requirements.in tensorflow-io-gcs-filesystem==0.37.1 # via tensorflow termcolor==3.1.0 # via tensorflow -tf-keras==2.17.0 \ - --hash=sha256:cc97717e4dc08487f327b0740a984043a9e0123c7a4e21206711669d3ec41c88 \ - --hash=sha256:fda97c18da30da0f72a5a7e80f3eee343b09f4c206dad6c57c944fb2cd18560e +tf-keras==2.17.0 # via -r requirements.in +tomli==2.4.0 + # via + # pylint + # yapf +tomlkit==0.14.0 + # via pylint +tornado==6.5.4 + # via jupyter-client tqdm==4.67.1 # via cirq-core +traitlets==5.14.3 + # via + # jupyter-client + # jupyter-core + # nbclient + # nbformat typing-extensions==4.15.0 # via # astroid # cirq-core # grpcio # optree + # referencing # tensorflow tzdata==2025.3 # via pandas -urllib3==2.6.2 - # via - # -c requirements-pins.txt - # requests -werkzeug==3.1.4 - # via - # -c requirements-pins.txt - # tensorboard -wheel==0.45.1 +urllib3==2.6.3 + # via requests +werkzeug==3.1.5 + # via tensorboard +wheel==0.44.0 # via astunparse wrapt==1.17.3 - # via - # -r requirements.in - # tensorflow -zipp==3.23.0 - # via - # importlib-metadata - # importlib-resources + # via tensorflow +yapf==0.43.0 + # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: -setuptools==58.1.0 - # via - # -r requirements.in - # tensorboard - # tensorflow +# pyyaml From 86841937d22e1646e33e59f81500df2c47f9252f Mon Sep 17 00:00:00 2001 From: mhucka Date: Sat, 31 Jan 2026 01:40:51 +0000 Subject: [PATCH 11/11] Update installation requirements in setup.py This removes more constraints and tries to reduce things to the minimum I can get to work. --- release/setup.py | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/release/setup.py b/release/setup.py index c8eb715ef..1ca00a905 100644 --- a/release/setup.py +++ b/release/setup.py @@ -48,33 +48,28 @@ def finalize_options(self): REQUIRED_PACKAGES = [ "cirq-core==1.3.0", "cirq-google==1.3.0", + "numpy<2.0", + "scipy~=1.15.3", "sympy==1.14", "tf-keras~=2.17.0", - # The following are transitive dependencies that need to be constrained to - # avoid incompatible versions or because some (e.g., contourpy 1.3.3) - # require Python 3.11+ and we want to maintain Python 3.9 compatibility. - # TODO: revisit after we reach compatibility with TensorFlow 2.19+. - "contourpy<=1.3.2", - "h5py==3.10.0", - "importlib_metadata<5", - "jax<=0.5", - "matplotlib<3.10", - "numpy<2.0", - "scipy<=1.12.0", - # The following makes it easier to get the right version on Colab. Once - # TFQ works with the latest version of TF, this may become unnecessary. - "protobuf==4.25.8", + + # The reset of these constraints are on transitive dependencies to avoid + # installation conflicts, which can happen if pip finds a newer version of a + # package & that newer version requires, e.g., NumPy 2.x or Python 3.11+. + # Ideally these can be removed once TFQ is compatible with recent TFs. + "jax<0.5", + "jaxlib<0.5", + "pandas<3", + "contourpy<1.3.3", ] # TF requirement is placed as an extras to avoid overwriting existing nightly TF # installations. Users can run "pip install tensorflow-quantum[and-tensorflow]" # to get everything in one go (or "pip install tensorflow tensorflow-quantum"). EXTRA_PACKAGES = {} -EXTRA_PACKAGES["and-tensorflow"] = ["tensorflow>=2.17,<2.18"] +EXTRA_PACKAGES["and-tensorflow"] = ["tensorflow>=2.16,<2.18"] # "extras" was used before 0.7.4. Prefer "and-tensorflow" in 0.7.4+. EXTRA_PACKAGES["extras"] = EXTRA_PACKAGES["and-tensorflow"] -# Add an alias in case people type an underscore instead of a dash. -EXTRA_PACKAGES["and_tensorflow"] = EXTRA_PACKAGES["and-tensorflow"] class BinaryDistribution(Distribution): @@ -105,7 +100,7 @@ def has_ext_modules(self): author_email="tensorflow-quantum-team@google.com", url="https://github.com/tensorflow/quantum/", packages=find_packages(), - python_requires='>=3.9', + python_requires='>=3.10', install_requires=REQUIRED_PACKAGES, extras_require=EXTRA_PACKAGES, include_package_data=True,