Skip to content

Commit 1b876e1

Browse files
committed
Merge branch 'main' of github.com:SpikeInterface/spikeinterface into fix-node-pipeline
2 parents b64669a + b1a7706 commit 1b876e1

27 files changed

Lines changed: 1376 additions & 318 deletions

doc/development/development.rst

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ for the :code:`spikeinterface.extractors` module, you can use the following comm
6161
6262
The markers are located in the :code:`pyproject.toml` file in the root of the repository.
6363

64-
Note that you should install the package before running the tests. You can do this by running the following command:
64+
Note that you should install spikeinterface before running the tests. You can do this by running the following command:
6565

6666
.. code-block:: bash
6767
@@ -72,7 +72,7 @@ You can change the :code:`[test,extractors,full]` to install only the dependenci
7272
The specific environment for the CI is specified in the :code:`.github/actions/build-test-environment/action.yml` and you can
7373
find the full tests in the :code:`.github/workflows/full_test.yml` file.
7474

75-
The extractor tests require datalad for some of the tests. Here are instructions for installing datalad:
75+
Some of the extractor tests require datalad. Here are instructions for installing datalad:
7676

7777
Installing Datalad
7878
------------------
@@ -87,13 +87,13 @@ Stylistic conventions
8787

8888
SpikeInterface maintains a consistent coding style across the project. This helps to ensure readability and
8989
maintainability of the code, making it easier for contributors to collaborate. To facilitate code style
90-
for the developer we use the follwing tools and conventions:
90+
for the developer we use the following tools and conventions:
9191

9292

9393
Install Black and pre-commit
9494
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9595

96-
We use the python formatter Black, with defaults set in the :code:`pyproject.toml`. This allows for
96+
We use the Python formatter Black, with defaults set in the :code:`pyproject.toml`. This allows for
9797
easy local formatting of code.
9898

9999
To install Black, you can use pip, the Python package installer. Run the following command in your terminal:
@@ -218,7 +218,7 @@ Adding new documentation
218218

219219
Documentation can be added as a
220220
`sphinx-gallery <https://sphinx-gallery.github.io/stable/index.html>`_
221-
python file ('tutorials')
221+
Python file ('tutorials')
222222
or a
223223
`sphinx rst <https://sphinx-tutorial.readthedocs.io/step-1/>`_
224224
file (all other sections).
@@ -242,7 +242,7 @@ To run code coverage locally, you can use the following command:
242242
243243
This will run the tests and generate a report in the :code:`htmlcov` folder. You can open the :code:`index.html` file in your browser to see the report.
244244

245-
Note, however, that the running time of the command above will be slow. If you want to run the tests for a specific module, you can use the following command:
245+
Note, however, that the running time of the command above will be quite long. If you want to run the tests for a specific module, you can use the following command:
246246

247247
.. code-block:: bash
248248
@@ -252,21 +252,21 @@ Implement a new extractor
252252
-------------------------
253253

254254
SpikeInterface already supports over 30 file formats, but the acquisition system you use might not be among the
255-
supported formats list (***ref***). Most of the extractors rely on the `NEO <https://github.com/NeuralEnsemble/python-neo>`_
255+
supported formats list (****ref****). Most of the extractors rely on the `NEO <https://github.com/NeuralEnsemble/python-neo>`_
256256
package to read information from files.
257257
Therefore, to implement a new extractor to handle the unsupported format, we recommend making a new :code:`neo.rawio.BaseRawIO` class (see `example <https://github.com/NeuralEnsemble/python-neo/blob/master/neo/rawio/examplerawio.py#L44>`_).
258258
Once that is done, the new class can be easily wrapped into SpikeInterface as an extension of the
259259
:py:class:`~spikeinterface.extractors.neoextractors.neobaseextractors.NeoBaseRecordingExtractor`
260260
(for :py:class:`~spikeinterface.core.BaseRecording` objects) or
261261
:py:class:`~spikeinterface.extractors.neoextractors.neobaseextractors.NeoBaseRecordingExtractor`
262262
(for :py:class:`~spikeinterface.core.BaseSorting` objects) or with a few lines of
263-
code (e.g., see reader for `SpikeGLX <https://github.com/SpikeInterface/spikeinterface/blob/0.96.1/spikeinterface/extractors/neoextractors/spikeglx.py>`_
264-
or `Neuralynx <https://github.com/SpikeInterface/spikeinterface/blob/0.96.1/spikeinterface/extractors/neoextractors/neuralynx.py>`_).
263+
code (e.g., see reader for `SpikeGLX <https://github.com/SpikeInterface/spikeinterface/blob/main/src/spikeinterface/extractors/neoextractors/spikeglx.py>`_
264+
or `Neuralynx <https://github.com/SpikeInterface/spikeinterface/blob/main/src/spikeinterface/extractors/neoextractors/neuralynx.py>`_).
265265

266-
**NOTE:** implementing a `neo.rawio` Class is not required, but recommended. Several extractors (especially) for :code:`Sorting`
266+
**NOTE:** implementing a `neo.rawio` class is not required, but recommended. Several extractors (especially) for :code:`Sorting`
267267
objects are implemented directly in SpikeInterface and inherit from the base classes.
268-
As examples, see the `CompressedBinaryIblExtractor <https://github.com/SpikeInterface/spikeinterface/blob/0.96.1/spikeinterface/extractors/cbin_ibl.py>`_
269-
for a :py:class:`~spikeinterface.core.BaseRecording` object, or the `SpykingCircusSortingExtractor <https://github.com/SpikeInterface/spikeinterface/blob/0.96.1/spikeinterface/extractors/spykingcircusextractors.py>`_
268+
As examples, see the `IblRecordingExtractor <https://github.com/SpikeInterface/spikeinterface/blob/main/src/spikeinterface/extractors/iblextractors.py>`_
269+
for a :py:class:`~spikeinterface.core.BaseRecording` object, or the `SpykingCircusSortingExtractor <https://github.com/SpikeInterface/spikeinterface/blob/main/src/spikeinterface/extractors/spykingcircusextractors.py>`_
270270
for a a :py:class:`~spikeinterface.core.BaseSorting` object.
271271

272272

@@ -309,7 +309,7 @@ Then, you can start creating a new class:
309309
310310
class MySpikeSorter(BaseSorter):
311311
"""
312-
Brief description (optional)
312+
Brief description
313313
"""
314314
315315
sorter_name = 'myspikesorter'
@@ -367,7 +367,7 @@ Now you can start filling out the required methods:
367367
def _check_apply_filter_in_params(cls, params):
368368
return False
369369
370-
#  optional
370+
# optional
371371
# can be implemented in subclass to check if the filter will be applied
372372
373373
@@ -388,10 +388,12 @@ Now you can start filling out the required methods:
388388
return sorting
389389
390390
When your spike sorter class is implemented, you have to add it to the list of available spike sorters in the
391-
`sorterlist.py`. Then you need to write a test in **tests/test_myspikesorter.py**. In order to be tested, you can
392-
install the required packages by changing the **pyproject.toml**. Note that MATLAB based tests cannot be run at the moment,
393-
but we recommend testing the implementation locally.
391+
`sorterlist.py <https://github.com/SpikeInterface/spikeinterface/blob/main/src/spikeinterface/sorters/sorterlist.py>`_ .
392+
Then you need to write a test in **tests/test_myspikesorter.py**. In order to be tested, you can
393+
install the required packages by changing the `pyproject.toml <https://github.com/SpikeInterface/spikeinterface/blob/main/pyproject.toml>`_.
394+
Note that MATLAB based tests cannot be run at the moment,but we recommend testing the implementation locally.
394395

395-
After this you need to add a block in **doc/sorters_info.rst** to describe your sorter.
396+
After this you need to add a block in `Install Sorters <https://github.com/SpikeInterface/spikeinterface/blob/main/doc/get_started/install_sorters.rst>`_
397+
to describe your sorter.
396398

397399
Finally, make a pull request so we can review the code and incorporate into the sorters module of SpikeInterface!

doc/get_started/quickstart.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ available parameters are dictionaries and can be accessed with:
287287
'detect_threshold': 5,
288288
'freq_max': 5000.0,
289289
'freq_min': 400.0,
290-
'max_threads_per_process': 1,
290+
'max_threads_per_worker': 1,
291291
'mp_context': None,
292292
'n_jobs': 20,
293293
'nested_params': None,

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ changelog = "https://spikeinterface.readthedocs.io/en/latest/whatisnew.html"
6161
extractors = [
6262
"MEArec>=1.8",
6363
"pynwb>=2.6.0",
64-
"hdmf-zarr>=0.5.0",
64+
"hdmf-zarr>=0.11.0",
6565
"pyedflib>=0.1.30",
6666
"sonpy;python_version<'3.10'",
6767
"lxml", # lxml for neuroscope
@@ -80,7 +80,7 @@ streaming_extractors = [
8080
"fsspec",
8181
"aiohttp",
8282
"requests",
83-
"hdmf-zarr>=0.5.0",
83+
"hdmf-zarr>=0.11.0",
8484
"remfile",
8585
"s3fs"
8686
]

src/spikeinterface/core/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,14 @@
9191
write_python,
9292
normal_pdf,
9393
)
94-
from .job_tools import ensure_n_jobs, ensure_chunk_size, ChunkRecordingExecutor, split_job_kwargs, fix_job_kwargs
94+
from .job_tools import (
95+
get_best_job_kwargs,
96+
ensure_n_jobs,
97+
ensure_chunk_size,
98+
ChunkRecordingExecutor,
99+
split_job_kwargs,
100+
fix_job_kwargs,
101+
)
95102
from .recording_tools import (
96103
write_binary_recording,
97104
write_to_h5_dataset_format,

src/spikeinterface/core/globals.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ def is_set_global_dataset_folder() -> bool:
9797

9898

9999
########################################
100-
_default_job_kwargs = dict(n_jobs=1, chunk_duration="1s", progress_bar=True, mp_context=None, max_threads_per_process=1)
100+
_default_job_kwargs = dict(
101+
pool_engine="thread", n_jobs=1, chunk_duration="1s", progress_bar=True, mp_context=None, max_threads_per_worker=1
102+
)
101103

102104
global global_job_kwargs
103105
global_job_kwargs = _default_job_kwargs.copy()

0 commit comments

Comments
 (0)