You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi! I would have a question:
I loaded back one of my external KS and Phy curated outputs to SortingAnalyzer and I've been able to calculate the various nice quality metrics but somehow I am not able to save the data (and the generated plots) as a report because (I think) there are NaNs or INFs in my unit metrics table (this is just a guess, maybe it is due to something else).
Interestingly, I am still able to save the results as a .csv, like this:
from spikeinterface.qualitymetrics import compute_quality_metrics
df = compute_quality_metrics(analyzer_clean)
df.to_csv(".../analyzer_Test_KS1/test.csv")
I just cannot do the "report" and the "web-based viewer", which also worked well earlier with your tutorial data (so it should not be an installing issue, I hope).
Thanks so much in advance for any input!
I got the following warning and error when exporting the results:
---------------------------------------------------------------------------
**Warning:**
---------------------------------------------------------------------------
[C:\Users\cashlab\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\unit_depths.py:77](file:///C:/Users/cashlab/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_depths.py:77): UserWarning: Attempting to set identical low and high xlims makes transformation singular; automatically expanding.
ax.set_xlim(0, max(dp.unit_amplitudes) * 1.2)
---------------------------------------------------------------------------
**Error 1**
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[50], line 2
1 # export spike sorting report to a folder
----> 2 si.export_report(analyzer_clean, base_folder / 'report_Test_KS1', format='png')
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\exporters\report.py:144, in export_report(sorting_analyzer, output_folder, remove_if_exists, format, show_figures, peak_sign, force_computation, **job_kwargs)
[139](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:139) for unit_id in unit_ids:
[140](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:140) fig = plt.figure(
[141](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:141) constrained_layout=False,
[142](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:142) figsize=(15, 7),
[143](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:143) )
--> [144](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:144) sw.plot_unit_summary(sorting_analyzer, unit_id, figure=fig)
[145](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:145) fig.suptitle(f"unit {unit_id}")
[146](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/exporters/report.py:146) fig.savefig(units_folder / f"{unit_id}.{format}")
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\unit_summary.py:60, in UnitSummaryWidget.__init__(self, sorting_analyzer, unit_id, unit_colors, sparsity, radius_um, backend, **backend_kwargs)
[51](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:51) unit_colors = get_unit_colors(sorting_analyzer.sorting)
[53](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:53) plot_data = dict(
[54](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:54) sorting_analyzer=sorting_analyzer,
[55](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:55) unit_id=unit_id,
[56](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:56) unit_colors=unit_colors,
[57](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:57) sparsity=sparsity,
[58](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:58) )
---> [60](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:60) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs)
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\base.py:87, in BaseWidget.__init__(self, data_plot, backend, immediate_plot, **backend_kwargs)
[84](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:84) self.backend_kwargs = backend_kwargs_
[86](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:86) if immediate_plot:
---> [87](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:87) self.do_plot()
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\base.py:108, in BaseWidget.do_plot(self)
[106](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:106) def do_plot(self):
[107](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:107) func = getattr(self, f"plot_{self.backend}")
--> [108](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:108) func(self.data_plot, **self.backend_kwargs)
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\unit_summary.py:107, in UnitSummaryWidget.plot_matplotlib(self, data_plot, **backend_kwargs)
[105](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:105) unit_location = unit_locations[unit_id]
[106](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:106) x, y = unit_location[0], unit_location[1]
--> [107](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:107) ax1.set_xlim(x - 80, x + 80)
[108](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:108) ax1.set_ylim(y - 250, y + 250)
[109](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/unit_summary.py:109) ax1.set_xticks([])
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\matplotlib\_api\deprecation.py:454, in make_keyword_only.<locals>.wrapper(*args, **kwargs)
[448](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:448) if len(args) > name_idx:
[449](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:449) warn_deprecated(
[450](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:450) since, message="Passing the %(name)s %(obj_type)s "
[451](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:451) "positionally is deprecated since Matplotlib %(since)s; the "
[452](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:452) "parameter will become keyword-only %(removal)s.",
[453](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:453) name=name, obj_type=f"parameter of {func.__name__}()")
--> [454](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/_api/deprecation.py:454) return func(*args, **kwargs)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\matplotlib\axes\_base.py:3650, in _AxesBase.set_xlim(self, left, right, emit, auto, xmin, xmax)
[3648](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3648) raise TypeError("Cannot pass both 'right' and 'xmax'")
[3649](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3649) right = xmax
-> [3650](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3650) return self.xaxis._set_lim(left, right, emit=emit, auto=auto)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\matplotlib\axis.py:1184, in Axis._set_lim(self, v0, v1, emit, auto)
[1180](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1180) name, = [name for name, axis in self.axes._axis_map.items()
[1181](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1181) if axis is self] # The axis name.
[1183](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1183) self.axes._process_unit_info([(name, (v0, v1))], convert=False)
-> [1184](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1184) v0 = self.axes._validate_converted_limits(v0, self.convert_units)
[1185](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1185) v1 = self.axes._validate_converted_limits(v1, self.convert_units)
[1187](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1187) if v0 is None or v1 is None:
[1188](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1188) # Axes init calls set_xlim(0, 1) before get_xlim() can be called,
[1189](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axis.py:1189) # so only grab the limits if we really need them.
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\matplotlib\axes\_base.py:3570, in _AxesBase._validate_converted_limits(self, limit, convert)
[3567](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3567) converted_limit = convert(limit)
[3568](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3568) if (isinstance(converted_limit, Real)
[3569](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3569) and not np.isfinite(converted_limit)):
-> [3570](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3570) raise ValueError("Axis limits cannot be NaN or Inf")
[3571](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/matplotlib/axes/_base.py:3571) return converted_limit
**ValueError: Axis limits cannot be NaN or Inf**
---------------------------------------------------------------------------
**Error 2**
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[72], [line 1](vscode-notebook-cell:?execution_count=72&line=1)
----> [1](vscode-notebook-cell:?execution_count=72&line=1) si.plot_sorting_summary(analyzer_clean, backend='sortingview')
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\sorting_summary.py:83, in SortingSummaryWidget.__init__(self, sorting_analyzer, unit_ids, sparsity, max_amplitudes_per_unit, min_similarity_for_correlograms, curation, unit_table_properties, label_choices, backend, **backend_kwargs)
[70](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:70) unit_ids = sorting.get_unit_ids()
[72](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:72) plot_data = dict(
[73](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:73) sorting_analyzer=sorting_analyzer,
[74](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:74) unit_ids=unit_ids,
(...)
[80](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:80) max_amplitudes_per_unit=max_amplitudes_per_unit,
[81](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:81) )
---> [83](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:83) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs)
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\base.py:87, in BaseWidget.__init__(self, data_plot, backend, immediate_plot, **backend_kwargs)
[84](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:84) self.backend_kwargs = backend_kwargs_
[86](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:86) if immediate_plot:
---> [87](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:87) self.do_plot()
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\base.py:108, in BaseWidget.do_plot(self)
[106](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:106) def do_plot(self):
[107](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:107) func = getattr(self, f"plot_{self.backend}")
--> [108](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/base.py:108) func(self.data_plot, **self.backend_kwargs)
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\sorting_summary.py:183, in SortingSummaryWidget.plot_sortingview(self, data_plot, **backend_kwargs)
[180](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:180) # assemble layout
[181](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:181) self.view = vv.Splitter(direction="horizontal", item1=vv.LayoutItem(v1), item2=vv.LayoutItem(v2))
--> [183](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/sorting_summary.py:183) self.url = handle_display_and_url(self, self.view, **backend_kwargs)
File ~\Documents\Domi\Python\spikeinterface\src\spikeinterface\widgets\utils_sortingview.py:42, in handle_display_and_url(widget, view, **backend_kwargs)
[39](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:39) if figlabel is None:
[40](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:40) # figlabel = widget.default_label
[41](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:41) figlabel = ""
---> [42](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:42) url = view.url(label=figlabel)
[43](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:43) print(url)
[45](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/cashlab/Documents/Domi/Python/spikeinterface/examples/how_to/~/Documents/Domi/Python/spikeinterface/src/spikeinterface/widgets/utils_sortingview.py:45) return url
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\sortingview\views\View.py:101, in View.url(self, label, state, allow_float64)
[100](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:100) def url(self, *, label: str, state: Union[dict, None] = None, allow_float64: bool = False):
--> [101](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:101) return fig.url_from_url_dict(self.url_dict(label=label, state=state, allow_float64=allow_float64))
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\sortingview\views\View.py:81, in View.url_dict(self, label, state, allow_float64)
[76](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:76) for i, vv in enumerate(all_views):
[77](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:77) vv.set_id(f"{i}")
[78](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:78) data = {
[79](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:79) "type": "MainLayout",
[80](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:80) "layout": self.to_dict(),
---> [81](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:81) "views": [
[82](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:82) {"type": view.type, "viewId": view.id, "dataUri": _upload_data_and_return_uri(view.to_dict(), allow_float64=allow_float64)}
[83](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:83) for view in all_views
[84](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:84) if not view.is_layout
[85](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:85) ],
[86](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:86) }
[87](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:87) view_url = sortingview_view_url
[88](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:88) F = fig.Figure(view_url=view_url, data=data, allow_float64=allow_float64)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\sortingview\views\View.py:82, in <listcomp>(.0)
[76](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:76) for i, vv in enumerate(all_views):
[77](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:77) vv.set_id(f"{i}")
[78](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:78) data = {
[79](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:79) "type": "MainLayout",
[80](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:80) "layout": self.to_dict(),
[81](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:81) "views": [
---> [82](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:82) {"type": view.type, "viewId": view.id, "dataUri": _upload_data_and_return_uri(view.to_dict(), allow_float64=allow_float64)}
[83](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:83) for view in all_views
[84](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:84) if not view.is_layout
[85](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:85) ],
[86](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:86) }
[87](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:87) view_url = sortingview_view_url
[88](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:88) F = fig.Figure(view_url=view_url, data=data, allow_float64=allow_float64)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\sortingview\views\View.py:153, in _upload_data_and_return_uri(data, local, allow_float64)
[152](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:152) def _upload_data_and_return_uri(data, *, local: bool = False, allow_float64: bool = False):
--> [153](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/sortingview/views/View.py:153) return kcl.store_json(fig.serialize_data(data, allow_float64=allow_float64), local=local)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\kachery_cloud\core.py:18, in store_json(x, separators, indent, label, cache_locally, local)
[16](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/kachery_cloud/core.py:16) def store_json(x: Any, *, separators=(',', ':'), indent=None, label: Union[str, None]=None, cache_locally: bool=False, local: bool=False) -> str:
[17](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/kachery_cloud/core.py:17) import simplejson
---> [18](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/kachery_cloud/core.py:18) text = simplejson.dumps(x, separators=separators, indent=indent, allow_nan=False, sort_keys=True)
[19](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/kachery_cloud/core.py:19) return store_text(text, label=label, cache_locally=cache_locally, local=local)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\simplejson\__init__.py:398, in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, use_decimal, namedtuple_as_object, tuple_as_array, bigint_as_string, sort_keys, item_sort_key, for_json, ignore_nan, int_as_string_bitcount, iterable_as_array, **kw)
[396](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:396) if cls is None:
[397](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:397) cls = JSONEncoder
--> [398](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:398) return cls(
[399](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:399) skipkeys=skipkeys, ensure_ascii=ensure_ascii,
[400](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:400) check_circular=check_circular, allow_nan=allow_nan, indent=indent,
[401](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:401) separators=separators, encoding=encoding, default=default,
[402](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:402) use_decimal=use_decimal,
[403](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:403) namedtuple_as_object=namedtuple_as_object,
[404](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:404) tuple_as_array=tuple_as_array,
[405](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:405) iterable_as_array=iterable_as_array,
[406](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:406) bigint_as_string=bigint_as_string,
[407](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:407) sort_keys=sort_keys,
[408](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:408) item_sort_key=item_sort_key,
[409](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:409) for_json=for_json,
[410](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:410) ignore_nan=ignore_nan,
[411](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:411) int_as_string_bitcount=int_as_string_bitcount,
[412](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/__init__.py:412) **kw).encode(obj)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\simplejson\encoder.py:297, in JSONEncoder.encode(self, o)
[293](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:293) return encode_basestring(o)
[294](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:294) # This doesn't pass the iterator directly to ''.join() because the
[295](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:295) # exceptions aren't as detailed. The list call should be roughly
[296](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:296) # equivalent to the PySequence_Fast that ''.join() would do.
--> [297](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:297) chunks = self.iterencode(o, _one_shot=True)
[298](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:298) if not isinstance(chunks, (list, tuple)):
[299](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:299) chunks = list(chunks)
File c:\Users\cashlab\miniconda3\envs\si_env\lib\site-packages\simplejson\encoder.py:379, in JSONEncoder.iterencode(self, o, _one_shot)
[370](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:370) _iterencode = _make_iterencode(
[371](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:371) markers, self.default, _encoder, self.indent, floatstr,
[372](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:372) self.key_separator, self.item_separator, self.sort_keys,
(...)
[376](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:376) self.item_sort_key, self.encoding, self.for_json,
[377](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:377) self.iterable_as_array, Decimal=decimal.Decimal)
[378](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:378) try:
--> [379](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:379) return _iterencode(o, 0)
[380](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:380) finally:
[381](file:///C:/Users/cashlab/miniconda3/envs/si_env/lib/site-packages/simplejson/encoder.py:381) key_memo.clear()
**ValueError: Out of range float values are not JSON compliant**
The text was updated successfully, but these errors were encountered:
Hi! I would have a question:
I loaded back one of my external KS and Phy curated outputs to SortingAnalyzer and I've been able to calculate the various nice quality metrics but somehow I am not able to save the data (and the generated plots) as a report because (I think) there are NaNs or INFs in my unit metrics table (this is just a guess, maybe it is due to something else).
Interestingly, I am still able to save the results as a .csv, like this:
from spikeinterface.qualitymetrics import compute_quality_metrics
df = compute_quality_metrics(analyzer_clean)
df.to_csv(".../analyzer_Test_KS1/test.csv")
I just cannot do the "report" and the "web-based viewer", which also worked well earlier with your tutorial data (so it should not be an installing issue, I hope).
Thanks so much in advance for any input!
I got the following warning and error when exporting the results:
The text was updated successfully, but these errors were encountered: