diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 781f0b8b..85631673 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,8 +12,8 @@ jobs: strategy: matrix: python-version: - - '3.10' - - '3.13' + - '3.11' + - '3.14' requirements-file: - 'requirements-dev.txt' # pinned, for predictability - 'requirements-dev.in' # un-pinned, so we catch problems early diff --git a/README-PYPI.md b/README-PYPI.md index dd40d1e9..62f45e71 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -32,7 +32,7 @@ Download Results: ## Usage -DP Wizard requires Python 3.10 or later. +DP Wizard requires Python 3.11 or later. You can check your current version with `python --version`. The exact upgrade process will depend on your environment and operating system. diff --git a/README.md b/README.md index a9bd88bb..7d166607 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Download Results: ## Usage -DP Wizard requires Python 3.10 or later. +DP Wizard requires Python 3.11 or later. You can check your current version with `python --version`. The exact upgrade process will depend on your environment and operating system. @@ -91,8 +91,8 @@ DP-Wizard will run across multiple Python versions, but for the fewest surprises ```shell $ git clone https://github.com/opendp/dp-wizard.git $ cd dp-wizard -$ brew install python@3.10 -$ python3.10 -m venv .venv +$ brew install python@3.11 +$ python3.11 -m venv .venv $ source .venv/bin/activate ``` diff --git a/docs/index.html b/docs/index.html index 8fd8ccc4..a66138e4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -646,7 +646,7 @@
pip install 'dp_wizard[app]'dp_wizard --cloud
(requires
-Python>=3.10)
… or go to:
-**[`pip install 'dp_wizard[app]'`](https://pypi.org/project/dp_wizard/)
`dp_wizard --cloud`
(requires Python>=3.10)**
+**[`pip install 'dp_wizard[app]'`](https://pypi.org/project/dp_wizard/)
`dp_wizard --cloud`
(requires Python>=3.11)**
diff --git a/dp_wizard/__init__.py b/dp_wizard/__init__.py
index fe505ebb..0ce5885d 100644
--- a/dp_wizard/__init__.py
+++ b/dp_wizard/__init__.py
@@ -19,7 +19,7 @@ def get_template_root(path: str) -> Path:
def main() -> None: # pragma: no cover
import sys
- min_version = "3.10"
+ min_version = "3.11"
if sys.version_info < tuple(int(v) for v in min_version.split(".")):
raise Exception(
f"DP Wizard requires Python {min_version}"
diff --git a/pyproject.toml b/pyproject.toml
index 7914b9ba..c67c72d0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ dependencies = [
]
[options]
-python_requires = ">=3.10"
+python_requires = ">=3.11"
[project.scripts]
# Prefer dash in name where allowed (repo named and executable)
@@ -84,7 +84,6 @@ app = [
"defusedxml==0.7.1",
"deprecated==1.2.18",
"dp-wizard-templates==0.7.0",
- "exceptiongroup==1.3.0",
"executing==2.2.0",
"faicons==0.2.2",
"fastjsonschema==2.21.1",
@@ -94,8 +93,8 @@ app = [
"idna==3.10",
"ipykernel==6.29.5",
"ipython==8.35.0",
- "jax==0.6.2",
- "jaxlib==0.6.2",
+ "jax==0.9.0",
+ "jaxlib==0.9.0",
"jedi==0.19.2",
"jinja2==3.1.6",
"joblib==1.4.2",
@@ -164,7 +163,6 @@ app = [
"starlette==0.49.1",
"threadpoolctl==3.6.0",
"tinycss2==1.4.0",
- "tomli==2.2.1",
"toolz==1.0.0",
"tornado==6.5.1",
"traitlets==5.14.3",
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 13b134aa..e91a4f73 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.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.11
# by the following command:
#
# pip-compile requirements-dev.in
@@ -77,19 +77,13 @@ distlib==0.3.9
docutils==0.21.2
# via flit
dp-wizard-templates==0.7.0
- # via -r .../dp-wizard/requirements.in
-exceptiongroup==1.3.0
- # via
- # anyio
- # hypothesis
- # ipython
- # pytest
+ # via -r requirements.in
execnet==2.1.1
# via pytest-xdist
executing==2.2.0
# via stack-data
faicons==0.2.2
- # via -r .../dp-wizard/requirements.in
+ # via -r requirements.in
fastjsonschema==2.21.1
# via nbformat
filelock==3.20.2
@@ -108,7 +102,7 @@ flit-core==3.12.0
# via flit
fonttools==4.61.0
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# matplotlib
greenlet==3.2.0
# via playwright
@@ -134,12 +128,12 @@ ipython==8.35.0
# via ipykernel
isort==6.0.1
# via -r requirements-dev.in
-jax==0.6.2
+jax==0.9.0
# via
# chex
# mbi
# optax
-jaxlib==0.6.2
+jaxlib==0.9.0
# via
# chex
# jax
@@ -185,7 +179,7 @@ markupsafe==3.0.2
# jinja2
# nbconvert
matplotlib==3.10.1
- # via -r .../dp-wizard/requirements.in
+ # via -r requirements.in
matplotlib-inline==0.1.7
# via
# ipykernel
@@ -243,7 +237,7 @@ numpy==2.2.4
# scikit-learn
# scipy
opendp[mbi]==0.14.1
- # via -r .../dp-wizard/requirements.in
+ # via -r requirements.in
opt-einsum==3.4.0
# via jax
optax==0.2.5
@@ -273,7 +267,7 @@ pexpect==4.9.0
# via ipython
pillow==11.3.0
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# diffimg
# matplotlib
pip-tools==7.4.1
@@ -368,7 +362,7 @@ referencing==0.36.2
# jsonschema-specifications
requests==2.32.4
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# flit
# pytest-base-url
rpds-py==0.24.0
@@ -384,7 +378,7 @@ scipy==1.15.2
# mbi
# scikit-learn
shiny==1.4.0
- # via -r .../dp-wizard/requirements.in
+ # via -r requirements.in
six==1.17.0
# via python-dateutil
sniffio==1.3.1
@@ -397,7 +391,7 @@ stack-data==0.6.3
# via ipython
starlette==0.49.1
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# shiny
text-unidecode==1.3
# via python-slugify
@@ -405,14 +399,6 @@ threadpoolctl==3.6.0
# via scikit-learn
tinycss2==1.4.0
# via bleach
-tomli==2.2.1
- # via
- # black
- # build
- # coverage
- # jupytext
- # pip-tools
- # pytest
tomli-w==1.2.0
# via flit
tomlkit==0.13.2
@@ -421,7 +407,7 @@ toolz==1.0.0
# via chex
tornado==6.5.1
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# ipykernel
# jupyter-client
traitlets==5.14.3
@@ -438,27 +424,22 @@ traitlets==5.14.3
typing-extensions==4.13.2
# via
# anyio
- # asgiref
# beautifulsoup4
- # black
# chex
- # exceptiongroup
# htmltools
# ipython
- # mistune
# pyee
# pyright
# referencing
# shiny
# starlette
- # uvicorn
tzdata==2025.2
# via pandas
uc-micro-py==1.0.3
# via linkify-it-py
urllib3==2.6.0
# via
- # -r .../dp-wizard/requirements.in
+ # -r requirements.in
# requests
uvicorn==0.34.1
# via shiny
diff --git a/requirements.txt b/requirements.txt
index 58450ffc..b894d695 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.11
# by the following command:
#
# pip-compile requirements.in
@@ -60,10 +60,6 @@ deprecated==1.2.18
# via opendp
dp-wizard-templates==0.7.0
# via -r requirements.in
-exceptiongroup==1.3.0
- # via
- # anyio
- # ipython
executing==2.2.0
# via stack-data
faicons==0.2.2
@@ -88,12 +84,12 @@ ipykernel==6.29.5
# via dp-wizard-templates
ipython==8.35.0
# via ipykernel
-jax==0.6.2
+jax==0.9.0
# via
# chex
# mbi
# optax
-jaxlib==0.6.2
+jaxlib==0.9.0
# via
# chex
# jax
@@ -301,10 +297,6 @@ threadpoolctl==3.6.0
# via scikit-learn
tinycss2==1.4.0
# via bleach
-tomli==2.2.1
- # via
- # black
- # jupytext
toolz==1.0.0
# via chex
tornado==6.5.1
@@ -326,18 +318,13 @@ traitlets==5.14.3
typing-extensions==4.13.2
# via
# anyio
- # asgiref
# beautifulsoup4
- # black
# chex
- # exceptiongroup
# htmltools
# ipython
- # mistune
# referencing
# shiny
# starlette
- # uvicorn
tzdata==2025.2
# via pandas
uc-micro-py==1.0.3
diff --git a/tests/test_misc.py b/tests/test_misc.py
index 7def621e..d3799597 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -57,7 +57,7 @@ def test_opendp_pin(rel_path):
)
def test_python_min_version(rel_path):
text = (package_root.parent / rel_path).read_text()
- assert "3.10" in text
+ assert "3.11" in text
if "README" in rel_path:
# Make sure we haven't upgraded one reference by mistake.
- assert not re.search(r"3.1[^0]", text)
+ assert not re.search(r"3.1[^1]", text)