22
33import numpy as np
44
5+ from ..core import SortingAnalyzer , BaseSorting
56from ..core .core_tools import check_json
67from warnings import warn
78
@@ -46,26 +47,42 @@ def handle_display_and_url(widget, view, **backend_kwargs):
4647 return url
4748
4849
49- def generate_unit_table_view (analyzer , unit_properties = None , similarity_scores = None ):
50+ def generate_unit_table_view (
51+ sorting_or_sorting_analyzer : SortingAnalyzer | BaseSorting ,
52+ unit_properties : list [str ] | None = None ,
53+ similarity_scores : npndarray | None = None ,
54+ ):
5055 import sortingview .views as vv
5156
52- sorting = analyzer .sorting
57+ if isinstance (sorting_or_sorting_analyzer , SortingAnalyzer ):
58+ analyzer = sorting_or_sorting_analyzer
59+ sorting = analyzer .sorting
60+ else :
61+ sorting = sorting_or_sorting_analyzer
62+ analyzer = None
5363
5464 # Find available unit properties from all sources
5565 sorting_props = list (sorting .get_property_keys ())
56- if analyzer .get_extension ("quality_metrics" ) is not None :
57- qm_props = list (analyzer .get_extension ("quality_metrics" ).get_data ().columns )
58- qm_data = analyzer .get_extension ("quality_metrics" ).get_data ()
66+ if analyzer is not None :
67+ if analyzer .get_extension ("quality_metrics" ) is not None :
68+ qm_props = list (analyzer .get_extension ("quality_metrics" ).get_data ().columns )
69+ qm_data = analyzer .get_extension ("quality_metrics" ).get_data ()
70+ else :
71+ qm_props = []
72+ if analyzer .get_extension ("template_metrics" ) is not None :
73+ tm_props = list (analyzer .get_extension ("template_metrics" ).get_data ().columns )
74+ tm_data = analyzer .get_extension ("template_metrics" ).get_data ()
75+ else :
76+ tm_props = []
77+ # Check for any overlaps and warn user if any
78+ all_props = sorting_props + qm_props + tm_props
5979 else :
80+ all_props = sorting_props
6081 qm_props = []
61- if analyzer .get_extension ("template_metrics" ) is not None :
62- tm_props = list (analyzer .get_extension ("template_metrics" ).get_data ().columns )
63- tm_data = analyzer .get_extension ("template_metrics" ).get_data ()
64- else :
6582 tm_props = []
83+ qm_data = None
84+ tm_data = None
6685
67- # Check for any overlaps and warn user if any
68- all_props = sorting_props + qm_props + tm_props
6986 overlap_props = [prop for prop in all_props if all_props .count (prop ) > 1 ]
7087 if len (overlap_props ) > 0 :
7188 warn (
@@ -93,7 +110,8 @@ def generate_unit_table_view(analyzer, unit_properties=None, similarity_scores=N
93110 elif prop_name in tm_props :
94111 property_values = tm_data [prop_name ].values
95112 else :
96- raise ValueError (f"Property '{ prop_name } ' not found in sorting, quality_metrics, or template_metrics" )
113+ warn (f"Property '{ prop_name } ' not found in sorting, quality_metrics, or template_metrics" )
114+ continue
97115
98116 # make dtype available
99117 val0 = np .array (property_values [0 ])
@@ -106,7 +124,7 @@ def generate_unit_table_view(analyzer, unit_properties=None, similarity_scores=N
106124 elif val0 .dtype .kind == "b" :
107125 dtype = "bool"
108126 else :
109- print (f"Unsupported dtype { val0 .dtype } for property { prop_name } . Skipping" )
127+ warn (f"Unsupported dtype { val0 .dtype } for property { prop_name } . Skipping" )
110128 continue
111129 ut_columns .append (vv .UnitsTableColumn (key = prop_name , label = prop_name , dtype = dtype ))
112130 valid_unit_properties .append (prop_name )
@@ -122,10 +140,6 @@ def generate_unit_table_view(analyzer, unit_properties=None, similarity_scores=N
122140 property_values = qm_data [prop_name ].values
123141 elif prop_name in tm_props :
124142 property_values = tm_data [prop_name ].values
125- else :
126- raise ValueError (
127- f"Property '{ prop_name } ' not found in sorting, quality_metrics, or template_metrics"
128- )
129143
130144 # Check for NaN values
131145 val0 = np .array (property_values [0 ])
0 commit comments