Skip to content

Commit 4187dc1

Browse files
authored
Merge branch 'master' into better_error
2 parents c2cdbb8 + c672dbd commit 4187dc1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+3958
-1953
lines changed

.github/workflows/core-test.yml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,30 @@ jobs:
2525
fail-fast: true
2626
matrix:
2727
os: ["ubuntu-latest", "windows-latest", "macos-latest"]
28-
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
29-
numpy-version: ['1.24.4', '1.25.1', '1.26.4', '2.0.2','2.1.3', '2.2.4']
30-
# 1.24: 3.11, 1.25: 3.11, 1.26: 3.12
28+
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
29+
numpy-version: ['1.25.2', '1.26.4', '2.0.2','2.1.3', '2.2.6', '2.3.3']
30+
# 1.25: 3.11, 1.26: 3.12
3131
exclude:
32-
- python-version: '3.9'
33-
numpy-version: '2.1.3'
34-
- python-version: '3.9'
35-
numpy-version: '2.2.4'
36-
- python-version: '3.12'
37-
numpy-version: '1.24.4'
32+
- python-version: '3.10'
33+
numpy-version: '2.3.3'
3834
- python-version: '3.12'
39-
numpy-version: '1.25.1'
40-
- python-version: '3.13'
41-
numpy-version: '1.22.4'
42-
- python-version: '3.13'
43-
numpy-version: '1.23.5'
35+
numpy-version: '1.25.2'
4436
- python-version: '3.13'
45-
numpy-version: '1.24.4'
46-
- python-version: '3.13'
47-
numpy-version: '1.25.1'
37+
numpy-version: '1.25.2'
4838
- python-version: '3.13'
4939
numpy-version: '1.26.4'
5040
- python-version: '3.13'
5141
numpy-version: '2.0.2'
42+
- python-version: '3.14'
43+
numpy-version: '1.25.2'
44+
- python-version: '3.14'
45+
numpy-version: '1.26.4'
46+
- python-version: '3.14'
47+
numpy-version: '2.0.2'
48+
- python-version: '3.14'
49+
numpy-version: '2.1.3'
50+
- python-version: '3.14'
51+
numpy-version: '2.2.6'
5252

5353
steps:
5454
- name: Set up Python ${{ matrix.python-version }}

.github/workflows/io-test.yml

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ jobs:
1818
strategy:
1919
fail-fast: true
2020
matrix:
21-
python-version: ['3.9', '3.12']
22-
numpy-version: ['1.26', '2.0']
21+
python-version: ['3.10', '3.14']
22+
numpy-version: ['1.26', '2.3.3']
23+
exclude:
24+
- python-version: '3.10'
25+
numpy-version: '2.3.3'
26+
- python-version: '3.14'
27+
numpy-version: '1.26'
2328
defaults:
2429
# by default run in bash mode (required for conda usage)
2530
run:
@@ -82,17 +87,11 @@ jobs:
8287

8388
- name: Install git-annex
8489
# this is the trick from the spikeinterface repo for getting git-annex to work with datalad
90+
# see https://github.com/SpikeInterface/spikeinterface/pull/3877 for more info
8591
shell: bash
8692
run: |
8793
pip install datalad-installer
88-
wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
89-
mkdir /home/runner/work/installation
90-
mv git-annex-standalone-amd64.tar.gz /home/runner/work/installation/
91-
workdir=$(pwd)
92-
cd /home/runner/work/installation
93-
tar xvzf git-annex-standalone-amd64.tar.gz
94-
echo "$(pwd)/git-annex.linux" >> $GITHUB_PATH
95-
cd $workdir
94+
datalad-installer --sudo ok git-annex --method datalad/packages
9695
git config --global filter.annex.process "git-annex filter-process" # recommended for efficiency
9796
9897
- name: Configure git
@@ -120,13 +119,6 @@ jobs:
120119
# run: |
121120
# pip install --no-dependencies -e .
122121

123-
- name: Install wine
124-
run: |
125-
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
126-
sudo dpkg --add-architecture i386
127-
sudo apt-get update -qq
128-
sudo apt-get install -yqq --allow-downgrades libc6:i386 libgcc-s1:i386 libstdc++6:i386 wine
129-
130122
- name: Pip list
131123
run: |
132124
pip list
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
name: NeoPlexon2Test
2+
3+
on:
4+
workflow_dispatch:
5+
schedule:
6+
- cron: "0 12 * * 0" # weekly at noon UTC on Sundays
7+
8+
9+
jobs:
10+
build-and-test:
11+
name: Test on (${{ matrix.os }}) (${{ matrix.python-version}}) (${{ matrix.numpy-version }})
12+
runs-on: ${{ matrix.os }}
13+
strategy:
14+
fail-fast: true
15+
matrix:
16+
os: [ubuntu-latest]
17+
python-version: ['3.9', '3.12']
18+
numpy-version: ['1.26', '2.0']
19+
defaults:
20+
# by default run in bash mode (required for conda usage)
21+
run:
22+
shell: bash -l {0}
23+
steps:
24+
25+
- name: Checkout repository
26+
uses: actions/checkout@v4
27+
28+
- name: Get current year-month
29+
id: date
30+
run: echo "date=$(date +'%Y-%m')" >> $GITHUB_OUTPUT
31+
32+
- name: Get ephy_testing_data current head hash
33+
# the key depend on the last commit repo https://gin.g-node.org/NeuralEnsemble/ephy_testing_data.git
34+
id: ephy_testing_data
35+
run: |
36+
echo "dataset_hash=$(git ls-remote https://gin.g-node.org/NeuralEnsemble/ephy_testing_data.git HEAD | cut -f1)" >> $GITHUB_OUTPUT
37+
38+
- uses: actions/cache/restore@v4
39+
# Loading cache of ephys_testing_dataset
40+
id: cache-datasets
41+
with:
42+
path: ~/ephy_testing_data
43+
key: ${{ runner.os }}-datasets-${{ steps.ephy_testing_data.outputs.dataset_hash }}
44+
restore-keys: ${{ runner.os }}-datasets-
45+
46+
- uses: conda-incubator/setup-miniconda@v3
47+
with:
48+
activate-environment: neo-test-env-${{ matrix.python-version }}
49+
python-version: "${{ matrix.python-version }}"
50+
51+
- name: Install testing dependencies
52+
# testing environment is only created from yml if no cache was found
53+
# restore-key hits should result in `cache-hit` == 'false'
54+
#if: steps.cache-conda-env.outputs.cache-hit != 'true'
55+
run: |
56+
conda install pip numpy=${{ matrix.numpy-version }} -c conda-forge
57+
# this command is for updating cache. We are resting removal.
58+
# conda env update --name neo-test-env-${{ matrix.python-version }} --file environment_testing.yml --prune
59+
60+
- name: Install git-annex
61+
# this is the trick from the spikeinterface repo for getting git-annex to work with datalad
62+
# see https://github.com/SpikeInterface/spikeinterface/pull/3877 for more info
63+
shell: bash
64+
run: |
65+
pip install datalad-installer
66+
datalad-installer --sudo ok git-annex --method datalad/packages
67+
git config --global filter.annex.process "git-annex filter-process" # recommended for efficiency
68+
69+
- name: Configure git
70+
run: |
71+
git config --global user.email "neo_ci@fake_mail.com"
72+
git config --global user.name "neo CI"
73+
74+
- name: Python version
75+
run: |
76+
which python
77+
python --version
78+
79+
- name: Install neo including dependencies
80+
# installation with dependencies is only required if no cache was found
81+
# restore-key hits should result in `cache-hit` == 'false'
82+
# if: steps.cache-conda-env.outputs.cache-hit != 'true'
83+
run: |
84+
pip install --upgrade -e .
85+
pip install .[test]
86+
87+
88+
- name: Install wine
89+
run: |
90+
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
91+
sudo dpkg --add-architecture i386
92+
sudo apt-get update -qq
93+
sudo apt-get install -yqq --allow-downgrades libc6:i386 libgcc-s1:i386 libstdc++6:i386 wine
94+
95+
- name: Pip list
96+
run: |
97+
pip list
98+
99+
- name: Conda list
100+
run: |
101+
conda list
102+
103+
- name: Test with pytest
104+
env:
105+
HDF5_PLUGIN_PATH: ${{ github.workspace }}/hdf5_local_plugin_path
106+
PLEXON2_TEST: true
107+
run: |
108+
# only neo.rawio and neo.io
109+
pytest --cov=neo neo/test/rawiotest
110+
pytest --cov=neo neo/test/iotest

CODE_OF_CONDUCT.md

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,16 @@
1-
# Contributor Covenant Code of Conduct
1+
# [The NumFOCUS Code of Conduct](https://numfocus.org/code-of-conduct)
22

3-
## Our Pledge
3+
Neo subscribes to the NumFOCUS Code of Conduct.
44

5-
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
5+
## The Short Version
6+
Be kind to others. Do not insult or put down others. Behave professionally. Remember that harassment and sexist, racist, or exclusionary jokes are not appropriate for NumFOCUS.
67

7-
## Our Standards
8+
All communication should be appropriate for a professional audience including people of many different backgrounds. Sexual language and imagery is not appropriate.
89

9-
Examples of behavior that contributes to creating a positive environment include:
10+
NumFOCUS is dedicated to providing a harassment-free community for everyone, regardless of gender, sexual orientation, gender identity and expression, disability, physical appearance, body size, race, or religion. We do not tolerate harassment of community members in any form.
1011

11-
* Using welcoming and inclusive language
12-
* Being respectful of differing viewpoints and experiences
13-
* Gracefully accepting constructive criticism
14-
* Focusing on what is best for the community
15-
* Showing empathy towards other community members
12+
Thank you for helping make this a welcoming, friendly community for all.
1613

17-
Examples of unacceptable behavior by participants include:
14+
## The Complete Version
1815

19-
* The use of sexualized language or imagery and unwelcome sexual attention or advances
20-
* Trolling, insulting/derogatory comments, and personal or political attacks
21-
* Public or private harassment
22-
* Publishing others' private information, such as a physical or electronic address, without explicit permission
23-
* Other conduct which could reasonably be considered inappropriate in a professional setting
24-
25-
## Our Responsibilities
26-
27-
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28-
29-
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30-
31-
## Scope
32-
33-
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34-
35-
## Enforcement
36-
37-
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [email protected]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38-
39-
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40-
41-
## Attribution
42-
43-
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44-
45-
[homepage]: http://contributor-covenant.org
46-
[version]: http://contributor-covenant.org/version/1/4/
16+
The full version of the NumFOCUS Code of Conduct is available at the [NumFOCUS website](https://numfocus.org/code-of-conduct)

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Neo objects behave just like normal NumPy arrays, but with additional metadata,
2727
checks for dimensional consistency and automatic unit conversion.
2828

2929
A project with similar aims but for neuroimaging file formats is `NiBabel`_.
30+
Neo is a `NumFocus Affiliated Project`_.
3031

3132
Code status
3233
-----------
@@ -82,3 +83,4 @@ and by the European Union's Research and Innovation Program Horizon Europe Grant
8283
.. _`issue tracker`: https://github.c
8384
.. _tridesclous: https://github.com/tridesclous/tridesclous
8485
.. _ephyviewer: https://github.com/NeuralEnsemble/ephyviewer
86+
.. _`NumFocus Affiliated Project`: https://numfocus.org/sponsored-projects/affiliated-projects

codemeta.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
"license": "https://spdx.org/licenses/BSD-3-Clause",
55
"codeRepository": "https://github.com/NeuralEnsemble/python-neo",
66
"contIntegration": "https://github.com/NeuralEnsemble/python-neo/actions",
7-
"dateModified": "2025-04-14",
8-
"downloadUrl": "https://files.pythonhosted.org/packages/f1/81/618538a70b0a7db16a174da9a7b5e8aec65462ebcd8f1120cd41b583a8dd/neo-0.14.1.tar.gz",
7+
"dateModified": "2025-10-13",
8+
"downloadUrl": "https://files.pythonhosted.org/packages/12/74/2906034ce92f7fb76dac5f095dcbb2b061f55b1f6eda53fc45335c1689e2/neo-0.14.3.tar.gz",
99
"issueTracker": "https://github.com/NeuralEnsemble/python-neo/issues",
1010
"name": "Neo",
11-
"version": "0.14.1",
11+
"version": "0.14.3",
1212
"identifier": "RRID:SCR_000634",
1313
"description": "Neo is a Python package for working with electrophysiology data in Python, together with support for reading a wide range of neurophysiology file formats, including Spike2, NeuroExplorer, AlphaOmega, Axon, Blackrock, Plexon, Tdt, and support for writing to a subset of these formats plus non-proprietary formats including HDF5.\n\nThe goal of Neo is to improve interoperability between Python tools for analyzing, visualizing and generating electrophysiology data by providing a common, shared object model. In order to be as lightweight a dependency as possible, Neo is deliberately limited to represention of data, with no functions for data analysis or visualization.\n\nNeo is used by a number of other software tools, including SpykeViewer (data analysis and visualization), Elephant (data analysis), the G-node suite (databasing), PyNN (simulations), tridesclous_ (spike sorting) and ephyviewer (data visualization).\n\nNeo implements a hierarchical data model well adapted to intracellular and extracellular electrophysiology and EEG data with support for multi-electrodes (for example tetrodes). Neo's data objects build on the quantities package, which in turn builds on NumPy by adding support for physical dimensions. Thus Neo objects behave just like normal NumPy arrays, but with additional metadata, checks for dimensional consistency and automatic unit conversion.",
1414
"applicationCategory": "neuroscience",
15-
"releaseNotes": "https://neo.readthedocs.io/en/latest/releases/0.14.1.html",
15+
"releaseNotes": "https://neo.readthedocs.io/en/latest/releases/0.14.3.html",
1616
"funding": "https://cordis.europa.eu/project/id/945539",
1717
"developmentStatus": "active",
1818
"referencePublication": "https://doi.org/10.3389/fninf.2014.00010",
@@ -23,7 +23,7 @@
2323
"programmingLanguage": ["Python"],
2424
"operatingSystem": ["Linux", "Windows", "macOS"],
2525
"softwareRequirements": [
26-
"Python (version 3.9+)",
26+
"Python (version 3.10+)",
2727
"see https://github.com/NeuralEnsemble/python-neo/blob/master/pyproject.toml"
2828
],
2929
"relatedLink": ["https://neo.readthedocs.io", "https://neuralensemble.org/community"],
@@ -118,6 +118,9 @@
118118
{"@type": "Person", "givenName": "Tommaso", "familyName": "Lambresa"},
119119
{"@type": "Person", "givenName": "Rémi", "familyName": "Proville"},
120120
{"@type": "Person", "givenName": "Nina", "familyName": "Kudryashova"},
121-
{"@type": "Person", "givenName": "Paul", "familyName": "Adkisson"}
121+
{"@type": "Person", "givenName": "Paul", "familyName": "Adkisson"},
122+
{"@type": "Person", "givenName": "Akshaj", "familyName": "Verma"},
123+
{"@type": "Person", "givenName": "Letizia", "familyName": "Signorelli"},
124+
{"@type": "Person", "givenName": "Daniel", "familyName": "Parthier"}
122125
]
123126
}

doc/source/authors.rst

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ and may not be the current affiliation of a contributor.
7171
* Daniel P. Crepeau [30]
7272
* Divyansh Gupta [31]
7373
* Nate Dolensek [3]
74-
* Philipp Hornauer [32]
75-
* Robert Wolff
74+
* Philipp Hornauer [32, 45]
75+
* Robert Wolff [42]
7676
* Jules Lebert [33]
7777
* Benjamin Heasly
7878
* Baptiste Grimaud [34]
@@ -94,6 +94,10 @@ and may not be the current affiliation of a contributor.
9494
* Nina Kudryashova [37]
9595
* Rémi Proville [44]
9696
* Paul Adkisson [24]
97+
* Luiz Tauffer [24]
98+
* Akshaj Verma [46]
99+
* Letizia Signorelli [47]
100+
* Daniel Parthier [48]
97101

98102
1. Centre de Recherche en Neuroscience de Lyon, CNRS UMR5292 - INSERM U1028 - Université Claude Bernard Lyon 1
99103
2. Unité de Neuroscience, Information et Complexité, CNRS UPR 3293, Gif-sur-Yvette, France
@@ -136,9 +140,13 @@ and may not be the current affiliation of a contributor.
136140
39. Massachusetts General Hospital, Department of Molecular Biology
137141
40. Plexon Inc.
138142
41. Paris Brain Institute
139-
42. Istituto Italiano di Tecnologia (IIT), Italy
143+
42. Istituto Italiano di Tecnologia (IIT), Genoa, Italy
140144
43. University of Genoa, Italy
141145
44. AquiNeuro, SAS
146+
45. Maxwell Biosystems AG
147+
46. Brain Center, University Medical Center Utrecht, Utrecht University, The Netherlands
148+
47. Centre for Molecular Medicine Norway (NCMM), University of Oslo, Norway
149+
48. Charité - Universitätmedizin Berlin, Freie Universität Berlin and Humboldt Universität zu Berlin
142150

143151

144152

doc/source/conf.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,7 @@
247247

248248
rst_epilog = """
249249
.. |neo_github_url| replace:: https://github.com/NeuralEnsemble/python-neo/archive/neo-{}.zip
250-
""".format(
251-
neo_release
252-
)
250+
""".format(neo_release)
253251

254252
sphinx_gallery_conf = {
255253
# 'only_warn_on_example_error': True, # helps with debugging broken examples

doc/source/governance.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ Governance
55
Neo is a community-developed project,
66
we welcome contributions from anyone who is interested in the project.
77
The project maintainers are the members of the `Neo maintainers team`_.
8-
All contributors agree to abide by the Code of Conduct, see the file `CODE_OF_CONDUCT.md`_.
8+
All contributors agree to abide by the `NumFocus Code of Conduct`_,
9+
see the file `CODE_OF_CONDUCT.md`_.
910

1011
Contributions
1112
=============
@@ -38,6 +39,7 @@ The current maintainers are:
3839
- Julia Sprenger (`@JuliaSprenger`_)
3940
- Michael Denker (`@mdenker`_)
4041
- Alessio Buccino (`@alejoe91`_)
42+
- Zach McKenzie (`@zm711`_)
4143

4244

4345
.. _`Neo maintainers team`: https://github.com/orgs/NeuralEnsemble/teams/neo-maintainers
@@ -47,3 +49,5 @@ The current maintainers are:
4749
.. _`@JuliaSprenger`: https://github.com/JuliaSprenger
4850
.. _`@mdenker`: https://github.com/mdenker
4951
.. _`@alejoe91`: https://github.com/alejoe91
52+
.. _`@zm711`: https://github.com/zm711
53+
.. _`NumFocus Code of Conduct`: https://numfocus.org/code-of-conduct

doc/source/releases.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Release notes
66
.. toctree::
77
:maxdepth: 1
88

9+
releases/0.14.3.rst
10+
releases/0.14.2.rst
911
releases/0.14.1.rst
1012
releases/0.14.0.rst
1113
releases/0.13.4.rst

0 commit comments

Comments
 (0)