Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ body:
label: Python Version
options:
- "lower version (unsupported)"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate_test_files.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
matrix:
include:
- { name: pynwb-1.5.1, pynwb-version: "1.5.1", python-version: "3.8"}
- { name: pynwb-2.1.0, pynwb-version: "2.1.0", python-version: "3.9"}
- { name: pynwb-2.1.0, pynwb-version: "2.1.0", python-version: "3.10"}
steps:
- uses: actions/checkout@v4
with:
Expand Down
18 changes: 7 additions & 11 deletions .github/workflows/run_all_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,21 @@ jobs:
fail-fast: false
matrix:
include:
- { 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-pinned , build-tox-env: build-py310-pinned , python-ver: "3.10", os: ubuntu-latest }
- { name: linux-python3.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10", os: ubuntu-latest }
- { name: linux-python3.11 , test-tox-env: test-py311-pinned , build-tox-env: build-py311-pinned , python-ver: "3.11", os: ubuntu-latest }
- { name: linux-python3.11-opt , test-tox-env: test-py311-optional-pinned, build-tox-env: build-py311-pinned , python-ver: "3.11", os: ubuntu-latest }
- { name: linux-python3.12 , test-tox-env: test-py312-pinned , build-tox-env: build-py312-pinned , python-ver: "3.12", os: ubuntu-latest }
- { name: linux-python3.13 , test-tox-env: test-py313-pinned , build-tox-env: build-py313-pinned , 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-pinned , build-tox-env: build-py310-pinned , python-ver: "3.10", os: windows-latest }
- { name: windows-python3.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10", os: windows-latest }
- { name: windows-python3.11 , test-tox-env: test-py311-pinned , build-tox-env: build-py311-pinned , python-ver: "3.11", os: windows-latest }
- { name: windows-python3.11-opt , test-tox-env: test-py311-optional-pinned, build-tox-env: build-py311-pinned , python-ver: "3.11", os: windows-latest }
- { name: windows-python3.12 , test-tox-env: test-py312-pinned , build-tox-env: build-py312-pinned , python-ver: "3.12", os: windows-latest }
- { name: windows-python3.13 , test-tox-env: test-py313-pinned , build-tox-env: build-py313-pinned , 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-pinned , build-tox-env: build-py310-pinned , python-ver: "3.10", os: macos-latest }
- { name: macos-python3.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10", os: macos-latest }
- { name: macos-python3.11 , test-tox-env: test-py311-pinned , build-tox-env: build-py311-pinned , python-ver: "3.11", os: macos-latest }
- { name: macos-python3.11-opt , test-tox-env: test-py311-optional-pinned, build-tox-env: build-py311-pinned , python-ver: "3.11", os: macos-latest }
- { name: macos-python3.12 , test-tox-env: test-py312-pinned , build-tox-env: build-py312-pinned , python-ver: "3.12", os: macos-latest }
Expand Down Expand Up @@ -92,13 +89,13 @@ jobs:
fail-fast: false
matrix:
include:
- { name: linux-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: ubuntu-latest }
- { name: linux-gallery-python3.10-minimum , test-tox-env: gallery-py310-minimum , python-ver: "3.10", 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.10-minimum , test-tox-env: gallery-py310-minimum , python-ver: "3.10", 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.10-minimum , test-tox-env: gallery-py310-minimum , python-ver: "3.10", os: macos-latest }
- { 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:
Expand Down Expand Up @@ -138,8 +135,7 @@ jobs:
fail-fast: false
matrix:
include:
- { 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-pinned , build-tox-env: build-py310-pinned , python-ver: "3.10", os: ubuntu-latest }
- { name: conda-linux-python3.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10", os: ubuntu-latest }
- { name: conda-linux-python3.11 , test-tox-env: test-py311-pinned , build-tox-env: build-py311-pinned , python-ver: "3.11", os: ubuntu-latest }
- { name: conda-linux-python3.12 , test-tox-env: test-py312-pinned , build-tox-env: build-py312-pinned , python-ver: "3.12", os: ubuntu-latest }
- { name: conda-linux-python3.13 , test-tox-env: test-py313-pinned , build-tox-env: build-py313-pinned , python-ver: "3.13", os: ubuntu-latest }
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ jobs:
fail-fast: false
matrix:
include:
- { 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-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10" , os: ubuntu-latest }
# NOTE config below with "upload-wheels: true" specifies that wheels should be uploaded as an artifact
- { 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.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10" , 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.10-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10" , 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
Expand Down Expand Up @@ -79,9 +79,9 @@ jobs:
fail-fast: false
matrix:
include:
- { name: linux-gallery-python3.9-minimum , test-tox-env: gallery-py39-minimum , python-ver: "3.9" , os: ubuntu-latest }
- { name: linux-gallery-python3.10-minimum , test-tox-env: gallery-py310-minimum , python-ver: "3.10" , 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.10-minimum , test-tox-env: gallery-py310-minimum , python-ver: "3.10" , 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
Expand Down Expand Up @@ -120,7 +120,7 @@ jobs:
fail-fast: false
matrix:
include:
- { 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-minimum , test-tox-env: test-py310-minimum , build-tox-env: build-py310-minimum , python-ver: "3.10" , 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
Expand Down
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
- Fixed import structure test. @rly [#2136](https://github.com/NeurodataWithoutBorders/pynwb/pull/2136)

### Changed
- Change UI of documentation assistant to be an accordion that is always visible. @bendichter [#2124](https://github.com/NeurodataWithoutBorders/pynwb/pull/2124)
- Changed UI of documentation assistant to be an accordion that is always visible. @bendichter [#2124](https://github.com/NeurodataWithoutBorders/pynwb/pull/2124)
- Deprecated Python 3.9 support. (EOL was Oct 31, 2025) @bendichter [#2141](https://github.com/NeurodataWithoutBorders/pynwb/pull/2141)


## PyNWB 3.1.2 (August 13, 2025)
Expand Down
6 changes: 3 additions & 3 deletions docs/source/install_developers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.9, 3.10, 3.11, 3.12, or 3.13
#. Python 3.10, 3.11, 3.12, or 3.13
#. pip


Expand Down Expand Up @@ -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.9 installed.
activate a new virtual environment called "venv" with Python 3.10 installed.

.. code:: bash

conda create --name venv python=3.9
conda create --name venv python=3.10
conda activate venv

Similar to a virtual environment created with ``virtualenv``, a conda environment
Expand Down
4 changes: 1 addition & 3 deletions docs/source/install_users.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.9, 3.10, 3.11, 3.12, or 3.13
#. Python 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.
Expand Down Expand Up @@ -53,5 +53,3 @@ own project against the latest version of PyNWB.
.. code::

$ pip install -U pynwb --find-links https://github.com/NeurodataWithoutBorders/pynwb/releases/tag/latest --no-index


4 changes: 1 addition & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@ authors = [
]
description= "Package for working with Neurodata stored in the NWB format."
readme = "README.rst"
requires-python = ">=3.9"
requires-python = ">=3.10"
license = {text = "BSD-3-Clause"}
classifiers = [
"Programming Language :: Python",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
Expand Down Expand Up @@ -122,4 +121,3 @@ line-length = 120

[tool.ruff.lint.mccabe]
max-complexity = 17

8 changes: 4 additions & 4 deletions requirements-min.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# minimum versions of package dependencies for installing PyNWB
h5py==3.2.0
h5py==3.15.1
hdmf==4.1.1
numpy==1.24.0
pandas==1.2.0
numpy==2.2.6
pandas==2.3.3
python-dateutil==2.8.2
platformdirs==4.1.0
platformdirs==4.1.0
3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# pinned dependencies to reproduce an entire development environment to use PyNWB
h5py==3.12.1
hdmf==4.1.1
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"
numpy==2.1.1
pandas==2.2.3
python-dateutil==2.9.0.post0
platformdirs==4.3.6
Binary file added test_pynwb_io_nwbhdf5.h5
Binary file not shown.
14 changes: 7 additions & 7 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# and then run "tox" from this directory.

[tox]
envlist = test-py{39,310,311,312,313}-pinned
envlist = test-py{310,311,312,313}-pinned
requires = pip >= 22.0

[testenv]
Expand Down Expand Up @@ -37,18 +37,18 @@ commands =
[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:test-py{310,311,312,313}-pinned]
[testenv:test-py310-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:gallery-py{310,311,312,313}-pinned]
[testenv:gallery-py310-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:build-py{310,311,312,313}-pinned] # using tox for this so that we can have a clean build environment
[testenv:build-py310-minimum]

[testenv:wheelinstall] # use with `--installpkg dist/*-none-any.whl`
Loading