Skip to content

Commit 7b678a0

Browse files
authored
Merge pull request #1391 from NeuralEnsemble/release-notes
Release notes for 0.13.0
2 parents cd0d75b + 6995526 commit 7b678a0

File tree

8 files changed

+190
-49
lines changed

8 files changed

+190
-49
lines changed

LICENSE.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2010-2022, Neo authors and contributors
1+
Copyright (c) 2010-2024, Neo authors and contributors
22
All rights reserved.
33

44
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ For installation instructions, see doc/source/install.rst
5353

5454
To cite Neo in publications, see CITATION.txt
5555

56-
:copyright: Copyright 2010-2022 by the Neo team, see doc/source/authors.rst.
56+
:copyright: Copyright 2010-2024 by the Neo team, see doc/source/authors.rst.
5757
:license: 3-Clause Revised BSD License, see LICENSE.txt for details.
5858

5959
Funding

doc/old_stuffs/developers_guide.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ The :doc:`governance` document describes how decisions about the project are tak
248248

249249

250250
.. _Python: https://www.python.org
251-
.. _nose: https://nose.readthedocs.io/
252251
.. _Setuptools: https://pypi.python.org/pypi/setuptools/
253252
.. _tox: http://codespeak.net/tox/
254253
.. _coverage: https://coverage.readthedocs.io/

doc/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
# General information about the project.
5757
project = 'Neo'
58-
copyright = '2010-2023, ' + AUTHORS
58+
copyright = '2010-2024, ' + AUTHORS
5959

6060
# The version info for the project you're documenting, acts as replacement for
6161
# |version| and |release|, also used in various other places throughout the

doc/source/releases.rst

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

9+
releases/0.13.0.rst
910
releases/0.12.0.rst
1011
releases/0.11.1.rst
1112
releases/0.11.0.rst
@@ -35,74 +36,75 @@ Release notes
3536
Version 0.4.0
3637
-------------
3738

38-
* added StimfitIO
39-
* added KwikIO
40-
* significant improvements to AxonIO, BlackrockIO, BrainwareSrcIO, NeuroshareIO, PlexonIO, Spike2IO, TdtIO,
41-
* many test suite improvements
42-
* Container base class
39+
* added StimfitIO
40+
* added KwikIO
41+
* significant improvements to AxonIO, BlackrockIO, BrainwareSrcIO, NeuroshareIO, PlexonIO, Spike2IO, TdtIO,
42+
* many test suite improvements
43+
* Container base class
4344

4445

4546
Version 0.3.3
4647
-------------
4748

48-
* fix a bug in PlexonIO where some EventArrays only load 1 element.
49-
* fix a bug in BrainwareSrcIo for segments with no spikes.
49+
* fix a bug in PlexonIO where some EventArrays only load 1 element.
50+
* fix a bug in BrainwareSrcIo for segments with no spikes.
5051

5152

5253
Version 0.3.2
5354
-------------
5455

55-
* cleanup of io test code, with additional helper functions and methods
56-
* added BrainwareDamIo
57-
* added BrainwareF32Io
58-
* added BrainwareSrcIo
56+
* cleanup of io test code, with additional helper functions and methods
57+
* added BrainwareDamIo
58+
* added BrainwareF32Io
59+
* added BrainwareSrcIo
5960

6061

6162
Version 0.3.1
6263
-------------
6364

64-
* lazy/cascading improvement
65-
* load_lazy_olbject() in neo.io added
66-
* added NeuroscopeIO
65+
* lazy/cascading improvement
66+
* load_lazy_olbject() in neo.io added
67+
* added NeuroscopeIO
6768

6869

6970
Version 0.3.0
7071
-------------
7172

72-
* various bug fixes in neo.io
73-
* added ElphyIO
74-
* SpikeTrain performance improved
75-
* An IO class now can return a list of Block (see read_all_blocks in IOs)
76-
* python3 compatibility improved
73+
* various bug fixes in neo.io
74+
* added ElphyIO
75+
* SpikeTrain performance improved
76+
* An IO class now can return a list of Block (see read_all_blocks in IOs)
77+
* python3 compatibility improved
7778

7879

7980
Version 0.2.1
8081
-------------
8182

82-
* assorted bug fixes
83-
* added :func:`time_slice()` method to the :class:`SpikeTrain` and :class:`AnalogSignalArray` classes.
84-
* improvements to annotation data type handling
85-
* added PickleIO, allowing saving Neo objects in the Python pickle format.
86-
* added ElphyIO (see http://neuro-psi.cnrs.fr/spip.php?article943)
87-
* added BrainVisionIO (see https://brainvision.com/)
88-
* improvements to PlexonIO
89-
* added :func:`merge()` method to the :class:`Block` and :class:`Segment` classes
90-
* development was mostly moved to GitHub, although the issue tracker is still at neuralensemble.org/neo
83+
* assorted bug fixes
84+
* added :func:`time_slice()` method to the :class:`SpikeTrain` and :class:`AnalogSignalArray` classes.
85+
* improvements to annotation data type handling
86+
* added PickleIO, allowing saving Neo objects in the Python pickle format.
87+
* added ElphyIO (see http://neuro-psi.cnrs.fr/spip.php?article943)
88+
* added BrainVisionIO (see https://brainvision.com/)
89+
* improvements to PlexonIO
90+
* added :func:`merge()` method to the :class:`Block` and :class:`Segment` classes
91+
* development was mostly moved to GitHub, although the issue tracker is still at neuralensemble.org/neo
9192

9293

9394
Version 0.2.0
9495
-------------
9596

96-
New features compared to neo 0.1:
97-
* new schema more consistent.
98-
* new objects: RecordingChannelGroup, EventArray, AnalogSignalArray, EpochArray
99-
* Neuron is now Unit
100-
* use the quantities_ module for everything that can have units.
101-
* Some objects directly inherit from Quantity: SpikeTrain, AnalogSignal, AnalogSignalArray, instead of having an attribute for data.
102-
* Attributes are classified in 3 categories: necessary, recommended, free.
103-
* lazy and cascade keywords are added to all IOs
104-
* Python 3 support
105-
* better tests
97+
New features compared to Neo 0.1:
98+
99+
* new schema more consistent.
100+
* new objects: RecordingChannelGroup, EventArray, AnalogSignalArray, EpochArray
101+
* Neuron is now Unit
102+
* use the quantities_ module for everything that can have units.
103+
* Some objects directly inherit from Quantity: SpikeTrain, AnalogSignal, AnalogSignalArray, instead of having an attribute for data.
104+
* Attributes are classified in 3 categories: necessary, recommended, free.
105+
* lazy and cascade keywords are added to all IOs
106+
* Python 3 support
107+
* better tests
106108

107109

108110

doc/source/releases/0.12.0.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Neo 0.12.0 release notes
33
========================
44

5-
17th February 2022
5+
17th February 2023
66

77
.. currentmodule:: neo.io
88

doc/source/releases/0.13.0.rst

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
========================
2+
Neo 0.13.0 release notes
3+
========================
4+
5+
2nd February 2024
6+
7+
8+
This release of Neo sees a lot of changes and improvements, with a documentation rewrite,
9+
final tweaks and refinements to the object model (in anticipation of a 1.0 release in the next few months),
10+
a new approach to filtering objects of interest from complex datasets,
11+
and a large number of bug fixes and performance improvements in IO modules.
12+
23 people contributed to this release, which is a new record for Neo!
13+
14+
See all `pull requests`_ included in this release and the `list of closed issues`_.
15+
16+
17+
Refinements to the Neo object model
18+
-----------------------------------
19+
20+
In order to simplify the structure of Neo datasets, and make a clearer distinction between the Block-Segment-data
21+
hierarchy and the more flexible data-grouping functionality, we no longer allow Groups to contain Segments.
22+
23+
We have made the handling of RegionOfInterest subclasses consistent with :class:`ChannelView`,
24+
i.e., just as a :class:`ChannelView` gives a view of a subset of the channels in a multi-channel :class:`AnalogSignal`,
25+
so the :class:`RegionOfInterest`` subclasses give views of a subset of the pixels in an :class:`ImageSequence`.
26+
27+
Neo now has automatic handling of relationships between objects.
28+
In previous versions, the child-parent relationships between objects had to be handled manually,
29+
for example when you added a :class:`SpikeTrain` to a :class:`Segment`, this created a parent-child relationship,
30+
but the reverse child-parent relationship was not automatically created, leading to potential inconsistencies.
31+
Now these relationships are created automatically, as the various child lists
32+
(``Segment.spiketrains``, ``Segment.analogsignals``, ``Block.segments``, etc.)
33+
are now represented by pseudo-list objects which take care of the book-keeping behind the scenes.
34+
35+
As a convenience, all Neo containers (:class:`Block`, :class:`Segment`, :class:`Group`)
36+
now have an :meth:`add()` method that automatically puts the object in the correct list, for example::
37+
38+
segment.add(signal1, event2, spiketrain3)
39+
40+
instead of::
41+
42+
segment.analogsignals.append(signal1)
43+
segment.events.append(event2)
44+
segment.spiketrains.append(spiketrain3)
45+
46+
47+
Documentation rewrite and new theme
48+
-----------------------------------
49+
50+
The Neo documentation has had a complete overhaul,
51+
with a rewrite aimed at providing different entry points to the documentation for different_ user_ needs_,
52+
using the Sphinx IPython extension to ensure code snippets are always up-to-date,
53+
and a switch to the `PyData Sphinx theme`_.
54+
55+
Improved filtering
56+
------------------
57+
58+
For complex datasets, it is often necessary to extract subsets of the data from a Neo object tree by filtering
59+
based on object types, names, and annotations.
60+
Neo's filtering capabilities have been improved, with the addition of a new :mod:`filters` module.
61+
62+
For example, suppose we have a dataset from an animal performing a behavioural task.
63+
Our objective is to retain only the trials where the animal performed correctly,
64+
for one of the four trial types in the experiment, and where the recordings met certain quality criteria.
65+
Based on an annotated Neo dataset, we can extract the spike trains of interest in a single step,
66+
without for loops or complex list comprehensions, as follows:
67+
68+
.. code-block:: python
69+
70+
import neo.core.filters as nf
71+
72+
# ... load data, `trial` is a Segment object ...
73+
74+
sua_spiketrains = trial.filter(
75+
objects=neo.SpikeTrain,
76+
targdict=[
77+
{"sua": True}, # only single-unit activity
78+
{"electrode_reject_HFC": False}, # } exclude different types
79+
{"electrode_reject_LFC": False}, # } of artefacts
80+
{"electrode_reject_IFC": False}, # } or markers of poor-quality
81+
{"noise": False}, # } recordings
82+
{"spike_count": nf.FilterGreaterThan(10000)} # only use neurons with a sufficiently high firing rate
83+
]
84+
)
85+
86+
New IO modules
87+
--------------
88+
89+
Neo now supports MED_ format, with the new :class:`MedIO` and :class:`MedRawIO` classes.
90+
91+
92+
Bug fixes and improvements in IO modules
93+
----------------------------------------
94+
95+
Bug fixes and/or improvements have been made to :class:`AsciiSignalIO`, :class:`BCI2000IO`, :class:`BiocamIO`,
96+
:class:`BlackrockIO`, :class:`IgorIO`, :class:`IntanIO`, :class:`KlustaKwikIO`, :class:`MaxwellIO`, :class:`MEArecIO`,
97+
:class:`NeoMatlabIO`, :class:`NeuralynxIO`, :class:`NixIO`, :class:`NWBIO`, :class:`OpenEphysIO`, :class:`PlexonIO`,
98+
:class:`Plexon2IO`, :class:`SpikeGLXIO`, and :class:`TdtIO`.
99+
100+
Other changes
101+
-------------
102+
103+
- RawIO classes have a method :meth:`parse_header` that extracts all the information from the formats
104+
and therefore is usually a computationally heavy process.
105+
A flag ``is_header_parsed`` has now been added, to avoid re-extracting the header information
106+
if it is already available. This can produce significant speed ups.
107+
108+
- Type hints have been added to the :mod:`baseio`, :mod:`baserawio`, and :mod:`exampleio` modules,
109+
with the aim of helping developers who wish to add a new IO module.
110+
111+
- All of the code is now formatted with black_.
112+
113+
- The continuous integration (CI) pipeline has been sped up.
114+
115+
116+
Updated dependencies
117+
--------------------
118+
119+
Neo now requires NumPy version >=1.20.3.
120+
121+
122+
Acknowledgements
123+
----------------
124+
125+
Thanks to Julia Sprenger, Andrew Davison, Zach McKenzie, Alessio Buccino, Moritz Alexander Kern,
126+
Samuel Garcia, Heberto Mayorquin, Joscha Schmiedt, Daniel Crepeau, Divyansh Gupta, Nate Dolensek,
127+
Peter N. Steinmetz, Philipp Hornauer, Robert Wolff, Jules Lebert, Kyle Johnsen, Benjamin Heasly,
128+
Baptiste Grimaud, Cody Baker, Daniel P. Crepeau, Fernando J. Chaure, @Filipe, and Matthias Klumpp
129+
for their contributions to this release.
130+
131+
.. generated with git shortlog --since=2023-02-17 -sne then checking Github for PRs merged since the last release but with commits before then
132+
133+
.. _`list of closed issues`: https://github.com/NeuralEnsemble/python-neo/issues?q=is%3Aissue+milestone%3A0.13.0+is%3Aclosed
134+
.. _`pull requests`: https://github.com/NeuralEnsemble/python-neo/pulls?q=is%3Apr+is%3Aclosed+merged%3A%3E2023-02-17+milestone%3A0.13.0
135+
.. _`latest recommendations`: https://packaging.python.org/en/latest/
136+
.. _black: https://black.readthedocs.io
137+
.. _`PyData Sphinx theme`: https://pydata-sphinx-theme.readthedocs.io
138+
.. _MED: https://medformat.org
139+
.. _different: https://neo.readthedocs.io/en/latest/read_and_analyze.html
140+
.. _user: https://neo.readthedocs.io/en/latest/share_data.html
141+
.. _needs: https://neo.readthedocs.io/en/latest/use_neo_as_dependency.html

neo/test/README.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@ To run all tests:
22

33
$ python -m unittest discover
44

5-
If you have nose installed:
5+
If you have pytest installed:
66

7-
$ nosetests
7+
$ pytest
88

99

1010
To run tests from an individual file:
1111

1212
$ python test_analogsignal.py
13-
14-
(in all Python versions)
1513

14+
(in all Python versions)
1615

16+
For coverage:
1717

18-
For coverage
19-
nosetests --with-coverage --cover-erase --cover-package=neo
18+
$ pytest --cov=neo

0 commit comments

Comments
 (0)