From 547b29d6a2a97f9171b0d5c4706c5a7656fa1800 Mon Sep 17 00:00:00 2001 From: chrishalcrow Date: Fri, 24 Jul 2026 13:46:26 +0100 Subject: [PATCH 1/2] add `template_operator` to template_metrics backwards compat --- .../metrics/template/template_metrics.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/spikeinterface/metrics/template/template_metrics.py b/src/spikeinterface/metrics/template/template_metrics.py index 97c9c8cbad..bac66c1509 100644 --- a/src/spikeinterface/metrics/template/template_metrics.py +++ b/src/spikeinterface/metrics/template/template_metrics.py @@ -176,6 +176,16 @@ def _handle_backward_compatibility_on_load(self): if "peaks_data" not in self.data: self.tmp_data_to_save = [] + # We used to use whichever `template_operator` was available in the template computation, but now the user + # can specify. Default to "average" unless the only computed templates were done with median. + if "template_operator" not in self.params: + available_template_keys = self.sorting_analyzer.get_extension("templates").data.keys() + template_keys_which_are_operators = [key for key in available_template_keys if key in ["average", "median"]] + if len(template_keys_which_are_operators) == 1: + self.params["template_operator"] = template_keys_which_are_operators[0] + else: + self.params["template_operator"] = "average" + def _set_params( self, metric_names: list[str] | None = None, From c104fb8c341fe9f805a28cfb405300a83c91914d Mon Sep 17 00:00:00 2001 From: chrishalcrow Date: Fri, 24 Jul 2026 13:57:18 +0100 Subject: [PATCH 2/2] deal with no templates case --- .../metrics/template/template_metrics.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/spikeinterface/metrics/template/template_metrics.py b/src/spikeinterface/metrics/template/template_metrics.py index bac66c1509..1a34efe27f 100644 --- a/src/spikeinterface/metrics/template/template_metrics.py +++ b/src/spikeinterface/metrics/template/template_metrics.py @@ -177,14 +177,16 @@ def _handle_backward_compatibility_on_load(self): self.tmp_data_to_save = [] # We used to use whichever `template_operator` was available in the template computation, but now the user - # can specify. Default to "average" unless the only computed templates were done with median. + # can specify. Default to "average" unless the only computed templates were computed with median. if "template_operator" not in self.params: - available_template_keys = self.sorting_analyzer.get_extension("templates").data.keys() - template_keys_which_are_operators = [key for key in available_template_keys if key in ["average", "median"]] - if len(template_keys_which_are_operators) == 1: - self.params["template_operator"] = template_keys_which_are_operators[0] - else: - self.params["template_operator"] = "average" + self.params["template_operator"] = "average" + if self.sorting_analyzer.has_extension("templates"): + available_template_keys = self.sorting_analyzer.get_extension("templates").data.keys() + template_keys_which_are_operators = [ + key for key in available_template_keys if key in ["average", "median"] + ] + if len(template_keys_which_are_operators) == 1: + self.params["template_operator"] = template_keys_which_are_operators[0] def _set_params( self,