diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 07805b1e..ac975048 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -40,7 +40,7 @@ jobs: arch: x86_64 - version: 14 arch: arm64 - python-version: [cp38, cp39, cp310, cp311, cp312] + python-version: [cp38, cp39, cp310, cp311, cp312, cp313] steps: - name: Checkout @@ -85,7 +85,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - python-version: [cp38, cp39, cp310, cp311, cp312] + python-version: [cp38, cp39, cp310, cp311, cp312, cp313] steps: - name: Checkout diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6f7a7686..b4a6018f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-24.04] - python: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] compiler: # Newest gcc on 24.04 - C: gcc-14 @@ -37,7 +37,7 @@ jobs: warning_options: "-Wall;-Wextra;-Werror" # gcc 14 (Newest gcc available on Ubuntu 24.04) - os: ubuntu-24.04 - python: "3.12" + python: "3.13" compiler: C: gcc-14 CXX: g++-14 @@ -54,7 +54,7 @@ jobs: warning_options: "-Wall;-Wextra;-Werror" # Clang 19 (Newest clang available on Ubuntu 24.04) - os: ubuntu-24.04 - python: "3.12" + python: "3.13" compiler: C: clang-19 CXX: clang++-19 diff --git a/.github/workflows/test_editable_pip_install.yml b/.github/workflows/test_editable_pip_install.yml index 0d0a6281..4a3bb706 100644 --- a/.github/workflows/test_editable_pip_install.yml +++ b/.github/workflows/test_editable_pip_install.yml @@ -26,7 +26,7 @@ jobs: name: Set up user-managed python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.13' - name: Upgrade versions run: | @@ -67,9 +67,9 @@ jobs: - name: Set expected install locations for macos if: ${{ matrix.os == 'macos-latest' }} run: | - echo CC_SYM_LOCATION=/Users/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/cc_sym.cpython-311-darwin.so >> $GITHUB_ENV - echo SYM_LOCATION=/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/sym/__init__.py >> $GITHUB_ENV - echo SKYMARSHAL_LOCATION=/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/skymarshal/__init__.py >> $GITHUB_ENV + echo CC_SYM_LOCATION=/Users/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/cc_sym.cpython-313-darwin.so >> $GITHUB_ENV + echo SYM_LOCATION=/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.11/site-packages/sym/__init__.py >> $GITHUB_ENV + echo SKYMARSHAL_LOCATION=/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.11/site-packages/skymarshal/__init__.py >> $GITHUB_ENV echo SYMENGINE_LOCATION=/Users/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/third_party/symenginepy/symengine/__init__.py >> $GITHUB_ENV echo LCMTYPES_SYM_LOCATION=/Users/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/lcmtypes_build/lcmtypes/sym/__init__.py >> $GITHUB_ENV echo LCMTYPES_EIGEN_LCM_LOCATION=/Users/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/lcmtypes_build/lcmtypes/eigen_lcm/__init__.py >> $GITHUB_ENV diff --git a/README.md b/README.md index 05b4d6c4..f93caa73 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Documentation Source Code Issues -Python 3.8 | 3.9 | 3.10 | 3.11 | 3.12 +Python 3.8 | 3.9 | 3.10 | 3.11 | 3.12 | 3.13 C++14 PyPI Apache License diff --git a/pyproject.toml b/pyproject.toml index b365d65e..d19a085b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3 :: Only", "Programming Language :: C++", "License :: OSI Approved :: Apache Software License", diff --git a/requirements_dev_py313.txt b/requirements_dev_py313.txt new file mode 100644 index 00000000..ca04415e --- /dev/null +++ b/requirements_dev_py313.txt @@ -0,0 +1,331 @@ +# This file was autogenerated by uv via the following command: +# python test/symforce_requirements_test.py --update +alabaster==1.0.0 + # via sphinx +argh==0.31.3 + # via + # symforce (pyproject.toml) + # skymarshal +asttokens==3.0.0 + # via stack-data +attrs==25.3.0 + # via + # jsonschema + # referencing +babel==2.17.0 + # via sphinx +beautifulsoup4==4.13.3 + # via + # furo + # nbconvert +bleach==6.2.0 + # via nbconvert +breathe==4.36.0 + # via symforce (pyproject.toml) +certifi==2025.1.31 + # via requests +charset-normalizer==3.4.1 + # via requests +clang-format==20.1.0 + # via symforce (pyproject.toml) +cmake==3.26.4 + # via symforce (pyproject.toml) +comm==0.2.2 + # via ipykernel +contourpy==1.3.1 + # via matplotlib +coverage==7.7.0 + # via symforce (pyproject.toml) +cycler==0.12.1 + # via matplotlib +cython==0.29.37 + # via symforce (pyproject.toml) +debugpy==1.8.13 + # via ipykernel +decorator==5.2.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +docutils==0.21.2 + # via + # myst-parser + # nbsphinx + # sphinx +executing==2.2.0 + # via stack-data +fastjsonschema==2.21.1 + # via nbformat +fonttools==4.56.0 + # via matplotlib +furo==2024.8.6 + # via symforce (pyproject.toml) +graphviz==0.20.3 + # via symforce (pyproject.toml) +idna==3.10 + # via requests +imagesize==1.4.1 + # via sphinx +ipykernel==6.29.5 + # via symforce (pyproject.toml) +ipython==9.0.2 + # via ipykernel +ipython-genutils==0.2.0 + # via symforce (pyproject.toml) +ipython-pygments-lexers==1.1.1 + # via ipython +jedi==0.19.2 + # via ipython +jinja2==3.1.6 + # via + # symforce (pyproject.toml) + # myst-parser + # nbconvert + # nbsphinx + # skymarshal + # sphinx +jsonschema==4.23.0 + # via nbformat +jsonschema-specifications==2024.10.1 + # via jsonschema +jupyter-client==8.6.3 + # via + # ipykernel + # nbclient +jupyter-core==5.7.2 + # via + # ipykernel + # jupyter-client + # nbclient + # nbconvert + # nbformat +jupyterlab-pygments==0.3.0 + # via nbconvert +kiwisolver==1.4.8 + # via matplotlib +llvmlite==0.44.0 + # via numba +markdown-it-py==3.0.0 + # via + # mdit-py-plugins + # myst-parser +markupsafe==3.0.2 + # via + # jinja2 + # nbconvert +matplotlib==3.10.1 + # via symforce (pyproject.toml) +matplotlib-inline==0.1.7 + # via + # ipykernel + # ipython +mdit-py-plugins==0.4.2 + # via myst-parser +mdurl==0.1.2 + # via markdown-it-py +mistune==3.1.2 + # via nbconvert +mpmath==1.3.0 + # via sympy +mypy==1.11.2 + # via symforce (pyproject.toml) +mypy-extensions==1.0.0 + # via mypy +myst-parser==4.0.1 + # via symforce (pyproject.toml) +narwhals==1.30.0 + # via plotly +nbclient==0.10.2 + # via nbconvert +nbconvert==7.16.6 + # via nbsphinx +nbformat==5.10.4 + # via + # nbclient + # nbconvert + # nbsphinx + # nbstripout +nbsphinx==0.9.7 + # via symforce (pyproject.toml) +nbstripout==0.8.1 + # via symforce (pyproject.toml) +nest-asyncio==1.6.0 + # via ipykernel +numba==0.61.0 + # via symforce (pyproject.toml) +numpy==1.26.4 + # via + # symforce (pyproject.toml) + # contourpy + # matplotlib + # numba + # pandas + # scipy + # skymarshal + # symforce-sym +packaging==24.2 + # via + # ipykernel + # matplotlib + # nbconvert + # plotly + # setuptools-scm + # sphinx +pandas==2.2.3 + # via symforce (pyproject.toml) +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.4 + # via jedi +pexpect==4.9.0 + # via ipython +pillow==11.1.0 + # via matplotlib +pip==25.0.1 + # via symforce (pyproject.toml) +platformdirs==4.3.6 + # via jupyter-core +plotly==6.0.0 + # via symforce (pyproject.toml) +ply==3.11 + # via skymarshal +prompt-toolkit==3.0.50 + # via ipython +psutil==7.0.0 + # via ipykernel +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pybind11-stubgen==2.5.3 + # via symforce (pyproject.toml) +pygments==2.19.1 + # via + # furo + # ipython + # ipython-pygments-lexers + # nbconvert + # sphinx +pyparsing==3.2.1 + # via matplotlib +python-dateutil==2.9.0.post0 + # via + # jupyter-client + # matplotlib + # pandas +pytz==2025.1 + # via pandas +pyyaml==6.0.2 + # via myst-parser +pyzmq==26.3.0 + # via + # ipykernel + # jupyter-client +referencing==0.36.2 + # via + # jsonschema + # jsonschema-specifications +requests==2.32.3 + # via sphinx +rpds-py==0.23.1 + # via + # jsonschema + # referencing +ruff==0.9.10 + # via symforce (pyproject.toml) +scipy==1.15.2 + # via symforce (pyproject.toml) +setuptools==76.0.0 + # via + # symforce (pyproject.toml) + # setuptools-scm + # types-setuptools +setuptools-scm==8.2.0 + # via symforce (pyproject.toml) +six==1.17.0 + # via python-dateutil +file:./third_party/skymarshal + # via symforce (pyproject.toml) +snowballstemmer==2.2.0 + # via sphinx +soupsieve==2.6 + # via beautifulsoup4 +sphinx==8.1.3 + # via + # symforce (pyproject.toml) + # breathe + # furo + # myst-parser + # nbsphinx + # sphinx-basic-ng + # sphinx-copybutton + # sphinxext-opengraph +sphinx-basic-ng==1.0.0b2 + # via furo +sphinx-copybutton==0.5.2 + # via symforce (pyproject.toml) +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sphinxext-opengraph==0.9.1 + # via symforce (pyproject.toml) +stack-data==0.6.3 + # via ipython +file:./gen/python + # via symforce (pyproject.toml) +sympy==1.11.1 + # via symforce (pyproject.toml) +tinycss2==1.4.0 + # via bleach +tornado==6.4.2 + # via + # ipykernel + # jupyter-client +traitlets==5.14.3 + # via + # comm + # ipykernel + # ipython + # jupyter-client + # jupyter-core + # matplotlib-inline + # nbclient + # nbconvert + # nbformat + # nbsphinx +types-jinja2==2.11.9 + # via symforce (pyproject.toml) +types-markupsafe==1.1.10 + # via types-jinja2 +types-requests==2.32.0.20250306 + # via symforce (pyproject.toml) +types-setuptools==76.0.0.20250313 + # via symforce (pyproject.toml) +typing-extensions==4.12.2 + # via + # beautifulsoup4 + # mypy +tzdata==2025.1 + # via pandas +urllib3==2.3.0 + # via + # requests + # types-requests +uv==0.6.6 + # via symforce (pyproject.toml) +wcwidth==0.2.13 + # via prompt-toolkit +webencodings==0.5.1 + # via + # bleach + # tinycss2 +wheel==0.45.1 + # via symforce (pyproject.toml) diff --git a/test/symforce_requirements_test.py b/test/symforce_requirements_test.py index 71c47416..44b53636 100644 --- a/test/symforce_requirements_test.py +++ b/test/symforce_requirements_test.py @@ -139,6 +139,10 @@ def test_dev_requirements_py312(self) -> None: self.check_dev_requirements_for_version(12) @requires_source_build + @sympy_only + def test_dev_requirements_py313(self) -> None: + self.check_dev_requirements_for_version(13) + @sympy_only def test_build_requirements(self) -> None: """