Skip to content

Commit 68e524a

Browse files
authored
Release 1.5.0
2 parents 7c82f8a + c942077 commit 68e524a

11 files changed

+103
-16
lines changed

doc/examples.rst

+10
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,13 @@ Viewers from Neo objects
9090
:download:`viewers_with_neo_objects.py <../examples/viewers_with_neo_objects.py>`
9191

9292
.. literalinclude:: ../examples/viewers_with_neo_objects.py
93+
94+
95+
Viewers for SpikeInterface objects
96+
----------------------------------
97+
98+
.. image:: img/viewers_with_spikeinterface_objects.png
99+
100+
:download:`viewers_with_spikeinterface_objects.py <../examples/viewers_with_spikeinterface_objects.py>`
101+
102+
.. literalinclude:: ../examples/viewers_with_spikeinterface_objects.py
Loading

doc/installation.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ Installation
44
============
55

66
Requirements:
7-
* Python ≥ 3.5
7+
* Python ≥ 3.7
88
* numpy
99
* scipy
1010
* matplotlib ≥ 2.0
1111
* pyqtgraph ≥ 0.10.0
12-
* PyQt5, PySide2, or PyQt4 (manual installation required)
12+
* PyQt5 or PySide2 (manual installation required)
1313

1414
Optional dependencies:
1515
* Neo ≥ 0.6 (standalone app and Neo sources)

doc/releasenotes.rst

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Release Notes
66
.. toctree::
77
:maxdepth: 1
88

9+
releases/1.5.0.rst
910
releases/1.4.0.rst
1011
releases/1.3.1.rst
1112
releases/1.3.0.rst

doc/releases/1.5.0.rst

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
Version 1.5.0
2+
-------------
3+
4+
2021-09-09
5+
6+
Compatibility
7+
.............
8+
9+
Support for Python < 3.7 and for PyQt4 were dropped.
10+
11+
* Add compatibility with Neo 0.10.0
12+
(:pr:`151`, :pr:`157`, :pr:`159`)
13+
14+
* Add PySide2 support
15+
(:pr:`148`)
16+
17+
New data sources
18+
................
19+
20+
* Add data sources for SpikeInterface recording and sorting objects
21+
(:pr:`153`)
22+
23+
Continuous integration
24+
......................
25+
26+
* Run automated test suite with GitHub Actions
27+
(:pr:`137`, :pr:`138`, :pr:`142`, :pr:`145`, :pr:`149`)
28+
29+
* Add manually-triggerable GitHub Action workflows for publishing to PyPI
30+
(:pr:`140`)
31+
32+
* Add Coveralls test coverage reporting
33+
(:pr:`144`)

ephyviewer/datasource/epochs.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self, epoch=None, possible_labels=[], color_labels=None, channel_na
7777
# add labels missing from possible_labels but found in epoch data
7878
new_labels_from_data = list(set(epoch['label'])-set(self.possible_labels))
7979
if restrict_to_possible_labels:
80-
assert len(new_labels_from_data)==0, 'epoch data contains labels not found in possible_labels: ' + str(new_labels_from_data)
80+
assert len(new_labels_from_data)==0, f'epoch data contains labels not found in possible_labels: {new_labels_from_data}'
8181
self.possible_labels += new_labels_from_data
8282

8383
# put the epochs into a canonical order after loading

ephyviewer/datasource/spikeinterfacesources.py

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
2-
Integrate
2+
Data sources for SpikeInterface
33
"""
44

55
from .sourcebase import BaseDataSource
@@ -11,9 +11,8 @@
1111
try:
1212
from distutils.version import LooseVersion as V
1313
import spikeinterface
14-
if V(spikeinterface.__version__)>='0.90.0':
14+
if V(spikeinterface.__version__)>='0.90.1':
1515
HAVE_SI = True
16-
from neo.rawio.baserawio import BaseRawIO
1716
else:
1817
HAVE_SI = False
1918
except ImportError:
@@ -24,10 +23,10 @@
2423
from .spikes import BaseSpikeSource
2524

2625

27-
class FromSpikeinterfaceRecordingSource(BaseAnalogSignalSource):
26+
class SpikeInterfaceRecordingSource(BaseAnalogSignalSource):
2827
def __init__(self, recording, segment_index=0):
2928
BaseAnalogSignalSource.__init__(self)
30-
29+
3130
self.recording = recording
3231
self.segment_index = segment_index
3332

@@ -67,13 +66,13 @@ def index_to_time(self, ind):
6766

6867

6968

70-
class FromSpikeinterfaceSorintgSource(BaseSpikeSource):
69+
class SpikeInterfaceSortingSource(BaseSpikeSource):
7170
def __init__(self, sorting, segment_index=0):
7271
BaseSpikeSource.__init__(self)
73-
72+
7473
self.sorting = sorting
7574
self.segment_index = segment_index
76-
75+
7776
#TODO
7877
self._t_stop = 10.
7978

ephyviewer/tests/test_datasource.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,13 @@ def test_spikeinterface_sources():
159159
from spikeinterface.core.testing_tools import generate_recording, generate_sorting
160160

161161
recording = generate_recording()
162-
source = ephyviewer.FromSpikeinterfaceRecordingSource(recording=recording)
162+
source = ephyviewer.SpikeInterfaceRecordingSource(recording=recording)
163163
print(source)
164164

165165
print(source.t_start, source.nb_channel, source.sample_rate)
166166

167167
sorting = generate_sorting()
168-
source = ephyviewer.FromSpikeinterfaceSorintgSource(sorting=sorting)
168+
source = ephyviewer.SpikeInterfaceSortingSource(sorting=sorting)
169169
print(source)
170170

171171
print(source.t_start, source.nb_channel, source.get_channel_name())

ephyviewer/tests/test_spikeinterfaceviewer.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ def test_spikeinterface_viewer(interactive=False):
88
import spikeinterface as si
99
from spikeinterface.core.testing_tools import generate_recording, generate_sorting
1010

11+
1112
recording = generate_recording()
12-
sig_source = ephyviewer.FromSpikeinterfaceRecordingSource(recording=recording)
13+
sig_source = ephyviewer.SpikeInterfaceRecordingSource(recording=recording)
1314

1415
sorting = generate_sorting()
15-
spike_source = ephyviewer.FromSpikeinterfaceSorintgSource(sorting=sorting)
16+
spike_source = ephyviewer.SpikeInterfaceSortingSource(sorting=sorting)
1617

1718
app = ephyviewer.mkQApp()
1819
win = ephyviewer.MainViewer(debug=True, show_auto_scale=True)

ephyviewer/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = '1.4.1.dev'
1+
version = '1.5.0'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""
2+
Here is an example of opening viewers directly from spikeinterface objects : recording and sorting.
3+
4+
In this example, recording and sorting are fake ones generated by spikeinterface but of you course
5+
you can use any format supported by spikeinterface.
6+
7+
Note that you can display any lazy preprocessor from
8+
`spikeinterface.toolkit.preprocessing` (filtering, denoising, whittening, ...) so you can see immediatly
9+
the clean signal.
10+
11+
12+
13+
"""
14+
import ephyviewer
15+
import spikeinterface.full as si
16+
from spikeinterface.core.testing_tools import generate_recording, generate_sorting
17+
18+
19+
recording = generate_recording()
20+
sig_source = ephyviewer.SpikeInterfaceRecordingSource(recording=recording)
21+
22+
filtered_recording = si.bandpass_filter(recording, freq_min=60., freq_max=100.)
23+
sig_filtered_source = ephyviewer.SpikeInterfaceRecordingSource(recording=filtered_recording)
24+
25+
sorting = generate_sorting()
26+
spike_source = ephyviewer.SpikeInterfaceSortingSource(sorting=sorting)
27+
28+
app = ephyviewer.mkQApp()
29+
win = ephyviewer.MainViewer(debug=True, show_auto_scale=True)
30+
31+
view = ephyviewer.TraceViewer(source=sig_source, name='signals')
32+
win.add_view(view)
33+
34+
view = ephyviewer.TraceViewer(source=sig_filtered_source, name='signals filtered')
35+
win.add_view(view)
36+
37+
view = ephyviewer.SpikeTrainViewer(source=spike_source, name='spikes')
38+
win.add_view(view)
39+
40+
41+
win.show()
42+
app.exec_()
43+

0 commit comments

Comments
 (0)