diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 020e86206..62f311f4c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -61,10 +61,11 @@ body: label: Python Version options: - "lower version (unsupported)" - - "3.8" - "3.9" - "3.10" - "3.11" + - "3.12" + - "3.13" validations: required: true - type: textarea diff --git a/.github/workflows/deploy_release.yml b/.github/workflows/deploy_release.yml index 2f6cb8619..fff052fbf 100644 --- a/.github/workflows/deploy_release.yml +++ b/.github/workflows/deploy_release.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.13' - name: Install build dependencies run: | diff --git a/.github/workflows/run_all_tests.yml b/.github/workflows/run_all_tests.yml index a1b1f75dd..7ce28b686 100644 --- a/.github/workflows/run_all_tests.yml +++ b/.github/workflows/run_all_tests.yml @@ -22,31 +22,30 @@ jobs: fail-fast: false matrix: include: - - { name: linux-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } - - { name: linux-python3.9 , test-tox-env: py39 , build-tox-env: build-py39 , python-ver: "3.9" , os: ubuntu-latest } - - { name: linux-python3.10 , test-tox-env: py310 , build-tox-env: build-py310 , python-ver: "3.10", os: ubuntu-latest } - - { name: linux-python3.11 , test-tox-env: py311 , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } - - { name: linux-python3.11-opt , test-tox-env: py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } - - { name: linux-python3.12 , test-tox-env: py312 , build-tox-env: build-py312 , python-ver: "3.12", os: ubuntu-latest } - - { name: linux-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: ubuntu-latest } - - { name: linux-python3.12-prerelease , test-tox-env: py312-prerelease, build-tox-env: build-py312-prerelease, python-ver: "3.12", os: ubuntu-latest } - - { name: windows-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: windows-latest } - - { name: windows-python3.9 , test-tox-env: py39 , build-tox-env: build-py39 , python-ver: "3.9" , os: windows-latest } - - { name: windows-python3.10 , test-tox-env: py310 , build-tox-env: build-py310 , python-ver: "3.10", os: windows-latest } - - { name: windows-python3.11 , test-tox-env: py311 , build-tox-env: build-py311 , python-ver: "3.11", os: windows-latest } - - { name: windows-python3.11-opt , test-tox-env: py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: windows-latest } - - { name: windows-python3.12 , test-tox-env: py312 , build-tox-env: build-py312 , python-ver: "3.12", os: windows-latest } - - { name: windows-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: windows-latest } - - { name: windows-python3.12-prerelease, test-tox-env: py312-prerelease, build-tox-env: build-py312-prerelease, python-ver: "3.11", os: windows-latest } - # minimum versions of dependencies do not have wheels or cannot be built on macos-arm64 - - { name: macos-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: macos-13 } - - { name: macos-python3.9 , test-tox-env: py39 , build-tox-env: build-py39 , python-ver: "3.9" , os: macos-latest } - - { name: macos-python3.10 , test-tox-env: py310 , build-tox-env: build-py310 , python-ver: "3.10", os: macos-latest } - - { name: macos-python3.11 , test-tox-env: py311 , build-tox-env: build-py311 , python-ver: "3.11", os: macos-latest } - - { name: macos-python3.11-opt , test-tox-env: py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: macos-latest } - - { name: macos-python3.12 , test-tox-env: py312 , build-tox-env: build-py312 , python-ver: "3.12", os: macos-latest } - - { name: macos-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: macos-latest } - - { name: macos-python3.12-prerelease , test-tox-env: py312-prerelease, build-tox-env: build-py312-prerelease, python-ver: "3.12", os: macos-latest } + - { name: linux-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } + - { name: linux-python3.10 , test-tox-env: test-py310 , build-tox-env: build-py310 , python-ver: "3.10", os: ubuntu-latest } + - { name: linux-python3.11 , test-tox-env: test-py311 , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } + - { name: linux-python3.11-opt , test-tox-env: test-py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } + - { name: linux-python3.12 , test-tox-env: test-py312 , build-tox-env: build-py312 , python-ver: "3.12", os: ubuntu-latest } + - { name: linux-python3.13 , test-tox-env: test-py313 , build-tox-env: build-py313 , python-ver: "3.13", os: ubuntu-latest } + - { name: linux-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: ubuntu-latest } + - { name: linux-python3.13-prerelease , test-tox-env: test-py313-prerelease, build-tox-env: build-py313-prerelease, python-ver: "3.13", os: ubuntu-latest } + - { name: windows-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: windows-latest } + - { name: windows-python3.10 , test-tox-env: test-py310 , build-tox-env: build-py310 , python-ver: "3.10", os: windows-latest } + - { name: windows-python3.11 , test-tox-env: test-py311 , build-tox-env: build-py311 , python-ver: "3.11", os: windows-latest } + - { name: windows-python3.11-opt , test-tox-env: test-py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: windows-latest } + - { name: windows-python3.12 , test-tox-env: test-py312 , build-tox-env: build-py312 , python-ver: "3.12", os: windows-latest } + - { name: windows-python3.13 , test-tox-env: test-py313 , build-tox-env: build-py313 , python-ver: "3.13", os: windows-latest } + - { name: windows-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: windows-latest } + - { name: windows-python3.13-prerelease, test-tox-env: test-py313-prerelease, build-tox-env: build-py313-prerelease, python-ver: "3.13", os: windows-latest } + - { name: macos-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: macos-13 } + - { name: macos-python3.10 , test-tox-env: test-py310 , build-tox-env: build-py310 , python-ver: "3.10", os: macos-latest } + - { name: macos-python3.11 , test-tox-env: test-py311 , build-tox-env: build-py311 , python-ver: "3.11", os: macos-latest } + - { name: macos-python3.11-opt , test-tox-env: test-py311-optional , build-tox-env: build-py311 , python-ver: "3.11", os: macos-latest } + - { name: macos-python3.12 , test-tox-env: test-py312 , build-tox-env: build-py312 , python-ver: "3.12", os: macos-latest } + - { name: macos-python3.13 , test-tox-env: test-py313 , build-tox-env: build-py313 , python-ver: "3.13", os: macos-latest } + - { name: macos-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: macos-latest } + - { name: macos-python3.13-prerelease , test-tox-env: test-py313-prerelease, build-tox-env: build-py313-prerelease, python-ver: "3.13", os: macos-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -93,16 +92,15 @@ jobs: fail-fast: false matrix: include: - - { name: linux-gallery-python3.8-minimum , test-tox-env: gallery-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } - - { name: linux-gallery-python3.12-upgraded , test-tox-env: gallery-py312-upgraded , python-ver: "3.12", os: ubuntu-latest } - - { name: linux-gallery-python3.12-prerelease , test-tox-env: gallery-py312-prerelease, python-ver: "3.12", os: ubuntu-latest } - - { name: windows-gallery-python3.8-minimum , test-tox-env: gallery-py38-minimum , python-ver: "3.8" , os: windows-latest } - - { name: windows-gallery-python3.12-upgraded , test-tox-env: gallery-py312-upgraded , python-ver: "3.12", os: windows-latest } - - { name: windows-gallery-python3.12-prerelease, test-tox-env: gallery-py312-prerelease, python-ver: "3.12", os: windows-latest } - # minimum versions of dependencies do not have wheels or cannot be built on macos-arm64 - - { name: macos-gallery-python3.8-minimum , test-tox-env: gallery-py38-minimum , python-ver: "3.8" , os: macos-13 } - - { name: macos-gallery-python3.12-upgraded , test-tox-env: gallery-py312-upgraded , python-ver: "3.12", os: macos-latest } - - { name: macos-gallery-python3.12-prerelease , test-tox-env: gallery-py312-prerelease, python-ver: "3.12", os: macos-latest } + - { name: linux-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } + - { name: linux-gallery-python3.13-upgraded , test-tox-env: gallery-py313-upgraded , python-ver: "3.13", os: ubuntu-latest } + - { name: linux-gallery-python3.13-prerelease , test-tox-env: gallery-py313-prerelease, python-ver: "3.13", os: ubuntu-latest } + - { name: windows-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: windows-latest } + - { name: windows-gallery-python3.13-upgraded , test-tox-env: gallery-py313-upgraded , python-ver: "3.13", os: windows-latest } + - { name: windows-gallery-python3.13-prerelease, test-tox-env: gallery-py313-prerelease, python-ver: "3.13", os: windows-latest } + - { name: macos-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: macos-13 } + - { name: macos-gallery-python3.13-upgraded , test-tox-env: gallery-py313-upgraded , python-ver: "3.13", os: macos-latest } + - { name: macos-gallery-python3.13-prerelease , test-tox-env: gallery-py313-prerelease, python-ver: "3.13", os: macos-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -140,13 +138,13 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } - - { name: conda-linux-python3.9 , test-tox-env: py39 , build-tox-env: build-py39 , python-ver: "3.9" , os: ubuntu-latest } - - { name: conda-linux-python3.10 , test-tox-env: py310 , build-tox-env: build-py310 , python-ver: "3.10", os: ubuntu-latest } - - { name: conda-linux-python3.11 , test-tox-env: py311 , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } - - { name: conda-linux-python3.12 , test-tox-env: py312 , build-tox-env: build-py312 , python-ver: "3.12", os: ubuntu-latest } - - { name: conda-linux-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: ubuntu-latest } - - { name: conda-linux-python3.12-prerelease, test-tox-env: py312-prerelease, build-tox-env: build-py312-prerelease, python-ver: "3.12", os: ubuntu-latest } + - { name: conda-linux-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } + - { name: conda-linux-python3.10 , test-tox-env: test-py310 , build-tox-env: build-py310 , python-ver: "3.10", os: ubuntu-latest } + - { name: conda-linux-python3.11 , test-tox-env: test-py311 , build-tox-env: build-py311 , python-ver: "3.11", os: ubuntu-latest } + - { name: conda-linux-python3.12 , test-tox-env: test-py312 , build-tox-env: build-py312 , python-ver: "3.12", os: ubuntu-latest } + - { name: conda-linux-python3.13 , test-tox-env: test-py313 , build-tox-env: build-py313 , python-ver: "3.13", os: ubuntu-latest } + - { name: conda-linux-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: ubuntu-latest } + - { name: conda-linux-python3.13-prerelease, test-tox-env: test-py313-prerelease, build-tox-env: build-py313-prerelease, python-ver: "3.13", os: ubuntu-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -201,9 +199,9 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-python3.12-ros3 , python-ver: "3.12", os: ubuntu-latest } - - { name: conda-windows-python3.12-ros3, python-ver: "3.12", os: windows-latest } - - { name: conda-macos-python3.12-ros3 , python-ver: "3.12", os: macos-latest } + - { name: conda-linux-python3.13-ros3 , python-ver: "3.13", os: ubuntu-latest } + - { name: conda-windows-python3.13-ros3, python-ver: "3.13", os: windows-latest } + - { name: conda-macos-python3.13-ros3 , python-ver: "3.13", os: macos-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -248,9 +246,9 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-gallery-python3.12-ros3 , python-ver: "3.12", os: ubuntu-latest } - - { name: conda-windows-gallery-python3.12-ros3, python-ver: "3.12", os: windows-latest } - - { name: conda-macos-gallery-python3.12-ros3 , python-ver: "3.12", os: macos-latest } + - { name: conda-linux-gallery-python3.13-ros3 , python-ver: "3.13", os: ubuntu-latest } + - { name: conda-windows-gallery-python3.13-ros3, python-ver: "3.13", os: windows-latest } + - { name: conda-macos-gallery-python3.13-ros3 , python-ver: "3.13", os: macos-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 diff --git a/.github/workflows/run_coverage.yml b/.github/workflows/run_coverage.yml index ec42694d8..da74ef08c 100644 --- a/.github/workflows/run_coverage.yml +++ b/.github/workflows/run_coverage.yml @@ -28,7 +28,7 @@ jobs: - { os: macos-latest , opt_req: false } env: OS: ${{ matrix.os }} - PYTHON: '3.12' + PYTHON: '3.13' steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 diff --git a/.github/workflows/run_dandi_read_tests.yml b/.github/workflows/run_dandi_read_tests.yml index cdde371c6..f4b27cbd8 100644 --- a/.github/workflows/run_dandi_read_tests.yml +++ b/.github/workflows/run_dandi_read_tests.yml @@ -25,7 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.13' - name: Install run dependencies run: | diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index e365d78cf..3395bc07d 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -19,13 +19,13 @@ jobs: fail-fast: false matrix: include: - - { name: linux-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } + - { name: linux-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } # NOTE config below with "upload-wheels: true" specifies that wheels should be uploaded as an artifact - - { name: linux-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: ubuntu-latest , upload-wheels: true } - - { name: windows-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: windows-latest } - - { name: windows-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: windows-latest } - # minimum versions of dependencies do not have wheels or cannot be built on macos-arm64 - - { name: macos-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: macos-13 } + - { name: linux-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: ubuntu-latest , upload-wheels: true } + - { name: windows-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: windows-latest } + - { name: windows-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: windows-latest } + - { name: macos-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: macos-13 } + - { name: macos-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13" , os: macos-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -79,10 +79,10 @@ jobs: fail-fast: false matrix: include: - - { name: linux-gallery-python3.8-minimum , test-tox-env: gallery-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } - - { name: linux-gallery-python3.12-upgraded , test-tox-env: gallery-py312-upgraded, python-ver: "3.12", os: ubuntu-latest } - - { name: windows-gallery-python3.8-minimum , test-tox-env: gallery-py38-minimum , python-ver: "3.8" , os: windows-latest } - - { name: windows-gallery-python3.12-upgraded, test-tox-env: gallery-py312-upgraded, python-ver: "3.12", os: windows-latest } + - { name: linux-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } + - { name: linux-gallery-python3.13-upgraded , test-tox-env: gallery-py313-upgraded, python-ver: "3.13", os: ubuntu-latest } + - { name: windows-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: windows-latest } + - { name: windows-gallery-python3.13-upgraded, test-tox-env: gallery-py313-upgraded, python-ver: "3.13", os: windows-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -120,8 +120,8 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-python3.8-minimum , test-tox-env: py38-minimum , build-tox-env: build-py38-minimum , python-ver: "3.8" , os: ubuntu-latest } - - { name: conda-linux-python3.12-upgraded , test-tox-env: py312-upgraded , build-tox-env: build-py312-upgraded , python-ver: "3.12", os: ubuntu-latest } + - { name: conda-linux-python3.9-minimum , test-tox-env: test-py39-minimum , build-tox-env: build-py39-minimum , python-ver: "3.9" , os: ubuntu-latest } + - { name: conda-linux-python3.13-upgraded , test-tox-env: test-py313-upgraded , build-tox-env: build-py313-upgraded , python-ver: "3.13", os: ubuntu-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -175,7 +175,7 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-python3.12-ros3 , python-ver: "3.12", os: ubuntu-latest } + - { name: conda-linux-python3.13-ros3 , python-ver: "3.13", os: ubuntu-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -220,7 +220,7 @@ jobs: fail-fast: false matrix: include: - - { name: conda-linux-gallery-python3.12-ros3 , python-ver: "3.12", os: ubuntu-latest } + - { name: conda-linux-gallery-python3.13-ros3 , python-ver: "3.13", os: ubuntu-latest } steps: - name: Cancel non-latest runs uses: styfle/cancel-workflow-action@0.11.0 @@ -280,7 +280,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.13' - name: Download wheel and source distributions from artifact uses: actions/download-artifact@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 773895dc5..fc360b840 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Added support for `model_number`, `model_name`, and `serial_number` fields to `Device`. @stephprince [#1997](https://github.com/NeurodataWithoutBorders/pynwb/pull/1997) - Deprecated `EventWaveform` neurodata type. @rly [#1940](https://github.com/NeurodataWithoutBorders/pynwb/pull/1940) - Deprecated `ImageMaskSeries` neurodata type. @rly [#1941](https://github.com/NeurodataWithoutBorders/pynwb/pull/1941) +- Removed python 3.8 support, added python 3.13 support. @stephprince [#2007](https://github.com/NeurodataWithoutBorders/pynwb/pull/2007) ## PyNWB 2.8.3 (November 19, 2024) diff --git a/docs/source/install_developers.rst b/docs/source/install_developers.rst index 428a7e592..ba964ff26 100644 --- a/docs/source/install_developers.rst +++ b/docs/source/install_developers.rst @@ -6,7 +6,7 @@ Installing PyNWB for Developers PyNWB has the following minimum requirements, which must be installed before you can get started using PyNWB. -#. Python 3.8, 3.9, 3.10, or 3.11 +#. Python 3.9, 3.10, 3.11, 3.12, or 3.13 #. pip @@ -54,11 +54,11 @@ Option 2: Using conda ^^^^^^^^^^^^^^^^^^^^^ First, install Anaconda_ to install the ``conda`` tool. Then create and -activate a new virtual environment called "venv" with Python 3.8 installed. +activate a new virtual environment called "venv" with Python 3.9 installed. .. code:: bash - conda create --name venv python=3.8 + conda create --name venv python=3.9 conda activate venv Similar to a virtual environment created with ``virtualenv``, a conda environment diff --git a/docs/source/install_users.rst b/docs/source/install_users.rst index 368ab7bd0..1bae5c754 100644 --- a/docs/source/install_users.rst +++ b/docs/source/install_users.rst @@ -6,7 +6,7 @@ Installing PyNWB PyNWB has the following minimum requirements, which must be installed before you can get started using PyNWB. -#. Python 3.8, 3.9, 3.10, or 3.11 +#. Python 3.9, 3.10, 3.11, 3.12, or 3.13 #. pip .. note:: If you are a developer then please see the :ref:`install_developers` installation instructions instead. diff --git a/environment-ros3.yml b/environment-ros3.yml index 081408f19..bc7483f1e 100644 --- a/environment-ros3.yml +++ b/environment-ros3.yml @@ -4,20 +4,19 @@ channels: - conda-forge - defaults dependencies: - - python==3.12 - - h5py==3.11.0 - - hdmf==3.14.3 - - matplotlib==3.8.4 - - numpy==2.1.1 - - pandas==2.2.2 + - python==3.13 + - h5py==3.12.1 + - hdmf==3.14.5 + - matplotlib==3.9.2 + - numpy==2.1.3 + - pandas==2.2.3 - python-dateutil==2.9.0 - setuptools - pytest==7.4.3 # pin to pytest < 8 because of incompatibilities to be addressed - fsspec==2024.6.0 - requests==2.32.3 - - aiohttp==3.9.5 + - aiohttp==3.11.7 - pip - pip: - remfile==0.1.13 - dandi==0.62.1 # NOTE: dandi is not available on conda for osx-arm64 - diff --git a/pyproject.toml b/pyproject.toml index 14a11f5d5..122fbd05b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,15 +14,15 @@ authors = [ ] description= "Package for working with Neurodata stored in the NWB format." readme = "README.rst" -requires-python = ">=3.8" +requires-python = ">=3.9" license = {text = "BSD-3-Clause"} classifiers = [ "Programming Language :: Python", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "License :: OSI Approved :: BSD License", "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", @@ -33,11 +33,11 @@ classifiers = [ "Topic :: Scientific/Engineering :: Medical Science Apps." ] dependencies = [ - "h5py>=2.10", + "h5py>=3.2.0", "hdmf>=3.14.5", - "numpy>=1.18", - "pandas>=1.1.5", - "python-dateutil>=2.7.3", + "numpy>=1.23.0", + "pandas>=1.2.0", + "python-dateutil>=2.8.2", ] dynamic = ["version"] # the build backend will compute the version dynamically from git tag (or a __version__) diff --git a/requirements-doc.txt b/requirements-doc.txt index 30c41106d..8ff798ff2 100644 --- a/requirements-doc.txt +++ b/requirements-doc.txt @@ -12,8 +12,8 @@ dataframe_image # used to render large dataframe as image in the sphinx galler lxml # used by dataframe_image when using the matplotlib backend hdf5plugin dandi>=0.46.6 -hdmf-zarr +hdmf-zarr>=0.3.0 zarr<3 # limited to zarr<3 until hdmf-zarr resolves issues with zarr 3.0 -linkml-runtime==1.7.4; python_version >= "3.9" -schemasheets==0.2.1; python_version >= "3.9" -oaklib==0.5.32; python_version >= "3.9" \ No newline at end of file +linkml-runtime==1.7.4; python_version >= "3.10" +schemasheets==0.2.1; python_version >= "3.10" +oaklib==0.5.32; python_version >= "3.10" \ No newline at end of file diff --git a/requirements-min.txt b/requirements-min.txt index feed604bc..c9dc53ee5 100644 --- a/requirements-min.txt +++ b/requirements-min.txt @@ -1,6 +1,6 @@ # minimum versions of package dependencies for installing PyNWB -h5py==2.10 # support for selection of datasets with list of indices added in 2.10 +h5py==3.2.0 hdmf==3.14.5 -numpy==1.18 -pandas==1.1.5 -python-dateutil==2.7.3 +numpy==1.24.0 +pandas==1.2.0 +python-dateutil==2.8.2 diff --git a/requirements-opt.txt b/requirements-opt.txt index a60e0c029..fa6a18806 100644 --- a/requirements-opt.txt +++ b/requirements-opt.txt @@ -1,6 +1,6 @@ -linkml-runtime==1.7.4; python_version >= "3.9" -schemasheets==0.2.1; python_version >= "3.9" -oaklib==0.5.32; python_version >= "3.9" +linkml-runtime==1.7.4 +schemasheets==0.2.1 +oaklib==0.5.32 # for streaming tests fsspec==2024.10.0 diff --git a/requirements.txt b/requirements.txt index 1e7a5e18d..ad3152f3e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ # pinned dependencies to reproduce an entire development environment to use PyNWB -h5py==3.11.0 +h5py==3.12.1 hdmf==3.14.5 numpy==2.1.1; python_version > "3.9" # numpy 2.1+ is not compatible with py3.9 numpy==2.0.2; python_version == "3.9" -pandas==2.2.2 +pandas==2.2.3 python-dateutil==2.9.0.post0 diff --git a/src/pynwb/__init__.py b/src/pynwb/__init__.py index 3a4d95e98..32f9ed4d9 100644 --- a/src/pynwb/__init__.py +++ b/src/pynwb/__init__.py @@ -64,11 +64,7 @@ def unload_type_config(**kwargs): hdmf_unload_type_config(type_map=type_map) def __get_resources() -> dict: - try: - from importlib.resources import files - except ImportError: - # TODO: Remove when python 3.9 becomes the new minimum - from importlib_resources import files + from importlib.resources import files __location_of_this_file = files(__name__) __core_ns_file_name = 'nwb.namespace.yaml' diff --git a/tests/integration/hdf5/test_ecephys.py b/tests/integration/hdf5/test_ecephys.py index 754c2a8f4..a2c0db4b5 100644 --- a/tests/integration/hdf5/test_ecephys.py +++ b/tests/integration/hdf5/test_ecephys.py @@ -1,3 +1,5 @@ +import numpy as np + from hdmf.common import DynamicTableRegion from pynwb import NWBFile @@ -26,7 +28,8 @@ def setUpContainer(self): description='a test ElectrodeGroup', location='a nonexistent place', device=self.dev1, - position=(1., 2., 3.)) + position=np.array((1, 2, 3), + dtype=np.dtype([('x', float), ('y', float), ('z', float)]))) return eg def addContainer(self, nwbfile): diff --git a/tox.ini b/tox.ini index 7920b6cd7..7deff7a70 100644 --- a/tox.ini +++ b/tox.ini @@ -4,174 +4,51 @@ # and then run "tox" from this directory. [tox] -envlist = py38, py39, py310, py311, py312 requires = pip >= 22.0 [testenv] download = True setenv = - PYTHONDONTWRITEBYTECODE = 1 - VIRTUALENV_PIP = 23.3.1 + PYTHONDONTWRITEBYTECODE = 1 + VIRTUALENV_PIP = 23.3.1 install_command = - python -m pip install -U {opts} {packages} - -deps = - -rrequirements-dev.txt - -rrequirements.txt -commands = - python -m pip check # Check for conflicting packages - python -m pip list - python test.py -v - -# Test with python 3.12; pinned dev reqs; upgraded run reqs -[testenv:py312-upgraded] -basepython = python3.12 -install_command = - python -m pip install -U {opts} {packages} -deps = - -rrequirements-dev.txt -commands = {[testenv]commands} - -# Test with python 3.11; optional and dev reqs (some features are not compatible with 3.12 yet) -[testenv:py311-optional] -basepython = python3.11 -deps = - -rrequirements-dev.txt - -rrequirements-opt.txt -commands = {[testenv]commands} - -# Test with python 3.12; pinned dev reqs; upgraded, pre-release run reqs -[testenv:py312-prerelease] -basepython = python3.12 -install_command = - python -m pip install -U --pre {opts} {packages} -deps = - -rrequirements-dev.txt -commands = {[testenv]commands} - -# Test with python 3.8; pinned dev reqs; minimum run reqs -[testenv:py38-minimum] -basepython = python3.8 -deps = - -rrequirements-dev.txt - -rrequirements-min.txt -commands = {[testenv]commands} - -# Envs that builds wheels and source distribution -[testenv:build] -commands = - python -m pip install --upgrade build - python -m build - -[testenv:build-py38] -basepython = python3.8 -commands = {[testenv:build]commands} - -[testenv:build-py39] -basepython = python3.9 -commands = {[testenv:build]commands} - -[testenv:build-py310] -basepython = python3.10 -commands = {[testenv:build]commands} - -[testenv:build-py311] -basepython = python3.11 -commands = {[testenv:build]commands} - -[testenv:build-py312] -basepython = python3.12 -commands = {[testenv:build]commands} - -[testenv:build-py312-upgraded] -basepython = python3.12 -install_command = - python -m pip install -U {opts} {packages} -deps = - -rrequirements-dev.txt -commands = {[testenv:build]commands} - -[testenv:build-py312-prerelease] -basepython = python3.12 -install_command = - python -m pip install -U --pre {opts} {packages} -deps = - -rrequirements-dev.txt -commands = {[testenv:build]commands} - -[testenv:build-py38-minimum] -basepython = python3.8 -deps = - -rrequirements-dev.txt - -rrequirements-min.txt -commands = {[testenv:build]commands} - -# Envs that will test installation from a wheel -[testenv:wheelinstall] -deps = null -commands = python -c "import pynwb" - -# Envs that will execute gallery tests that do not require ROS3 -# Test with pinned dev, doc, and run reqs -[testenv:gallery] -install_command = - python -m pip install -U {opts} {packages} -deps = - -rrequirements.txt -commands = - python -m pip install . - python -m pip install -r requirements-doc.txt # NOTE: allensdk (requirements-doc.txt) requires pynwb - python -m pip check - python -m pip list - python test.py --example - -[testenv:gallery-py38] -basepython = python3.8 -deps = {[testenv:gallery]deps} -commands = {[testenv:gallery]commands} - -[testenv:gallery-py39] -basepython = python3.9 -deps = {[testenv:gallery]deps} -commands = {[testenv:gallery]commands} - -[testenv:gallery-py310] -basepython = python3.10 -deps = {[testenv:gallery]deps} -commands = {[testenv:gallery]commands} - -[testenv:gallery-py311] -basepython = python3.11 -deps = {[testenv:gallery]deps} -commands = {[testenv:gallery]commands} - -# Test with python 3.12; pinned dev, and doc reqs; upgraded run reqs -[testenv:gallery-py312-upgraded] -basepython = python3.12 -deps = - -rrequirements-dev.txt + pinned, minimum, wheelinstall: python -m pip install {opts} {packages} + upgraded: python -m pip install -U {opts} {packages} + prerelease: python -m pip install -U --pre {opts} {packages} +deps = + # use pinned, minimum, or neither (use dependencies in pyproject.toml) + test, gallery, build: -rrequirements-dev.txt + gallery: -rrequirements-doc.txt + optional: -rrequirements-opt.txt + pinned: -rrequirements.txt + minimum: -rrequirements-min.txt commands = - python -m pip install -U . - python -m pip install -r requirements-doc.txt # NOTE: allensdk (requirements-doc.txt) requires pynwb - python -m pip check - python -m pip list - python test.py --example - -# Test with python 3.12; pinned dev, doc, and optional reqs; pre-release run reqs -[testenv:gallery-py312-prerelease] -basepython = python3.12 -deps = - -rrequirements-dev.txt -commands = - python -m pip install -U --pre . - python -m pip install -r requirements-doc.txt # NOTE: allensdk (requirements-doc.txt) requires pynwb - python -m pip check - python -m pip list - python test.py --example - -# Test with python 3.8; pinned dev and doc reqs; minimum run reqs -[testenv:gallery-py38-minimum] -basepython = python3.8 -deps = - -rrequirements-min.txt -commands = {[testenv:gallery]commands} + python --version # print python version for debugging + python -m pip check # check for conflicting packages + python -m pip list # list installed packages for debugging + test: python test.py -v + gallery: python test.py --example + build: python -m pip install -U build + build: python -m build + wheelinstall: python -c "import pynwb" + +# list of pre-defined environments. (Technically environments not listed here +# like build-py312 can also be used.) +[testenv:test-py313-upgraded] +[testenv:test-py313-prerelease] +[testenv:test-py311-optional-pinned] # some optional reqs not compatible with py312 yet +[testenv:test-py{39,310,311,312,313}-pinned] +[testenv:test-py39-minimum] + +[testenv:gallery-py313-upgraded] +[testenv:gallery-py313-prerelease] +[testenv:gallery-py311-optional-pinned] +[testenv:gallery-py{39,310,311,312,313}-pinned] +[testenv:gallery-py39-minimum] + +[testenv:build-py313-upgraded] +[testenv:build-py313-prerelease] +[testenv:build-py{39,310,311,312,313}-pinned] # using tox for this so that we can have a clean build environment +[testenv:build-py39-minimum] + +[testenv:wheelinstall] # use with `--installpkg dist/*-none-any.whl`