diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index ddb2860..61daa21 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.10", "3.13"] + python-version: ["3.10", "3.14"] steps: - uses: actions/checkout@v6 @@ -39,8 +39,8 @@ jobs: - name: Set up minimum environment shell: bash run: | - if [ "${{ matrix.python-version }}" == "3.13" ]; then - GROUP="test_py13" + if [ "${{ matrix.python-version }}" == "3.14" ]; then + GROUP="test_py14" else GROUP="test" fi diff --git a/.python-version b/.python-version index 3a4f41e..6324d40 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.13 \ No newline at end of file +3.14 diff --git a/AGENTS.md b/AGENTS.md index 8b089ad..27f9990 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -80,7 +80,7 @@ beanahead/ | Category | Tools | |---|---| -| Python | 3.10–3.13 (`.python-version` pins 3.13) | +| Python | 3.10–3.14 (`.python-version` pins 3.14) | | Package manager | `uv` | | Build backend | `setuptools` + `setuptools_scm` | | Testing | `pytest` | diff --git a/pyproject.toml b/pyproject.toml index 2cc3246..af435ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Office/Business :: Financial :: Accounting", ] @@ -46,12 +47,11 @@ test = [ "pytest >=8.4.2", ] -# Separate group required for test jobs running on python 3.13. -test_py13 = [ +# Separate group required for test jobs running on python 3.14. +test_py14 = [ {include-group = "test"}, - "numpy>=2.1; python_version<'3.13'", - "numpy>=2.3.3; python_version>='3.13'", - "pandas>=2.3; python_version>='3.13'", + "numpy>=2.3.3; python_version>='3.14'", + "pandas>=3.0; python_version>='3.14'", ] dev = [ diff --git a/uv.lock b/uv.lock index e6dcbb1..89b0203 100644 --- a/uv.lock +++ b/uv.lock @@ -8,12 +8,9 @@ resolution-markers = [ "python_full_version == '3.14.*' and sys_platform == 'emscripten'", "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.11'", ] @@ -40,10 +37,9 @@ dev = [ test = [ { name = "pytest" }, ] -test-py13 = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, +test-py14 = [ + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, { name = "pytest" }, ] @@ -61,10 +57,9 @@ dev = [ { name = "pytest", specifier = ">=8.4.2" }, ] test = [{ name = "pytest", specifier = ">=8.4.2" }] -test-py13 = [ - { name = "numpy", marker = "python_full_version < '3.13'", specifier = ">=2.1" }, - { name = "numpy", marker = "python_full_version >= '3.13'", specifier = ">=2.3.3" }, - { name = "pandas", marker = "python_full_version >= '3.13'", specifier = ">=2.3" }, +test-py14 = [ + { name = "numpy", marker = "python_full_version >= '3.14'", specifier = ">=2.3.3" }, + { name = "pandas", marker = "python_full_version >= '3.14'", specifier = ">=3.0" }, { name = "pytest", specifier = ">=8.4.2" }, ] @@ -623,12 +618,9 @@ resolution-markers = [ "python_full_version == '3.14.*' and sys_platform == 'emscripten'", "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } wheels = [ @@ -789,12 +781,9 @@ resolution-markers = [ "python_full_version == '3.14.*' and sys_platform == 'emscripten'", "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },