From 9f13c74694e75de1ca81ed7f5edb4642d7bce610 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 11 Sep 2024 17:45:57 +0200 Subject: [PATCH 1/9] Start a new module for benchmark. Implement SorterStudy that replace GroundTruthStudy --- src/spikeinterface/benchmark/__init__.py | 7 + .../benchmark/benchmark_base.py | 465 +++++++++++++++++ .../benchmark/benchmark_plot_tools.py | 9 + .../benchmark/benchmark_sorter.py | 125 +++++ .../benchmark/tests/test_benchmark_sorter.py | 90 ++++ .../comparison/groundtruthstudy.py | 447 +---------------- .../benchmark/benchmark_tools.py | 473 +----------------- 7 files changed, 712 insertions(+), 904 deletions(-) create mode 100644 src/spikeinterface/benchmark/__init__.py create mode 100644 src/spikeinterface/benchmark/benchmark_base.py create mode 100644 src/spikeinterface/benchmark/benchmark_plot_tools.py create mode 100644 src/spikeinterface/benchmark/benchmark_sorter.py create mode 100644 src/spikeinterface/benchmark/tests/test_benchmark_sorter.py diff --git a/src/spikeinterface/benchmark/__init__.py b/src/spikeinterface/benchmark/__init__.py new file mode 100644 index 0000000000..951a865ff9 --- /dev/null +++ b/src/spikeinterface/benchmark/__init__.py @@ -0,0 +1,7 @@ +""" +Module to benchmark: + * sorters + * some sorting components (clustering, motion, template matching) +""" + +from .benchmark_sorter import SorterStudy \ No newline at end of file diff --git a/src/spikeinterface/benchmark/benchmark_base.py b/src/spikeinterface/benchmark/benchmark_base.py new file mode 100644 index 0000000000..2dfe2b3448 --- /dev/null +++ b/src/spikeinterface/benchmark/benchmark_base.py @@ -0,0 +1,465 @@ +from __future__ import annotations + +from pathlib import Path +import shutil +import json +import numpy as np + + +import time + + +from spikeinterface.core import SortingAnalyzer + +from spikeinterface import load_extractor, create_sorting_analyzer, load_sorting_analyzer +from spikeinterface.widgets import get_some_colors + + +import pickle + +_key_separator = "_-°°-_" + + +class BenchmarkStudy: + """ + Generic study for sorting components. + This manage a list of Benchmark. + This manage a dict of "cases" every case is one Benchmark. + + Benchmark is responsible for run() and compute_result() + BenchmarkStudy is the main API for: + * running (re-running) some cases + * save (run + compute_result) in results dict + * make some plots in inherited classes. + + + """ + + benchmark_class = None + + def __init__(self, study_folder): + self.folder = Path(study_folder) + self.datasets = {} + self.analyzers = {} + self.cases = {} + self.benchmarks = {} + self.scan_folder() + self.colors = None + + @classmethod + def create(cls, study_folder, datasets={}, cases={}, levels=None): + # check that cases keys are homogeneous + key0 = list(cases.keys())[0] + if isinstance(key0, str): + assert all(isinstance(key, str) for key in cases.keys()), "Keys for cases are not homogeneous" + if levels is None: + levels = "level0" + else: + assert isinstance(levels, str) + elif isinstance(key0, tuple): + assert all(isinstance(key, tuple) for key in cases.keys()), "Keys for cases are not homogeneous" + num_levels = len(key0) + assert all( + len(key) == num_levels for key in cases.keys() + ), "Keys for cases are not homogeneous, tuple negth differ" + if levels is None: + levels = [f"level{i}" for i in range(num_levels)] + else: + levels = list(levels) + assert len(levels) == num_levels + else: + raise ValueError("Keys for cases must str or tuple") + + study_folder = Path(study_folder) + study_folder.mkdir(exist_ok=False, parents=True) + + # (study_folder / "datasets").mkdir() + # (study_folder / "datasets" / "recordings").mkdir() + # (study_folder / "datasets" / "gt_sortings").mkdir() + (study_folder / "run_logs").mkdir() + # (study_folder / "metrics").mkdir() + (study_folder / "results").mkdir() + (study_folder / "sorting_analyzer").mkdir() + + analyzers_path = {} + # for key, (rec, gt_sorting) in datasets.items(): + for key, data in datasets.items(): + assert "/" not in key, "'/' cannot be in the key name!" + assert "\\" not in key, "'\\' cannot be in the key name!" + + local_analyzer_folder = study_folder / "sorting_analyzer" / key + + if isinstance(data, tuple): + # old case : rec + sorting + rec, gt_sorting = data + analyzer = create_sorting_analyzer( + gt_sorting, rec, sparse=True, format="binary_folder", folder=local_analyzer_folder + ) + analyzer.compute("random_spikes") + analyzer.compute("templates") + analyzer.compute("noise_levels") + else: + # new case : analzyer + assert isinstance(data, SortingAnalyzer) + analyzer = data + if data.format == "memory": + # then copy a local copy in the folder + analyzer = data.save_as(format="binary_folder", folder=local_analyzer_folder) + else: + analyzer = data + + rec, gt_sorting = analyzer.recording, analyzer.sorting + + analyzers_path[key] = str(analyzer.folder.resolve()) + + # recordings are pickled + # rec.dump_to_pickle(study_folder / f"datasets/recordings/{key}.pickle") + + # sortings are pickled + saved as NumpyFolderSorting + # gt_sorting.dump_to_pickle(study_folder / f"datasets/gt_sortings/{key}.pickle") + # gt_sorting.save(format="numpy_folder", folder=study_folder / f"datasets/gt_sortings/{key}") + + # analyzer path (local or external) + (study_folder / "analyzers_path.json").write_text(json.dumps(analyzers_path, indent=4), encoding="utf8") + + info = {} + info["levels"] = levels + (study_folder / "info.json").write_text(json.dumps(info, indent=4), encoding="utf8") + + # cases is dumped to a pickle file, json is not possible because of the tuple key + (study_folder / "cases.pickle").write_bytes(pickle.dumps(cases)) + + return cls(study_folder) + + def create_benchmark(self, key): + raise NotImplementedError + + def scan_folder(self): + if not (self.folder / "sorting_analyzer").exists(): + raise ValueError(f"This is folder is not a BenchmarkStudy : {self.folder.absolute()}") + + with open(self.folder / "info.json", "r") as f: + self.info = json.load(f) + + with open(self.folder / "analyzers_path.json", "r") as f: + self.analyzers_path = json.load(f) + + self.levels = self.info["levels"] + + for key, folder in self.analyzers_path.items(): + analyzer = load_sorting_analyzer(folder) + self.analyzers[key] = analyzer + # the sorting is in memory here we take the saved one because comparisons need to pickle it later + sorting = load_extractor(analyzer.folder / "sorting") + self.datasets[key] = analyzer.recording, sorting + + # for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"): + # key = rec_file.stem + # rec = load_extractor(rec_file) + # gt_sorting = load_extractor(self.folder / f"datasets" / "gt_sortings" / key) + # self.datasets[key] = (rec, gt_sorting) + + with open(self.folder / "cases.pickle", "rb") as f: + self.cases = pickle.load(f) + + self.benchmarks = {} + for key in self.cases: + result_folder = self.folder / "results" / self.key_to_str(key) + if result_folder.exists(): + result = self.benchmark_class.load_folder(result_folder) + benchmark = self.create_benchmark(key) + benchmark.result.update(result) + self.benchmarks[key] = benchmark + else: + self.benchmarks[key] = None + + def __repr__(self): + t = f"{self.__class__.__name__} {self.folder.stem} \n" + t += f" datasets: {len(self.datasets)} {list(self.datasets.keys())}\n" + t += f" cases: {len(self.cases)} {list(self.cases.keys())}\n" + num_computed = sum([1 for benchmark in self.benchmarks.values() if benchmark is not None]) + t += f" computed: {num_computed}\n" + return t + + def key_to_str(self, key): + if isinstance(key, str): + return key + elif isinstance(key, tuple): + return _key_separator.join([str(k) for k in key]) + else: + raise ValueError("Keys for cases must str or tuple") + + def remove_benchmark(self, key): + result_folder = self.folder / "results" / self.key_to_str(key) + log_file = self.folder / "run_logs" / f"{self.key_to_str(key)}.json" + + if result_folder.exists(): + shutil.rmtree(result_folder) + for f in (log_file,): + if f.exists(): + f.unlink() + self.benchmarks[key] = None + + def run(self, case_keys=None, keep=True, verbose=False, **job_kwargs): + if case_keys is None: + case_keys = list(self.cases.keys()) + + job_keys = [] + for key in case_keys: + + result_folder = self.folder / "results" / self.key_to_str(key) + + if keep and result_folder.exists(): + continue + elif not keep and result_folder.exists(): + self.remove_benchmark(key) + job_keys.append(key) + + for key in job_keys: + benchmark = self.create_benchmark(key) + t0 = time.perf_counter() + benchmark.run() + t1 = time.perf_counter() + self.benchmarks[key] = benchmark + bench_folder = self.folder / "results" / self.key_to_str(key) + bench_folder.mkdir(exist_ok=True) + benchmark.save_run(bench_folder) + benchmark.result["run_time"] = float(t1 - t0) + benchmark.save_main(bench_folder) + + def set_colors(self, colors=None, map_name="tab20"): + if colors is None: + case_keys = list(self.cases.keys()) + self.colors = get_some_colors( + case_keys, map_name=map_name, color_engine="matplotlib", shuffle=False, margin=0 + ) + else: + self.colors = colors + + def get_colors(self): + if self.colors is None: + self.set_colors() + return self.colors + + def get_run_times(self, case_keys=None): + if case_keys is None: + case_keys = list(self.cases.keys()) + + run_times = {} + for key in case_keys: + benchmark = self.benchmarks[key] + assert benchmark is not None + run_times[key] = benchmark.result["run_time"] + import pandas as pd + + df = pd.DataFrame(dict(run_times=run_times)) + if not isinstance(self.levels, str): + df.index.names = self.levels + return df + + def plot_run_times(self, case_keys=None): + if case_keys is None: + case_keys = list(self.cases.keys()) + run_times = self.get_run_times(case_keys=case_keys) + + colors = self.get_colors() + import matplotlib.pyplot as plt + + fig, ax = plt.subplots() + labels = [] + for i, key in enumerate(case_keys): + labels.append(self.cases[key]["label"]) + rt = run_times.at[key, "run_times"] + ax.bar(i, rt, width=0.8, color=colors[key]) + ax.set_xticks(np.arange(len(case_keys))) + ax.set_xticklabels(labels, rotation=45.0) + return fig + + # ax = run_times.plot(kind="bar") + # return ax.figure + + def compute_results(self, case_keys=None, verbose=False, **result_params): + if case_keys is None: + case_keys = list(self.cases.keys()) + + job_keys = [] + for key in case_keys: + benchmark = self.benchmarks[key] + assert benchmark is not None + benchmark.compute_result(**result_params) + benchmark.save_result(self.folder / "results" / self.key_to_str(key)) + + def create_sorting_analyzer_gt(self, case_keys=None, return_scaled=True, random_params={}, **job_kwargs): + print("###### Study.create_sorting_analyzer_gt() is not used anymore!!!!!!") + # if case_keys is None: + # case_keys = self.cases.keys() + + # base_folder = self.folder / "sorting_analyzer" + # base_folder.mkdir(exist_ok=True) + + # dataset_keys = [self.cases[key]["dataset"] for key in case_keys] + # dataset_keys = set(dataset_keys) + # for dataset_key in dataset_keys: + # # the waveforms depend on the dataset key + # folder = base_folder / self.key_to_str(dataset_key) + # recording, gt_sorting = self.datasets[dataset_key] + # sorting_analyzer = create_sorting_analyzer( + # gt_sorting, recording, format="binary_folder", folder=folder, return_scaled=return_scaled + # ) + # sorting_analyzer.compute("random_spikes", **random_params) + # sorting_analyzer.compute("templates", **job_kwargs) + # sorting_analyzer.compute("noise_levels") + + def get_sorting_analyzer(self, case_key=None, dataset_key=None): + if case_key is not None: + dataset_key = self.cases[case_key]["dataset"] + return self.analyzers[dataset_key] + + # folder = self.folder / "sorting_analyzer" / self.key_to_str(dataset_key) + # sorting_analyzer = load_sorting_analyzer(folder) + # return sorting_analyzer + + def get_templates(self, key, operator="average"): + sorting_analyzer = self.get_sorting_analyzer(case_key=key) + templates = sorting_analyzer.get_extenson("templates").get_data(operator=operator) + return templates + + def compute_metrics(self, case_keys=None, metric_names=["snr", "firing_rate"], force=False): + if case_keys is None: + case_keys = self.cases.keys() + + done = [] + for key in case_keys: + dataset_key = self.cases[key]["dataset"] + if dataset_key in done: + # some case can share the same analyzer + continue + done.append(dataset_key) + # filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" + # if filename.exists(): + # if force: + # os.remove(filename) + # else: + # continue + sorting_analyzer = self.get_sorting_analyzer(key) + qm_ext = sorting_analyzer.get_extension("quality_metrics") + if qm_ext is None or force: + qm_ext = sorting_analyzer.compute("quality_metrics", metric_names=metric_names) + + # TODO remove this metics CSV file!!!! + metrics = qm_ext.get_data() + # metrics.to_csv(filename, sep="\t", index=True) + + def get_metrics(self, key): + import pandas as pd + + dataset_key = self.cases[key]["dataset"] + + analyzer = self.get_sorting_analyzer(key) + ext = analyzer.get_extension("quality_metrics") + if ext is None: + # TODO au to compute ???? + return None + + metrics = ext.get_data() + return metrics + + # filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" + # if not filename.exists(): + # return + # metrics = pd.read_csv(filename, sep="\t", index_col=0) + # dataset_key = self.cases[key]["dataset"] + # recording, gt_sorting = self.datasets[dataset_key] + # metrics.index = gt_sorting.unit_ids + # return metrics + + def get_units_snr(self, key): + """ """ + return self.get_metrics(key)["snr"] + + def get_result(self, key): + return self.benchmarks[key].result + + +class Benchmark: + """ + Responsible to make a unique run() and compute_result() for one case. + """ + + def __init__(self): + self.result = {} + + # this must not be changed in inherited + _main_key_saved = [ + ("run_time", "pickle"), + ] + # this must be updated in hirerited + _run_key_saved = [] + _result_key_saved = [] + + def _save_keys(self, saved_keys, folder): + for k, format in saved_keys: + if k not in self.result or self.result[k] is None: + continue + if format == "npy": + np.save(folder / f"{k}.npy", self.result[k]) + elif format == "pickle": + with open(folder / f"{k}.pickle", mode="wb") as f: + pickle.dump(self.result[k], f) + elif format == "sorting": + self.result[k].save(folder=folder / k, format="numpy_folder", overwrite=True) + elif format == "Motion": + self.result[k].save(folder=folder / k) + elif format == "zarr_templates": + self.result[k].to_zarr(folder / k) + elif format == "sorting_analyzer": + pass + else: + raise ValueError(f"Save error {k} {format}") + + def save_main(self, folder): + # used for run time + self._save_keys(self._main_key_saved, folder) + + def save_run(self, folder): + self._save_keys(self._run_key_saved, folder) + + def save_result(self, folder): + self._save_keys(self._result_key_saved, folder) + + @classmethod + def load_folder(cls, folder): + result = {} + for k, format in cls._run_key_saved + cls._result_key_saved + cls._main_key_saved: + if format == "npy": + file = folder / f"{k}.npy" + if file.exists(): + result[k] = np.load(file) + elif format == "pickle": + file = folder / f"{k}.pickle" + if file.exists(): + with open(file, mode="rb") as f: + result[k] = pickle.load(f) + elif format == "sorting": + from spikeinterface.core import load_extractor + + result[k] = load_extractor(folder / k) + elif format == "Motion": + from spikeinterface.sortingcomponents.motion import Motion + + result[k] = Motion.load(folder / k) + elif format == "zarr_templates": + from spikeinterface.core.template import Templates + + result[k] = Templates.from_zarr(folder / k) + + return result + + def run(self): + # run method + raise NotImplementedError + + def compute_result(self): + # run becnhmark result + raise NotImplementedError + diff --git a/src/spikeinterface/benchmark/benchmark_plot_tools.py b/src/spikeinterface/benchmark/benchmark_plot_tools.py new file mode 100644 index 0000000000..ee9d2947d6 --- /dev/null +++ b/src/spikeinterface/benchmark/benchmark_plot_tools.py @@ -0,0 +1,9 @@ + + + + +def _simpleaxis(ax): + ax.spines["top"].set_visible(False) + ax.spines["right"].set_visible(False) + ax.get_xaxis().tick_bottom() + ax.get_yaxis().tick_left() diff --git a/src/spikeinterface/benchmark/benchmark_sorter.py b/src/spikeinterface/benchmark/benchmark_sorter.py new file mode 100644 index 0000000000..d08775561a --- /dev/null +++ b/src/spikeinterface/benchmark/benchmark_sorter.py @@ -0,0 +1,125 @@ +""" +This replace the previous `GroundTruthStudy` +""" + + +import numpy as np +from ..core import NumpySorting +from .benchmark_base import Benchmark, BenchmarkStudy +from ..sorters import run_sorter +from spikeinterface.comparison import compare_sorter_to_ground_truth + +# from spikeinterface.widgets import ( +# plot_agreement_matrix, +# plot_comparison_collision_by_similarity, +# ) + + + + + +class SorterBenchmark(Benchmark): + def __init__(self, recording, gt_sorting, params, sorter_folder): + self.recording = recording + self.gt_sorting = gt_sorting + self.params = params + self.sorter_folder = sorter_folder + self.result = {} + + def run(self): + # run one sorter sorter_name is must be in params + raw_sorting = run_sorter(recording=self.recording, folder=self.sorter_folder, **self.params) + sorting = NumpySorting.from_sorting(raw_sorting) + self.result = {"sorting": sorting} + + def compute_result(self): + # run becnhmark result + sorting = self.result["sorting"] + comp = compare_sorter_to_ground_truth(self.gt_sorting, sorting, exhaustive_gt=True) + self.result["gt_comparison"] = comp + + _run_key_saved = [ + ("sorting", "sorting"), + ] + _result_key_saved = [ + ("gt_comparison", "pickle"), + ] + +class SorterStudy(BenchmarkStudy): + """ + This class is used to tests several sorter in several situtation. + This replace the previous GroundTruthStudy with more flexibility. + """ + + benchmark_class = SorterBenchmark + + def create_benchmark(self, key): + dataset_key = self.cases[key]["dataset"] + recording, gt_sorting = self.datasets[dataset_key] + params = self.cases[key]["params"] + sorter_folder = self.folder / "sorters" / self.key_to_str(key) + benchmark = SorterBenchmark(recording, gt_sorting, params, sorter_folder) + return benchmark + + def get_performance_by_unit(self, case_keys=None): + import pandas as pd + + if case_keys is None: + case_keys = self.cases.keys() + + perf_by_unit = [] + for key in case_keys: + comp = self.get_result(key)["gt_comparison"] + + perf = comp.get_performance(method="by_unit", output="pandas") + + if isinstance(key, str): + perf[self.levels] = key + elif isinstance(key, tuple): + for col, k in zip(self.levels, key): + perf[col] = k + + perf = perf.reset_index() + perf_by_unit.append(perf) + + perf_by_unit = pd.concat(perf_by_unit) + perf_by_unit = perf_by_unit.set_index(self.levels) + perf_by_unit = perf_by_unit.sort_index() + return perf_by_unit + + def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None): + import pandas as pd + + if case_keys is None: + case_keys = list(self.cases.keys()) + + if isinstance(case_keys[0], str): + index = pd.Index(case_keys, name=self.levels) + else: + index = pd.MultiIndex.from_tuples(case_keys, names=self.levels) + + columns = ["num_gt", "num_sorter", "num_well_detected"] + key0 = case_keys[0] + comp = self.get_result(key0)["gt_comparison"] + if comp.exhaustive_gt: + columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"]) + count_units = pd.DataFrame(index=index, columns=columns, dtype=int) + + for key in case_keys: + comp = self.get_result(key)["gt_comparison"] + + gt_sorting = comp.sorting1 + sorting = comp.sorting2 + + count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids()) + count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids()) + count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score) + + if comp.exhaustive_gt: + count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score) + count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score) + count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score) + count_units.loc[key, "num_bad"] = comp.count_bad_units() + + return count_units + diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py new file mode 100644 index 0000000000..7fad1b6e8b --- /dev/null +++ b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py @@ -0,0 +1,90 @@ +import shutil +import pytest +from pathlib import Path + +from spikeinterface import generate_ground_truth_recording +from spikeinterface.preprocessing import bandpass_filter +from spikeinterface.benchmark import SorterStudy + + +@pytest.fixture(scope="module") +def setup_module(tmp_path_factory): + study_folder = tmp_path_factory.mktemp("sorter_study_folder") + if study_folder.is_dir(): + shutil.rmtree(study_folder) + create_a_study(study_folder) + return study_folder + +def simple_preprocess(rec): + return bandpass_filter(rec) + + +def create_a_study(study_folder): + rec0, gt_sorting0 = generate_ground_truth_recording(num_channels=4, durations=[30.0], seed=42) + rec1, gt_sorting1 = generate_ground_truth_recording(num_channels=4, durations=[30.0], seed=91) + + datasets = { + "toy_tetrode": (rec0, gt_sorting0), + "toy_probe32": (rec1, gt_sorting1), + "toy_probe32_preprocess": (simple_preprocess(rec1), gt_sorting1), + } + + # cases can also be generated via simple loops + cases = { + # + ("tdc2", "no-preprocess", "tetrode"): { + "label": "tridesclous2 without preprocessing and standard params", + "dataset": "toy_tetrode", + "params": { + "sorter_name": "tridesclous2", + }, + }, + # + ("tdc2", "with-preprocess", "probe32"): { + "label": "tridesclous2 with preprocessing standar params", + "dataset": "toy_probe32_preprocess", + "params": { + "sorter_name": "tridesclous2", + }, + }, + } + + study = SorterStudy.create( + study_folder, datasets=datasets, cases=cases, levels=["sorter_name", "processing", "probe_type"] + ) + # print(study) + + +def test_SorterStudy(setup_module): + # job_kwargs = dict(n_jobs=2, chunk_duration="1s") + + study_folder = setup_module + study = SorterStudy(study_folder) + print(study) + + # # this run the sorters + study.run() + + # # this run comparisons + study.compute_results() + print(study) + + # this is from the base class + rt = study.get_run_times() + # rt = study.plot_run_times() + # import matplotlib.pyplot as plt + # plt.show() + + + perf_by_unit = study.get_performance_by_unit() + # print(perf_by_unit) + count_units = study.get_count_units() + # print(count_units) + + + + +if __name__ == "__main__": + study_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" / "test_SorterStudy" + # create_a_study(study_folder) + test_SorterStudy(study_folder) diff --git a/src/spikeinterface/comparison/groundtruthstudy.py b/src/spikeinterface/comparison/groundtruthstudy.py index 8929d6983c..c662ca38da 100644 --- a/src/spikeinterface/comparison/groundtruthstudy.py +++ b/src/spikeinterface/comparison/groundtruthstudy.py @@ -1,441 +1,22 @@ -from __future__ import annotations -from pathlib import Path -import shutil -import os -import json -import pickle - -import numpy as np - -from spikeinterface.core import load_extractor, create_sorting_analyzer, load_sorting_analyzer -from spikeinterface.sorters import run_sorter_jobs, read_sorter_folder - -from spikeinterface.qualitymetrics import compute_quality_metrics - -from .paircomparisons import compare_sorter_to_ground_truth, GroundTruthComparison - - -# TODO later : save comparison in folders when comparison object will be able to serialize - - -# This is to separate names when the key are tuples when saving folders -# _key_separator = "_##_" -_key_separator = "_-°°-_" +_txt_error_message = """ +GroundTruthStudy has been replaced by SorterStudy with similar API but not back compatible folder loading. +You can do: +from spikeinterface.benchmark import SorterStudy +study = SorterStudy.create(study_folder, datasets=..., cases=..., levels=...) +study.run() # this run sorters +study.compute_results() # this run the comparisons +# and then some ploting +study.plot_agreements() +study.plot_performances_vs_snr() +... +""" class GroundTruthStudy: - """ - This class is an helper function to run any comparison on several "cases" for many ground-truth dataset. - - "cases" refer to: - * several sorters for comparisons - * same sorter with differents parameters - * any combination of these (and more) - - For increased flexibility, cases keys can be a tuple so that we can vary complexity along several - "levels" or "axis" (paremeters or sorters). - In this case, the result dataframes will have `MultiIndex` to handle the different levels. - - A ground-truth dataset is made of a `Recording` and a `Sorting` object. For example, it can be a simulated dataset with MEArec or internally generated (see - :py:func:`~spikeinterface.core.generate.generate_ground_truth_recording()`). - - This GroundTruthStudy have been refactor in version 0.100 to be more flexible than previous versions. - Note that the underlying folder structure is not backward compatible! - - Parameters - ---------- - study_folder : str | Path - Path to folder containing `GroundTruthStudy` - """ - def __init__(self, study_folder): - self.folder = Path(study_folder) - - self.datasets = {} - self.cases = {} - self.sortings = {} - self.comparisons = {} - self.colors = None - - self.scan_folder() + raise RuntimeError(_txt_error_message) @classmethod def create(cls, study_folder, datasets={}, cases={}, levels=None): - # check that cases keys are homogeneous - key0 = list(cases.keys())[0] - if isinstance(key0, str): - assert all(isinstance(key, str) for key in cases.keys()), "Keys for cases are not homogeneous" - if levels is None: - levels = "level0" - else: - assert isinstance(levels, str) - elif isinstance(key0, tuple): - assert all(isinstance(key, tuple) for key in cases.keys()), "Keys for cases are not homogeneous" - num_levels = len(key0) - assert all( - len(key) == num_levels for key in cases.keys() - ), "Keys for cases are not homogeneous, tuple negth differ" - if levels is None: - levels = [f"level{i}" for i in range(num_levels)] - else: - levels = list(levels) - assert len(levels) == num_levels - else: - raise ValueError("Keys for cases must str or tuple") - - study_folder = Path(study_folder) - study_folder.mkdir(exist_ok=False, parents=True) - - (study_folder / "datasets").mkdir() - (study_folder / "datasets" / "recordings").mkdir() - (study_folder / "datasets" / "gt_sortings").mkdir() - (study_folder / "sorters").mkdir() - (study_folder / "sortings").mkdir() - (study_folder / "sortings" / "run_logs").mkdir() - (study_folder / "metrics").mkdir() - (study_folder / "comparisons").mkdir() - - for key, (rec, gt_sorting) in datasets.items(): - assert "/" not in key, "'/' cannot be in the key name!" - assert "\\" not in key, "'\\' cannot be in the key name!" - - # recordings are pickled - rec.dump_to_pickle(study_folder / f"datasets/recordings/{key}.pickle") - - # sortings are pickled + saved as NumpyFolderSorting - gt_sorting.dump_to_pickle(study_folder / f"datasets/gt_sortings/{key}.pickle") - gt_sorting.save(format="numpy_folder", folder=study_folder / f"datasets/gt_sortings/{key}") - - info = {} - info["levels"] = levels - (study_folder / "info.json").write_text(json.dumps(info, indent=4), encoding="utf8") - - # cases is dumped to a pickle file, json is not possible because of the tuple key - (study_folder / "cases.pickle").write_bytes(pickle.dumps(cases)) - - return cls(study_folder) - - def scan_folder(self): - if not (self.folder / "datasets").exists(): - raise ValueError(f"This is folder is not a GroundTruthStudy : {self.folder.absolute()}") - - with open(self.folder / "info.json", "r") as f: - self.info = json.load(f) - - self.levels = self.info["levels"] - - for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"): - key = rec_file.stem - rec = load_extractor(rec_file) - gt_sorting = load_extractor(self.folder / f"datasets" / "gt_sortings" / key) - self.datasets[key] = (rec, gt_sorting) - - with open(self.folder / "cases.pickle", "rb") as f: - self.cases = pickle.load(f) - - self.sortings = {k: None for k in self.cases} - self.comparisons = {k: None for k in self.cases} - for key in self.cases: - sorting_folder = self.folder / "sortings" / self.key_to_str(key) - if sorting_folder.exists(): - self.sortings[key] = load_extractor(sorting_folder) - - comparison_file = self.folder / "comparisons" / (self.key_to_str(key) + ".pickle") - if comparison_file.exists(): - with open(comparison_file, mode="rb") as f: - try: - self.comparisons[key] = pickle.load(f) - except Exception: - pass - - def __repr__(self): - t = f"{self.__class__.__name__} {self.folder.stem} \n" - t += f" datasets: {len(self.datasets)} {list(self.datasets.keys())}\n" - t += f" cases: {len(self.cases)} {list(self.cases.keys())}\n" - num_computed = sum([1 for sorting in self.sortings.values() if sorting is not None]) - t += f" computed: {num_computed}\n" - - return t - - def key_to_str(self, key): - if isinstance(key, str): - return key - elif isinstance(key, tuple): - return _key_separator.join(key) - else: - raise ValueError("Keys for cases must str or tuple") - - def remove_sorting(self, key): - sorting_folder = self.folder / "sortings" / self.key_to_str(key) - log_file = self.folder / "sortings" / "run_logs" / f"{self.key_to_str(key)}.json" - comparison_file = self.folder / "comparisons" / self.key_to_str(key) - self.sortings[key] = None - self.comparisons[key] = None - if sorting_folder.exists(): - shutil.rmtree(sorting_folder) - for f in (log_file, comparison_file): - if f.exists(): - f.unlink() - - def set_colors(self, colors=None, map_name="tab20"): - from spikeinterface.widgets import get_some_colors - - if colors is None: - case_keys = list(self.cases.keys()) - self.colors = get_some_colors( - case_keys, map_name=map_name, color_engine="matplotlib", shuffle=False, margin=0 - ) - else: - self.colors = colors - - def get_colors(self): - if self.colors is None: - self.set_colors() - return self.colors - - def run_sorters(self, case_keys=None, engine="loop", engine_kwargs={}, keep=True, verbose=False): - if case_keys is None: - case_keys = self.cases.keys() - - job_list = [] - for key in case_keys: - sorting_folder = self.folder / "sortings" / self.key_to_str(key) - sorting_exists = sorting_folder.exists() - - sorter_folder = self.folder / "sorters" / self.key_to_str(key) - sorter_folder_exists = sorter_folder.exists() - - if keep: - if sorting_exists: - continue - if sorter_folder_exists: - # the sorter folder exists but havent been copied to sortings folder - sorting = read_sorter_folder(sorter_folder, raise_error=False) - if sorting is not None: - # save and skip - self.copy_sortings(case_keys=[key]) - continue - - self.remove_sorting(key) - - if sorter_folder_exists: - shutil.rmtree(sorter_folder) - - params = self.cases[key]["run_sorter_params"].copy() - # this ensure that sorter_name is given - recording, _ = self.datasets[self.cases[key]["dataset"]] - sorter_name = params.pop("sorter_name") - job = dict( - sorter_name=sorter_name, - recording=recording, - output_folder=sorter_folder, - ) - job.update(params) - # the verbose is overwritten and global to all run_sorters - job["verbose"] = verbose - job["with_output"] = False - job_list.append(job) - - run_sorter_jobs(job_list, engine=engine, engine_kwargs=engine_kwargs, return_output=False) - - # TODO later create a list in laucher for engine blocking and non-blocking - if engine not in ("slurm",): - self.copy_sortings(case_keys) - - def copy_sortings(self, case_keys=None, force=True): - if case_keys is None: - case_keys = self.cases.keys() - - for key in case_keys: - sorting_folder = self.folder / "sortings" / self.key_to_str(key) - sorter_folder = self.folder / "sorters" / self.key_to_str(key) - log_file = self.folder / "sortings" / "run_logs" / f"{self.key_to_str(key)}.json" - - if (sorter_folder / "spikeinterface_log.json").exists(): - sorting = read_sorter_folder( - sorter_folder, raise_error=False, register_recording=False, sorting_info=False - ) - else: - sorting = None - - if sorting is not None: - if sorting_folder.exists(): - if force: - self.remove_sorting(key) - else: - continue - - sorting = sorting.save(format="numpy_folder", folder=sorting_folder) - self.sortings[key] = sorting - - # copy logs - shutil.copyfile(sorter_folder / "spikeinterface_log.json", log_file) - - def run_comparisons(self, case_keys=None, comparison_class=GroundTruthComparison, **kwargs): - if case_keys is None: - case_keys = self.cases.keys() - - for key in case_keys: - dataset_key = self.cases[key]["dataset"] - _, gt_sorting = self.datasets[dataset_key] - sorting = self.sortings[key] - if sorting is None: - self.comparisons[key] = None - continue - comp = comparison_class(gt_sorting, sorting, **kwargs) - self.comparisons[key] = comp - - comparison_file = self.folder / "comparisons" / (self.key_to_str(key) + ".pickle") - with open(comparison_file, mode="wb") as f: - pickle.dump(comp, f) - - def get_run_times(self, case_keys=None): - import pandas as pd - - if case_keys is None: - case_keys = self.cases.keys() - - log_folder = self.folder / "sortings" / "run_logs" - - run_times = {} - for key in case_keys: - log_file = log_folder / f"{self.key_to_str(key)}.json" - with open(log_file, mode="r") as logfile: - log = json.load(logfile) - run_time = log.get("run_time", None) - run_times[key] = run_time - - return pd.Series(run_times, name="run_time") - - def create_sorting_analyzer_gt(self, case_keys=None, random_params={}, waveforms_params={}, **job_kwargs): - if case_keys is None: - case_keys = self.cases.keys() - - base_folder = self.folder / "sorting_analyzer" - base_folder.mkdir(exist_ok=True) - - dataset_keys = [self.cases[key]["dataset"] for key in case_keys] - dataset_keys = set(dataset_keys) - for dataset_key in dataset_keys: - # the waveforms depend on the dataset key - folder = base_folder / self.key_to_str(dataset_key) - recording, gt_sorting = self.datasets[dataset_key] - sorting_analyzer = create_sorting_analyzer(gt_sorting, recording, format="binary_folder", folder=folder) - sorting_analyzer.compute("random_spikes", **random_params) - sorting_analyzer.compute("templates", **job_kwargs) - sorting_analyzer.compute("noise_levels") - - def get_sorting_analyzer(self, case_key=None, dataset_key=None): - if case_key is not None: - dataset_key = self.cases[case_key]["dataset"] - - folder = self.folder / "sorting_analyzer" / self.key_to_str(dataset_key) - sorting_analyzer = load_sorting_analyzer(folder) - return sorting_analyzer - - # def get_templates(self, key, mode="average"): - # analyzer = self.get_sorting_analyzer(case_key=key) - # templates = sorting_analyzer.get_all_templates(mode=mode) - # return templates - - def compute_metrics(self, case_keys=None, metric_names=["snr", "firing_rate"], force=False): - if case_keys is None: - case_keys = self.cases.keys() - - done = [] - for key in case_keys: - dataset_key = self.cases[key]["dataset"] - if dataset_key in done: - # some case can share the same waveform extractor - continue - done.append(dataset_key) - filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" - if filename.exists(): - if force: - os.remove(filename) - else: - continue - analyzer = self.get_sorting_analyzer(key) - metrics = compute_quality_metrics(analyzer, metric_names=metric_names) - metrics.to_csv(filename, sep="\t", index=True) - - def get_metrics(self, key): - import pandas as pd - - dataset_key = self.cases[key]["dataset"] - - filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" - if not filename.exists(): - return - metrics = pd.read_csv(filename, sep="\t", index_col=0) - dataset_key = self.cases[key]["dataset"] - recording, gt_sorting = self.datasets[dataset_key] - metrics.index = gt_sorting.unit_ids - return metrics - - def get_units_snr(self, key): - return self.get_metrics(key)["snr"] - - def get_performance_by_unit(self, case_keys=None): - import pandas as pd - - if case_keys is None: - case_keys = self.cases.keys() - - perf_by_unit = [] - for key in case_keys: - comp = self.comparisons.get(key, None) - assert comp is not None, "You need to do study.run_comparisons() first" - - perf = comp.get_performance(method="by_unit", output="pandas") - - if isinstance(key, str): - perf[self.levels] = key - elif isinstance(key, tuple): - for col, k in zip(self.levels, key): - perf[col] = k - - perf = perf.reset_index() - perf_by_unit.append(perf) - - perf_by_unit = pd.concat(perf_by_unit) - perf_by_unit = perf_by_unit.set_index(self.levels) - perf_by_unit = perf_by_unit.sort_index() - return perf_by_unit - - def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None): - import pandas as pd - - if case_keys is None: - case_keys = list(self.cases.keys()) - - if isinstance(case_keys[0], str): - index = pd.Index(case_keys, name=self.levels) - else: - index = pd.MultiIndex.from_tuples(case_keys, names=self.levels) - - columns = ["num_gt", "num_sorter", "num_well_detected"] - comp = self.comparisons[case_keys[0]] - if comp.exhaustive_gt: - columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"]) - count_units = pd.DataFrame(index=index, columns=columns, dtype=int) - - for key in case_keys: - comp = self.comparisons.get(key, None) - assert comp is not None, "You need to do study.run_comparisons() first" - - gt_sorting = comp.sorting1 - sorting = comp.sorting2 - - count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids()) - count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids()) - count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score) - - if comp.exhaustive_gt: - count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score) - count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score) - count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score) - count_units.loc[key, "num_bad"] = comp.count_bad_units() - - return count_units + raise RuntimeError(_txt_error_message) diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py b/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py index 4d6dd43bce..171745ac2f 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py +++ b/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py @@ -1,471 +1,2 @@ -from __future__ import annotations - -from pathlib import Path -import shutil -import json -import numpy as np - - -import time - - -from spikeinterface.core import SortingAnalyzer - -from spikeinterface import load_extractor, create_sorting_analyzer, load_sorting_analyzer -from spikeinterface.widgets import get_some_colors - - -import pickle - -_key_separator = "_-°°-_" - - -class BenchmarkStudy: - """ - Generic study for sorting components. - This manage a list of Benchmark. - This manage a dict of "cases" every case is one Benchmark. - - Benchmark is responsible for run() and compute_result() - BenchmarkStudy is the main API for: - * running (re-running) some cases - * save (run + compute_result) in results dict - * make some plots in inherited classes. - - - """ - - benchmark_class = None - - def __init__(self, study_folder): - self.folder = Path(study_folder) - self.datasets = {} - self.analyzers = {} - self.cases = {} - self.benchmarks = {} - self.scan_folder() - self.colors = None - - @classmethod - def create(cls, study_folder, datasets={}, cases={}, levels=None): - # check that cases keys are homogeneous - key0 = list(cases.keys())[0] - if isinstance(key0, str): - assert all(isinstance(key, str) for key in cases.keys()), "Keys for cases are not homogeneous" - if levels is None: - levels = "level0" - else: - assert isinstance(levels, str) - elif isinstance(key0, tuple): - assert all(isinstance(key, tuple) for key in cases.keys()), "Keys for cases are not homogeneous" - num_levels = len(key0) - assert all( - len(key) == num_levels for key in cases.keys() - ), "Keys for cases are not homogeneous, tuple negth differ" - if levels is None: - levels = [f"level{i}" for i in range(num_levels)] - else: - levels = list(levels) - assert len(levels) == num_levels - else: - raise ValueError("Keys for cases must str or tuple") - - study_folder = Path(study_folder) - study_folder.mkdir(exist_ok=False, parents=True) - - # (study_folder / "datasets").mkdir() - # (study_folder / "datasets" / "recordings").mkdir() - # (study_folder / "datasets" / "gt_sortings").mkdir() - (study_folder / "run_logs").mkdir() - # (study_folder / "metrics").mkdir() - (study_folder / "results").mkdir() - (study_folder / "sorting_analyzer").mkdir() - - analyzers_path = {} - # for key, (rec, gt_sorting) in datasets.items(): - for key, data in datasets.items(): - assert "/" not in key, "'/' cannot be in the key name!" - assert "\\" not in key, "'\\' cannot be in the key name!" - - local_analyzer_folder = study_folder / "sorting_analyzer" / key - - if isinstance(data, tuple): - # old case : rec + sorting - rec, gt_sorting = data - analyzer = create_sorting_analyzer( - gt_sorting, rec, sparse=True, format="binary_folder", folder=local_analyzer_folder - ) - analyzer.compute("random_spikes") - analyzer.compute("templates") - analyzer.compute("noise_levels") - else: - # new case : analzyer - assert isinstance(data, SortingAnalyzer) - analyzer = data - if data.format == "memory": - # then copy a local copy in the folder - analyzer = data.save_as(format="binary_folder", folder=local_analyzer_folder) - else: - analyzer = data - - rec, gt_sorting = analyzer.recording, analyzer.sorting - - analyzers_path[key] = str(analyzer.folder.resolve()) - - # recordings are pickled - # rec.dump_to_pickle(study_folder / f"datasets/recordings/{key}.pickle") - - # sortings are pickled + saved as NumpyFolderSorting - # gt_sorting.dump_to_pickle(study_folder / f"datasets/gt_sortings/{key}.pickle") - # gt_sorting.save(format="numpy_folder", folder=study_folder / f"datasets/gt_sortings/{key}") - - # analyzer path (local or external) - (study_folder / "analyzers_path.json").write_text(json.dumps(analyzers_path, indent=4), encoding="utf8") - - info = {} - info["levels"] = levels - (study_folder / "info.json").write_text(json.dumps(info, indent=4), encoding="utf8") - - # cases is dumped to a pickle file, json is not possible because of the tuple key - (study_folder / "cases.pickle").write_bytes(pickle.dumps(cases)) - - return cls(study_folder) - - def create_benchmark(self): - raise NotImplementedError - - def scan_folder(self): - if not (self.folder / "sorting_analyzer").exists(): - raise ValueError(f"This is folder is not a BenchmarkStudy : {self.folder.absolute()}") - - with open(self.folder / "info.json", "r") as f: - self.info = json.load(f) - - with open(self.folder / "analyzers_path.json", "r") as f: - self.analyzers_path = json.load(f) - - self.levels = self.info["levels"] - - for key, folder in self.analyzers_path.items(): - analyzer = load_sorting_analyzer(folder) - self.analyzers[key] = analyzer - # the sorting is in memory here we take the saved one because comparisons need to pickle it later - sorting = load_extractor(analyzer.folder / "sorting") - self.datasets[key] = analyzer.recording, sorting - - # for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"): - # key = rec_file.stem - # rec = load_extractor(rec_file) - # gt_sorting = load_extractor(self.folder / f"datasets" / "gt_sortings" / key) - # self.datasets[key] = (rec, gt_sorting) - - with open(self.folder / "cases.pickle", "rb") as f: - self.cases = pickle.load(f) - - self.benchmarks = {} - for key in self.cases: - result_folder = self.folder / "results" / self.key_to_str(key) - if result_folder.exists(): - result = self.benchmark_class.load_folder(result_folder) - benchmark = self.create_benchmark(key) - benchmark.result.update(result) - self.benchmarks[key] = benchmark - else: - self.benchmarks[key] = None - - def __repr__(self): - t = f"{self.__class__.__name__} {self.folder.stem} \n" - t += f" datasets: {len(self.datasets)} {list(self.datasets.keys())}\n" - t += f" cases: {len(self.cases)} {list(self.cases.keys())}\n" - num_computed = sum([1 for benchmark in self.benchmarks.values() if benchmark is not None]) - t += f" computed: {num_computed}\n" - return t - - def key_to_str(self, key): - if isinstance(key, str): - return key - elif isinstance(key, tuple): - return _key_separator.join([str(k) for k in key]) - else: - raise ValueError("Keys for cases must str or tuple") - - def remove_benchmark(self, key): - result_folder = self.folder / "results" / self.key_to_str(key) - log_file = self.folder / "run_logs" / f"{self.key_to_str(key)}.json" - - if result_folder.exists(): - shutil.rmtree(result_folder) - for f in (log_file,): - if f.exists(): - f.unlink() - self.benchmarks[key] = None - - def run(self, case_keys=None, keep=True, verbose=False, **job_kwargs): - if case_keys is None: - case_keys = list(self.cases.keys()) - - job_keys = [] - for key in case_keys: - - result_folder = self.folder / "results" / self.key_to_str(key) - - if keep and result_folder.exists(): - continue - elif not keep and result_folder.exists(): - self.remove_benchmark(key) - job_keys.append(key) - - for key in job_keys: - benchmark = self.create_benchmark(key) - t0 = time.perf_counter() - benchmark.run() - t1 = time.perf_counter() - self.benchmarks[key] = benchmark - bench_folder = self.folder / "results" / self.key_to_str(key) - bench_folder.mkdir(exist_ok=True) - benchmark.save_run(bench_folder) - benchmark.result["run_time"] = float(t1 - t0) - benchmark.save_main(bench_folder) - - def set_colors(self, colors=None, map_name="tab20"): - if colors is None: - case_keys = list(self.cases.keys()) - self.colors = get_some_colors( - case_keys, map_name=map_name, color_engine="matplotlib", shuffle=False, margin=0 - ) - else: - self.colors = colors - - def get_colors(self): - if self.colors is None: - self.set_colors() - return self.colors - - def get_run_times(self, case_keys=None): - if case_keys is None: - case_keys = list(self.cases.keys()) - - run_times = {} - for key in case_keys: - benchmark = self.benchmarks[key] - assert benchmark is not None - run_times[key] = benchmark.result["run_time"] - import pandas as pd - - df = pd.DataFrame(dict(run_times=run_times)) - if not isinstance(self.levels, str): - df.index.names = self.levels - return df - - def plot_run_times(self, case_keys=None): - if case_keys is None: - case_keys = list(self.cases.keys()) - run_times = self.get_run_times(case_keys=case_keys) - - colors = self.get_colors() - import matplotlib.pyplot as plt - - fig, ax = plt.subplots() - labels = [] - for i, key in enumerate(case_keys): - labels.append(self.cases[key]["label"]) - rt = run_times.at[key, "run_times"] - ax.bar(i, rt, width=0.8, color=colors[key]) - ax.set_xticks(np.arange(len(case_keys))) - ax.set_xticklabels(labels, rotation=45.0) - return fig - - # ax = run_times.plot(kind="bar") - # return ax.figure - - def compute_results(self, case_keys=None, verbose=False, **result_params): - if case_keys is None: - case_keys = list(self.cases.keys()) - - job_keys = [] - for key in case_keys: - benchmark = self.benchmarks[key] - assert benchmark is not None - benchmark.compute_result(**result_params) - benchmark.save_result(self.folder / "results" / self.key_to_str(key)) - - def create_sorting_analyzer_gt(self, case_keys=None, return_scaled=True, random_params={}, **job_kwargs): - print("###### Study.create_sorting_analyzer_gt() is not used anymore!!!!!!") - # if case_keys is None: - # case_keys = self.cases.keys() - - # base_folder = self.folder / "sorting_analyzer" - # base_folder.mkdir(exist_ok=True) - - # dataset_keys = [self.cases[key]["dataset"] for key in case_keys] - # dataset_keys = set(dataset_keys) - # for dataset_key in dataset_keys: - # # the waveforms depend on the dataset key - # folder = base_folder / self.key_to_str(dataset_key) - # recording, gt_sorting = self.datasets[dataset_key] - # sorting_analyzer = create_sorting_analyzer( - # gt_sorting, recording, format="binary_folder", folder=folder, return_scaled=return_scaled - # ) - # sorting_analyzer.compute("random_spikes", **random_params) - # sorting_analyzer.compute("templates", **job_kwargs) - # sorting_analyzer.compute("noise_levels") - - def get_sorting_analyzer(self, case_key=None, dataset_key=None): - if case_key is not None: - dataset_key = self.cases[case_key]["dataset"] - return self.analyzers[dataset_key] - - # folder = self.folder / "sorting_analyzer" / self.key_to_str(dataset_key) - # sorting_analyzer = load_sorting_analyzer(folder) - # return sorting_analyzer - - def get_templates(self, key, operator="average"): - sorting_analyzer = self.get_sorting_analyzer(case_key=key) - templates = sorting_analyzer.get_extenson("templates").get_data(operator=operator) - return templates - - def compute_metrics(self, case_keys=None, metric_names=["snr", "firing_rate"], force=False): - if case_keys is None: - case_keys = self.cases.keys() - - done = [] - for key in case_keys: - dataset_key = self.cases[key]["dataset"] - if dataset_key in done: - # some case can share the same analyzer - continue - done.append(dataset_key) - # filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" - # if filename.exists(): - # if force: - # os.remove(filename) - # else: - # continue - sorting_analyzer = self.get_sorting_analyzer(key) - qm_ext = sorting_analyzer.get_extension("quality_metrics") - if qm_ext is None or force: - qm_ext = sorting_analyzer.compute("quality_metrics", metric_names=metric_names) - - # TODO remove this metics CSV file!!!! - metrics = qm_ext.get_data() - # metrics.to_csv(filename, sep="\t", index=True) - - def get_metrics(self, key): - import pandas as pd - - dataset_key = self.cases[key]["dataset"] - - analyzer = self.get_sorting_analyzer(key) - ext = analyzer.get_extension("quality_metrics") - if ext is None: - # TODO au to compute ???? - return None - - metrics = ext.get_data() - return metrics - - # filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv" - # if not filename.exists(): - # return - # metrics = pd.read_csv(filename, sep="\t", index_col=0) - # dataset_key = self.cases[key]["dataset"] - # recording, gt_sorting = self.datasets[dataset_key] - # metrics.index = gt_sorting.unit_ids - # return metrics - - def get_units_snr(self, key): - """ """ - return self.get_metrics(key)["snr"] - - def get_result(self, key): - return self.benchmarks[key].result - - -class Benchmark: - """ - Responsible to make a unique run() and compute_result() for one case. - """ - - def __init__(self): - self.result = {} - - # this must not be changed in inherited - _main_key_saved = [ - ("run_time", "pickle"), - ] - # this must be updated in hirerited - _run_key_saved = [] - _result_key_saved = [] - - def _save_keys(self, saved_keys, folder): - for k, format in saved_keys: - if k not in self.result or self.result[k] is None: - continue - if format == "npy": - np.save(folder / f"{k}.npy", self.result[k]) - elif format == "pickle": - with open(folder / f"{k}.pickle", mode="wb") as f: - pickle.dump(self.result[k], f) - elif format == "sorting": - self.result[k].save(folder=folder / k, format="numpy_folder", overwrite=True) - elif format == "Motion": - self.result[k].save(folder=folder / k) - elif format == "zarr_templates": - self.result[k].to_zarr(folder / k) - elif format == "sorting_analyzer": - pass - else: - raise ValueError(f"Save error {k} {format}") - - def save_main(self, folder): - # used for run time - self._save_keys(self._main_key_saved, folder) - - def save_run(self, folder): - self._save_keys(self._run_key_saved, folder) - - def save_result(self, folder): - self._save_keys(self._result_key_saved, folder) - - @classmethod - def load_folder(cls, folder): - result = {} - for k, format in cls._run_key_saved + cls._result_key_saved + cls._main_key_saved: - if format == "npy": - file = folder / f"{k}.npy" - if file.exists(): - result[k] = np.load(file) - elif format == "pickle": - file = folder / f"{k}.pickle" - if file.exists(): - with open(file, mode="rb") as f: - result[k] = pickle.load(f) - elif format == "sorting": - from spikeinterface.core import load_extractor - - result[k] = load_extractor(folder / k) - elif format == "Motion": - from spikeinterface.sortingcomponents.motion import Motion - - result[k] = Motion.load(folder / k) - elif format == "zarr_templates": - from spikeinterface.core.template import Templates - - result[k] = Templates.from_zarr(folder / k) - - return result - - def run(self): - # run method - raise NotImplementedError - - def compute_result(self): - # run becnhmark result - raise NotImplementedError - - -def _simpleaxis(ax): - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.get_xaxis().tick_bottom() - ax.get_yaxis().tick_left() +from spikeinterface.benchmark.benchmark_base import Benchmark, BenchmarkStudy +from spikeinterface.benchmark.benchmark_plot_tools import _simpleaxis \ No newline at end of file From 6cff8fa87ab89c7450523e66ebb502d06182fedb Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 11 Sep 2024 18:06:04 +0200 Subject: [PATCH 2/9] rm test --- .../comparison/tests/test_groundtruthstudy.py | 98 ------------------- 1 file changed, 98 deletions(-) delete mode 100644 src/spikeinterface/comparison/tests/test_groundtruthstudy.py diff --git a/src/spikeinterface/comparison/tests/test_groundtruthstudy.py b/src/spikeinterface/comparison/tests/test_groundtruthstudy.py deleted file mode 100644 index a92d6e9f77..0000000000 --- a/src/spikeinterface/comparison/tests/test_groundtruthstudy.py +++ /dev/null @@ -1,98 +0,0 @@ -import shutil -import pytest -from pathlib import Path - -from spikeinterface import generate_ground_truth_recording -from spikeinterface.preprocessing import bandpass_filter -from spikeinterface.comparison import GroundTruthStudy - - -@pytest.fixture(scope="module") -def setup_module(tmp_path_factory): - study_folder = tmp_path_factory.mktemp("study_folder") - if study_folder.is_dir(): - shutil.rmtree(study_folder) - create_a_study(study_folder) - return study_folder - - -def simple_preprocess(rec): - return bandpass_filter(rec) - - -def create_a_study(study_folder): - rec0, gt_sorting0 = generate_ground_truth_recording(num_channels=4, durations=[30.0], seed=42) - rec1, gt_sorting1 = generate_ground_truth_recording(num_channels=4, durations=[30.0], seed=91) - - datasets = { - "toy_tetrode": (rec0, gt_sorting0), - "toy_probe32": (rec1, gt_sorting1), - "toy_probe32_preprocess": (simple_preprocess(rec1), gt_sorting1), - } - - # cases can also be generated via simple loops - cases = { - # - ("tdc2", "no-preprocess", "tetrode"): { - "label": "tridesclous2 without preprocessing and standard params", - "dataset": "toy_tetrode", - "run_sorter_params": { - "sorter_name": "tridesclous2", - }, - "comparison_params": {}, - }, - # - ("tdc2", "with-preprocess", "probe32"): { - "label": "tridesclous2 with preprocessing standar params", - "dataset": "toy_probe32_preprocess", - "run_sorter_params": { - "sorter_name": "tridesclous2", - }, - "comparison_params": {}, - }, - # we comment this at the moement because SC2 is quite slow for testing - # ("sc2", "no-preprocess", "tetrode"): { - # "label": "spykingcircus2 without preprocessing standar params", - # "dataset": "toy_tetrode", - # "run_sorter_params": { - # "sorter_name": "spykingcircus2", - # }, - # "comparison_params": { - # }, - # }, - } - - study = GroundTruthStudy.create( - study_folder, datasets=datasets, cases=cases, levels=["sorter_name", "processing", "probe_type"] - ) - # print(study) - - -def test_GroundTruthStudy(setup_module): - study_folder = setup_module - study = GroundTruthStudy(study_folder) - print(study) - - study.run_sorters(verbose=True) - - print(study.sortings) - - print(study.comparisons) - study.run_comparisons() - print(study.comparisons) - - study.create_sorting_analyzer_gt(n_jobs=-1) - - study.compute_metrics() - - for key in study.cases: - metrics = study.get_metrics(key) - print(metrics) - - study.get_performance_by_unit() - study.get_count_units() - - -if __name__ == "__main__": - setup_module() - test_GroundTruthStudy() From 066caa038f2048393d33e82e10dfbd1786794c25 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 11 Sep 2024 18:17:27 +0200 Subject: [PATCH 3/9] Move components benchmarks --- .../benchmark/benchmark_clustering.py | 3 +-- .../benchmark/benchmark_matching.py | 5 +---- .../benchmark/benchmark_motion_estimation.py | 3 ++- .../benchmark/benchmark_motion_interpolation.py | 2 +- .../benchmark/benchmark_peak_detection.py | 3 +-- .../benchmark/benchmark_peak_localization.py | 2 +- .../benchmark/benchmark_peak_selection.py | 9 +-------- .../{sortingcomponents => }/benchmark/benchmark_tools.py | 0 .../benchmark/tests/common_benchmark_testing.py | 0 .../benchmark/tests/test_benchmark_clustering.py | 0 .../benchmark/tests/test_benchmark_matching.py | 0 .../benchmark/tests/test_benchmark_motion_estimation.py | 0 .../tests/test_benchmark_motion_interpolation.py | 0 .../benchmark/tests/test_benchmark_peak_detection.py | 0 .../benchmark/tests/test_benchmark_peak_localization.py | 0 .../benchmark/tests/test_benchmark_peak_selection.py | 0 .../sortingcomponents/benchmark/__init__.py | 6 ------ 17 files changed, 8 insertions(+), 25 deletions(-) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_clustering.py (99%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_matching.py (97%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_motion_estimation.py (99%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_motion_interpolation.py (98%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_peak_detection.py (98%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_peak_localization.py (99%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_peak_selection.py (98%) rename src/spikeinterface/{sortingcomponents => }/benchmark/benchmark_tools.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/common_benchmark_testing.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_clustering.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_matching.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_motion_estimation.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_motion_interpolation.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_peak_detection.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_peak_localization.py (100%) rename src/spikeinterface/{sortingcomponents => }/benchmark/tests/test_benchmark_peak_selection.py (100%) delete mode 100644 src/spikeinterface/sortingcomponents/benchmark/__init__.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_clustering.py b/src/spikeinterface/benchmark/benchmark_clustering.py similarity index 99% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_clustering.py rename to src/spikeinterface/benchmark/benchmark_clustering.py index 92fcda35d9..94fcafef6e 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_clustering.py +++ b/src/spikeinterface/benchmark/benchmark_clustering.py @@ -11,8 +11,7 @@ import numpy as np - -from .benchmark_tools import BenchmarkStudy, Benchmark +from .benchmark_base import Benchmark, BenchmarkStudy from spikeinterface.core.sortinganalyzer import create_sorting_analyzer from spikeinterface.core.template_tools import get_template_extremum_channel diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_matching.py b/src/spikeinterface/benchmark/benchmark_matching.py similarity index 97% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_matching.py rename to src/spikeinterface/benchmark/benchmark_matching.py index ab1523d13a..6edb504a84 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_matching.py +++ b/src/spikeinterface/benchmark/benchmark_matching.py @@ -9,11 +9,8 @@ ) import numpy as np -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy +from .benchmark_base import Benchmark, BenchmarkStudy from spikeinterface.core.basesorting import minimum_spike_dtype -from spikeinterface.sortingcomponents.tools import remove_empty_templates -from spikeinterface.core.recording_tools import get_noise_levels -from spikeinterface.core.sparsity import compute_sparsity class MatchingBenchmark(Benchmark): diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_estimation.py b/src/spikeinterface/benchmark/benchmark_motion_estimation.py similarity index 99% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_estimation.py rename to src/spikeinterface/benchmark/benchmark_motion_estimation.py index ec7e1e24a8..abb2a51bae 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_estimation.py +++ b/src/spikeinterface/benchmark/benchmark_motion_estimation.py @@ -8,7 +8,8 @@ import numpy as np from spikeinterface.core import get_noise_levels -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy, _simpleaxis +from .benchmark_base import Benchmark, BenchmarkStudy +from .benchmark_plot_tools import _simpleaxis from spikeinterface.sortingcomponents.motion import estimate_motion from spikeinterface.sortingcomponents.peak_detection import detect_peaks from spikeinterface.sortingcomponents.peak_selection import select_peaks diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_interpolation.py b/src/spikeinterface/benchmark/benchmark_motion_interpolation.py similarity index 98% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_interpolation.py rename to src/spikeinterface/benchmark/benchmark_motion_interpolation.py index 38365adfd1..ab72a1f9bd 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_motion_interpolation.py +++ b/src/spikeinterface/benchmark/benchmark_motion_interpolation.py @@ -10,7 +10,7 @@ from spikeinterface.curation import MergeUnitsSorting -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy, _simpleaxis +from .benchmark_base import Benchmark, BenchmarkStudy class MotionInterpolationBenchmark(Benchmark): diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_detection.py b/src/spikeinterface/benchmark/benchmark_peak_detection.py similarity index 98% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_detection.py rename to src/spikeinterface/benchmark/benchmark_peak_detection.py index 7d862343d2..77b5e0025c 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_detection.py +++ b/src/spikeinterface/benchmark/benchmark_peak_detection.py @@ -12,10 +12,9 @@ import numpy as np -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy +from .benchmark_base import Benchmark, BenchmarkStudy from spikeinterface.core.basesorting import minimum_spike_dtype from spikeinterface.core.sortinganalyzer import create_sorting_analyzer -from spikeinterface.core.template_tools import get_template_extremum_channel class PeakDetectionBenchmark(Benchmark): diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_localization.py b/src/spikeinterface/benchmark/benchmark_peak_localization.py similarity index 99% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_localization.py rename to src/spikeinterface/benchmark/benchmark_peak_localization.py index 05d142113b..399729fa29 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_localization.py +++ b/src/spikeinterface/benchmark/benchmark_peak_localization.py @@ -6,7 +6,7 @@ compute_grid_convolution, ) import numpy as np -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy +from .benchmark_base import Benchmark, BenchmarkStudy from spikeinterface.core.sortinganalyzer import create_sorting_analyzer diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_selection.py b/src/spikeinterface/benchmark/benchmark_peak_selection.py similarity index 98% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_selection.py rename to src/spikeinterface/benchmark/benchmark_peak_selection.py index 008de2d931..7abeaaacc9 100644 --- a/src/spikeinterface/sortingcomponents/benchmark/benchmark_peak_selection.py +++ b/src/spikeinterface/benchmark/benchmark_peak_selection.py @@ -6,16 +6,9 @@ from spikeinterface.comparison.comparisontools import make_matching_events from spikeinterface.core import get_noise_levels -import time -import string, random -import pylab as plt -import os import numpy as np -from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy -from spikeinterface.core.basesorting import minimum_spike_dtype -from spikeinterface.core.sortinganalyzer import create_sorting_analyzer - +from .benchmark_base import Benchmark, BenchmarkStudy class PeakSelectionBenchmark(Benchmark): diff --git a/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py b/src/spikeinterface/benchmark/benchmark_tools.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py rename to src/spikeinterface/benchmark/benchmark_tools.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/common_benchmark_testing.py b/src/spikeinterface/benchmark/tests/common_benchmark_testing.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/common_benchmark_testing.py rename to src/spikeinterface/benchmark/tests/common_benchmark_testing.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_clustering.py b/src/spikeinterface/benchmark/tests/test_benchmark_clustering.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_clustering.py rename to src/spikeinterface/benchmark/tests/test_benchmark_clustering.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_matching.py b/src/spikeinterface/benchmark/tests/test_benchmark_matching.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_matching.py rename to src/spikeinterface/benchmark/tests/test_benchmark_matching.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_motion_estimation.py b/src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_motion_estimation.py rename to src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_motion_interpolation.py b/src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_motion_interpolation.py rename to src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_detection.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_detection.py rename to src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_localization.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_localization.py rename to src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_selection.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py similarity index 100% rename from src/spikeinterface/sortingcomponents/benchmark/tests/test_benchmark_peak_selection.py rename to src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py diff --git a/src/spikeinterface/sortingcomponents/benchmark/__init__.py b/src/spikeinterface/sortingcomponents/benchmark/__init__.py deleted file mode 100644 index ad6d444bdb..0000000000 --- a/src/spikeinterface/sortingcomponents/benchmark/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -""" -Module to benchmark some sorting components: - * clustering - * motion - * template matching -""" From d8229db234a0081d321ab4fac1ff52e5f2d1502e Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 11 Sep 2024 19:10:35 +0200 Subject: [PATCH 4/9] Fix tests. --- .../benchmark/benchmark_matching.py | 1 + .../benchmark/benchmark_tools.py | 2 -- .../tests/test_benchmark_clustering.py | 9 ++++++--- .../tests/test_benchmark_matching.py | 8 +++++--- .../tests/test_benchmark_motion_estimation.py | 8 +++++--- .../test_benchmark_motion_interpolation.py | 11 +++++----- .../tests/test_benchmark_peak_detection.py | 10 +++++----- .../tests/test_benchmark_peak_localization.py | 20 ++++++++++--------- .../tests/test_benchmark_peak_selection.py | 5 +++-- .../benchmark/tests/test_benchmark_sorter.py | 2 +- src/spikeinterface/full.py | 1 + 11 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/spikeinterface/benchmark/benchmark_matching.py b/src/spikeinterface/benchmark/benchmark_matching.py index 6edb504a84..784b369d7f 100644 --- a/src/spikeinterface/benchmark/benchmark_matching.py +++ b/src/spikeinterface/benchmark/benchmark_matching.py @@ -77,6 +77,7 @@ def plot_performances_vs_snr(self, case_keys=None, figsize=None, metrics=["accur if case_keys is None: case_keys = list(self.cases.keys()) + import matplotlib.pyplot as plt fig, axs = plt.subplots(ncols=1, nrows=len(metrics), figsize=figsize, squeeze=False) for count, k in enumerate(metrics): diff --git a/src/spikeinterface/benchmark/benchmark_tools.py b/src/spikeinterface/benchmark/benchmark_tools.py index 171745ac2f..e69de29bb2 100644 --- a/src/spikeinterface/benchmark/benchmark_tools.py +++ b/src/spikeinterface/benchmark/benchmark_tools.py @@ -1,2 +0,0 @@ -from spikeinterface.benchmark.benchmark_base import Benchmark, BenchmarkStudy -from spikeinterface.benchmark.benchmark_plot_tools import _simpleaxis \ No newline at end of file diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_clustering.py b/src/spikeinterface/benchmark/tests/test_benchmark_clustering.py index bc36fb607c..3f574fd058 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_clustering.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_clustering.py @@ -3,11 +3,13 @@ import shutil -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import make_dataset -from spikeinterface.sortingcomponents.benchmark.benchmark_clustering import ClusteringStudy +from spikeinterface.benchmark.tests.common_benchmark_testing import make_dataset +from spikeinterface.benchmark.benchmark_clustering import ClusteringStudy from spikeinterface.core.sortinganalyzer import create_sorting_analyzer from spikeinterface.core.template_tools import get_template_extremum_channel +from pathlib import Path + @pytest.mark.skip() def test_benchmark_clustering(create_cache_folder): @@ -78,4 +80,5 @@ def test_benchmark_clustering(create_cache_folder): if __name__ == "__main__": - test_benchmark_clustering() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_clustering(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_matching.py b/src/spikeinterface/benchmark/tests/test_benchmark_matching.py index aa9b16bb97..eacef848f4 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_matching.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_matching.py @@ -1,6 +1,7 @@ import pytest import shutil +from pathlib import Path from spikeinterface.core import ( @@ -8,11 +9,11 @@ compute_sparsity, ) -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import ( +from spikeinterface.benchmark.tests.common_benchmark_testing import ( make_dataset, compute_gt_templates, ) -from spikeinterface.sortingcomponents.benchmark.benchmark_matching import MatchingStudy +from spikeinterface.benchmark.benchmark_matching import MatchingStudy @pytest.mark.skip() @@ -72,4 +73,5 @@ def test_benchmark_matching(create_cache_folder): if __name__ == "__main__": - test_benchmark_matching() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_matching(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py b/src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py index 78a9eb7dbc..65cacfc8a0 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_motion_estimation.py @@ -2,12 +2,13 @@ import shutil +from pathlib import Path -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import ( +from spikeinterface.benchmark.tests.common_benchmark_testing import ( make_drifting_dataset, ) -from spikeinterface.sortingcomponents.benchmark.benchmark_motion_estimation import MotionEstimationStudy +from spikeinterface.benchmark.benchmark_motion_estimation import MotionEstimationStudy @pytest.mark.skip() @@ -75,4 +76,5 @@ def test_benchmark_motion_estimaton(create_cache_folder): if __name__ == "__main__": - test_benchmark_motion_estimaton() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_motion_estimaton(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py b/src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py index 18def37d54..f7afd7a8bc 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_motion_interpolation.py @@ -4,14 +4,14 @@ import numpy as np import shutil +from pathlib import Path - -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import ( +from spikeinterface.benchmark.tests.common_benchmark_testing import ( make_drifting_dataset, ) -from spikeinterface.sortingcomponents.benchmark.benchmark_motion_interpolation import MotionInterpolationStudy -from spikeinterface.sortingcomponents.benchmark.benchmark_motion_estimation import ( +from spikeinterface.benchmark.benchmark_motion_interpolation import MotionInterpolationStudy +from spikeinterface.benchmark.benchmark_motion_estimation import ( # get_unit_displacement, get_gt_motion_from_unit_displacement, ) @@ -139,4 +139,5 @@ def test_benchmark_motion_interpolation(create_cache_folder): if __name__ == "__main__": - test_benchmark_motion_interpolation() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_motion_interpolation(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py index dffe1529b7..d45ac0b4ce 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_peak_detection.py @@ -1,10 +1,10 @@ import pytest import shutil +from pathlib import Path - -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import make_dataset -from spikeinterface.sortingcomponents.benchmark.benchmark_peak_detection import PeakDetectionStudy +from spikeinterface.benchmark.tests.common_benchmark_testing import make_dataset +from spikeinterface.benchmark.benchmark_peak_detection import PeakDetectionStudy from spikeinterface.core.sortinganalyzer import create_sorting_analyzer from spikeinterface.core.template_tools import get_template_extremum_channel @@ -69,5 +69,5 @@ def test_benchmark_peak_detection(create_cache_folder): if __name__ == "__main__": - # test_benchmark_peak_localization() - test_benchmark_peak_detection() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_peak_detection(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py index 23060c4ddb..3b6240cb10 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_peak_localization.py @@ -1,12 +1,12 @@ import pytest import shutil +from pathlib import Path +from spikeinterface.benchmark.tests.common_benchmark_testing import make_dataset -from spikeinterface.sortingcomponents.benchmark.tests.common_benchmark_testing import make_dataset - -from spikeinterface.sortingcomponents.benchmark.benchmark_peak_localization import PeakLocalizationStudy -from spikeinterface.sortingcomponents.benchmark.benchmark_peak_localization import UnitLocalizationStudy +from spikeinterface.benchmark.benchmark_peak_localization import PeakLocalizationStudy +from spikeinterface.benchmark.benchmark_peak_localization import UnitLocalizationStudy @pytest.mark.skip() @@ -28,7 +28,8 @@ def test_benchmark_peak_localization(create_cache_folder): "init_kwargs": {"gt_positions": gt_sorting.get_property("gt_unit_locations")}, "params": { "method": method, - "method_kwargs": {"ms_before": 2}, + "ms_before": 2.0, + "method_kwargs": {}, }, } @@ -60,7 +61,7 @@ def test_benchmark_unit_locations(create_cache_folder): cache_folder = create_cache_folder job_kwargs = dict(n_jobs=0.8, chunk_duration="100ms") - recording, gt_sorting = make_dataset() + recording, gt_sorting, gt_analyzer = make_dataset() # create study study_folder = cache_folder / "study_unit_locations" @@ -71,7 +72,7 @@ def test_benchmark_unit_locations(create_cache_folder): "label": f"{method} on toy", "dataset": "toy", "init_kwargs": {"gt_positions": gt_sorting.get_property("gt_unit_locations")}, - "params": {"method": method, "method_kwargs": {"ms_before": 2}}, + "params": {"method": method, "ms_before": 2.0, "method_kwargs": {}}, } if study_folder.exists(): @@ -99,5 +100,6 @@ def test_benchmark_unit_locations(create_cache_folder): if __name__ == "__main__": - # test_benchmark_peak_localization() - test_benchmark_unit_locations() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + # test_benchmark_peak_localization(cache_folder) + test_benchmark_unit_locations(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py index a9e404292d..92ed0f94ae 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py @@ -1,11 +1,12 @@ import pytest +from pathlib import Path @pytest.mark.skip() def test_benchmark_peak_selection(create_cache_folder): cache_folder = create_cache_folder - pass if __name__ == "__main__": - test_benchmark_peak_selection() + cache_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" + test_benchmark_peak_selection(cache_folder) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py index 7fad1b6e8b..50308f8df7 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py @@ -86,5 +86,5 @@ def test_SorterStudy(setup_module): if __name__ == "__main__": study_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" / "test_SorterStudy" - # create_a_study(study_folder) + create_a_study(study_folder) test_SorterStudy(study_folder) diff --git a/src/spikeinterface/full.py b/src/spikeinterface/full.py index 0cd0fb0fb5..b9410bc021 100644 --- a/src/spikeinterface/full.py +++ b/src/spikeinterface/full.py @@ -25,3 +25,4 @@ from .widgets import * from .exporters import * from .generation import * +from .benchmark import * From de2904b9e673d5587603c3c73e59deedc1af3031 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 18 Sep 2024 17:33:07 +0200 Subject: [PATCH 5/9] Refactor plotting for GTSTudy --- .../benchmark/benchmark_base.py | 21 +- .../benchmark/benchmark_plot_tools.py | 212 ++++++++++++++- .../benchmark/tests/test_benchmark_sorter.py | 4 +- src/spikeinterface/widgets/gtstudy.py | 249 ++++-------------- 4 files changed, 262 insertions(+), 224 deletions(-) diff --git a/src/spikeinterface/benchmark/benchmark_base.py b/src/spikeinterface/benchmark/benchmark_base.py index 2dfe2b3448..7d5f17e948 100644 --- a/src/spikeinterface/benchmark/benchmark_base.py +++ b/src/spikeinterface/benchmark/benchmark_base.py @@ -258,25 +258,8 @@ def get_run_times(self, case_keys=None): return df def plot_run_times(self, case_keys=None): - if case_keys is None: - case_keys = list(self.cases.keys()) - run_times = self.get_run_times(case_keys=case_keys) - - colors = self.get_colors() - import matplotlib.pyplot as plt - - fig, ax = plt.subplots() - labels = [] - for i, key in enumerate(case_keys): - labels.append(self.cases[key]["label"]) - rt = run_times.at[key, "run_times"] - ax.bar(i, rt, width=0.8, color=colors[key]) - ax.set_xticks(np.arange(len(case_keys))) - ax.set_xticklabels(labels, rotation=45.0) - return fig - - # ax = run_times.plot(kind="bar") - # return ax.figure + from .benchmark_plot_tools import plot_run_times + return plot_run_times(self, case_keys=case_keys) def compute_results(self, case_keys=None, verbose=False, **result_params): if case_keys is None: diff --git a/src/spikeinterface/benchmark/benchmark_plot_tools.py b/src/spikeinterface/benchmark/benchmark_plot_tools.py index ee9d2947d6..ae9009521f 100644 --- a/src/spikeinterface/benchmark/benchmark_plot_tools.py +++ b/src/spikeinterface/benchmark/benchmark_plot_tools.py @@ -1,4 +1,4 @@ - +import numpy as np @@ -7,3 +7,213 @@ def _simpleaxis(ax): ax.spines["right"].set_visible(False) ax.get_xaxis().tick_bottom() ax.get_yaxis().tick_left() + + +def plot_run_times(study, case_keys=None): + """ + Plot run times for a BenchmarkStudy. + + Parameters + ---------- + study : SorterStudy + A study object. + case_keys : list or None + A selection of cases to plot, if None, then all. + """ + import matplotlib.pyplot as plt + + if case_keys is None: + case_keys = list(study.cases.keys()) + + run_times = study.get_run_times(case_keys=case_keys) + + colors = study.get_colors() + + + fig, ax = plt.subplots() + labels = [] + for i, key in enumerate(case_keys): + labels.append(study.cases[key]["label"]) + rt = run_times.at[key, "run_times"] + ax.bar(i, rt, width=0.8, color=colors[key]) + ax.set_xticks(np.arange(len(case_keys))) + ax.set_xticklabels(labels, rotation=45.0) + return fig + + +def plot_unit_counts(study, case_keys=None): + """ + Plot unit counts for a study: "num_well_detected", "num_false_positive", "num_redundant", "num_overmerged" + + Parameters + ---------- + study : SorterStudy + A study object. + case_keys : list or None + A selection of cases to plot, if None, then all. + """ + import matplotlib.pyplot as plt + from spikeinterface.widgets.utils import get_some_colors + + if case_keys is None: + case_keys = list(study.cases.keys()) + + + count_units = study.get_count_units(case_keys=case_keys) + + fig, ax = plt.subplots() + + columns = count_units.columns.tolist() + columns.remove("num_gt") + columns.remove("num_sorter") + + ncol = len(columns) + + colors = get_some_colors(columns, color_engine="auto", map_name="hot") + colors["num_well_detected"] = "green" + + xticklabels = [] + for i, key in enumerate(case_keys): + for c, col in enumerate(columns): + x = i + 1 + c / (ncol + 1) + y = count_units.loc[key, col] + if not "well_detected" in col: + y = -y + + if i == 0: + label = col.replace("num_", "").replace("_", " ").title() + else: + label = None + + ax.bar([x], [y], width=1 / (ncol + 2), label=label, color=colors[col]) + + xticklabels.append(study.cases[key]["label"]) + + ax.set_xticks(np.arange(len(case_keys)) + 1) + ax.set_xticklabels(xticklabels) + ax.legend() + + return fig + +def plot_performances(study, mode="ordered", performance_names=("accuracy", "precision", "recall"), case_keys=None): + """ + Plot performances over case for a study. + + Parameters + ---------- + study : GroundTruthStudy + A study object. + mode : "ordered" | "snr" | "swarm", default: "ordered" + Which plot mode to use: + + * "ordered": plot performance metrics vs unit indices ordered by decreasing accuracy + * "snr": plot performance metrics vs snr + * "swarm": plot performance metrics as a swarm plot (see seaborn.swarmplot for details) + performance_names : list or tuple, default: ("accuracy", "precision", "recall") + Which performances to plot ("accuracy", "precision", "recall") + case_keys : list or None + A selection of cases to plot, if None, then all. + """ + import matplotlib.pyplot as plt + import pandas as pd + import seaborn as sns + + if case_keys is None: + case_keys = list(study.cases.keys()) + + perfs=study.get_performance_by_unit(case_keys=case_keys) + colors = study.get_colors() + + + if mode in ("ordered", "snr"): + num_axes = len(performance_names) + fig, axs = plt.subplots(ncols=num_axes) + else: + fig, ax = plt.subplots() + + if mode == "ordered": + for count, performance_name in enumerate(performance_names): + ax = axs.flatten()[count] + for key in case_keys: + label = study.cases[key]["label"] + val = perfs.xs(key).loc[:, performance_name].values + val = np.sort(val)[::-1] + ax.plot(val, label=label, c=colors[key]) + ax.set_title(performance_name) + if count == len(performance_names) - 1: + ax.legend(bbox_to_anchor=(0.05, 0.05), loc="lower left", framealpha=0.8) + + elif mode == "snr": + metric_name = mode + for count, performance_name in enumerate(performance_names): + ax = axs.flatten()[count] + + max_metric = 0 + for key in case_keys: + x = study.get_metrics(key).loc[:, metric_name].values + y = perfs.xs(key).loc[:, performance_name].values + label = study.cases[key]["label"] + ax.scatter(x, y, s=10, label=label, color=colors[key]) + max_metric = max(max_metric, np.max(x)) + ax.set_title(performance_name) + ax.set_xlim(0, max_metric * 1.05) + ax.set_ylim(0, 1.05) + if count == 0: + ax.legend(loc="lower right") + + elif mode == "swarm": + levels = perfs.index.names + df = pd.melt( + perfs.reset_index(), + id_vars=levels, + var_name="Metric", + value_name="Score", + value_vars=performance_names, + ) + df["x"] = df.apply(lambda r: " ".join([r[col] for col in levels]), axis=1) + sns.swarmplot(data=df, x="x", y="Score", hue="Metric", dodge=True, ax=ax) + + +def plot_agreement_matrix(study, ordered=True, case_keys=None): + """ + Plot agreement matri ces for cases in a study. + + Parameters + ---------- + study : GroundTruthStudy + A study object. + case_keys : list or None + A selection of cases to plot, if None, then all. + ordered : bool + Order units with best agreement scores. + This enable to see agreement on a diagonal. + """ + + import matplotlib.pyplot as plt + from spikeinterface.widgets import AgreementMatrixWidget + + if case_keys is None: + case_keys = list(study.cases.keys()) + + + num_axes = len(case_keys) + fig, axs = plt.subplots(ncols=num_axes) + + for count, key in enumerate(case_keys): + ax = axs.flatten()[count] + comp = study.get_result(key)["gt_comparison"] + + unit_ticks = len(comp.sorting1.unit_ids) <= 16 + count_text = len(comp.sorting1.unit_ids) <= 16 + + AgreementMatrixWidget( + comp, ordered=ordered, count_text=count_text, unit_ticks=unit_ticks, backend="matplotlib", ax=ax + ) + label = study.cases[key]["label"] + ax.set_xlabel(label) + + if count > 0: + ax.set_ylabel(None) + ax.set_yticks([]) + ax.set_xticks([]) + diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py index 50308f8df7..03ac86d715 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py @@ -63,10 +63,10 @@ def test_SorterStudy(setup_module): print(study) # # this run the sorters - study.run() + # study.run() # # this run comparisons - study.compute_results() + # study.compute_results() print(study) # this is from the base class diff --git a/src/spikeinterface/widgets/gtstudy.py b/src/spikeinterface/widgets/gtstudy.py index 85043d0d12..f32a15e429 100644 --- a/src/spikeinterface/widgets/gtstudy.py +++ b/src/spikeinterface/widgets/gtstudy.py @@ -1,127 +1,60 @@ -from __future__ import annotations +""" +This module will be deprecated and will be removed in 0.102.0 + +All ploting for the previous GTStudy is now centralized in spikeinterface.benchmark.benchmark_plot_tools +Please not that GTStudy is replaced by SorterStudy wich is based more generic BenchmarkStudy. +""" -import numpy as np +from __future__ import annotations -from .base import BaseWidget, to_attr +from .base import BaseWidget +import warnings class StudyRunTimesWidget(BaseWidget): """ - Plot sorter run times for a GroundTruthStudy - + Plot sorter run times for a SorterStudy. Parameters ---------- - study : GroundTruthStudy + study : SorterStudy A study object. case_keys : list or None A selection of cases to plot, if None, then all. """ - def __init__( - self, - study, - case_keys=None, - backend=None, - **backend_kwargs, - ): - if case_keys is None: - case_keys = list(study.cases.keys()) - - plot_data = dict( - study=study, run_times=study.get_run_times(case_keys), case_keys=case_keys, colors=study.get_colors() - ) - + def __init__(self, study, case_keys=None, backend=None, **backend_kwargs): + warnings.warn("plot_study_run_times is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): - import matplotlib.pyplot as plt - from .utils_matplotlib import make_mpl_figure - - dp = to_attr(data_plot) + from spikeinterface.benchmark.benchmark_plot_tools import plot_run_times + plot_run_times(data_plot["study"], case_keys=data_plot["case_keys"]) - self.figure, self.axes, self.ax = make_mpl_figure(**backend_kwargs) - for i, key in enumerate(dp.case_keys): - label = dp.study.cases[key]["label"] - rt = dp.run_times.loc[key] - self.ax.bar(i, rt, width=0.8, label=label, facecolor=dp.colors[key]) - self.ax.set_ylabel("run time (s)") - self.ax.legend() - - -# TODO : plot optionally average on some levels using group by class StudyUnitCountsWidget(BaseWidget): """ Plot unit counts for a study: "num_well_detected", "num_false_positive", "num_redundant", "num_overmerged" - Parameters ---------- - study : GroundTruthStudy + study : SorterStudy A study object. case_keys : list or None A selection of cases to plot, if None, then all. """ - def __init__( - self, - study, - case_keys=None, - backend=None, - **backend_kwargs, - ): - if case_keys is None: - case_keys = list(study.cases.keys()) - - plot_data = dict( - study=study, - count_units=study.get_count_units(case_keys=case_keys), - case_keys=case_keys, - ) - + def __init__(self, study, case_keys=None, backend=None, **backend_kwargs): + warnings.warn("plot_study_unit_counts is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): - import matplotlib.pyplot as plt - from .utils_matplotlib import make_mpl_figure - from .utils import get_some_colors - - dp = to_attr(data_plot) - - self.figure, self.axes, self.ax = make_mpl_figure(**backend_kwargs) - - columns = dp.count_units.columns.tolist() - columns.remove("num_gt") - columns.remove("num_sorter") - - ncol = len(columns) - - colors = get_some_colors(columns, color_engine="auto", map_name="hot") - colors["num_well_detected"] = "green" - - xticklabels = [] - for i, key in enumerate(dp.case_keys): - for c, col in enumerate(columns): - x = i + 1 + c / (ncol + 1) - y = dp.count_units.loc[key, col] - if not "well_detected" in col: - y = -y - - if i == 0: - label = col.replace("num_", "").replace("_", " ").title() - else: - label = None - - self.ax.bar([x], [y], width=1 / (ncol + 2), label=label, color=colors[col]) - - xticklabels.append(dp.study.cases[key]["label"]) - - self.ax.set_xticks(np.arange(len(dp.case_keys)) + 1) - self.ax.set_xticklabels(xticklabels) - self.ax.legend() + from spikeinterface.benchmark.benchmark_plot_tools import plot_unit_counts + plot_unit_counts(data_plot["study"], case_keys=data_plot["case_keys"]) class StudyPerformances(BaseWidget): @@ -154,79 +87,23 @@ def __init__( backend=None, **backend_kwargs, ): - if case_keys is None: - case_keys = list(study.cases.keys()) - + warnings.warn("plot_study_performances is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") plot_data = dict( study=study, - perfs=study.get_performance_by_unit(case_keys=case_keys), mode=mode, performance_names=performance_names, case_keys=case_keys, ) - - self.colors = study.get_colors() - BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): - import matplotlib.pyplot as plt - from .utils_matplotlib import make_mpl_figure - from .utils import get_some_colors - - import pandas as pd - import seaborn as sns - - dp = to_attr(data_plot) - perfs = dp.perfs - study = dp.study - - if dp.mode in ("ordered", "snr"): - backend_kwargs["num_axes"] = len(dp.performance_names) - self.figure, self.axes, self.ax = make_mpl_figure(**backend_kwargs) - - if dp.mode == "ordered": - for count, performance_name in enumerate(dp.performance_names): - ax = self.axes.flatten()[count] - for key in dp.case_keys: - label = study.cases[key]["label"] - val = perfs.xs(key).loc[:, performance_name].values - val = np.sort(val)[::-1] - ax.plot(val, label=label, c=self.colors[key]) - ax.set_title(performance_name) - if count == len(dp.performance_names) - 1: - ax.legend(bbox_to_anchor=(0.05, 0.05), loc="lower left", framealpha=0.8) - - elif dp.mode == "snr": - metric_name = dp.mode - for count, performance_name in enumerate(dp.performance_names): - ax = self.axes.flatten()[count] - - max_metric = 0 - for key in dp.case_keys: - x = study.get_metrics(key).loc[:, metric_name].values - y = perfs.xs(key).loc[:, performance_name].values - label = study.cases[key]["label"] - ax.scatter(x, y, s=10, label=label, color=self.colors[key]) - max_metric = max(max_metric, np.max(x)) - ax.set_title(performance_name) - ax.set_xlim(0, max_metric * 1.05) - ax.set_ylim(0, 1.05) - if count == 0: - ax.legend(loc="lower right") - - elif dp.mode == "swarm": - levels = perfs.index.names - df = pd.melt( - perfs.reset_index(), - id_vars=levels, - var_name="Metric", - value_name="Score", - value_vars=dp.performance_names, - ) - df["x"] = df.apply(lambda r: " ".join([r[col] for col in levels]), axis=1) - sns.swarmplot(data=df, x="x", y="Score", hue="Metric", dodge=True) - + from spikeinterface.benchmark.benchmark_plot_tools import plot_performances + plot_performances( + data_plot["study"], + mode=data_plot["mode"], + performance_names=data_plot["performance_names"], + case_keys=data_plot["case_keys"] + ) class StudyAgreementMatrix(BaseWidget): """ @@ -251,9 +128,7 @@ def __init__( backend=None, **backend_kwargs, ): - if case_keys is None: - case_keys = list(study.cases.keys()) - + warnings.warn("plot_study_agreement_matrix is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") plot_data = dict( study=study, case_keys=case_keys, @@ -263,36 +138,12 @@ def __init__( BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): - import matplotlib.pyplot as plt - from .utils_matplotlib import make_mpl_figure - from .comparison import AgreementMatrixWidget - - dp = to_attr(data_plot) - study = dp.study - - backend_kwargs["num_axes"] = len(dp.case_keys) - self.figure, self.axes, self.ax = make_mpl_figure(**backend_kwargs) - - for count, key in enumerate(dp.case_keys): - ax = self.axes.flatten()[count] - comp = study.comparisons[key] - unit_ticks = len(comp.sorting1.unit_ids) <= 16 - count_text = len(comp.sorting1.unit_ids) <= 16 - - AgreementMatrixWidget( - comp, ordered=dp.ordered, count_text=count_text, unit_ticks=unit_ticks, backend="matplotlib", ax=ax - ) - label = study.cases[key]["label"] - ax.set_xlabel(label) - - if count > 0: - ax.set_ylabel(None) - ax.set_yticks([]) - ax.set_xticks([]) - - # ax0 = self.axes.flatten()[0] - # for ax in self.axes.flatten()[1:]: - # ax.sharey(ax0) + from spikeinterface.benchmark.benchmark_plot_tools import plot_agreement_matrix + plot_agreement_matrix( + data_plot["study"], + ordered=data_plot["ordered"], + case_keys=data_plot["case_keys"] + ) class StudySummary(BaseWidget): @@ -320,25 +171,19 @@ def __init__( backend=None, **backend_kwargs, ): - if case_keys is None: - case_keys = list(study.cases.keys()) - - plot_data = dict( - study=study, - case_keys=case_keys, - ) - + + warnings.warn("plot_study_summary is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): - import matplotlib.pyplot as plt - from .utils_matplotlib import make_mpl_figure - study = data_plot["study"] case_keys = data_plot["case_keys"] - StudyPerformances(study=study, case_keys=case_keys, mode="ordered", backend="matplotlib", **backend_kwargs) - StudyPerformances(study=study, case_keys=case_keys, mode="snr", backend="matplotlib", **backend_kwargs) - StudyAgreementMatrix(study=study, case_keys=case_keys, backend="matplotlib", **backend_kwargs) - StudyRunTimesWidget(study=study, case_keys=case_keys, backend="matplotlib", **backend_kwargs) - StudyUnitCountsWidget(study=study, case_keys=case_keys, backend="matplotlib", **backend_kwargs) + from spikeinterface.benchmark.benchmark_plot_tools import plot_agreement_matrix, plot_performances, plot_unit_counts, plot_run_times + + plot_performances(study=study, case_keys=case_keys, mode="ordered") + plot_performances(study=study, case_keys=case_keys, mode="snr") + plot_agreement_matrix(study=study, case_keys=case_keys) + plot_run_times(study=study, case_keys=case_keys) + plot_unit_counts(study=study, case_keys=case_keys) From 68a8691e21e17a4026aa549de2078dc305e5211c Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 18 Sep 2024 19:32:31 +0200 Subject: [PATCH 6/9] Common function between benchlark_clustering/benchmark_matching/benchmark_sorter --- .../benchmark/benchmark_clustering.py | 50 ++++--------------- .../benchmark/benchmark_matching.py | 40 +++------------ .../benchmark/benchmark_plot_tools.py | 28 +++++++++++ .../benchmark/benchmark_sorter.py | 15 ++++++ 4 files changed, 59 insertions(+), 74 deletions(-) diff --git a/src/spikeinterface/benchmark/benchmark_clustering.py b/src/spikeinterface/benchmark/benchmark_clustering.py index 94fcafef6e..36010e6065 100644 --- a/src/spikeinterface/benchmark/benchmark_clustering.py +++ b/src/spikeinterface/benchmark/benchmark_clustering.py @@ -160,49 +160,19 @@ def get_count_units(self, case_keys=None, well_detected_score=None, redundant_sc return count_units - def plot_unit_counts(self, case_keys=None, figsize=None, **extra_kwargs): - from spikeinterface.widgets.widget_list import plot_study_unit_counts + # plotting by methods + def plot_unit_counts(self, **kwargs): + from .benchmark_plot_tools import plot_unit_counts + return plot_unit_counts(self, **kwargs) - plot_study_unit_counts(self, case_keys, figsize=figsize, **extra_kwargs) + def plot_agreement_matrix(self, **kwargs): + from .benchmark_plot_tools import plot_agreement_matrix + return plot_agreement_matrix(self, **kwargs) - def plot_agreements(self, case_keys=None, figsize=(15, 15)): - if case_keys is None: - case_keys = list(self.cases.keys()) - import pylab as plt - - fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False) - - for count, key in enumerate(case_keys): - ax = axs[0, count] - ax.set_title(self.cases[key]["label"]) - plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax) - - return fig - - def plot_performances_vs_snr(self, case_keys=None, figsize=(15, 15)): - if case_keys is None: - case_keys = list(self.cases.keys()) - import pylab as plt - - fig, axes = plt.subplots(ncols=1, nrows=3, figsize=figsize) - - for count, k in enumerate(("accuracy", "recall", "precision")): + def plot_performances_vs_snr(self, **kwargs): + from .benchmark_plot_tools import plot_performances_vs_snr + return plot_performances_vs_snr(self, **kwargs) - ax = axes[count] - for key in case_keys: - label = self.cases[key]["label"] - - analyzer = self.get_sorting_analyzer(key) - metrics = analyzer.get_extension("quality_metrics").get_data() - x = metrics["snr"].values - y = self.get_result(key)["gt_comparison"].get_performance()[k].values - ax.scatter(x, y, marker=".", label=label) - ax.set_title(k) - - if count == 2: - ax.legend() - - return fig def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)): diff --git a/src/spikeinterface/benchmark/benchmark_matching.py b/src/spikeinterface/benchmark/benchmark_matching.py index 784b369d7f..db5a00dc1a 100644 --- a/src/spikeinterface/benchmark/benchmark_matching.py +++ b/src/spikeinterface/benchmark/benchmark_matching.py @@ -61,42 +61,14 @@ def create_benchmark(self, key): benchmark = MatchingBenchmark(recording, gt_sorting, params) return benchmark - def plot_agreements(self, case_keys=None, figsize=None): - if case_keys is None: - case_keys = list(self.cases.keys()) - import pylab as plt - - fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False) - - for count, key in enumerate(case_keys): - ax = axs[0, count] - ax.set_title(self.cases[key]["label"]) - plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax) + def plot_agreement_matrix(self, **kwargs): + from .benchmark_plot_tools import plot_agreement_matrix + return plot_agreement_matrix(self, **kwargs) - def plot_performances_vs_snr(self, case_keys=None, figsize=None, metrics=["accuracy", "recall", "precision"]): - if case_keys is None: - case_keys = list(self.cases.keys()) - - import matplotlib.pyplot as plt - fig, axs = plt.subplots(ncols=1, nrows=len(metrics), figsize=figsize, squeeze=False) - - for count, k in enumerate(metrics): + def plot_performances_vs_snr(self, **kwargs): + from .benchmark_plot_tools import plot_performances_vs_snr + return plot_performances_vs_snr(self, **kwargs) - ax = axs[count, 0] - for key in case_keys: - label = self.cases[key]["label"] - - analyzer = self.get_sorting_analyzer(key) - metrics = analyzer.get_extension("quality_metrics").get_data() - x = metrics["snr"].values - y = self.get_result(key)["gt_comparison"].get_performance()[k].values - ax.scatter(x, y, marker=".", label=label) - ax.set_title(k) - - if count == 2: - ax.legend() - - return fig def plot_collisions(self, case_keys=None, figsize=None): if case_keys is None: diff --git a/src/spikeinterface/benchmark/benchmark_plot_tools.py b/src/spikeinterface/benchmark/benchmark_plot_tools.py index ae9009521f..c1683c6360 100644 --- a/src/spikeinterface/benchmark/benchmark_plot_tools.py +++ b/src/spikeinterface/benchmark/benchmark_plot_tools.py @@ -217,3 +217,31 @@ def plot_agreement_matrix(study, ordered=True, case_keys=None): ax.set_yticks([]) ax.set_xticks([]) + +def plot_performances_vs_snr(study, case_keys=None, figsize=None, metrics=["accuracy", "recall", "precision"]): + import matplotlib.pyplot as plt + + if case_keys is None: + case_keys = list(study.cases.keys()) + + fig, axs = plt.subplots(ncols=1, nrows=len(metrics), figsize=figsize, squeeze=False) + + for count, k in enumerate(metrics): + + ax = axs[count, 0] + for key in case_keys: + label = study.cases[key]["label"] + + analyzer = study.get_sorting_analyzer(key) + metrics = analyzer.get_extension("quality_metrics").get_data() + x = metrics["snr"].values + y = study.get_result(key)["gt_comparison"].get_performance()[k].values + ax.scatter(x, y, marker=".", label=label) + ax.set_title(k) + + ax.set_ylim(0, 1.05) + + if count == 2: + ax.legend() + + return fig diff --git a/src/spikeinterface/benchmark/benchmark_sorter.py b/src/spikeinterface/benchmark/benchmark_sorter.py index d08775561a..5f3e584b20 100644 --- a/src/spikeinterface/benchmark/benchmark_sorter.py +++ b/src/spikeinterface/benchmark/benchmark_sorter.py @@ -123,3 +123,18 @@ def get_count_units(self, case_keys=None, well_detected_score=None, redundant_sc return count_units + # plotting as methods + def plot_unit_counts(self, **kwargs): + from .benchmark_plot_tools import plot_unit_counts + return plot_unit_counts(self, **kwargs) + + def plot_performances(self, **kwargs): + from .benchmark_plot_tools import plot_performances + return plot_performances(self, **kwargs) + + def plot_agreement_matrix(self, **kwargs): + from .benchmark_plot_tools import plot_agreement_matrix + return plot_agreement_matrix(self, **kwargs) + + + From 822ac26e460d63ca1e4214bc11448b835c99ac27 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Mon, 7 Oct 2024 12:42:38 +0200 Subject: [PATCH 7/9] Add some doc for this new module. --- doc/images/overview.png | Bin 334122 -> 101776 bytes doc/modules/benchmark.rst | 141 +++++++++++++++ doc/modules/comparison.rst | 161 +----------------- .../benchmark/benchmark_sorter.py | 2 +- src/spikeinterface/comparison/collision.py | 141 +++++++-------- src/spikeinterface/comparison/correlogram.py | 111 ++++++------ 6 files changed, 275 insertions(+), 281 deletions(-) create mode 100644 doc/modules/benchmark.rst diff --git a/doc/images/overview.png b/doc/images/overview.png index ea5ba49d089085a180a5aff490fd1242dfb1efcf..e367c4b6e4866a5b6ec291c590f375b9e956d92d 100644 GIT binary patch literal 101776 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 Yl&)$RWernrpMZaKH4QbY)a=6k7kqm;RsaA1 literal 334122 zcmeFZ_dnHt_&g|eOO?UZbx?3uD> zviCXP>v8mY-`=;+?eqQq1>b&n6^`?KjO)5z_xt_2&dXO#MgB15DM}0mb6DYq>}?F@ zAPIw^*mGbXe8-u$&JX_D>-dj?#sT=_dBEfae9hn_cgIQH&dka6o`WgI+}6&FI`|2xFjwt zBz{rsxfF*D2E&R`kd@JJi=NqbcMBO^m->x8xXE{nLXOM-1qHp@i4$FljYGS;3zgEH zQ`-xMdZ%jN+ve-qWOnLiD!uQ_?7W?RoAw0lFv9d- zqO#x{lR9_i=g-+3C0D&P$LcS=(aw^Zb-JLdP>ahnC>8l|^DSLt7_YyGO>fns{mdtsBwR9P3sQD1jy3rgJC4`D z&yBhaTwfBmH|3w~J8W6XOFn6br{sHTf86x;a&3n;mWe>xo-^LwSjKu^<>%*D5&iYF zXt`6*cyqQ8Uwx!LOdIPZ+$=tw5g}~VseP5O*ep@|^74<99IKRo8jPYRhSUs)e{BVhNVjFX#N(bJ}{z$Ot( z@Saa(+2#zC_+50t1w9uNX}o|Uw*BLDR%ur2PpoWJf}HL?6kM>xl2-VrZ7GK7Zw#MhT z7F*;saV_qn4WR<|Lsb)f3dkfaD-=}b;{o`t$iAvx3YE3*l(O0_4glDA#g7e;lao<@Z=4{rZ^m~m*a zMJlMkrq3)pu|LmqeZlS5Gy0+R@wlMzINa4yfllkU-b;xr)kXHhmZfA2Nzo)HKfKpr z$9$_UKBXA7w$}AhyKnI_dA0-M{sSW)&IMf&jP>4_?6rNOyYlnN(HgjRY#%@&>?xB5 zfsfCryg~0xx#60ZG%V`we?IRwFFt440OvkjO^;R9@c8*?|8)rQoc>$C1xABVL_VW8 zjOY}G5D&WQwNZ6MV&>S*s7t=EfSM>_E2H}0^Yg!+vxtkFM3)hLo{VY2DW;8K^Iuqq z7k`&6HizUxD7l{YUi&5djaK*@mAV)L&N0=_}tP}B`K z@ZbZC1I5@+iCiGrd>a}Xijcy2m(ABO3Ya#8bi0qo2=(xxEt!Pw(A6a4I~RjV&!fv63FwTVf@L*M@^yq@SZ_sW~oKl_G#mvC}QIWr9ce)2Lp_ z?tg$K5x0j&!?A%s%00UNaW!d6xs^EdU7qEoN{qPIY&IRQZk2PF0X>Qrt9L>vn^(8~ ze2I|saA_z3G^xcB7s5k6OQ9#!IkS^vkM}+#*%f$|{cL_$O_eXraAMF^KLkxO`*I(xJlf$U}D!HJf$PJXb2K^o=?Q&sk|Hytbs_NstFGc_a`2&#qL}ks`YwO#&YhFg^P`J7@MhU_6`M7m z_p_WfC~>NFrqYmKY5{@U$|+52R9g*%S2iwTyOU)aoCUeG7j) z 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
    n`EVVygJx#M> zYb#`n^JTqHO+->IyF|vq`{A)J9@?2%-qvocalwrccc1hyAGJil?U0d*2}F7PP8sk< z26+(FfHmzp&9EY9ofPZ@YTQ>ys@gywny>bDeSn>)M^Ry555*t{c7zEG&|ILsO%k12 z)5v)u>wR5K=tbRN#1j+_Q*U7udqd1H*PFpOQGf6A;5fS(dpQ3uiS%g?bk(|IoMfv_ zK2vc_+fgbiYK8IA+j*$gy@F>!u=}2_|5~rxrq;{C*>r=lb|J?`E7VsK>&eh%xD#z& zZkJbC8}L7&9e7JF?ApDxnrl;&w7mx|{E31jBVz&)&8+(cM<-h+?{}1|@MJcUVCAsZ z?6XvajID1hJAtpK7I%fjcybR_g$@2OWaFnE_cS`0Xu3+nx^+x1%bO0mjKedhPHo_Z z+M7pHHJm~80C6!}84U$@xSCwVD5f|oXG&UV=&hhuJ-_w%cJgQs81|OVm2YyCBDp1z z2U#^@3%+F?kPl|Z{q>C}MV3dKQ|F2UAlqKzY)O>Xh(DH7G^R@IvrIiq{#pkq-W>L>qP8`+V z+IXQ1!EYr#^;ys37~(ft&E4S?e89036V$}YyKknX-EfK#0MXN%l6EwLkacTgQ}+*vL&fcUO| zPP8EcaB|Tki4*_@l`tl4U}wIi~xOZ57ru4Qb@);MXGjNQ> zUHm1#x({_p;3CLtEB8(}exan8rm?gr-Z(9|Zi4BC$VxgZvw)<~?8c2O?`tcF%>!#M zhP+~WZA4B&>?p9FB-iPyL>BSSN%sHqYbx0C>T6mhKHBV|dwEpW0&~%NL3PQs`D$8}{#fsA_f7&(9uW3qX&LZpy6W2?wi(<`wgF!%1Coaf~Gh=eS6!oXL)#VND(D#Jy5lH^^d zvSQ--5oqECk-x7&cAUSm)j$5=P%HW=%NYCh`Y(|~dWP$D=9Nts0*v$hx8X$x*@7zH z;^|yDVSC_8e9N&l?%CedL%JP-$^eO6)=ObUd7<-J<_0?;SiAoc>@YCkO(jl~eesIs zN@3oKU|%V3-{$aPa>x4g{Re@zx6kcov?w_(MfqeN>NOqFvs#of$y({L1j5sA%op2p zE~pxAvn>+a*>R?WcUts!8x96P{PKCZE?Yn&oF11aT`95 zGpxor1F-m51nixB!Ox7XOB+D({d2l-mv`~`?BYk~cnHs_>DOIk!;DFrhlKu0UwioS z_mz;7LNNEE3+npTB?_(>T{F{4fVT+zq^~C|g;ab!4Hke+ch%-bztUSf-GQgcNMht( zSZUN$nyB3?l87|RBuAJzMTK+EM}PwQVQz($l{#fpfd&SXku#W^S|I;#HV-s};`)}Lm$c7_|$b-Tj_ zRerB}i_cI9n5WGjrBSa$lvZG=X8QYhhm9_XPYn(XkEp2swCuL1mzGwO?$*-kUf)Kz z$A_$=#a|v8mq*_eQ7=NISHsqVcQNs&S#~ z;2qrL_`AYG^CcNZSWZPsN*fRXu|nwIMKXT_wgj-bUp1wA!iA_bV@5MH*FYzMAy1~e zZ8pZ8=LA@wrlMX@AL%IaRokey+N`0J*-+iaL;&;+&fc~e)QXApf#lv{WDPVa*b~Mq zn`F^#L2IyPf^*+yE>KLzYsIEwN; z9ViWbzrTVYItvQX^_Iv#q(!`P55a|H!uiqCo%W2keL~D5fQ!=ZL!G_N0-L0yIyq(M z`oMb4{R^|If=*H&clPS;Zu9(snT;>NCMrI^XqQ1F#JV110iX65se@>sDmja_U5j`Y zml&BJ`d8WwO%>MGVim*d)4ca>#%&JNE|y};JUS0*3(3PUG2eR56pzf8W?yx`@Cm=R13jMl#8>aD%kdqKWghyI}3`? zo9gHcCyGt2SA@jv-7Tu2X`Gl7wx=vMT1|ALqbBQ@2;jA9386pRK8t#;KYay zH(3A5Jjs2BIXqZ1>%MG$wB{r_Yt9j^LA0~3regFoai=dZPBZ@YI$*Q{%wHVu%{KeX zKm86JDO}}4gdUAtYMPFHBPP83<4vihJ4~DFWL?x@uzLB&u_oD{7N4vIGU9tjJ=~xe z&cyHDd8(Cqh;`P&OQc8KmK^a>3ie6}%~+^|<=eeL`#G6p*N+f$IuVw|AMylRR(KEZ z%yB6ZE3~5*>(#Y%NzciuJq33w82X#J-m-wW(w3aVynWsobPO_WIegNCct_5>(tFIZ zaaFk9-31TUEq`@XQq5fF*Jq@NjQ6_#KY;BgpuI7oGCa=M)v!F=Qs00%lS(d#;;W0w zKfME?jGQd0E2V-Bec84)dU>$(_~uB>M>ItL^1dWCm`DdvL#!<>X@5v;tK~T3EZ~&E z*AjDWz^b>&yB2(bK}r0c04~`&IyHTCOi`nfu%jB`Aq@({ow>|%96Sy)-1(UwXNfYW zn@K>VHlw_{eNtJ1ykMfa?4h$M%-Q}X&nvC16HzL!-(dZbY_r#KAbOCq&+fC5kBM>V zF5?%yB~{LCx(1_P=c&1;^RG=H*RA{K>0A4n8pq*A?zo1d56K>fJZmI2@4+LF#{KEk zYgXAh&78XS1$Id1x3Ex1$QuS3bl53~Rpo0E=Js3_W{>u+s6pF#iaw|&OD5>Te2cjc z+<{%8{7$b2LS}W@G|#`cM@g?iJ&tD&1GBpl+>iLG(=xgL!NG6YnSJ&;_G0zQY zJXV7(t&atgQtQjN4cvP@6otfBIn2>2NkUa3y9RyD_EF?VUn9_&GJ zDbA{UN0+MI82TRK0HyZ>!&K8h{Vj}aRbDfsb)Ts%QSF}At^v$@IhE4oOdt&G@&B;( zmQitSU9&I=0Rlmi;2s=;yF-BB?(XjH?he7--GjTkOXKeD+BDL)&v~Br{k}WK{nP(? zkFob&YwlXJYF3>NCnpWkS@^cZrn4%}Z#olNx4X{GpL~gyi*qvm-&T0MvR@6M!J8`1 zHBN5j%J_kA&2~KiNvX^0^Of1Ha(P9$*_$xQ)XF_040MaHmT12}!K|OYaqakp-Jdqmb zrYD(JbGgoVyyIfHQ-v=W3#d_1=2gJ$?jCPlwEv)@k=?jc=95_0?EEXQ@GZ8%Myl?W zX1wI{lVq&IVl^aeY4Aq!yz!YssWXeWq!G=y1YK2;yJ~HYwA?gb>a&NrT4T1*lK=Vl zn0J0!G(0N9H_Pl}uB2TNy3ES->jA~wnzXj7^O7TtbRtfvpG_sW=GH%DTTsrNcshf! zOy|5@?2$~tvb>K#Kdq4J!3L@NsFoSMjBCa{3wETfjmg^gU#AX+<(}6?Q=v3g8 z{<3z+ZZYFDtStUfrIYl;pr}hf`#4TS7=v{H^y1ta~1? zsue#$deh9x?YFGyfj3haZx(N3q{*evTfUm=?CS#B!qE6sr!5j)39C&i7Agaa%vCNk zcniuUuCl-|Xvx!} zeUmOd#w~s+i6r#z{9p{>c|oxohJO{QakF7=_yt6@Bd#*6Vy%SdlhTPhk@r?vRd{(} zXYhMBpBl0Uj7g@9;CJ-zzMFo;askL`OKZ-t#RRmr1SI!Ia}4k8MvtGlgO^yvMe#?) zGQ`8$wY;!dw`x0;E~}c*-A*AxFZxJwb}ZW418iAM_(?38QVSHuMTKQq$t^AE_9hhL zP0nA%lrd$8uK!vdBs3tQ#++#D+14^KW*0A)J!KkKEcPtohbjzd&!a2jnOP1b@jrKB zH&z7@xKw?}|lCnlw7cIHG@Lp98&q#0PM_5Jcl zO2MYYqFZD_I7;Knw)pnoZS;(i9DS|HyMZm~&zkm7{Hfel-9d1@mPMVcmI|o(aB^d@ zDFQNC%rP8G2nWff(H*eJT4-_m2TR-Ac0H5(_?B*hrns*r?lvK&MBp@$<5l^|>Vyv? zO?sNv{pkgehBt7^b9Ts&F*f`q@KO+N&?PvV51J2KZyNyu zE4eA7-|uQg;02=n?{F%`-bquzUi|EVd2da;I(R8S({28`Xz4BIP@F`+wh{lmis1bt zzi(KF4!-o8`p^&pReI~1(dqhAm8JrZ{r|FITK*~%%LJ}+4a)&I^Rv|+*O^bK3?JQM z&yDVqzHMHV_hv5xM-<#RZb6FB7wdH8Ikx@a)(B(aZ%y4Q@&Q~QwxF^t^Bl``Ies5V z!f1JwczFoD%H;38Uy?WB--y=Kx}QiSt55Fxd>DFw^4U6=X~cb))$WD|=g8PM_41Vo zeB)?MkOt5D^LyY}aS+h=rI*CBRu{abz&*M1w|(mYXpDj?a45FQ($*Q2>eRlvTOXSZ z>l#nju#l%sxl&WVL#MT0{@*;?FBjzL+OJPczLwY-uEXD#MrwD}tVwi(&9{RjD!I; z>iOh(itSNttHfS89y}+N1W#!stZJ(VjIBL;$)5kf{)@jpL3%5y9py+(y>(UOo#e~* z-M0{L%vKJpp3kSiRoA)`RE{+rJ|cHH2+&gb42mXdn7v+^tXKGh+Vxdehk?;8q1Td; z7C=j~i$%y*e}XGr`x^w2=`7OMvVyVkw`VS#oXx%^ z9dYe~45%H4)%-p+zq~D-0YV1B0^bHz1ry3l-g5~BnKL(?H7WH-dYl2p6fV1Jx`BKX z#%fE%Y}dV3oS%eT7E60C-V_uW_oTY!-mqTc6Gc%Un@*FT>?sh+7grJxUTm}@bMVb1} z1y>be>wdlOB3LgVODq&$g@T?ASKOJc?5V5$Gz_u);MQ7%CnB(e-5i><0@-Wf+s9?) zAHeLF`|d2i=vaBS1W9~ipMyXHj>>L=a!lxrb6=y7F1>$bZtxjFyK zf{P-q2%ZpqXDL{AJ4}_)Lz2YBes=;kwFFVc=#Tb_W@s6rxh=0D(^Asz%$XHu(mJwyt zv`1TsA6jVZu8&@a6zW?y_@Zb0yr9lsDB4Fj_BJxUp^Q_mj;A8PltHq@Y8iQi_ona? z3zQvPNZX{k@R*VLC#*j;0iDi5!4qiA7R#xt8B?^+#B{wWJ>W(kRn|IM@-n7-OJw)g z+oaVCEK9Wn23l6$T3CTGT@yT(&uWv6!BVT(VG)GNAREUhGs5;@2{F-f1-#ySG$f-o zBump#FfTl@+?`?PzT~jg-Wgee3#@x-uv*!Efo(gSmTdZRx!&Bf1d9#lheD-!9-Npr zM_i>D4K+KzpQRW+5O2jvj5(RTbw{r)pq*1sd8Jt#4XqPfycYj4C4?d!>EymcbNjOb7$zF5)!Wvml{jsyZ&Z=GG;t28$$DeN)DGY`tvxkq{7pt~<%_EG zO%8hyStmbTD&P8G-d?*sA8wngR5LzW+-TeB{Uv;@al@nbc{u6&0Y@q4oP_u8XQ{SW zA$lI+{xqnlXS0`-Kr3F&K-O9^?}CiBl)i9Za&%E=YTHW(88gh|l-1?uS2~aCz;}J- zg)RESH*&a$QGqv4?|C?H7VtDH3(`mOFGZmsh1kbzDSfKyZr-pfA!sKQ-XkZ8u{kG# z8296FCy}(u#6&5Ygey073W$pZ5<%f*$qpC90^sh!)!dsXF9r*7dqs8hkJ}I(Es(zp+(Qd|Acj(y6~!Ke7e(j0dEguqAxm{a|cYf2WKC zi=J7NnR{>$)Us-a(%uzETwTmTNn3A!jHFxIed>ndKY0Sn&2XK0j6|VBy(}S-Fs*mp zDl&`gh3xm3MGuKT9>8pl$PUucN zAseMLR_4_#OM6Nh{0*@S9psZB{?It9!zDw?bHThS4e*yMVI}`^5V}>wR~tyuQ614= zbxw)cX{f~|b{EdlZ&RYDz1L&#k>NV)i5#DAjpIsR4^b{zzSf%zLC=jBk+ecCR(rsa z>UF4KkR!jp!V=H3fOb)?luyLdSx^rdl4m3DnwVVD?=Q8{p9g&@-fxNP{bJ6CTK$@# z-SFygRT%QsudX2zx_cQPU!V{C7;Dy^-J-M(XzthP=>4wIhD=KO9{ltY?9n9hbE=mJ zG+mNG&A@sAjUu#Dl2EnQol-bQu$t}cNK%EAHSye zpY3#aovgCSs}=0n3gZ|P!MTNJZDo82>4Mtcb#C}mcp0i9xXyqQ22Mq^>>W$%d=f96`Q42MLKy{m!GDG)3_Z2-&Ik}^-U^zpi?EI3h8n!s z-ASQjcl?ZTxhV3AMu$8EizdBn8wQOqxGeav_0a&Ij_&cI-6~geDTpdbF4D3rHbz3v z?)i0at)s-GrJAe2GhpcCa@l7s`)zX{5^c92vhcn!d(sT)yn9rW(HU*?HsoZB$+tX1 ziQ;A^tiqh$B53$(eUrw!?{+kE$k0=%O!VSq`j{MZq1IC>ki!_@IFH_RoZ)rK89k1^e?%hO6OBVQNC=Jyyh!*r zfUlYmGCfA@g;-#N{9f_&*p#N`@{&^ff(b|7IG9+3KF^Pu7C+JBx;k0a7>#EsK~o`U z-+U{!>u;a-LD#^X+t;34#1r^zPuu3RluauBvZ5l9zIpH~4dx=Ao{LGJ$#L- zN(iOfGuDN(_^!n>-Knm40cpA*3sHAP}>c91^HC-JLE=`tkyKlsv2_P zm}at5_3>y6YA12E&-uT*A1}yQYmN^L@TcMl;W`5z?|`6RAurh`PQ1`g_$T4XdC3=^ z6cq0QK!H$^%ujPu%S=U5L#6!3xrPjn+Lm6HSCD`JD6%c_w^~CbTKr*GDreoq|Kd0u zM+lD7XW9d)4DQEa5j$w{baO7sJKt#W-#l#hj3RrGpr6*L$k($?iovhAWY}C zLPFc+9_4aQMHUN=VdAJrE$?k{uk^*^&pA-e{juD}DdrqXk?o30V(k01=sPe}5^n?J z$>}LI^b$~;Yk1P!6oSf`pvZo%X9>xodz#skd2JdX6NovXS=Pe+VzyNsrQ^DbW1tsB zUyx6?;uJ%K%{eT%4tQ;uMhe!Yu3Ufj8k4t!te^9hWMVx`wvvN{72(Nd1=*CMYB~e; z{mF09JMfGxh$-->Tz?VoJF4dSvp`+B%RkMm`6bR|ALoGd)5FDCnH{9mk&*Hwy(-=G zI6Y})+&ZdICQ2foc%7U;f;G|@5|)7ZNGQh@WC=nfutQZwH45M={Gn`>g(N|38DwRJ zL-XcEpAD?rch$bvLh4posx4sJV6jGc^j(i2>F~2ZnJ)~=fZu~Y`)gx*QCMaX^tD-3 zy*_Z2wd_3)O{F^K4IJakGcmcgA{KI1&fHExqqkRaf#-b&<(Yv~Mqgi~@%1*s{`X~T zFOk=KkVuAoT(xfSI5Q-w&{v90*uafYHD&Lo662BPUpgkNR=y0P@8tDXbjHSocYnJ> zvuBkgaqhFDqHzp->x=}|8TpN~zU~T`Jil~0y=zj#J+jZWIHFQ%LXlI))C}!<5Nbak zBVXuytd7#riHM}B%L^=|v)te%Bt;x83XdazYh-pNe=()G?>Q>b$h_IIoZM`MUEefv zR&b>CNVbQvW|k61-6F3tDR9`8mXa0I9lFuar=xmMPuIM=NQ+xfdx}PwDwiRT|81JGL8c zH6l&RbD4|O|Fz<7bgmwS53w)wmHdZ2eM*0!f2Lpaui)@LgK$FxNN(7wUS4QOe^1;% z^rF;G)LB#Wy+aIldsAk{fR_DmSWxj~!*|ntss&kCtd{s|pBYi`vmBXk-bRdbZI*HC zuWNGXBMSCU-h@FAcOB+IOBE4t^}~~B0$$?6nVpnJ-Ot{F!OF<}Jg;2{*X@%-2k_<7 zs$f&Mua*YLW2_R#G{#N+fZlrcpU)B~{)lG@py;7_z3nqQ052|^nx|xW;KO!Z3e|4w z&v`4zFOY7PRS>}TMO!PuO)V%kNJz6qs1AR}grn1v;T4P+mAV;Xi7q!EJ9d`MrE#re zRNf0m%rYdpG;X6$#>+(;cmq=u=+WC3omi!=-HK~>#yFoCU~#tE_kIn$0cI>|CByqU zUvOEOe`JK5=h<2)S5yQRm>&~IF`y)D=vw1+hlXq+wzKY~)THU+jR!9j87 zHi+8~(51_&HJ<UhV#bNi!8TGh!Lh5iGEp&iGkBQA6+%;y8qbdl8mVll zS>cW}1H2a@7@eYebp~0xn?r`eXhk53ti4+*SNZrd++ALX;#KAKeV{XYoasYw!0;SJ zP>Del>`b*Ku;%$j_hAqBe&-=};{BbO-Z}V_V&XSYQp>Hm{09J)Ofrv2G;9M4Snl-h z{tvolFB-KcDWPN`Dnn_WH=bt3)>Uk^=Z=Eq>MvHP;*SXVfG@aaOMoa~hOH!%bjsJ= zrc|X{Oz9g!(BJRW+%}F4`K^@|n~%J`Gw|y(Gkpi4zB8d$@q`xu_%G7Hu*;lhZ`aFI zdutuci?G|*a(46hPM>OSuHZxsNZkd-(O!nsK~mCxuzYv>;pehJSiSUejRd;hirNSr z26(;3z=NZj;zq*U-~!a3IsxwBl?A&tA$e>6 zap!&Jm!;WBI*AgunNf?ZpKgY|po0-h=!+*uG+THJv;MffQDWa&CF4Sv3RcSqV-vIT zu4Jhpwm=-A_m(~H`$rM~3_w>2Rkf*}S|s0k$-d@X49Dl(S7(8_lQ7$1NU;|{l8%g0 zD>ZO;ibxGn_$^;j80CI z*gpJ6>uq5S(RwS85a1(s%788u<%(zjq&0RpXlQuxJb2-DF*1DAX?t=%*@TN&85=Wz z=(iz$!+6URqurlK{55NJi|;z2F%E|`l!uOKKMKUNXG{HTRpjO6Eke|N`t-#Svrtza zb_&7}u)JY-?CYe}`%w|TE7GXl`WMQ6n=*bb%=OX75NK?rL52LU6%a{>!`^YNKd^Jk293gaAn^IyNddVfPXotmQzMW?}qA z@WmBc56{~vbLJBX7YRw+r8>-AUvQbqSJB?g0znREV^W5Ak5T$VkrHPN!HLEGQr*-u z>j`UZXVB9pd~h0FOcswc_<0-=>5Lh9e|XDPJ(o$C)_tlBSHkY_eufu8#22O0-(id* zlN|raT-NQr(5N6}9p)eK<6oqEnpaSd>k1a8)BUo(I8x`jIl1f&Xz*L7m!TM{g@6y)EjHlBN%dXMEs3KRgGGzR|M1P2HltB;;CuGnjwiVnaRb5kDt(#=Q2*;kmZld&pz=0*k&7wl^(6AdbwW5-X5%L2ED{>CBYZAYXP$`yMtQd zh`w)R^_{676X0?#i@?p>KasC$mQW?oe(N8k@3ufCGTyY@L-}JjW!=l}we|2Z?{WC4`G-mAl$zpX<=4HwC*gzI1O*)H3sZ+zDj*=)*Jo<`&aDYoq`f@G06| zYgDRC$C|?>jO9kTk(DdSqeM^-8b)ArQjpcC%$;cK{Ihe$=O4fnojYXp4}sNSPx8oL zP07P^0EaeDPe~d>{%Jz@nFZfbo&1_%EU_8qpVr~pY5NTYw}>Lp$6|~)(%#8CdD>(X zeTmo`TYn%$HbiDycum;Oee9(@;(hQ7mS6}Q>IQ&!5$&NT@uSvNlOAXLIf2{T@MfvY8Wvo-E#F4U=};Y z>Wp86JK@xg@5hM3dkJ+gJ+QGL>Un%3$!syAE&mVU!U1UsT-lhKw$r=!<>cq4{uob0 zw-Acj5H_sFf)#PfQLZb#ldGVLgt2!%yip3C$ZXk&x8U28%8@pcqy&6Ur_vn}Wc`*- z%-oyVlm=<{vn`KF*yCOAF#fo%p!3jm-HpIq@AdA(mk5Ozqdt4SpjnO^^s<03F2y>G z1+mkF7o8q0xxP$}pn21#MOn+3NlIV2C8YgZD35?rYt4Z5ZcfaowX4uX^Q;$ePUj0s z#OV~O54g+H7GFVXp|($Dk9At;>aQ_#F~O?ym`D|_$E3D=&cKk=z~78qz6>&+41rYA zkIZ*J&Zd53UUUWbEH<{ zcxY&RioFbhZOah()#Ih3tm3@4bN`eH$h@kVe)dX{xoPN{_?O}^V03>C04v=5c#LLp z!AKr>T{ake(13vfn{#oi{NvJJFScTBJV;Qu zt9)KxIBx$Q^m+~ceSg+jG1d#kcW;ysuSMtx%>O;aL0lyRq7E} zZ;PC?y|Sqh6(Wq~yUb4)YqG7@h|GhZ5?1OqY=3v?Gd@p{dX5OTU?^tkO1AJZeNe%W z*Q~Sf2(*(uB=a#~A9Q4As;z?QLEW3)3LGH1t~F?u$gn7jOMIjZQlmUZyyG8x8vp zQzh0ko(^8^I+ou4&Re&%nPf`_DWk^wJF63t7^0Fc??Y+i_hbs+h{?B&0$R@@aA2T+ zWK&?aJ{s7Dh;=*XE-;Mm?Pof|4Jo8`CU9h}_4jGDPa~pCoACztoJ`}auS$Dnj%-b7 z9vOP^t(l$@`nrZWS$&NRqGI2X`eeY{-zeZZA7KAWrEF95yPQ&rwDp0l*oW=z-hdS#6kuVfm4>2I;4O}TvT(bol8#q?<|BDC$1yhpKZ z!et%v1B1JPqA!NcrWmjV7}t$qYB=>F5c}TYsU=BMdXivHCTDL<9DP!gTsG-wnSwGJ ze0)UKRRR`z{`QS1#+r_&Yd<3sYV{&#; zi~muJKv6BSD$WWbvv9Mr$J*u_GNpQz8QJ!c!sx)Jb$l9`Fx{y7nt?Tg*EOv)PKqle z(kIDX;!O@wy;G{J(_`9gD^PfhT=AlQqC%lVMI{d2WQ{p3;@p-+dNU_c#Up$iQCat_Y z;B(Fk94rY{=F1C6@AM_*ze~l=mt_kk)%uWP)$HppLD#E1VK@XprIE>R9Zjp{WKkSr zB4}&9bW7EV-`SC`6d$Cjbsi0&KnFS?phJ5vS<1+fQ0e>kZ;fyeE48JQ9&3@ytdkd; zAKSty1qv*7l#QXf$YH`PeOSN+KRxaSO_Pk2l;{g7mvM<+<0KDB)mMYO)aj;jaot$g zhDmd3pGe-(kKmb^OR{%e$n{p=0ys-rD82aNeQcLQOQ;5bRo#?LhDf=1dWzBCWXG#d$b=cj=(lG47r zWf-tM#V@^xKGRXDI4Gm!N!l|_)tr4pgJC4YZwX8v*Zbl zD(9fRZyL3=-nNM?!^`KD)OAK~k`vpd-(x`LySFOdKCOO%tjd7L_=tCpoI&HS(T~Ac9+{Fv@*Uc&l&mu_957G^~8SNeb z_5GNJT4^us9eAP6GeOcGkzVx%!#*KH`TwjE71*m7X_X4uwFLS`%v-=l0ohg_nThb9 z9V#Z((2tN55pQlXTp7^@5y_h__xjjhP6bYI?$oAgL83-{!)aD4kF#gx8>bZJKwZi| zubxaP|CSTAh{*VhxTx}eKCX7B7Ec0M+m^n+HnhE2ar;lAY4>2RKVAuPf8O;Ph$Z^7 zc}4eVF}OK>F;b{H?fyp#(CL|R@4KGkBBVoJ|O8Vj1T z*7RX8Tx|&G+IKzl%AqAe-|+izqaaS>c-eN<3hrOLk4Af>m9pU#?Ez~ z%u}l%>(8LLl9=8j_OrR0?~ZJTHKo`ZzbgfjR7N+*{O6q-#jE|qhQWYTTSJ}u-REdi z0~rlUNIc9|#0wzUla{#h8Lg7AB1gtm%9{{5yF9P1D|%}4he+Lra=8hIIC!(}bNq~v zhNFb1{bg|3Gt7RG=;rHY|B2=3bm+}Ez{wZK-EgvGyJ9rf(1SElIP96t)>;`Y44#Hj zX!Ox&n{z&de}xk(J^C?HxM!F z4zoIBS`(zyhCx0x^awzCC0)6o_jB=< zkZXL~=rLE{sHV6J+rNu9^@HdQavy-3T$Mg^*!A+`Kh>h(noM0i ziBuIMk<2A5+)B5ZoQAz?yqkso@}OXuj#!?hf%6#a7)w+)SpaXM8$Ss0?Z~t!xiI@8 z>hlc{n>pPI8QjP$xQSFfxfFL05d0vMBdz~_6!+P8sZR>jxk=Q}Zg)YFXIS{g@@i`Z~|cgT>UHH#8j{YzFw0&Hy}Syb_niQS)GQnF?n zyB#^G`kXFg6z`mm7}W01_Bf|wKW~X?uiwW@Zb1EKa#Uy9ExWvP1#Qo3DZ~lfM9~S2 z&hXRU{9MY@PY+!*9#iCBU9Y4);+JkDs9@rz8GRSTq%9e4pt5)NektQ$45yd6Kajn5 zS!Po+O8&WYO*cEc-sN2XwRW*D6sxfWWAmF$KF1|WCcr-n-?yErPAV)MoO5Q@o?u4L zmED{n!d*QE%1W$EThTAP-$*|=%dS)B9u}lAQ9)>~#=kg+<2RGCi)FZ8NSOs@u*{Rn zUQM~Yv1A-p$&A$LMTCcp8L@y$RuwrYMVAx7+ z?pk@Nk@2um)7gp4AKsB3Uo-Y3Q@-IYgUSR}4kzC}7Z;cFO|;QUz3*mKd1N-Q9}>1b zks3q;Rgy6k8u&~!dg5Uv?tA@T5a0ESSwph&iA7sz4S?4=9I@<7(53sB(R5T8(|t8( zL0@B0HJhxh%-hd4?fwYifr_|XmOyGCQ+D=7 zxNoLw-P^OqytA;%(~WMuZC<1xhMqHZu7B@V#HM#0a9R1oqiQQD4TeGHL1-HmB|C2U zevDaD{S?D09AotPcF$4>S()CEo=y+6cZZ%Vnc`aXgdF>6DNtuCcxy`88>2C18NVRw z_$qp93-8t;caWPar0FrZic$R6q5UP*MzE*hzEO}9PiX9R>>3+0Jl>nqH8r?Z&th{OwIg6t*ge#q3T2Ok~FlXef zO-NonPP*Ddo?rMd9Z**LsL#DQx(;*PtQGB!w73kFLs9g`*AgeoNQM2p$Y~=8Ibm=r z+jl*XgsHVMt86vzl@oCOvOy)P&hw+X1F7%_(iV`a$ksOK66&a!W zl%A>|{+4{NuH-CODM$6A$a=eH9Qc=BRF?LG-lr0St$ZCkNhh`?Z^iJGl^cI@^m^oa zA5?gYsEN}EZ5nIOS~plSZwiE8$ca$j+ES9)+3KGsM~vDBr>5F?6H)@le&%%zppU@Cmn;8*j#tJ ztA@RF5$`kjR?i~c^VpbD&1x0vECDTdmK!>f7tC=v$2zAvG{t%Sv3#r8OtTR8Oi+g4 zn2c~pf-;3NSdNP`W6!DRKO41No#&s8y13iCoQChtykAs&4P&9f3$!&iYla5WHOSxX z!bW63)2!)8o&dyQZ%o>K(xvZ|DQM{RESk4L*(BZnXhK-dS$O&{`{(m)w}O%{R08uZ4Xdz*|C*@Jm)3m z!)#;eynA(w*w8*aSIM=lf04Jo`UUKrHJ(d-M-)u{vUKZ{E`dXo#f?`-k!Yxbtu@CiGNKUN4Nf5ViKO@IB1 zv82#Qq)>wNTSDt9y<+|F@qx2Nvk2aJUN?Xbn> z2J1+>+{&Uij_qcEC588L=EE*lcL(-HzJLT?q@rb#mGpqC3lmM@@nw4`ECDYH3(ECb zKl)q4wZ|)kMt#N&)}xwB5qo)^LmZ?glqQV&XImVzEBLP+1>ZUji|*vGGjb{h3^~d? z#_{3P!)&KOkOIO;^3RzxC@^92NADUGLQFnBN5ZBM|8P`Hh1z)w8_i&IO)BQ2>n>qf zYt6>Z?5zh8`qBNYwIsC*=@st8{8-lc%J=7>KQSfce>Ot7ZnkC_Lkb=opa-Wf^50Oo zFRf!lw{lV^Yo!Op7hEMsQ2Nt9$(|eBjqiXY+A9iBJ`KgNGldlIU*8bNlWdAU45_vyJ&Wzu(b`Z+B4iCJ~G!jP{sU5+|)kSj5Lt^m0RaTZA^gki$cyvbl>E}N*$gKbb$#N+Xia8n0YWzSs z4KXrCu?c5Gox7iDHzj)^dpu7bQlR}2aW z;oL9r?#_99ivu??v<4c~DqLr&JRZm*W6*kEaRhR^0-OeWAVaM8Z7Ib|0`kgpB2l%Y zjDCm|2coidt`9U$x{7Z$lef;YlQh|eL>To>m=FBrWWXh)o$!EmzSXXS0_#4LMcM~E zTbe>!Q|-BpNsBj@@xv0CzqNP1=Q|CM0T71NX6~|;Me)gjX{lyKhka7dB}%vK#<|VB zP&i!b#hU|~dxx7ds?YA>-}c6LFR1?DOAUfm5GrEjI7opG9bf?XK;DiJYW zBi@ee&e}M|-*O$nHe64r;LX^Gy@h_f8W(axy~cfo&D80m8n&6op)U=cdAUY~y{1Dz z%goE%d$>@$;c=7JjrI$93EZT$)l#W>6HRr&yHOA@ExLqi;fy*c73ND@ z6~b7^Pm5-ED((USvEikT4Cl$*Lh96hLw1(45RVx4HhaWRqtBxJADDTbYoDpD)fRZl zr(EUIk<`u;!N(j=5-tFTNk1a~ix=0}Mqfkq%9e6j2VhdTqSeppBlbL(;CgMWB@If? zYO+^d^`gv9m#<4sXOoqJ5sOPZ?MC@1zsZ9tVbHA8K(Dl~Z8D#4mPaV_o7(WV_y|Ql zH&nw$wBwL3L95#!gN+EQD=W~98ozcxWAUB7@5-7tmA7;`CM{n4%-!{=hzO8m-KlgE z@p~-CG^yWiqrbsvc$^of1Wn6Mf^Yqbr zh=ZH#=vHf|C%|5`-sLZ|JPR98O{%^ld1r%4PM;VV;j=CCZ?yoxXeGEJ$a0~mihGKO zZ18`ph>(QQhC#vc%fWs!24GGrq=u78^&1m|0ii)1 z#Dgn?u-C04DgTPF@5vtfqFEXXdDp!iae57vEi$o$t-$}%an{hoiF44@(MoYcZ905N zAfo$3fLXesn*3*bI=SsSy0?F;(I?NQXsw6-c*(27hwLHO?B6rpgXB9KTPQAs(-eYv)9MS zM>1?scG&fvv@@qD4lKc04a25VWW;H2tH}6)jNP#-k|fAYiU%VN%t!dnb1Nb6mSDW> z+URhztg}w7{5cIvh%sR#0$tRe7oXp@h;mdheUTQf6(|q)(5|&?FjQAU0aA8k}kiFK-m1L2lLQYPr2a$NE?aSGtR&x?J>wk7pbGk{o=vs0U6F7CIGppPR4BS&51X zXsiD^d75%~@VWp}_#HyV^!9(F9Qn${cs4q}GRENMHta5IOzq_87VSNJlFc-3DdqJ| zsz)MgsT=O1DgFj{9{UR^sM+;|StUMuG)QMMd+n_4OT5DM?vQ5PKq9N>32+G+qE^(O z4%1$h?QL6?enz2lc=*j3b3aXFg1y=>+Wyf5(w=d?Q>37@w0ORD;uWraN;@{yP&&sQ z=k$6f4sBNdfbOczd~jA-u#$nOO_;Mr(w<4kmb{&+#%4@qjtYB+aoHFq<|+pgK*7wQ zSPwP4dc#21^nq_Aytk{J&6=x2lU%wwczsqGV_%i0B|rSbc!{%iD+#$c9$bRdB~``v z3GkRWRF@v>r9E}VM6pf_Z2|wN;Ibdhm|}h5UTP17KxAT;*Q{Kt;8Ym6SJVD?P^#`X zG&u1i2EkBY5d zm}*&psvHb8^Pc3ami?StSi$qn^hGHK(CO`U_+f4FJ6lmp6e!@|V*`?>I@}SCq&;1% zB1++!-38ak;N@OorQ9!j`3DUt#@e)THn3MscUp{yAa%z2cIYo<>pZ8YJLHwGM%P%Bb?Xx2*~v?mV=-gohCo zhQr*VF3}Ut%&ssPtnEyWxvN4mrWMBDAU*Wt&}Bj>8wLpQ0$jxSR{XnSO0S3?UBEaEP<$?$*_W$ zoufT-dQnfADzWXyj7~rCFEU8MkQrh((Q77b4P)LmhA}++@b`)K91`OI9?DvI83*H^ zDP81iN?QT>aX+X2a^b|RnUAGoHAIGi_rhB-O^>)ZY2-+jy$cf}2VFpQFI?)U{wby- zVIJpeKC)?BQl(M5)8_Ady&Z?*d0Kbm0l(hGzTRPm3eTwEFT!tj2!IJidh+Wg9?|ir zDPWO)N1EpPI^;~#%Ko)_2IdBa4>Nk$;)c%$%5o3!fBy5k<)YG115K#{$#e0em~`7e z@cU4a0c$^$|CI;|@`UyvL+IH{x4+Lyg_m3ru+5rnzRvf(eRfWZuGwGRgGKNQXS9ob z$)iw9Hy4(c>rQnI{1gz!X4w`o*@ZCNzph%c7LqwnF*cB#P)|8DT5Rewl-5URor|&o zH_lXvI#uDG7gck9Islaz9r}C`N~TEH|1<+>$zrrDb6Io^KYowvQl>%GUEtE;DE1$e zn60g7u*vF;HdCW;yK6S{Wxz@+@4ll%wEX0QZ#07ipK>(a6<|2XlS~l@*(WS4ADf9C zNs_NS!VHUO#eJE2Z3v#%QT@X0xqG6wHu^so#XVA_Evxbk@SO25BH{N#DWRVQg@kvz zux7+s_yyEolF)Ufar75Y*z#(8sj@|PKAgaw%H)LZVeh&@I)6l~tK);^sR3V|Uot?{ zU4-kohD*dF+M9~~syY@z!!pm)HFDi1U0+Cp-0d_FjN#B{ktBbrZ%^s8WNH_}1u`mDEdo)Ii~kQ@Ulo?uvTX?=K=9xWNpN?!0Kwf|f(6&$ z?!kk*JHg#0xVyW%%a8xP*!!H@54Zb;2R>L>piO?L#7ri}OBb#y^@x zjtHkSrgQ66Eme}W*ioyV{3%qhVA!!h%~n6 zDGlrXCJ(Hou4yY_`YpTa!{ki6f(x-f>WTee7}JjVUwd}Si9ci?_J8Ken3Q7=F14`b$#M=;=3Dg zd1hCkq^Z|*`~{Wjbs|x7#6W7H{h$=t{ePvD1MY<;E;G5J7;wC7$5cESFPTG3UA$30 zJ-ej;EvYDXGs*{?Hj|ky+8o}G16%N88!0;pRi@91hVL)Z4#_TBylTPYT^Y_&cBCoL z^L#E0VnjV^fPQhaxFRk*6V#rLz$$k0VOud1rx9aLkrDlPS5>>uUpnMc6il|9O`h4| zPAGi|a#s=Ph1gjwDE=jPn7UikWEyKkXcddGQB+ZTq)8sl*zo>V_)HAD#vefh-%)2nL!hGyh{C^dn1CM>>k4As`4_CZHk2sylR2ERapYZwY^-`= z(g!~*4f?SL9|7BBg4#&)c01bEpE!#=t`><#c<5go@iH2Y4+!4TQj3;{MOJe*;R|zT zyvVqGLD{1DgFvO3my8rB9)g>9-NJUlvnR~4{S2OjIjTljxNb8s=a8*gC4ir3uZWR_ zlGi5isE2Tm>A~8&bt+ju=y@MU7i`xL_sU{Zuha&DD6BZ_p|MW#vl6CSw^|A2;i(Ru zK;i~x$J}KvTphZsmv!O0{y96!qU_LrE)R#WdZIQv_z+M7EjuM7T!y(%1Bg1OqY)h1 zu|Ld6O>+RrAwQYc?;m$#@5!mJ9v^jFV({}?!9_>8jLs{lwW z{Cqw7zlR?t6suC9uxmN@^CA-bomP-2OjnKNaHMff%d$>RW&Qekz!urxJJNH`Yp0$| z{PFw$6!RKGz>83j-pl>!{U(F}eCl6ZIXj7fVG>Wg4h-UxnVTKU(!A7S6%&ek!Mh;Y z3Ga;h1oqYj5}CWwFXrGD2QLKr|BR0iEv2fHa-4l$Ltqx%QZhU{%B{ld5%N_=ef5Ze zy&S^E%LU)s@dXfnO155}3?gVx6ang4;l7{z$-@zEr*pm9EY z-cnjUd1ywLYa?bc+E`T^*o&fZv2y1}US^J);JZonOyghsJD4HO;ED>g8JQ6t-4xxm@Hvl!xh>b{u*O-@%P_Y497vB6 zqi~h7TV=XYVJ2y9H{>2fk}? zUJ^^OBu0W;KQpi~oaLOFu%Z`X_Seu~sV>M1!z|Gew+{>cRO8f{NdkqJy1rXQAZti*-h`_`J}IQs7oJX&JL8n$i9j4&(DUrbh*nf^Pqgu-)o&bNC& zu#~R_u%oP#Zc9anW>S@Pp}8lF6ze~ErL7$fg zd)l~Davq7+H5R?NqSR$W$apvT2BrG+_C+QT9nJSV@uuH#(1-$CjTOa|Mp zHS@ye+LSvjasUFQK1%nv;hVolbWccf&b)QF>R&xj#ol$SI~i$+Elyhbfp^=y8!`}v z`VOodv7aI&xT=vtqrJ_Nxqd5OlN(;IMV=(M#@%MH4h!!ym@J2l(=xnyWUZ%wQ#OCvX%K6!>`YLS0R6^+;aQj!tob(s`8k ze1Ni;EW`QrberFrRF|0Zb4_7%LAf|Y`>f1$2SFMJAg5kRyLlmZ7h$rEl;IX!&x6h$ znhav`C*o}&oOzXkz3r7f8CID=q^S=#n>mpZ1&IPYyyaA4`>jzpUvG%FCIcH5Ab;lG z#Pt1etFze2W72rc0W|UGA0x3p+gzSD7yD$3_Q{s#)eiWg{135j+P-@!0Kw0kuUzf; zySf;DV=$AYUrr8vgG|LFLr-o(TWmKGw#hHsC3iEv|7bq$MK@24uH{uBE=Pec;hR0h6_Uu zZ@zObExO%{?dz27Kzne!m>#!B{Yj-sCe2m`YTue`dPlIYs{!xoZ_nxOS=*`qTcRv z)2CgVJ{Xk3h*h;9q=d5)1G&G~d@`yW?j0HT*$|GNM1SIBJ;)i0nDilXQ6!)*b&sN2 zRn=Rb*a+a9@=9rUJIiA&`SH@y?GZi`apA%Pt{MP`>nBZpe2n{7+ApD){df;!|M@mp zc+hOak%qbnWaxmhaF%A({t#eg?a-HFFse$1UU~nH`9iN<(nwHiZf~DL=cnrG+K^3y zKuQc*p8BA&@AuAwf>Y&>^MCFF1Z^by5Z?g_^q`F(B)oQkYT+QM#I}*WSzgZ3Kp(Af zCHS>~@3pNL;IjO&nDYyty-i(+JCSE$?#6|bfryP>p#3H4^Of-miY)l~cJM3+e(Vd! z9Vq2PP>dycfO@6TqTc^3SN~HJ2>t4%&zmGhdi)Ym${=vX>oxsDV>t3OTEF9WWP>@2 z_oY1{-Tt#_AFcP?YU=yoFBOS9zhn7sD=6;>ETez%vn-6;phFMPJ-~C_Ee9IyyZ`$XA3kHX3BueCNJ)_& zWsX>USIpZeH8Wl>ODt;1gM#TQ$2w}(EUGD5c;$_H_P{Pj(xOtg5l)wg3-gL{NBL4Q zYFz@3s;IOnS%*u;nRFS-_PscEF|I5!GU<7E5LS@yh_igzrULrEIsM617>*@L-+F`S z5O7iqcmQW?(tk>+|Mg5^tNy5>qB%BG;;C)lemc;s3O>N{Uq!M_O}L@0r;FF>418_b z6KUDYe_7=Qz?qd6ko>J9$K6fvecHH8pK3oF)7g;(dn5^~AJe;@7fWd4?6h;#*zw#7 z%s`5QXK3hKDR_O^rhLE~I(p;(sR!RbG;p7rGF#?F#=|5 z=mo0!^gy?#w}}2_dg1bJrY!9Knl0xv_6o91Vgo;u}dEeVN;4zyR8WKKEHI|bhTT)*J5?5xhe^0Gq%>)sgN=Cg zD_oWO%cKYP*Z;>|g+_iGmD88b-IXF@@Qcx8iJwR|I>Zs0mQ^qiWdC z->cxC&KERQ?6O-<0`Up(`%v^sp-%^mi=@6(LPy&VV|L3EMjLVjj zq%4o^1a(B^J*=F$nHCl071T!tnJ{P$WyXpw9dO5H8X{6G&yfNfnAwmK)pXSX$vfS4ZKtchwr^}zXw2sVLst$ zjZ6_3$cirmDziP^NhPln{`cqK$mdF((iRnS5k9wnK=hmUi+&9c^^EWoeMvsNJ(j+K zjCg{{qVKI=31yDZ=n`3e)28iOib$=@Fcm}bJ>!!B$wQvK2id(S@`%a0GC>-zGD}j! zD?Y~o{JVF;olr=p&g7-yjDD;;*=khVcrrN(?h&6Kr|V zg)Y4SNd-e>q9`9m|GFLYArTKT{`Rb~r`emWV?)ZGw8N*!F*|?g*0zul#IG|ry z^@(cy%&0$f0Do0jxGk|U+gVr_xz>dQ_W@(By^_uB;|eFhE#sQp4RmZCC;LEzVD{7N z52Rd7NzX;Yv~4Zncs@Jc+8sHH5dNKAHitcH0s(-ZI_p^;>r~Sd-L{#MC!5gw zB_iebzm`lF#P?BWd5vqr`ljqyYQT6`QBuj4v@3%K{+RxH6^#U3R8BsrAr?K4ymQ9c=7|Cns}JsVSdt!$_Gm+F}XPiEQAoRw=AQTH*yq&7HV$@iVLyQxT*66 zT|jbIyoXzZ-#A7JhsHFCm)F}Cs)P7Uc-}4q|7Yo9ZA#1^Vl?|xdnAmL4Ryh;+kN2? zOWlmM7BB8dS+7kM3(u9wfRxN8!c48(#ro8QHSC2BP$~8zVQ|2z*S9516&jzSe8!^D zxKsNT%(hebqRx@hD>#^XHk0Y+BAv{^!)2dMT)lciOt8i9X>;8sSv?99Y)GfIj;-^O*>sr$vx= zpGw3!{q5L1r}_`oS^ZGxmz4F2Uarwy%d+0O6Eo1H?I_}p3_i_}^Mky$?V^K?3%!TM zIY}3)wU65@ry60L&$;+3?q$&6-yw6eLdI%RSKGsM`M0p>iN`8-d>wFg!~Ur6wlxuq z$3^a9RfZNVVC_WqicTwt_wQd;x3Yp3zYZ+iiS^y?>3|?ZI zLA#<}S!mzzmhl}E#Y^$0)Uu50!%rKvR|2=Y^M?Yy*1*(-_#r~mzu)pP)>QkxP&B37 z=UPexP5y1kgN$i5uP?&4Fk4OXNTupe1kTwYSPyxnd-n!FlJ&1deY zVto1yTubraLVm>w4}~!MMe!pE>-Shh*fSmXBF{e`o>-y4e~CBs&pXn@UV=SYogODC z-j7ge&^xu?>XNt-TAQ|gVp5M(@?jzXO|Kp4k7O`1)Zo(P+_W7zlN$A{u7`%@GGIY{+TY*RJ>Bv<) zZ6u6dXHkSF&}S#(XEJ#eEi<#1?x1U>qGST zu$_K`?4>K9|NYu#6w2Id`Ff=B`ZC)CJ~wY1D@39?8&T}sT+Xz22_20qeK(YfKnaVe zv+wmG!9-o5pD-olQsd?pof7SZq9^AK(Bj2N?{vfsCtxGUIyZDUI{mjk`Q>;F18F7- zRNLwUfDZdlBM*rWpH0MAEuut{e{WJs?s2?DlSJL7I)`gE2)fBT%+E0p>NqrbJuv2b zcQjMPRi0K=MU{c~eUvr;)Ww+LxA)NCKt#WetF1N<|5sl~ zM8g2oDWI^f;!78MHQ^{f!N{Cpb9~m>zr2M$m>27;j+1VIn#baRrXgwQfh0cVgM!Fg za88WOT`S$x1R3a z>BNNc-1@?K9isPKc9az9}>eP7*!o&VypW67R)+k&Ct6=ZM9%TlN7EqiQcBoItb+4 zHyV)JAAiJ!yPbCBQ+$ZH+2)%Z)8DC}x=u!euU6v83mJhFSmon?_k!o28Oey|S9_Ch zv~;^LMFSk`y?Y)zF%DCsy9z0DBe> zj|hFhJ1Oh@wYzq~cAlVzZ)@|$(LY+Q^`4|Saa8WnR6y|lkwIb5y^By5-3ow<5%eMQ z_AAX=Vi#zzz&tQ}gv5p8u7^*Y9t38gk_CKG&vb!}N{{#-GQ$u$j&i*>_(}4rW>WkO zw^f~XmjBA7CJDBtdm{2fD8mArf%^!ee=>uJWvR`(N{{q!m5547$Qf82h1U>HTQ$%DDr4b^HXvmex z@9ERXFQ|M%w_Q0R!v~i~^1z7~v9KO4W4BWvJI2;=(`AoijT<j$s6r9Xstg} z+FO92wxs%NM#kIjHt1j25cS#u-~jTaPO4?=J#%GajZzl*Uz|>Y8EkS$1$fI1*V6jl z)-qbgM@N)Gh8z3s$e{0{dpY*kb{!ji(SI)-OAIeXqBnx?U$|rS=gl5};yjQt!=PMf z{Jy4GI*hszo;fLGJokvXdhTnz{T%$x#e1(8d*bg)q&9h_A63=;}6#=&q{_`7#s2paGgT604>ZH@eY+Hy#Lcttq8k5pBOu4R(0Z9Bp|6QaFkL~ib zskb5aEMeE+lciOT-LN3Phk%DR@K`N+Ha*VHe-rkX%-jp%oP}Y_Dwfb0GMMrANq$D1 z`Ny-a!c2v6>h2g!f909YcdT6xubD=tVPa zctc-DVWk7AdmRh#$mTq{vi)JI-0VC_^s-#7uAs;D>v|8h1oYJJ4QpMm1OoJ?>bCN{ z+VI`kZRe$wRG@r6{?-}mwURAma?X-iuhPbE7jB_)?+@lbl$w)R&W0gqLAGnHqP!$M z@=0tCg9+B!Zcca`NuW^ZG3+O`ElC+-*)&E#NLk&c zur~SAmKKBR7Nw%J$krZMkZzH6rM)v6+O}iqu$8tj7FNoUty7d+S_0j{?|ObJhR<19 zp0<}cqx9RTTISe1%Va&e(Ubom!1=gHceCK=DR`mfJ2#4MM3ZYtN;3_)`pL;?lhA3( z{c>_*l>DU$kK2c@T@Qp5<)QE8$Wfdfc19(+gMGrkMA|rS|5}}=y#bT6Ty$uOE($Ve z=F~sX+}5%u=qIW$1%5;s?ewlqIdbNPLnK=&2x<0o3TD>8?JJ=vYx za#`~w8T@cyGk%s^twP}e9_>%J*v>wtW)a_awlL+~3v=iQ=Tr^`@VSh0LIa!E?pcOh zA?`KjKgB#JpE=WvTEcrkFP$Og)C@`bRf^TE9|~86Wz5K|=E>*5>HR63zg51fIMBFX z7Yf)L+|~_DOQRAi@WPsSv9S5un-!`m_{oj5cUOop()CG=0rmp{P40rvTt%c~K^*4~78wOd!h3@4_RPM9 zsBq}lUi7JhQWxJ)WIE=Je0{B&5RV^N$yhi9jldbbsH`_OX5~}UCs^=4oTOS`=69wF zHU)s3c%SQEfa|1@Z?DE3wlcr`R%Va zx}tBf7hCKj$Hi`NgkVG~V?)#9ep_ClCB`WH>S=XHfW#vwssSnzq zTqIw+W#R5IuUZg;z02?pa|uX5SV0ch~y-htKIIECYF_-=VICI?PVBQ-$6yMHJW#44a>=MbmyCYD5?&;poA2`FY33V@scw&;?6#Frj&r7Nq+^H;-R%SiOYk7 zzc99n^Dm*er>1b4l!Y%XtlkqBEzIp~-m_qmv1SX{=Lc4E*f%~3!o_w|OZ)XZDcsYY zANVAsoc_I)rq{sLKZ060IPDYAH(0xyxR{50j7rOQeEOM4R~4O^38nV##0&O)c#kWE-Xs{fTB~w0*Kv{OD1p(O~JSW)_V91Ma4yA+@=|69>5c?q+2%B?-46 zSmm8FiPg1IJVvlGJ&|KS*FMmI!bJCeVTWHw3WxD2UX;C3-Tz(uuJ6-}7x613dibaG zbvL+GUNNyi!?DMU>GD58P_?bC5zT7@GD|rITIXND9Seif_+1nJH!o9S8|5K(!@}KC zFQx+AvLvIFH30 zr2g(2&|z?V8a8b)&Y^X#ocrFNVr^gw>CrLCn0pH@PuwWnU&ObWI`}@a^_KK`@wn5y z)x>w34yMJKuCdG*U0R~n^d1jOseAIi9A+pIg~_#JGn3q6k$?_52$NgnOBYUtMUQE; z`k2EP)7F!A`Hd>;lB}LQ4B^n2Pa5ZV1{A+nuFI|00k6CiMD+MOXIxYiA)4IrZM0Dn zWAujBB2JZ^a2Zbu4|_*V^%#u%`&utnTC&k^G7HP{k!)&TqE)_~dOMHVbOnB#zH@mG zPUgqEi-6``4AnX`O-q}UJ}&tV0sUZ_OBc0c! zPRx zicwl)yv~6pzT(brz|E6`c{4+utl`&AJ?aiEc^W&6Ec$i=-T+ExVR5$EQRCpdF_dtr z`O5<6v=c{5C#V9Q&clQOJ_Pk9M^yJuSX$NFO25kHLMQ}#V+VGgvxyU|Bwl^*llNcT zb}`{1Oxp1VNjx)M_gv?c5ns?GR$s+Q=$Oa&BhoGAHsKbi78SZ5pXi|G3LAPzy`5O) z+bsCTg1es#-QaFJXnk4gcrQ5e8W7{d({)|=Ly;r zWKTXn=a#y4MXX;afM!e*R+J+7oT?(ZRm&ot2`Lwd%D=k@T8PtNy_}kdf}dbg#(mbR zleZ#}*WBFnH#nTCEz`{MoHB#lexUBI(-^GX(8jeBh5uw6FW%e`)<2=&V`yLe1xZ;m zUkR@JtDrW9e}T)R+*M+zON+pvc&m+ix4>=^6a}yWHQJ=05P8A!VeY-61WuR7o}FUbQL0sEyPA@jb$0Yu=krna8~=cx^8pwyx zV^EvsQuQ{oH3ABCEx+_>;@59;G!Pc6>(c&0mYF!Vs`T=z6Gm_4nt3c-7pGKho0R^`xX4U-JHjb49-1=G(q<__QYuMc_#@ z{r>9Ys-=Z;N%->X@ItEw=w|*=EM174W=S$ z?};dPC8l9r+gw=3m2tI+%F2wtVN;=|wd*P{XT+G-(xjI*F|k)mc#>y$KW8{tQ-%^0 zoRbkE$;0!2QRInjhUE%hAvY z*)J@q@@q)&)kKiA5|$MV+wpJfHC4T9;tG(zf+`o88}L)^dLnraY9>bwC8^w6H? zZgXJXwEIGJDi=Fgl`vRG4({oZpd5pe;Xm@RJ692`Sea>|$GsCEEDGx6>s?#ejKQ#? z2jhp%AwIcsxygqJjPcJr=2V{SG53J%aBB!*Dy-AR6>+)A>d+5UYCW;>JaOZ1$?k7G zfDjGJ(k0oa7-MDPIYH3W{fRkVW<*DA%(l^s+#lP)_%BYkRje5xeww`S0n~&bz7}8 zuey@Szs-&Ku8vBpt9KtSOWKar>W={umq~`QbF7M0z39}aHr4Wtr;bA~6wQ!EOH@m$ z-9v}jV&U~=%I!?G;mr*Ne$5wN3fJ>BhRYl10ub;CPs583;WR(1X$}f69}%i!ku-r zX0zI6vxtUw-ZW(tLZ?{Q#F{;{&@LU&&RVUQk9Nf7D67hroQ6xNdZiDBP`{>Ye3MZ@oxAA34|Y<-2DM0j_+0Mjg{Ny4 z+80YV%#QpvCSP2*WS?K+Pqvyys_vPjE(xZd%n8pfz6m9_$E08*1gGt@tg8r(j@>R? zZbk4>*jmMLp$au^+}Qn>3joZ_NNLzzutxv~d*VilS>*DlV)|B=z7Eopw}zZV33V&N zXZm7`FAs86m2=52!g6Rx?Cs!!Ngn?k#}KVg56<&;pJG}ao#8C@$eZffR>!Wk#N%Ppp;}UKKAs^q z7ykhTS*Oy{YAzF}h4r_(kcC+zt#d7kcP~rm0%sX2Nd+y6r19&M(1nIpMKD$|!3cjX z$4NNQ7IZq@T>0lQGmmefoA;yIawo9vM zGZ1aAg4XuiyuJO|rVWYU8_iahGf(Odc%&*xT{~uLJ0%2yIW^1 z?6ilZ%4AgGr4mVBM^dgU#kgN!*lGpsEVd^gSE5ya#O_@WK!v;>DQnA><2t4SCV2p; zY_S@D?e2O|f4Z(ICHNO!LiObCExsht^k1B@6qqR_Jo=6D529Tsw+qhq-7ms7{QyRkTkUEEHjMY!e;B3ydi7eppn81HI8o_4z8Tl0KEGS8sx1jJgSK4MQkpa^WmMlpaW%L(Vd zT@jn$M?Ps|(9-4Xe0HC5`Y5T2r4h~JyC$fHZAS0{8i*7A%;2p$GJ-EMsAOCa z`-EN}GG*655CL;)!j;}#KgzhiZ6xaQ&ZxF2S5Oo}wswObz1>raf2{R8bFGY18t7Ze z7pEz-^KVK$JG=x9G zF-bTF5?;n@(1Yat1m(xXH&q~FykJs6D^Z!L_m0UXa^lnS|R=_#`=Hqk=&NKxvOYo4O60YX&~TgkNj z0Di=uoi!E@M5)p7sJ=?hRY?o6sow3Oj5NYE6u{Nz=r!!qHdAqt9h4*#mD4_Bl`KtU z%VX@xa@(4e+KU>n_+j+75=0O@kGSs0N!3^WE#(><*Fdu6GPtC&^K}qk4V%ZNf=t7A zIQ#Nie*#^eht2bbdVC4_$&z5kZt1*K1#rd(<0QSerntf1If&a|Iu0Hiz#IPSgDN}4 z_Ew}|GX0-Vld@*_vX2+(7n^*0z1zo<1aa`@rkXpUbeO|s-9~p*t~+GS&y>is+t9lRh$PRf#g=jz3=XzK6fvZZ}0sW+uZv{t)E)L^x+UA%9&*u_7lK zNhYDv#5$F;tT-?vam8)Wk8zUEaaV_p-5aot%a;qw>j^aI&*ICnbownv|9?)(H;~qgpiC;e1*{z zQ@hD99-3f>f+}7(wOeBTCpJ7(brb-vCIwn``yh>;xckKP^Lw62*GS_Mvz}f|3q3X$GO*8?7~02PNmOlO3iX%; ziBCJi!XBUmU^`f4ny=+R!Qy=x_MJh^oy z{}|N(-iKjwWE2$mqBwg)V?*Lsrr0`@*W%nrG}il_AIJkljaog^f4)?K*WI6AinT?T zP0n71OHfOtqhMg&Tbd_6dv!9hc(KExbjrkI`J0r_fwq}w%$P|7c_o!(mxoW5|BAYt_5c04lTjObZ#3x+yw z+*m}*SdST9g*^OWklW3f^ts}9baMJnGoKSJI-egSTK^a)H`Z%w07K14MQPY>E?hXg zp6OQDRvoZ>9PFKtEtX+8;n*Dez9z57o?vGk@{FBPbF~%^nv=8(eDKSR3nRn5#3}9WmC#OM-y7XwpxL-F-uQPsTpHwo$obs&om&}T zx=GqtxzMTbjtrSUyGr={Sc%T0C1r_$8hD|NO&)5 zeUWMg)C*(@OnwQtpW!7nV~iTwb=?f<)!3U~gf)4|Fj)^mTu()9Ml6_s#@`knRY(mt zU-)C~+($!xhQzHGJ7Xm~-lkyxJ5B1$iu}z=EU$CKn^?fL$j#I(A8m?`6ASCI2VI2I z9_DOuZ2_buA(f(vt0S!-?muyjnC<|FE#2btt+fi@ovhvArtdj~hJ=%+R9ae?4Yefa zpJMrQxk6tjSI}9%z>szH<6_l}V)a(zvZP2V%9>67Ehp!Xpn2zkhY+X21U&D- z4lasGe`>w&{=@XlztZB-=sc_VU9oCRUB3>SEnok>3KOl?L&sZuO!LVTzq>3-E$il z#+dzaiY2k|hM-x}99Y)tV$RxJtAYfLgXFKSj^oBdn!fPf)huJ1yR)po zag*Ro6ZOY=2zffz^`tXiT(h8cVZ71-{3@VCq*2uzIX4-8v7k)hvrLbKoarDCr0M6h z1aUIjTyLTPDcOQ?`W;TA_i894<@D7+*p6Y6$!`Ir{CeTSm*4mTsv|y|b`Cud@&hgX zOqKjIn2cb2PVe?+6X4pzqn$eKNn2_j+1p8j;hvlJ2@FmK9o<5AbWn!wnxjxFw>qGB zhi31uEe~tiWr*lFwkrezciRQbvm%RfI&qFqrfc&7Px=U>bYd4G%#i-v?Hm?Ve2u|v za%Xw3c29wX`C_PYXh4~}CQk3hV#FEoZZQCvR<;nPO!40&YrmNE`qdH%akc>l}MD@!*~~ z&3;_|lf1bmD|j!XG8_IH>-oc76a(TMsV9z0fu%gVKpVbFggxRbN_XAZWXr7rwEn-( zIV&y_@t{#8>#R`y*GZzjbm7{rsE*YMpTO)ktD-UsCThZ-@+Osc`78^(L>8}6^CRoT z$*{K0o>V@7hOm{6E?aUo6sbSWx27eG8_ePsoT>NT{V;;6BfTJ!`d0qKrN(?!?7kry zSUVL|<7pOSbc{+49lj6<^Sj+d^BFmDpJSni z^K2Vwi*g;qtHCp$_Rh^cmAb)a0-eJx zwFd@^u_Kd1M56rzYc{9KYB!`A%!@*EvzhP&1u^lstN1@Nh}yr`o;QMqig7;uGe-1i z&{DGA%pr4=j)z`Q1w2U{Jggl|yk!JzKIn9{89)W~@BkJ2akS=iC&kAn6$`}&rJ<1J zW`pqBRu-@E5f~SqWncCcxubUa<}brZ)q~9dd%&vZ#khb*< zb+(PCf9ixzD&5ii(p9h9N>TewD(GjU8Gk~_vH zS|{y=1Nt_g)U*(kg&g-7Ms3eo>U3Vg_7tz$Wg@wnl}^|wd(+VIPawMr zEvsD()SyT{R_+BaLBPJ$5?%Rq#Lr!O=7bIjr=+JCyj_4eLt22nvFmxLl-F1>ltSdRPO5pyr1Wyl6`r#ED4}AzNs8m zCvf=?hqBJNPwAO4Cl75Cy5VE=K$-g8=uBR=qApIu|AM2k?(;WB*EOL{6NP2N; zOfar;2CQN&{ClJl716Z>jdqqasm{H5kkGIU6)``6Ru!YEjkPS=1@pzTC*2u_N#3YE zcU1sI#H*(xE0UUyptDj_N!*ZH>SYEl>qiIvF94ZUvMI?LtIfEpQDz=W+pE}5Bs&zAsp?C|9rl(EVm!|mWxAiQ~+ zT*`Ug#CkeLk9nNVk^_m;J>BC=nn~!nuIiN0$h!SzA`hTf+Ry73lCQi3$(uYB_{C4R zw#zru%IzsgDiMux_Y9^1d(R%0@Ey`CD}H81O$ z&DbDfq5HMnTjTXwAM_@Gb7C#A?M|m^bT1OLa~@aL64k(2Aw(0!oI$s??f~`Ld3GiI z)Q=y-uTN36_=<+b++&Ue`zr7kp3Y2R@Xt+)7%k3tN1}1&QjrM6HLC_XS7!*yrb_n4 zyQBG2m>^bl@fuX*n+=$TOM(RUa!ZW9-Gxxu{n5<@x@&S|8c}uud&1G!g$9{?7CVMm zz}nY)!+SEBc1}XTnY5Edd^2^?_aSmRaT+>pT^!dK#x?pHUoc|N`;t_b{UG=59EFtr z>MaXvL%hVnj&DwQw{NBn!$ArPv^R8TrZ&_eJVzL0)rrjQc7t(?BFTU}whu(WaFu?@ z`-*34O)q>fLnr6#Ky%Kh3x!55obdtQf&WmM*12<_>;Oa`pca1;>a7eq*Xb`&W1Sh9 znUzvHqtCgh_=^wXP*9jlYSdAhkegP@xAdw@2vrHwxOD9S$zR1ED9ic4)L%;LW~AFVo9MfL&LN-5sD4~{xG0&@O$=*%hX#L6uzlYhclm7@ zd3si4KCtZU@9t_83x$W4bIt9;J*GfJtYfL}`mgd5IH>i1=lxbPBR_Ku$AvTUy7`4) zF+Gv%1YR@Y%z{R}@7`HYm_APKDKRdk*irn7xL;rCtY+rGZP0w&zi8(F*)FgsX-%q)ZJK|$4>z`OpSmbt z?~o+vO!8E&xJUneaONVNMMl|Ddd0Pevp#-b4?(Zi44$wXqPu@?fY?51Tt<~aLEsRbSL?Xwkuww=%Z>AigK>vhyrc9OR~=azbF7| zq4oU$;mvfdv4vk_yRY*ysJIP{fmd$!AtH{61^lWp$@HMRoVM{C6xq_6G}<8}Oy~g_ z4=nW2@6Kedn?Qd+_UCH*HQzIhz#*tEU!VR{I2G#0JuHj zZO_{D7z-xnY7$V~{B&SwF-UE$RcpGH=rts~jnKQ|Zo}m0g>Ug^cpyso^M^(=O9G6o z)cSyUP%ysgdp10^wc)M8BU7*CV5gzrhWzLw70{MTBl4)`w?%(px#{ra!J#4IvL3AV zCAH`5pF@TO$oH^9gwIYLe1m z{jWG`Hf^w#6wbSdk$7?Lms5(K_dG)Nki5@Scr3i-G4_qNDP`(^V;0vsmqvz`n6y%O zxU4&Eb2;KFPGQ25^+wuWtaPf?B)NBJ2(Ah;v@7AYH>8@aD37%1>Bz(a#%Ji|wp)4s zX5zRJy%V{O2`4_eUR{*-SpHTzYY*)FIDfzG5c|-ApnCJPBI84~M1`thf2>8_iO%&o z>03i!K(}SGv2@63q}WTt>!k_MV6e}v`h5)*dEx`Fsa7}7*5zvWN^0jQ zI`MT!^wxB0gKk+t-Q!#kEYRaBb~iJMCCiA6tSNs~r?uH^{|wE%V}JR{SO4g)^k^Q( zGwkwWoDQotvo(uU>pxq{uRd!2RRIIhP(I57Xu@XB$}>`}EsbDUdZrT@;^N<#;WQ`q z6(&sHV*mnio-lnrAqAnQn{<|XKROIbvVdJrp1nS@Hb|prIU5qDT}|z}^Ur25mi4}X zo>PP^u_jgVlF-w9STWD{EMkj10}&F;=wKN{Bp9Qm|3lYTN43>$-dt&faUU zJ?C6=>D1dlujZqYyFu%LYiB`V%_Njm^SkgrC;`_v#`Kh zgB)_`t2L{7_XXyDno*0k_QCtmTYJmosK7CCu(Eu45@8&>I zbw2n3p0_LY=Q1fYTTXr)=JdmFAPYncNCrW>4J9C^#L9@Y;KX!nOLuIAp=o=P&KH(B zXr!cnm@U`NfcoUx;p&wYfHKqB=Pn(JvXe63Qa!{2cUv5LEi|E-M4@?DUP6dUddm3Pv|wH1D9gpe?!@?f z=@YNi5aI}%th)_^gw)-H)5r5zLanzhHw#W~5W{Zr^DAei@yzf*#d5i^n{SElh}5du zX2kYDl7dB+(tM4WxHA=#?Iwe!qV8ZB94`e@8R$kj`zN}JIHo)Ol(pFAhrPmEr6ar; zbivF=eV+NcU0)iqvHUz1s$kMW<33rqCx^uf)1vzeR zUAcT#X^sqq0xjxPU@hQ2{F`q9TDx82gZx8b@;C}YJNhvTu)-&>?;m6Y_K~osz(;)& zdtk>8!`!Z>C;P2PxWs5gISMNd@aV((sW9$edrSfSC1WE<6>eC3Gn-) z{=XVlgIAt49WR1Xuq-|dH0DJmw!ayrI0!)XfPHwflTW>)Az-{3rI#@BLd9COnyT=7 z92=%AZYy}wPj$IVf67Iars%FbwYCXAZRSBynth9=y)jDfI(a4Cj3UJ$|DZACxSFMx zv>gzWwo&?dAkjz`UD&hOz4)W$ddNI+`aXdhZ-S6hg@2yAVavovcg2z}dD~=^bM2>v z0me<1gl#nLBc^oCtN}{z?aKS)T}Hua%lAynuAu@fc+S84JP1V@&N*kI(EQb!mo4$G zs~QO}-=a1m$wglc2lb^O&#+2CH7P9E9)S=?Z~<-U(QnP;J_57?W1;Cdoe^4cN9BLb zn_rea$XM1vPQTOT6|1c!Fq@Z$<87Xe>|!_-KXsVe;Q2rPGC z)Vya1!gm9|OpC~Bw}DN{$>O{Yn0R~XSjpX85$yP5T+UP>Yinz-<>T+#<$B@DggC^1 zYAk{XUCsK#X_C;Yjjox2410tSY(}=QhfB4BrSaD-qqdjJ_w;tR15b~% z7Q%1EMvHQ7#IKdezY4HEnZ#j0n(I1OmRq8fqB#_!p{!h8=xwz#^MdAVJ!bR!JmUS*qvG*U(b-_tjoUMo#6X}s>`{Epwi|s{bZr~4&Jqy}*}TBkm5`_BFLJW&7SuoQ#%G=z;F3Sqm#P}^ zx2;o!ZFw}I+=Q2nIELIC4Ny1Efq~80RYs^d;>H~0FY!Pnu|e4V>Fsv+J>&jXs3EpG z3Y>HVFm+xn1_rz@7~J9kiS(au57p{ciog%@Q%&_vi+~p{e~R;PUVmx)+SwmYFR_c! zUp?hb#!#}D#`9d}JHaY#Swn7F8jf^^h&fNIXC^k&fV|(`z$Z}grKu1 zl0`=djduQwJKRaygl^i;AN=u^3aSU`wD^~iUe3D2F$^Hyl3o#UcJW{{v7p;kr_g~l z+cf^I1ppR4tvrn(UO(maxia)Yyka+?A9WFKRl{K{jdil?;&_kQnOkC})busmqV*fQ z1K}NGht+$gLyNj%?RSh;@*cx4-y=_G-kF>76R#ugRanP9$AdY6}WIIRi@2_GV{V)To1Fp;cAht&BJImcgF9Q6A_}ru< zhQ|h7%5UEwEvW09uhbw^qO)N%2lVJ`dpjCDYtwr4oRDMi4s>v{DOxn;-9$dE&gMDR z$A8GOt|D0w2-@E+Of`J?^&Wn`;ygs1>MoLST2k(CLh@%yk!qm$@G3Dp!+!JTP;<aV)8V%`^|=68cX5*H=hw6ayq*kR(m)E`#$4|w~- zts9v0%FHYS#~%eNxf@9>wc_b9%QI7=-1Ri5Qo(zz3X#jylRjQ*j5cWZz&Ja|k2h&7 z5@g&k5!4=m5YKH5$qjQ7sRius(oFu~+`Kz@b1vpf?#h4rs{T9txt^1uv2;e2MXKF8 z9IP#3$~TUkOICAlMpy;fKzJcT6n&P~`eA~1#M_P=a8UWmyUq6#fQA0nlXwKVCgbI8 z`&e2PWlLOF9IA)53ONMJY+*+6b8Nda_xl_crk>sUJ?OYuvQ72oo&UJJ9`uKqpGxi1 zoQEWrUQNt~S7piGBSsmwrFBTm+GtKPU!6o;_~!xc)i`q>8_nXh%7t;Q-uQ%%XdqEl zV!YNE^m!A`pi`?PH}0E!R75!Nn8HV%{?jCfM11RKXSpV-TB|fSzD@V zW7?L6RYnPNUNqk6{D7whF}J`(>jANSmK-&_*Hw1t7Laa3kGI9}Y~supggO$-1V^p9 z%csY+PkCKSPuzndI)+QlV!s{ zgvt@%ZHRNi9XKbeD~v6CBKd3A)>fL>h0r2YpY_gbxnWfFn{D#(GXBju5Vn(qs}BrV zJsZ907(zIDUVNr?%8mrPc71~vW|}S`6yF#is84~gZ8W*ii-oJSXTyt%7FdDn84ntPTFmnQ<_-T&-2OU=fn$=!c{>gZ z?>!-IUpNYmoMrkHWe2M>1al)!6>=1F=+HF<9|^=yw1_9C=A)rTOa1%ezGwIH?CwKS z^bOMv*)kFVck=cz=q(|F$muHWlZNNDk2{}xJha+am z-oquA#{j>BuwLbE2IME~HF>HFk|GaAG7Wny=ErSxt#<-BezCQ3X zbeTd{{IJN{2;UI+>D?tw%Ch7BrwP~om2O;5)5-G_`#yx&JF(~voGk5`ASKkV2o%ld zyY?VnJq`hY@ma*#`>N(UEP+lyR!)^zF7fs%hgdpqI(TS+jsN7+v}0$&hZeZe-|3!@ zxfZHDQTAf}3B?yQlvzvpuJmAr`VaX~>nDMO;=@w8jK1dt=6im4Rnx5Pp)F*M^NzV& zsKK?7@qgwa+&tJY#7 z*A;YnVtlz|<5!Ci+Q{>$Wb~8iZ5$7C9qCDCw>QEn1UFCnv8;Wf+zcbE$UHKEtlLwx zjjLRA)&|WAyS>w4YHNIeu>X?Gq4ULl`MYPtQrY+d?fL{*>Af=7*&IoIMF%eXJF6); znws`h*3<%J2tTKvKJ;p;G+n)n^=g04CP_~@r^oD77xiV}CMeS0bfp=-X`@-as4x@R zTTPssGU7tIEHJWo;kMah*3p}+oRZPxi8)|fe*OzV;84Di-Y!=H*AbfNbyPc}rpPh) zVvm!%zzh^+x~*;xt3;V%(qJYFQKkzte{=N}P`>lx%ke_k>S2+3{!o7IsP{BHeh{TH z);14E-Tdfox`4DhSc-@q-|tEJ)ocw_q(k!awtSB#CoZOn6`KV6hXJRk1Xs&`@CZyq zfbjEO^gFKJj4vC+#kV^mPhgm|*~5uP0A@PzNE|hTio3Y%A{XLM%EjLIekY<`QM>q; zwK{bw!P&6*#_5{QjBK3#LP=6Ir9hU@H%KA*4d29Ks_acullnH#2Q)h7+pfp#?e)~# zGi{jvrJIdmh7lk=6)d{>At?A>*p})0%Kvnn*-BKoh}Pz5j+;feJ@zWOTlSsmQv3C@ z)myusWbz&+;#*Q#Rd{PAc=)<7cl1Mnz~(+lg1 zvc6?C-B4@GL<1a!e`uoJM0icxha}e2@oki4gf|EMe@CpJZF`&Z;m3KN`}9*BpIC#psdntN=;zK$suP!EsS6Z=$S!^w zO0vL|wnXiCXMBua9_xx@Nz_4v8v8(uq8srlz*OM6-0uDdl}x8&Z+CU_?Wpa!bRsEF z<$~p2Vm1-nno|Z)o`+sPgf;6oS_Z)=eKJ%%@%NNZrFu$+>ZJ zb5Z;1Fdna#jIALTp$pyD`Ep-m)zY4{`pv97)3F8=7fLyKNiK{|+UvZi<}Xo$eF9zgvu#s`SGcjJNa) z&I6tv?i~+{hoUK6n0gtiFpUm1V63Mh726cEMQs?9OACr4^zxw7MyvCBU4^k}YQmnR zW+!&%Py^{fs%&*p@dgo*wVh-&ErvEc@2o38igEVmJe7ZKKcH@i% zRTZ5t!sJq@$CB`uHRecBJ3zC&?4EbEY># z%Z7<^MN$W<+PNjce|#y`BM%{Nsxw1TR3!NGbcVu>QhL&LX<(VEE7-Yh3$Rgk!ELkC z7yr9zq)~zh?%b`caLynQAeHY7$=@0G3;F2m)*oXD_$UwE`(Y8{gPCL0ovC)ab`{=&Y4915>FQMF zHeRK?H$0Eg(V{#xb=nQ@s+m>iI^S=t>;-xp#Z>J#wXOy@hjvwBmw&&_7#KXfSnMV(0ue()V2;98^N-*G8kwaZ!jV^fmy8WUR zII7&0f;23qi0&@waVh7ehiFMV4;FYDLUlI}NoM!>O0ADg@oF^&()DHpb@&PabdBYx zN6T6N79ITSRGM&@dk2g^8{B)Q&oj>CtTi%9EsEy2#AmyUkbVoH!w3Hj=|WB%4pN=IKUC^K*F8_uznrI6FK6$6~t=TSis}a|3!M z-aotLvZ@0Z$0L_+1`BJO&t)4}vLTza=*j?0W&311!+4&K>KM~6yxCOa9@q}9`}K{m zm`U53%BA5rjSzGQP_Uo^H>q96I=SSW6#2;Ww>Q5TF7k2$f; zs5ogy>%MHw-$ki^zjkY@;|+k(h6Hrjuf5K^>YDnn1JO7!93AXM7fu9ZQ|btb-f~H$bmSc%nj zyS9?W(%bB~*F%>m*5lav9tb8P&iRU=L8ymKkCfPPwERrB$a&Jl`&S)=W>N#2f2sK5 zg^0eV|BlqVoU2HI9>&wl<>r9CC`Q095a_1bd}Ta+MG&GXCSdsOFspK{wzJG9c^4z zKF^aX;Wj@136s`UK&!V|)PdZuN@k|=q!L{?MvO@7E|9-E{p?4hoa}VIxIQ>*-f+O& zMLb2!0^#9Y3Ij1;B9Bop68-D>xQ zZ|HFGl;=kB~RVp7r3P6MpJL;Bbd z5T@%q%?@1|Mr;Bv_7qf8f=?!}>V(6mc#P3_#w3Y!XqAj*$uF>1cxe6gqUD>{+m8vw zq0;lM2YOO^axyaF?N8>fusu91zb9Bvx{thaz~Ul7vqzabr@y0Ca|rDzzD|}}n^O9k z>BUzRzM7i(!hZp=V2Quob{t)oymX8?s0)h^Eqj@B8W0bS_qZ4ys%34D<3YjgX_nTg z+b9v~a-gqUxuAtx;`fI_aGFno#*SGT!ymzP(>(o=FXsU{J%>;j9h!u7Mr)-0&_T@U z6j=6{%ha)+qq)!AJ?+|Eg6@B4!+${Bp!WlD{uPzE==kw1nt3(GJR>U|ZD1MA;FX*r zwMo{*z&g?TIdSoUveTG*Zr9ScIJD576**Li>%v50v67w3$CB&E5zY4eK;lDff}>Ik zU6~N&<3q_9YE(PXtiWO|-5_50D)caZShA+Az zG7uweY-cqa##4}CD#nbF-Rt`?`=}@Vm5$pxSC10qRE!rG{$@%P$6oj+Je$kSJDX`a zW;#i+bw*wCi%wwPU2aE*i>kauoqN;MmwT5YD@|1W_O>qkcu3gt`?ZlNS?k}QZx{Lz z0s3u`&i*}u&lw8iH(Hf~ly3V{Q=Jhv``(sm#@VN0U!ab6j}U?9)(XEHozy0Pgm#}Z zbAnv9ef`jqjWU$Gi30qM+_B{55g=%r76bjKdF_+W(mPBTLDJ6uOuqlMQ3OTt44sAH zdvl4Q)${r!1=_B)OdEVXXN{MN-}Bh5(BiR_;YilAyn?6Wo9W3?9*G?-xJ79=A;T1l zW!lBN4Bk{d!R~mI*k5z416~-vHu!&5#lU>~7%lW8q_DEYVdE{*K*V)F_b)Op zqc=8hV^ZVLEXNyid+f1wdAnJKFJI8CFd~=ORPvn+LS);^Ep+aa+%W0u@Zgb5%Xw}P zvP%)PNE0L0hahWvkAUuLxAz{288sXgqU#83S)%Y+$=Lcy-l!@tmzh*(|LzR5zZGti z9BvNe9_WK4bZ<9+ob$&&!p8;jvwY*lsZQu%%=)P}q%@6==3)EWq2QfunydWHU)|2u z1*pa!ncPD|I?BCnQe&$m7(zJ9@`HUeX>M9$`+W zi2^XxLcY0(|;ggSP7!8D;M<54Qbiov6>4dy4&Bj_3mJKPh~Akk1*Scj2l$ zSjgiHPfa_s6mYpG#MPw#Nq74num1m_XlTEj`mL;|Nevdc!1MT%+g`&f!><*%vMQxV z+v%SM9}jX%q(A9gT^1f`a}E$79gQxv`&?5^f;E74%BHx=ndRbOVx4^D;q|w=o2VJS z7@d^jrSgam?G_X>E8KDZ9EpDKBkQ7uNlQ*AcCsGD&?o4kknw&Yz;GXsU@GwaOM6!_S+j z%%PZ4vN0RGVS$iAMqbP=4I}`h@2o?2meGhvb)zL+mxwHQ?(n z$dWI$e>SySJSAw~{v~D-+g1m!vb9@~c+)T0np_q+zl;HuV#n2?MGB1b}tdk&IV6rZiPut=nyONHensHm8R7ylzd&SUN5c0b;^P5UK2zjtqE zltJfw9t>qSD;T0v&4IMaR%TW|d1;hqSM*HojuL=5vIBZ9c!!x|b+A2JB}t};Ykr<1 ze%U=WF5u$oVb{KPuFwLx%z_-zJ!Vp)-C3S7imp!pw-{zWFvvRs_!|H=R#Kt)=>JQBvhIKnKY;TLTyjIEl%Joe3waWkXtp6J3CW%<`be`-bQ_k?Z zxV=6szBWbT)V{(QQb>0BcTpkX!|8hhU1I*{-bLo;&npyCU=iVSLVX&H1z(2`l>%qp zw^c1Z;_EC-e;ag`Z9S@U8M{M@f8RaN;bl~UHV4)0{uB|;pIDZl6|02n;cn7)%TKaV zeS%`}G$2M}3C(`Ds4a8_(n|8$cy&DQ*?lpvpb6{;^Oo>Y@-WGwZD`9JWBMqEz1Fu< zy_nXcT*SFDcAY@butp3!TSxUUCVU*fl!)kJ+XU%< zM?YAFvi(BE<|F=onQ|GWt~*jt4}#M1LONJ%$v>f?mbXIf(-N6hG1#qOwlw%U?&YxF zuN<4bo?3jR+0kt4XidvMfEhUi-;dn6YOn&pB;O~3&l_==8-a<_h`(0k5)u0{LEzkt zwUT-`75b;b;@Y&(j;Xrf1i}h)-1Q5LC!*dawm;?KxWu5jolbR9Ks|f`behRdQgL|9 zUZh)LmKmrNciG2EgCrTI!oLgZImH1?2H)NM#!w7Qaj%;YWSoO%BdSBhQ} zUBC84dYu8zBLKn@^VMp_-9^=SqJqBUKs%x9P3H2Sn#|v& z#7eORj08PmJdBjG3Yj^Mw4NK7tQRydE*wr#nSj$7gCA#IKbdQc$%&(bko64{?V7!P zy=?V6htABlM@L3M7f(_0oi$Z7&;@2}Mv!7}yxwFd4v=kTqeKNiNQ8jE)q2x~dh_hK zM*7WSP$;*Q;hbJ;y;TdCO7AtxcZ)|jzE8!4bJj%AEv50Au6>)`kq@Kl`viy_Ey2E0 zkUv9ljiWmC#=@ktT?uN;lP0mD%*${9>zfYL6+tGk%<5CKvu&!4PWtY&L?H`UW0aQB zB|%-h+}d5Y-XeV3g5Lr55IgZe+VMN?X)5 z_`G#=Pbc;;^+Kqlgzs4>n~^cys2X~|h-@}Te{q23Gg*!_xlfwvq}_2I!C&m%+#k>x z4`+`35_as#@EcCrbybBaef*z?8E?%(4+RlF7NwAH70OF}Qy^9K8PS86r=tC3Uvh#% z)RA~d_%NTH|GAE)DBK-+0THYS(Cqx-u7{21e7k^5N-f1>OsTjW)lL&wp%(rPwBUGZ z=i~(C@VjriRJ*-;%Lb?|!^-3s}3b*HlL#&@3(+2eF}bodbN z5@JH95hHS%4htiLr<|tez&pEN>UeHnT(8-BeRH#-FoFxaJm=1SAK`HqxB09IcLU|S zBKy4^oi8Wf;`jX^B`o8wG%@X-r63d$*BjF0aY}3cUgzD9cG-}8Hh0)c7jfx%SikR* zS(*L(i~rn3Be@!U_so;mD~i?;nMTA@PcAsGcF(CiFgP@?toZD-^ZXN9_hoXaqwANg z|7I%uK5h}+Bd+%rIMjh$LeaEuvJ4gSI`>OuC*W6B-o zj}gLWX%Zs+5&PNW6}R`C^=AN$@3$K>cG_D+IFkf6Yd$|lx`Oy+h=lg^tklo$mMYb$ zE;fYJKM!E==vo!RK=XBO7G6rTnclGS_?nYOxsJVv7rbZGOqSa~|FCL5Pn@o=2e7Wj z6Ycrre`^8uobhn<#028BPvgp*wA+7ZtOulA^lxGkP{4?ezy9^PEl0Zo1^_bvDnR^E z3_ssRxLOm63n2t|V(o9uidbWBP_SrUBJg#(jB$QMbi(|^L{3l9A7nS%gtAJaEZ7v~ zw8TEw-cxiw)sjE@IPEBV=&m(FA0&)Zh&olp8{dlPzT@eF8mqx-9SD?2y92BVqXGM@ z72Y7Z;gKO`F~nub5kNxMR?)a2V#yOe;S_NCIY#kSZ?O9k3Bv@Z*>v#o@7Cf#+~%Fc zjJ!YVjl7b`*645lKJ)==%{k`a*G{YL$@HEBi^TeG{ytKjl<$1;ojN)(0Z;Bu9nBWC z1j1=Xj7Gqx)y0BYB+dX!d_4+U<3%ObGc14gu9m0)&MG|ifef>+SK}J1jlt~VdQrk_ zi432K_QYGsplZbR-u>Jx{DHHZJ!Dtg@kDDnR3w!vJ!+Sn)jpZmqe^u?Dng@%my(k* z1K~0)wwT%w&6p3M%$>Un-6jz=IpfNRU|J1T^FZefoi3Ldi>x?d?~8GJwrp(eXy(rK zfw|O$yEg?QluJDz|%(6DCo~vUaUwN$?4sA8h8~FI$7K%XQl~l62;}h>?tBIFR^kR5L&r@S{zTtIKXPO*Xn4f zXm(|DR0KA8@9Dp*vZtsJazZ&QM48JouQ*Mg-u9?ME!zz!_*wGJ2fV77fRPVtNV?29 zjoLHLk#nr&+kt4*@5FAM348um3qhxqfTFvW*q^5kCNl!}Y(~p{-S=S1yJ7OK;Rd=_ zlRdYh<8<`ylZ$hNbd&Dfl;x~BtZ(BC%kCKed8Fv`G$*Iy{i&tb&7q}NYaOsKr-3E3} zdL6^;#`oP_!*H2s=f&PLC=pVq=*QUtzOc8e`O{QdB^TA3JN_m=#sLOp4Ql(e0J^Ck(R*m(%1Hb5TSMYW;JG9Qe<9tjt>H;n#)*ihTF<xu0_OM0s?~PGWlb+@pklQ))7}=|(aaD{I)6uB;a?d%uSMp3|Mo|=Tb9Vc zEtJUlX2uV>LEJSAXm@;ys@%a}@%kNdx=KM|%Q-y@wJt?B%z;*TiVUa6IDdZ2dLq-T za=zq~vZnQ|{*e3*XavL+Pw88U2>69s?TXJ{XB{-2dwA`zdkFnWrh8&VjDre{!Chdy zsS;$GSL)cUmHy9SwH4BxcppLV!dX1~?|J!qVXwe!RgnnUnwrrsMi5OJF%u@-je;d! zRuxvDZdK>dPOW9)1A6<#gp~X;3{}CBD-(HpA00IBhF)qC6x+IL)-N~vXv?Tvg{(Uv zar&)a5;2;S)?TI0>$FWo>?^|r*@#>W1XKh^g$~B5uEKb-0LI_3H3bU6hQ(I^_!-rE z+3{BX7f$P%c&YZA0`ai(Y@34FL^+3?=eBN=jOA&h;^IBiODrPAglL1ly>=(_>lyj> z%;_JQOa|5);+p-vrk3Y8OErtsW_vA8?FNEX(+!PYs~8j2l%J&JxxnILAo%9-RoA{? z0J2qrLYvvoOH{bKmcsE`LS$_c3Q7QP6$v@O1MaCVwQ3;wL+A5zQ!f|{wpsj5TC^<}tvq7#)8`oP@w_zl^#L$6C!6H&s5&IU1%!_Eu`79HC z*YKHzsJH8UR(xHf{*Ku^(M}Uo4hY+l>xbkwz}!mGS3z`^M2BjO-`|Uod_1d zY{i!GoM#lx$kqMAobOUm-*_KVrA`Yk-ai&qBfodyIZ z-iDwAxkSWRnjt?2A0%GroQ<1gz3}qv9-EtoZVNeXwA{z*AXc}K2yMOLxMol1v+t=( z;ZD+6mSR|8o~nMR;5B*n>)mRTAxaGx#>L*HvKKS`wl-FEm*xag$wtUF@GUDaxLuBk zm345|)-yoFv3sPv9sSLaVnQ4t0Wzokdvg(9)U;c)+p;^r4@>z`RO+I&XE0}&}5m$Mi|465IA_S+|?i8K?| zAjE9+PT^B(Wk#%F=NQfb&f-iR>rRGa^OB}rHPv9gVI)K@*jF?2K$BZ^|MJ2EoJ;2H z?T1SXms@fv-K*_8KxnKx8{n;<=^h>)8L0|Mr(=Kr4Q-XlYBZ@AP8k{Oih`oKo+gr%_ef5eU%EXxXW(59Ae%{`N&_rqb5;9 zd@*Q$y8q$VZC%zXPR`v3kcjjlFZ*lue->-Zv)L(^*9{epCMU6GH@L{_n(scB>TM5! z({6c`ZOhh`RsG09N?HDL#3F+U@VNiXQ1>1L8@HIdt7akSfg3Yi?pGEI;>%{s!s(2Z zuEjyi9T#f+@{!*gw7=$=EM?#p*YGA3nC0SNnmKvb**h zpKsqGCptWJnCz`@F$~RxukRb90Gi6~OFc%NA?`-iy$Gn|#mY}s!Uwvw(nM=LXB}f@ zv>F6Y4)AT6EN4%}$Iy~J&&8vHvo({Gti!&iSKF0UxhB;(z|H)Nfn7HE4x2c@9ZT9D zGmxLPbk8FisAS|DEbecEW7wYgGf`6C1GBq0Dhkt(phvJHo3YE6QJQmgWX@4^Y!GuJ zO+(?_j&UxRR>}Op9|IHA^rM1>#bmkvo?U*gcncA&-SPU!m%BVI(c9HY$gbhGlWIv% zQM!?qqHF=aqgC?0EmmOe`q8WCE={@3aLZD>U;vb8gmQ!lTpeW;Dlq_d{KP`lLc^3V z2)}>qvxxjP?`4uHu)@e%B~13Nn+ZsTpH(UP3%N?_b%(vSO6k2*PBVuBaMrpBlH&Z6 z5}1u~`F(N2_#Vm!>itlD_0Xv{`y|;cSJX{dIUZFXsSuOAuGI5>Hu8F>a2B-^UzL0H zLuSDc|I@Vv8DMsFdMKr?=65XXtfZx+@aNUZfV~&gnTZdw4r9e6LqhG3{eE^UXGjdhr<~7QoN-o%Hf9Q(FBtgSjJ!1Ts0au(=hQTQLDM95 z`^b~bKhE?W=otH6-EK)idQ$oj8t{9Ycw!(M>r;=MQp4oX+^N`8T%^uEn|c3UWAga1 z|MXhP+Q>*D>!Pmx25S6$j<(*fc5#jq>bjWs`F1dm^VId~;B`IFNwU`j%v}~ z`L23u$0sqJnL5|hC1)+#7k%;~oeQh=O8xzF;yPm&0v&m#i*3}PepV-_kUokM-QYzM z=4;}vb|aAK1>fu%eNX9S=o37EG8H!L&pomPjAY!ld!Hbk%7utke3mcOI~@bNgQ-tp z%z7fSknRsy!fUvxFB)2yS;6;)Ug&ZzIUZQ5#;+)H!@XfdR_A(kxEw#g^QG-{{%egxex%!qDbK;hDp}`pUKASXQ zfs&Vw<)7a`pIz8BI*}|I7F=!ZKr{dK4cfqg&*vl8B4Uhw&(N+NH_bS@(Chc*{^`Ju z9oz_V12%tTp?nD7fhKvO_}Z@|&(Qe1ysUkc(k^LN31Q~TKJdy=Tr&mpZ6?~UurB$h zwIUS}<3vY}*o$`Hrq1QPOG@1)aNg+I9cImhZl5a(re4sNz5fGPbGuMjP3>)APtT_l zUw?R-|JP6G6IWT3dRIsg?>hQ2-(9A9alD7&e08ti0dV9o`4y`eNNcR`x`t?oppqc4 z;5>hFj`d&R^1*<-p%r4suQU0Z2VW;g%R%-7&%IZ^ECTpgKfz03%`Vv5r2>CaMTHm4 z1IG76en~Y;i!Rh;yMr{sa~z#(cfx@6ZH{Neugbp_a@s}tdB$RbE|0+>on`-QjAK|J z69*oxfOKTOD>qx6!oHy&`DO_IDKNpXr9j;Cd!sEUcdt zY&Fj2nFrBxF#p#^jcXeoa&3o*_#y%w)1Bim5RWW+L-=p<_(0vApLf5?UlX;^_Qa%P5#D*Pn_LTE`|RHx`|QsC zo^A{SbOhJ+mJv?qkC+~xl8;^ z-CvbLoA&+DP&eR^xX%yj*-iVQhcrg~3yC1jC?ukpiN8M-XU%MAv&4|y=UeNhQ$7Gh zrLl&L)IbZRqCwL0cVu`o10;a5T|Q#9=|k= zUx|E~3%5w;2`aH3$FLTJAQpXbKMXHjaD8{zs+X?EeYJnm(M)&IN{PerCP?M)Jg!w$Q@@#9#ZBv}v?s|H z)y{ji1aQ^zE2kc*?OKNSi1G_^tK9Ps)YP3c@_mU@m(nMK-id>lvwu)Wg6!`0o0C97 z@E_)W{CjBv{d>*~zR@sW#nQWYExn-N{FR$Z5&x2@ zAwk?V4cM-;S~C!`&k`#3&$3J>=04|ReS!7*b>vRRXEQR=@Am^Q%@kqP=$U7vrr|ORl`HeyF_e6o!XGic?-^kJ!oKB6G!XBbg8& zh9*tQQ`xYW{{aK&_U>>zYTTDSMxe*r8^*LqRvjW}TlscHI#s<{B9F6RAp^Jb&I7Sm z2Se){IM_Pe9!z97LP8-T>sm4fmR`#X10$TPztp54JXRY5GaiJEc@X3T-7?ieBD}Sm zRulXqW%JDSrsCH08>ywkNp9s^NFCLaxa;ieY{+%VHj-Pe&ZDLiBL*EfclG)b4I?GR zcO5mJL_vj^bo7@PoxGa%U57yB>#dOn{emL>1jZh7&NnOXh@}3>DL&;!>))|Gh~z&u zO8Y$cD+jl6H|3=^EcudgImqFCN3qp7P_Zn1badQtf8q7lyZ?4q4K#5w( z1|xF-yO;kCBOmyQ%jCt21ToQg(7Z7Kqqrc%Bgl<3O`KF*cD)|^YHZGKUet-(_r=c_XoIA0-Yao zBU84o8**$J7Ul?>oEI)GofI63x8KmMrmeHW$P+`|=VA-^sR|oO53GLPS_S^m*(+EM z_m{&aFVB$taog4|`}_9`ZWxZlQf6P${v*m1MkQqAc2fXK(aSxMR<>AKI>5lav1XatC_mU+A|?KRQcPP|0)jX_~KV zNleHFb@L{rLRYqTH;YtpWPhTee64)+JKoeRmatyLb;W^ZlYHE~+<6GTv;A_6fR*z3 zAcx<&{==~I3n>ZT&Tn`9N9PU5T+__#2srbY8&uy94PL%*h z@;p-HO%OEYe}2Jf`Ew=G`S?+6M5d(tMaB}x^q!C;V$pdrJCx5iu>2sA`*&K71b8U# zA|SgMY?Zx+<}tWVv5(g*GVWJDd~Z?`&v)-j&N&Lar&g4r4!Yc&Ff&Vpdvk6iJ(b=R z|2xqAb&8B#O1=H8epY>zo^9v7z~_XR2%>F!V=pD}Qauqfg8K0T-Yv(MgRa2=6nZ{e z(QysEBR2+EabqRYVFt-;zA@8J8{6VT#$;iWxwQl06_zi*#3n!#h6+dD=;T``prI>l9b{QQ}01AWMpqL$V{6$eVXhuey;_g9Dh@lfXDM+ePtqooQv zT`1zQ2ZlYl6}(4oi#n<1Mh&B;e3M|Gcy4C#i&g1nW}UA=JwyKbyY9CC%$PS?sQ@J* z#MrKqrGF;r`U^T34ouO9GyiB^c~}e+2=J1q!_aYY-i^pNmJnZCGCl^C z=x@^*=HRE^K9k^VEUto#8u)AK3+#Pz@Q%->9`x*qfF|GG>N&T;Zw+;#bzr`m7rsGw z9v#$%Ezqk>yLHNdFdg(v(GzcPZgJW**xTp$=bD_~dPng*E09+pnC7!exOE8L&p0@E zv_xqoMiCfFmuPUS&;jLlIcZJL@?9;kyk^l;()#*+7vmYE;LG@dwSQaO+)c?4kKC?^O7%f4I9fVB#__SSYAE<7F<`IIK`&Y6am2 zAWMBh=XYUC{|OF)0TtOi;k&9AG&fpt9l03@{IGNy^Y ztLv(3%H?78U>NJmj$xRkno%P(c;aiR(L&9cLBEUxPX0AG#8vBLfeBxhDzVH! zK<*9hRs%wJUL^d<^(k%PxolunI77_DqeRQLbV1f=Ggsy{Ghypy>CDWBWFh%poIIy72BWE=iBMGl%P?dc(_s7s@+dUR3 z;;nJxjv8Bp1XHm0PGg*#ikJTHyF#?qX+>=IQ6Q~FcQLz=k$A!^q}+Db|eh1W?gu?yHvih*i-U@ZZ$gw_l;Q8TglOtAc~n0aBy*KfD>$n#h>tBz_qz|3!|^H=??#YMp-$(KXO)5$>3^*4uVX zntC(3GMcx4J1p)kDZs`-=@N2I}|Ekps;7!{r3U?Ji`}IE)81Q#McH*>!vhA22+~rbgh+R%NJvXdcXxLxAT2H3UEs)K?>)LJ;mapenKlK(8P*C5p=WVUv z|AWv`-@eZ``7W0nhEJE4T%AEsM3x}4nSVb`&zkUrAFMi(Xs8%>d;x`l2vfjAP&vzb!PGNY^Z=|1UQkP4| zzu%tkUNr@Mvq13|aOQ7fCKht~zW7Ta zH=r!m?#2{hV@_vu_=2jZf{Ix2M=KR_$s+Y0SX*Uu3asqV*k@y&IRC0-d}7*J+1>zt#`6!~~URG2lk32hGF;2cDTUc1`-j}+ zVNV&;|G-PxW78il*l<8Shm7MjO1OwQrf=@F(=(mMu{atV<0E_UO#WF5u$=iL^zsRH za!p`}3z}!ulKR(vtnPhM9++v90lOePF}>W!gjL!5-obu2-9l5;n(vtTpUvyM^|a4Jlj)!)XpkJ-5px5 zKlca)zRM6osy)!JrSXwv1a(|L?Pkkd^0?LN(?fxDBs`4)2NQ<1TpzE9+!L)^B~|Eh zV^dg_pij&O9=F{jc_{kG__(v#Mjn6r0zdTg?-GG?4c3ZN)IVx=J`UIoE>`+~vV>FC zpAg*@fbQ@HNp6X&9#sSUR|$?QKlhuv`5mRky0qN$x_8PDB>$mbg0vB8lytX8JG&kZ zPIAiaTzXBn%+*Z|F&jS>{dtQwco%IpLH+L}lv)EC;NrqBK2^E2J0`L9>4`gi^RBz@ z<0pZayrCy|r@NjmL>8nB?YLDjpe;S7_I?X{pyFiCiqAQShV?)2+@@gij$ej!Lhm!w zGoI+j_t!zBmZ0+il`4kk%7zx*P0UMMc%8p2w=FG#2g4Y(%Vz$6duQ&FTx#6`uZkIS zEyh?rx-x4GB%k;r<1owrww|fu2G{a>)9$9qiS40cSFhdjCidu$ezo6Moblh!DuZYu z6L@@xCP`{%YZSgM#0>rrs10DnK%eKGSl*btt;#?2T>fM8vBG$5IcalnN-8lB5F@O6IAeT`-k zvWS}hKNtm+%eIfYo!x{hyp-!$3$2Q&n0-J-KJEJCyl=bB>)MEJ*urJ`XKRzaiL z1f zO07(+)6LOqW=^FjU7<;MtMhL_`Um|m3Ha;L&}`^8&c=tQhh#eHjO!uM9Z@_pGW~Oz zi=@xW?o6I6JW_@4Y(oXb(aoleOPih5BS%NLJ9~nP-~l=>HE+ug7(A*5Qbhu#ehJoj zUUmOVApZHI^9^RsX)9sBD(B#mO~%^$Ct9gJ$%ntIuClwxp_v)$?TrF$}Fhxnd`JXD{fAEHkEc%JD)x1kN{~-3C zDgXPst$7?$O6A3-oSsv7h0|9R?pXQsgBK$!PXS70r7l|h=!&`$9Qu{dE(KZLzVD;{ z9MZp<`R9))KS%b_5yxKfolEDaQt+iM{?uAKi0zh2J*CyOaL1&d5&W(4i`f zd8l^7Nf`>`BMqzx2M@{-Q5l5Kmy;*3ncNFE;bjKsV8V@}rSNf8UH-e$KU4en_p+QS zQ7NgaqK;eic%bbe<14?m*w1Mkb8mSXsZ0y_J`D|RTsFmT?d9x=v}W|ce%ltoDWiDk z%_WxF-I4Lj7AHl@{JmR!9zV{sF=2Y%Se6QkofjihQztshZ_|B-;Y_lQQjy~x{# zl8Doq7}D3*H&Mk(Muz1xJv~h}vwrc6mM~pJqzwmSMbX@x1|lOP!|dh-a&OWh13zwo zHU%-UhY);5?JzsAPLpC>T|E z;CthjFJUs|uWs_|;=X+Owrpi>1e&B2V$%a7nnVIMQAyzj{jSkiS2js(Zm8IKFs1Ds zF7N1gA;(aGF*t)}?zT_xJ;(QA>?bM7Zs-i-S5M)If@uVSetIyOvXC#GAF=p@gHJ`I zRsgzwTh{aZF(n-1t(=348MXOcxMV|S@T4`?I~EK4v*M+;_qS~+2U<)_=07vD-8lS# z=4q7nw~nb6ZI2Q*r0gR)rfq&xmyEpp_H`E9e;e)Dp=O4v%0QG<(n)tQoHEaGC^x+z zAProH;rkDmiwR6bp9EsQ{+&0l5ioE5e zrpB(UEQbuv&5^jo!GW|yF>-)Sp{fEc=pB7f>&iKjK-`W=AhEo78;6WcKM+?zQE`RL zbizfV=;Oc|up(!%;UCQiA9#s30M!19MrEJnhGMrFcl9$20NrHhAPU_E$B`5 zN51}wK;=tdv+ZTBk5pmjR|qR_uXcT&-uuCw>G|sNpHOB}Dp4?)-pk-ROT7}&bl1`6 zlw>T`i4OU(v9Yy988|Zk>M}MdNm5c0b#HGEA;1c2eaZly+*+wUEdqb zP<%$Q>J^@wiJBkLK!RFF-%Ip;%FBTa4J|{1jtXtwXbFA@2LG{+p>)K8C&I|B&+raF zzCp}ot5W05n=#V9QiMm?I24-_5D=vBx|FGIz7q*7EDj%kCvL_!G7n$bLsBp1yU!?V z@*B;=uy8&HjVSp3CNh@~I=my?F=dP7N~+&UKRxZ8`LxmJb7I-ylvDmOI68*btsL;Q zGJ5U!TbbPhS!I>KF8G;N`d_?&?U-v~VG_*rhQ{dgo3H?T6R$pPjs4O&X?(|o%P1&$ zD*lfIX_C0(w~=Y1dd4Jnz+0-C+bYp^_qz=7)?@a&TcSrt%2qn%2`$3Y@*@V?lCb9Y z>)+3GA)q>VRU)Rd(E}aZrf*O1V!}I0#fC(Nlr+Dh`k;B{!>OQ@u&E9nk)xA#{gbFW zk#vht0Tg_x+d%khnIxPk0lVe4(`~S9w(V79$Gw)eU~CCl*$6WowtoN{AoR{@dkzMG zLywLKl2A+W$fp&t2?_X9<9|(oM9`bqcXoF6`MIGk!d@S>ZOqanO;OznP_m%yAt8_D zn?8lmpWc_PdMAupt@glhfj>3OY$|8nD2l^^XG*8H1F!4aS%1{k3_MvbEltJFNon5k zm|{&V;BNPm(zOMTxZ)`RG8K^-1}tXRfvc<53@qWUPu!hJr6}G_M~mU^@V_7^2To>W zViJ>@`qVTF7-+ncv$NQ1jRy}NFz<)AQ(iISb#;711Ue*7CK+#K9!(md7Qc%W4bfy~gNG1c)+szrH0@28!8&gb zK(mgY%?-qM&cUHU5pfsfuKlerm+%I*9K!+q8=u5c?4LVm&n_zcK4>x`6@%VsXH5O8 zKLW0s1H0k|7N&K&Sl@GIuFRr7kHtxuCn@;YyY(*Q4-XG7uagynFgnOOg?b-(bZktk z1|1;4&7muwqf@}01`Z=OJp$UW7*}G1x5&tlkFM{H^(L|+h06nTS95%j>xvFHvj#2r zXUz_@Be1Oz@|mitD(2nb_nuJ0>GzxHRxYW$;qXc%3H05|+XsighwZyk^de_>d0di= zbzG^=EQvYK_-am|F>LH;6=F6X7OWRH_3e>0S?8VyPANXQJNR3xr$O zZ{>AXKV$^b+d5oojoNcf{2PX%TnPb$Tm?MAFDNgMG}8fi#vz-=_qgTrW9-_cKqCFw z||}!JupB;O^x$11f3=%%*^k#x`2T2%2okW z8hJt`F{>qhPAlns4b*s~5s6oL6Hh0}F9BT_-vQfDM4QYC71goXx)Aw&>UhlNbl#jj zE=IT@_*TQ?qHe_cC3`MBk1U~Q<7Dal+V7&i#k|Ewdni?@Rv17D3l$^wYw5*yBAYNf z8)1a~zvl~=GghV?tfe4h!As?JVZi$EN^S=ZSFTx}KL$k|U(Z6H^_RB6A9iS>23tUuhB8iYiW|4 z<%~`v9(S0jA#WPPcS5Ecmz8kNqTc#1ozIP*i&1D|%KgVq3^W?U<%VK-!==FJoN``xFNI1|9gH!>IqufNF2j*AF=cfig(AyHIUzVECq$9c~8jXU^pjZuu{ zIvVec8Lz#+!-0yO@q~EF?WufHql}|7vIK`E)HvEnYP}`%O%$!|_Gn?JGhZL{;cZ&- zz2b=-%4d%>6A)JK$>k1vLqb9#bR$!V&;|g04uLw&viEQ1N{T>KHwdbu!)+6P!>{fb zp!wGUa?L^1YT#dA>3a zdk$-`);1fPnksbK5fy3ww%L4bOmO0wiHJ$NAst85?sbvt>+7%7L%(#I>ZcthGwBJ> zhDi#2}Iv?jl`^0AN4%#_R9U2sU%B#N<{IWy{BP?cN2Eo zp5-qWgy`xB_^%tDXEbG>uLKjQ8RGQ4+Sn&B>`xLwR3K+#x*D^6Q#?$V^_)3WN@27U zLJkfNhK(UL+~XNb&6`TML8RWUeZ1skWJj4$XbgtH1>_Mul*mR^4M7_Tl9!!4lh`fr zo~cJq?t(gSm^YPdN=AJ>p)a??dRr~$Eo<>AVc@TyUf24wM3|U$+E@Ll%X>kEex?9y zSUAEz*Tr=KqoOG}SZGeKuC9KS_KJnYiJg6z=VR_qT@DK+s2ll!;Ohj*V!uKB;;v5Pb&0sW zKJTdIBvVyYHMl2p0FQ?@3&^enjir?GiCSc&J3JQSH4bAm)9h~H-BrFVkEteiYAv`+ z5YeZ&NqBUtjEhs(U*FI`jz2E@jp@~Xd+{rWa^oOgUS5xcoxR$(3#WFTjdl9DpiL}(`E&07^p3QA^{#Vp} zJe}x_rFR>GJVMlhisD3Xp#{eJs9h@za3+zmY9JiDE120!9ORmrJ#bT-R#f=f#>TzO z$Ju4i@GuGHWK+0)Wxfl7Tns1t{5-N1W*2#t|5xzA=SS36DD3nSjASfVUWdO>*x1>T zj&u^q>V2;CfM3Ew&;Jp%hS>0I_o^cgc*61L{TA@PRBqcvAuwtCQwp9Rop0(NY~a7v zg9hQB?4jxt3(9)^!A$D^tl*|)MdFA=@v$O|D2q*}eA{Qvk@#fT(K=(zhnG3xg6TH~ zuw7qvH{U$633(WIl`C<1VAXQf)KPssPn=2P-3^g^G12 z{k(pI3Y4d(r_B3NU%qHct=GoJ#o?a!P>V&%v$L}oWq~Nr{pWht>w{X zhbad*5qM#}w_j)RzUz~2q)ax{;F_HnmtI`VN7%`tr$?xl@7jpvueRee? zXsvluE|^W42cQNVbjjs;VGE>>U~TG=sX0gQFgE6k z*JtO+Q{c4`<4=AerF|7SUhR^mOA}oWlcwv^Wq2@a&qF*2rT8TzdXseunj?;Vr zn(|UXf;f4x_zC0i`W8aIj7s}AiEDjNkiOoZ8rrjlT*(&)&=k*WNuDoKY6y4%KrtZ) zD$FQ(^PJw)z$}p4c1|*3ZKw=oU6+KGP?S}1jwmR%PQhV=n}zvf_!-%`U?nqadlxI) z{`EJo49yV@XIZK;n#X`<>SWGvbw(mgd#&acIs9O3(6uqRzw8&!Q2rIE1jUAtUT$1O zpfQj7Z=^OQ-opJY(7z0sV{WtmO*Y{-u@fGq%8(FR=djUUD}GDl9MHS@Ye(>IMX*f5 z1d+)lB`04Fz;EOrh~QCEc>42iG_xkR@?`1A1)dDGm?(RGE+zup4&-=e`*Tk|$6tP9 zF_N_8btGVO0hlyLNJK>LvmpNaALFwoce6H1;r(;A4plfxnq4!@@bb2yt$-0c{iEWePO{nYCI|X z;*2m zZfO1U()cGVmk}uw$J@wgjeQ4H!8Co=*4DtYfDk;ok3#0==3yRedqZ*zs&P z$TGYAA3Pze$&Qquc;U#NlC$)Vlw?mRI($@()%H%1leNN>2YcT(#_NDy+SWvb=F;hM z$CPiBX_e-u*4`40*JBQae50roEbok}#Fh^5+UTqM^c!K`X;b-E>CI_)I{3k6&LwKj z(TXtw=ggs+GI4QnQAIwSv$prn=RIt|Y`*t&_b_PIKJ##u-vjUB9RiI686H5nCnlC! zgUAa{r=TV$E%z|mYQ+=85eT!%hSiZ@S;>Y+uYSMfPbj`}CSaR5murkZ5;8JRAv(9) zs=$vm^k=hsu=&OO{?5KjoYbog$O2`3 zICxoO$LakB-yFLf+&Pgv+SHuQ&ma6B>{M<^H*%9>5pN%R1uo3!*fN?=;I~FnO@8n1 zG+DkuX3^sBL2_Z&%DB8W?^j978C#%|oGiZ5`8sZJdS7rOGeq-=m6cV~`pZx}dNO)? z`apidS)%~Bb>mTcr=e8txTuI&vk@D{Vu>8LjhQ zK0Br!4NVhH%O>$9!g@a=&AgUL6J9rjdg^et4~3~vh2Xo7=+8aQ=Ujlxd}`Q@ z`;k4ebI^E#-VsUKyp4dN9g~4He$V4BD#*?L!5xFcdT+2@WLX$UB%_9maw6q`K=fy8 z?SxFbA|oOqo}a%L5fO+yKDGy*?l-t_0fWJwpKo@HM#?Agf=J=neDQ~o%k7wgiDg6f z-4KGDIud}o$w&&f!^Paftri5FS9Md~=4Tz|(6_XQV_A3hcG`K^?ngvRKmpvK>iTgC zv2L!f^(WbrR~nLXUocwIB*ca+Q))K!tAa>3_bDb9H}tihXc_Y=!(+HyZZ7QR-8M)d z?cqe6Wd7R;BzK?EVD2U+`G`afv!tTJPDxAeFH3TK{&YprQCYowqSy{-Ye0>vc=^Va^it*w{Jiy_HtB!8Buv%Xlpa8zH=e5B!8}b$~hE2 zEVuZ^FDFGpy4C{^dv+?PK0n$^4rwJnPrOR`R4~{EV1%P{;LjLvx8=VXT4bQJ=u$Ia zr?&9h^Lw_3i*EsNdMNWE9I>NJtAWesjt`QXn`>xj2s|-8@~`gnD#PT!ce9QoGD4<5 zE~ZS<{{YY=v#0D8s_!#4So#h4Ro@sUznIxR2=?}(jOV=3|IF6$dAI|uBB=C&3q;MV zSA?`_x_HRt3i$576x);NSM{9bg>5{SyTUh)Ir&4KvxfHU=3ecjmVJN|XiAg{} zLqp>VOckkir>voNBh3TgMDaTWu5@xtw^KodMLj%t;V?P4h@zq*Km#(egcY5;H61SJ z-RIA)lK1WF5GPR8^ZbQX@`2`?o@U$CPE1|Le?n#_N79B$p2vP&P{V%x6JLXlh@)XC zMj#j#=iIM`tUcQg%*ru73;WE+r1+d0^!q484oy?RIBihPWOoJ|eoo3V5#LEkl89X+ z6<(#crIU+C9G;}Z`RqL?lvU)eikrcwKALLUk^|H?3Q9_Hii<<#1aEO_X2M&SYP+>? zFr$k11~cDTPW^ZQ>PVV*n~`^>qc^wX7YG%Ew;xe+awh09y$4w7-JCuka7|~A^#PO# zWFpH>iyFU&Z|piImSa+GoQ-WLIKkLjpA+@d*hX2uua|%k8v{ z<0s^sZ1ac3`)U{#}Aa~$U@(2 zWM{M>|F*x-`8e-C)V#p=uDQ%}zh>jujKRt4oQ(^K@cR5MiW!xFWUz1OnP^Gx2kAT+%&1rA zcRad}(a_K~Cz|i78nw$Qwk&k6lhVA-)M6CpnuE0OVscVah($$3w|)maNlHnH?N}L7 zl;h7G91If3dv=N&%7$Gx*)DI@CD4s}K+W_C91B znsQxOQ1HH~sma{JVx*VqM%+B}c+%MM>WMofu zUzlCWMWdpkuAaJ&&CUX3WFDKC*eT3UQ_pdQ`2GQ3pZ4<}m>L_4MLRCGAX&}U4y`Il zeey*izJluikxlEsQz?ZpC^5Ik3C*KxJqeU^^`Ea@ex8uTVDs0CBdmg6qq?A}Nh>uq zmGH$26-7ntd<_&|2<&Xe#=>%U+{VqO@hA|K^rdAhD>tbi-vf2G^1=QV>OgVF?oHdf zyGo{}1>>a}CeCz_7QWltTla&e^RR21=G$r(78YsgRnimQkg3NI*}J=zM#jcTBu^kOyEaa?TKw*{-@44ZiPzQDy?%XM{$GWzokgGq zPHky_D}}tYeQ<5b-mzqBYG^0|nm*Av-QALVvvrDkdV1#`GJvOp(#&vWLg*IH$d%V{CjpFPYP(d&!n=yaolrm-7h)qbNK3T{P_GWMHRQ z=eDRT_$JgFC;%ty7OV)#M2JT`@Ve1x6} z{BKlg;;D>`RMM&04;!UdUBMw?=vo(}iH~L2sy46IF#Fys7)E1-s?rQ6d3CM8oJ*dT*v?U{z^7BONH>zK7tSj*cDRlp~;$NhtxmD-O6O9d9)dk1B(MdmTK)wd(9eC(3mu*87rWWFJC)Z2`?z|5vl$nKb66u;utN zr4kqlo11l_9hci4TTNF=1P2Gdrh50`QKY=m@5HX6_0xsrQneClBrRR_1lI zvrml`FTov6D}9#7DgCptV;42EC%I&gg4VVG+75!8A^aKznsgLFY{O(*v)<^(Y zaj&T0tsH>5dCwD>l{>H%O?HB|dsmwXXpJHGX7ZpifUS3Md%4&y@qCmdo|M;QMeA#Ei#>z^*HQwCialX&a zt*i@F+QJ7L5k5LPny#`)prNH@7Z50mkH>RzbTkE{QvUi2Z4APa?s9#5c|Gnghb`z80qnj-Lcx z+@jg5a&FQSPv70y`N7GlDn}!sBr-B`VtcH(?`dGhGpyu{$r9H9X<1YA-uwsokDi1o zwRJmE;*`oSZ{H6%sS~7o2U4f2E;;Y4{e5c*1#|Nv?=xsRH9dXbs$r->S3I1eu(tLi zN3zUDe`?IYhN7}^9H2+Bsi{p$f>;p$d0?=oM;)X@=UNO2KY=ikzP&jdl!Gk#z(!I* zBsT-6nOj?{=;)-odw4i)4O4>d7xWuCL~0Yb?gsH4Y&pOMruLk3b8@~Rgiv}(LMc(+cpL({WCr?V76`37Flq3A1Dp&O z2WJzoe}EMe6Bg#?l0+PqOxy(i!mhDosyQ?QjPIDYfOxjNmccRwu(3<`4E zpXHvitTwW%cY{2l@bdDyx>$*HTJI&00IM?sK|0z(M6c7bd*D-kbYv$1>Y6ahrpxu@*ZJz6Qa^8~ z5N-^blI@|N!5Wf!$E|2fj%09yic!HAzzo5VNO&AOxs+YOSkCrl@3oS5?YU{Zo&=v)C(Zb?lDS)AeL0XP^cz9p{v*ke`8SCv0qu2sl zF%1J6>J$@0|FoG7E>XiVNrD~(s^DXQC4t2?1@-mn+U2TKQ&S-k5oh9PkdG?$_4SSy zhkCcCdETtw9(>%{V!^xm&b4mm$?wGwTO$Ai5GzD3r(hrWOE~aZ1*> zF%&dawgT|AnYdG(hU6fJrknYHMgUO-5WWcjzs9a4BSWac3i!M4P0E@_KK1cy1nTtDUBLyc4h*|$Do0YkqUzj zM-abdO=)MAd!=i$MuN^DQ z5qtAZ8sJWdAoyCtJr5`y5wQ>|1(i&B_ z5Ea9@E%v*;?df52ND}sJUNj)PoljjpXaLfA)(;V*007 z0|;#74Rh8CJSX?tju%p{uH2PXREhxm;Ix_7Je-`JiU+A6s4tr<2tz))fBN+4*p&}~ zGVk8C`gZ`ZRZ>yOvzn=XU}TmU08+p!>aR-5%D^7&e^G8zQZqBlgUZnK52H|fdwZN0 zFRcGwMN3PosJvVip@*3ne7^&gwU0il`&{Fx*kQ?hz-g61ppBGR*F1#c=#QR*b%hmw0?TJ{W1XYL^fX$dL^FfP*-W8n$ z_X3c!`%jE%EqFc7N&p8`R#PjSQRM@D)YzC9M79Q!Ilw8>*PI~n>`Y9$y{Zm1pfL6% z4WP9FSfO99;L8B-Q&m<*lpa7Tv2e;gG&I!R*Qf05{S)9gh!=P_OR!x?FB=C(-qMmD zAgC4~lWT2lB_t+hdssXZYA!1+9VY(~J*ah{(2fy?4Jpn}kB^Ls!dwZbiR^Hg*Z{MC z1N+m&fqw(HwxzKQGgrrw;VXJ?3N2S~YHZtHt{rLz-MO4Zjo+G=&qS$RPk zY<9Xm*4@=5FD&f8yt0Bn3%WuV%*+rvHWn5#P^AR}T5-0u{Q#=*fcI=~%zLK46Ia84 z;`*-nPMKfs?C!E%73Jq|L<~HB{5WdPdIC`8xajEPI_@50=p{Ehq*i*yn5^#Hz?Pm17H_iAWU#&W##;~ zs-mI-82us(1LVfo(Q$M$7iGzoD~y!@tR(#Y+!!;Gg%>begdYKlPp1Sq3V#sex4z5y({@x1_Epa!TExcaMCuRZJ`M<*vQT5LWd31xuQwbQkB*$CW7NXSPp zLUKJ!CSIhE=$i$LEtU^->oRKMIl&-6%1FRE{)z4$vQWl*Ik|+^rNO|bMBpSUfJn|1 zQr~xv7xu2Mu0}^jvH^2k8JL{>2EY=J*yAf}3Z$hK6$3-n(y~NfUmtI_|CaytYcY%Q z620%J$iN$ggatFfJV4sYd1ZRHchh{&S5QP$)T=CJ{mOLz0Fd<$fGADLFQGU{%q!0`4Bt=(>|N!VSkUz#i;`v&1+Vf|RVE#RFi15g11 zg|T>5juG?*1@gZ?Lf>_pNdNZ>2qaYR6661U^N$4npEUlF1mgGqHECS>=`_ diff --git a/doc/modules/comparison.rst b/doc/modules/comparison.rst index edee7f1fda..66451c0e87 100644 --- a/doc/modules/comparison.rst +++ b/doc/modules/comparison.rst @@ -5,6 +5,10 @@ Comparison module SpikeInterface has a :py:mod:`~spikeinterface.comparison` module, which contains functions and tools to compare spike trains and templates (useful for tracking units over multiple sessions). +.. note:: + + In version 0.102.0 the benchmark part of comparison has moved in the new :py:mod:`~spikeinterface.benchmark` + In addition, the :py:mod:`~spikeinterface.comparison` module contains advanced benchmarking tools to evaluate the effects of spike collisions on spike sorting results, and to construct hybrid recordings for comparison. @@ -242,135 +246,6 @@ An **over-merged** unit has a relatively high agreement (>= 0.2 by default) for cmp_gt_HS.get_redundant_units(redundant_score=0.2) - -**Example: compare many sorters with a Ground Truth Study** - -We also have a high level class to compare many sorters against ground truth: -:py:func:`~spikeinterface.comparison.GroundTruthStudy()` - -A study is a systematic performance comparison of several ground truth recordings with several sorters or several cases -like the different parameter sets. - -The study class proposes high-level tool functions to run many ground truth comparisons with many "cases" -on many recordings and then collect and aggregate results in an easy way. - -The all mechanism is based on an intrinsic organization into a "study_folder" with several subfolders: - - * datasets: contains ground truth datasets - * sorters : contains outputs of sorters - * sortings: contains light copy of all sorting - * metrics: contains metrics - * ... - - -.. code-block:: python - - import matplotlib.pyplot as plt - import seaborn as sns - - import spikeinterface.extractors as se - import spikeinterface.widgets as sw - from spikeinterface.comparison import GroundTruthStudy - - - # generate 2 simulated datasets (could be also mearec files) - rec0, gt_sorting0 = generate_ground_truth_recording(num_channels=4, durations=[30.], seed=42) - rec1, gt_sorting1 = generate_ground_truth_recording(num_channels=4, durations=[30.], seed=91) - - datasets = { - "toy0": (rec0, gt_sorting0), - "toy1": (rec1, gt_sorting1), - } - - # define some "cases" here we want to test tridesclous2 on 2 datasets and spykingcircus2 on one dataset - # so it is a two level study (sorter_name, dataset) - # this could be more complicated like (sorter_name, dataset, params) - cases = { - ("tdc2", "toy0"): { - "label": "tridesclous2 on tetrode0", - "dataset": "toy0", - "run_sorter_params": { - "sorter_name": "tridesclous2", - }, - }, - ("tdc2", "toy1"): { - "label": "tridesclous2 on tetrode1", - "dataset": "toy1", - "run_sorter_params": { - "sorter_name": "tridesclous2", - }, - }, - - ("sc", "toy0"): { - "label": "spykingcircus2 on tetrode0", - "dataset": "toy0", - "run_sorter_params": { - "sorter_name": "spykingcircus", - "docker_image": True - }, - }, - } - # this initilizes a folder - study = GroundTruthStudy.create(study_folder=study_folder, datasets=datasets, cases=cases, - levels=["sorter_name", "dataset"]) - - - # all cases in one function - study.run_sorters() - - # Collect comparisons - # - # You can collect in one shot all results and run the - # GroundTruthComparison on it. - # So you can have fine access to all individual results. - # - # Note: use exhaustive_gt=True when you know exactly how many - # units in the ground truth (for synthetic datasets) - - # run all comparisons and loop over the results - study.run_comparisons(exhaustive_gt=True) - for key, comp in study.comparisons.items(): - print('*' * 10) - print(key) - # raw counting of tp/fp/... - print(comp.count_score) - # summary - comp.print_summary() - perf_unit = comp.get_performance(method='by_unit') - perf_avg = comp.get_performance(method='pooled_with_average') - # some plots - m = comp.get_confusion_matrix() - w_comp = sw.plot_agreement_matrix(sorting_comparison=comp) - - # Collect synthetic dataframes and display - # As shown previously, the performance is returned as a pandas dataframe. - # The spikeinterface.comparison.get_performance_by_unit() function, - # gathers all the outputs in the study folder and merges them into a single dataframe. - # Same idea for spikeinterface.comparison.get_count_units() - - # this is a dataframe - perfs = study.get_performance_by_unit() - - # this is a dataframe - unit_counts = study.get_count_units() - - # we can also access run times - run_times = study.get_run_times() - print(run_times) - - # Easy plotting with seaborn - fig1, ax1 = plt.subplots() - sns.barplot(data=run_times, x='rec_name', y='run_time', hue='sorter_name', ax=ax1) - ax1.set_title('Run times') - - ############################################################################## - - fig2, ax2 = plt.subplots() - sns.swarmplot(data=perfs, x='sorter_name', y='recall', hue='rec_name', ax=ax2) - ax2.set_title('Recall') - ax2.set_ylim(-0.1, 1.1) - - .. _symmetric: 2. Compare the output of two spike sorters (symmetric comparison) @@ -540,32 +415,4 @@ sorting analyzers from day 1 (:code:`analyzer_day1`) to day 5 (:code:`analyzer_d -Benchmark spike collisions --------------------------- - -SpikeInterface also has a specific toolset to benchmark how well sorters are at recovering spikes in "collision". - -We have three classes to handle collision-specific comparisons, and also to quantify the effects on correlogram -estimation: - - * :py:class:`~spikeinterface.comparison.CollisionGTComparison` - * :py:class:`~spikeinterface.comparison.CorrelogramGTComparison` - * :py:class:`~spikeinterface.comparison.CollisionGTStudy` - * :py:class:`~spikeinterface.comparison.CorrelogramGTStudy` - -For more details, checkout the following paper: - -`Samuel Garcia, Alessio P. Buccino and Pierre Yger. "How Do Spike Collisions Affect Spike Sorting Performance?" `_ - - -Hybrid recording ----------------- - -To benchmark spike sorting results, we need ground-truth spiking activity. -This can be generated with artificial simulations, e.g., using `MEArec `_, or -alternatively by generating so-called "hybrid" recordings. - -The :py:mod:`~spikeinterface.comparison` module includes functions to generate such "hybrid" recordings: - * :py:func:`~spikeinterface.comparison.create_hybrid_units_recording`: add new units to an existing recording - * :py:func:`~spikeinterface.comparison.create_hybrid_spikes_recording`: add new spikes to existing units in a recording diff --git a/src/spikeinterface/benchmark/benchmark_sorter.py b/src/spikeinterface/benchmark/benchmark_sorter.py index 5f3e584b20..1f2dde3b32 100644 --- a/src/spikeinterface/benchmark/benchmark_sorter.py +++ b/src/spikeinterface/benchmark/benchmark_sorter.py @@ -15,7 +15,7 @@ # ) - +# TODO later integrate CollisionGTComparison optionally in this class. class SorterBenchmark(Benchmark): diff --git a/src/spikeinterface/comparison/collision.py b/src/spikeinterface/comparison/collision.py index 574bd16093..cff87e7a57 100644 --- a/src/spikeinterface/comparison/collision.py +++ b/src/spikeinterface/comparison/collision.py @@ -171,72 +171,75 @@ def compute_collision_by_similarity(self, similarity_matrix, unit_ids=None, good return similarities, recall_scores, pair_names - -class CollisionGTStudy(GroundTruthStudy): - def run_comparisons(self, case_keys=None, exhaustive_gt=True, collision_lag=2.0, nbins=11, **kwargs): - _kwargs = dict() - _kwargs.update(kwargs) - _kwargs["exhaustive_gt"] = exhaustive_gt - _kwargs["collision_lag"] = collision_lag - _kwargs["nbins"] = nbins - GroundTruthStudy.run_comparisons(self, case_keys=None, comparison_class=CollisionGTComparison, **_kwargs) - self.exhaustive_gt = exhaustive_gt - self.collision_lag = collision_lag - - def get_lags(self, key): - comp = self.comparisons[key] - fs = comp.sorting1.get_sampling_frequency() - lags = comp.bins / fs * 1000.0 - return lags - - def precompute_scores_by_similarities(self, case_keys=None, good_only=False, min_accuracy=0.9): - import sklearn - - if case_keys is None: - case_keys = self.cases.keys() - - self.all_similarities = {} - self.all_recall_scores = {} - self.good_only = good_only - - for key in case_keys: - templates = self.get_templates(key) - flat_templates = templates.reshape(templates.shape[0], -1) - similarity = sklearn.metrics.pairwise.cosine_similarity(flat_templates) - comp = self.comparisons[key] - similarities, recall_scores, pair_names = comp.compute_collision_by_similarity( - similarity, good_only=good_only, min_accuracy=min_accuracy - ) - self.all_similarities[key] = similarities - self.all_recall_scores[key] = recall_scores - - def get_mean_over_similarity_range(self, similarity_range, key): - idx = (self.all_similarities[key] >= similarity_range[0]) & (self.all_similarities[key] <= similarity_range[1]) - all_similarities = self.all_similarities[key][idx] - all_recall_scores = self.all_recall_scores[key][idx] - - order = np.argsort(all_similarities) - all_similarities = all_similarities[order] - all_recall_scores = all_recall_scores[order, :] - - mean_recall_scores = np.nanmean(all_recall_scores, axis=0) - - return mean_recall_scores - - def get_lag_profile_over_similarity_bins(self, similarity_bins, key): - all_similarities = self.all_similarities[key] - all_recall_scores = self.all_recall_scores[key] - - order = np.argsort(all_similarities) - all_similarities = all_similarities[order] - all_recall_scores = all_recall_scores[order, :] - - result = {} - - for i in range(similarity_bins.size - 1): - cmin, cmax = similarity_bins[i], similarity_bins[i + 1] - amin, amax = np.searchsorted(all_similarities, [cmin, cmax]) - mean_recall_scores = np.nanmean(all_recall_scores[amin:amax], axis=0) - result[(cmin, cmax)] = mean_recall_scores - - return result +# This is removed at the moment. +# We need to move this maybe one day in benchmark. +# please do not delete this + +# class CollisionGTStudy(GroundTruthStudy): +# def run_comparisons(self, case_keys=None, exhaustive_gt=True, collision_lag=2.0, nbins=11, **kwargs): +# _kwargs = dict() +# _kwargs.update(kwargs) +# _kwargs["exhaustive_gt"] = exhaustive_gt +# _kwargs["collision_lag"] = collision_lag +# _kwargs["nbins"] = nbins +# GroundTruthStudy.run_comparisons(self, case_keys=None, comparison_class=CollisionGTComparison, **_kwargs) +# self.exhaustive_gt = exhaustive_gt +# self.collision_lag = collision_lag + +# def get_lags(self, key): +# comp = self.comparisons[key] +# fs = comp.sorting1.get_sampling_frequency() +# lags = comp.bins / fs * 1000.0 +# return lags + +# def precompute_scores_by_similarities(self, case_keys=None, good_only=False, min_accuracy=0.9): +# import sklearn + +# if case_keys is None: +# case_keys = self.cases.keys() + +# self.all_similarities = {} +# self.all_recall_scores = {} +# self.good_only = good_only + +# for key in case_keys: +# templates = self.get_templates(key) +# flat_templates = templates.reshape(templates.shape[0], -1) +# similarity = sklearn.metrics.pairwise.cosine_similarity(flat_templates) +# comp = self.comparisons[key] +# similarities, recall_scores, pair_names = comp.compute_collision_by_similarity( +# similarity, good_only=good_only, min_accuracy=min_accuracy +# ) +# self.all_similarities[key] = similarities +# self.all_recall_scores[key] = recall_scores + +# def get_mean_over_similarity_range(self, similarity_range, key): +# idx = (self.all_similarities[key] >= similarity_range[0]) & (self.all_similarities[key] <= similarity_range[1]) +# all_similarities = self.all_similarities[key][idx] +# all_recall_scores = self.all_recall_scores[key][idx] + +# order = np.argsort(all_similarities) +# all_similarities = all_similarities[order] +# all_recall_scores = all_recall_scores[order, :] + +# mean_recall_scores = np.nanmean(all_recall_scores, axis=0) + +# return mean_recall_scores + +# def get_lag_profile_over_similarity_bins(self, similarity_bins, key): +# all_similarities = self.all_similarities[key] +# all_recall_scores = self.all_recall_scores[key] + +# order = np.argsort(all_similarities) +# all_similarities = all_similarities[order] +# all_recall_scores = all_recall_scores[order, :] + +# result = {} + +# for i in range(similarity_bins.size - 1): +# cmin, cmax = similarity_bins[i], similarity_bins[i + 1] +# amin, amax = np.searchsorted(all_similarities, [cmin, cmax]) +# mean_recall_scores = np.nanmean(all_recall_scores[amin:amax], axis=0) +# result[(cmin, cmax)] = mean_recall_scores + +# return result diff --git a/src/spikeinterface/comparison/correlogram.py b/src/spikeinterface/comparison/correlogram.py index 0cafef2c12..717d11a3fa 100644 --- a/src/spikeinterface/comparison/correlogram.py +++ b/src/spikeinterface/comparison/correlogram.py @@ -128,57 +128,60 @@ def compute_correlogram_by_similarity(self, similarity_matrix, window_ms=None): return similarities, errors -class CorrelogramGTStudy(GroundTruthStudy): - def run_comparisons( - self, case_keys=None, exhaustive_gt=True, window_ms=100.0, bin_ms=1.0, well_detected_score=0.8, **kwargs - ): - _kwargs = dict() - _kwargs.update(kwargs) - _kwargs["exhaustive_gt"] = exhaustive_gt - _kwargs["window_ms"] = window_ms - _kwargs["bin_ms"] = bin_ms - _kwargs["well_detected_score"] = well_detected_score - GroundTruthStudy.run_comparisons(self, case_keys=None, comparison_class=CorrelogramGTComparison, **_kwargs) - self.exhaustive_gt = exhaustive_gt - - @property - def time_bins(self): - for key, value in self.comparisons.items(): - return value.time_bins - - def precompute_scores_by_similarities(self, case_keys=None, good_only=True): - import sklearn.metrics - - if case_keys is None: - case_keys = self.cases.keys() - - self.all_similarities = {} - self.all_errors = {} - - for key in case_keys: - templates = self.get_templates(key) - flat_templates = templates.reshape(templates.shape[0], -1) - similarity = sklearn.metrics.pairwise.cosine_similarity(flat_templates) - comp = self.comparisons[key] - similarities, errors = comp.compute_correlogram_by_similarity(similarity) - - self.all_similarities[key] = similarities - self.all_errors[key] = errors - - def get_error_profile_over_similarity_bins(self, similarity_bins, key): - all_similarities = self.all_similarities[key] - all_errors = self.all_errors[key] - - order = np.argsort(all_similarities) - all_similarities = all_similarities[order] - all_errors = all_errors[order, :] - - result = {} - - for i in range(similarity_bins.size - 1): - cmin, cmax = similarity_bins[i], similarity_bins[i + 1] - amin, amax = np.searchsorted(all_similarities, [cmin, cmax]) - mean_errors = np.nanmean(all_errors[amin:amax], axis=0) - result[(cmin, cmax)] = mean_errors - - return result +# This is removed at the moment. +# We need to move this maybe one day in benchmark + +# class CorrelogramGTStudy(GroundTruthStudy): +# def run_comparisons( +# self, case_keys=None, exhaustive_gt=True, window_ms=100.0, bin_ms=1.0, well_detected_score=0.8, **kwargs +# ): +# _kwargs = dict() +# _kwargs.update(kwargs) +# _kwargs["exhaustive_gt"] = exhaustive_gt +# _kwargs["window_ms"] = window_ms +# _kwargs["bin_ms"] = bin_ms +# _kwargs["well_detected_score"] = well_detected_score +# GroundTruthStudy.run_comparisons(self, case_keys=None, comparison_class=CorrelogramGTComparison, **_kwargs) +# self.exhaustive_gt = exhaustive_gt + +# @property +# def time_bins(self): +# for key, value in self.comparisons.items(): +# return value.time_bins + +# def precompute_scores_by_similarities(self, case_keys=None, good_only=True): +# import sklearn.metrics + +# if case_keys is None: +# case_keys = self.cases.keys() + +# self.all_similarities = {} +# self.all_errors = {} + +# for key in case_keys: +# templates = self.get_templates(key) +# flat_templates = templates.reshape(templates.shape[0], -1) +# similarity = sklearn.metrics.pairwise.cosine_similarity(flat_templates) +# comp = self.comparisons[key] +# similarities, errors = comp.compute_correlogram_by_similarity(similarity) + +# self.all_similarities[key] = similarities +# self.all_errors[key] = errors + +# def get_error_profile_over_similarity_bins(self, similarity_bins, key): +# all_similarities = self.all_similarities[key] +# all_errors = self.all_errors[key] + +# order = np.argsort(all_similarities) +# all_similarities = all_similarities[order] +# all_errors = all_errors[order, :] + +# result = {} + +# for i in range(similarity_bins.size - 1): +# cmin, cmax = similarity_bins[i], similarity_bins[i + 1] +# amin, amax = np.searchsorted(all_similarities, [cmin, cmax]) +# mean_errors = np.nanmean(all_errors[amin:amax], axis=0) +# result[(cmin, cmax)] = mean_errors + +# return result From 40161366fcca747c81a40f5f2416474934c6c1cb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:46:04 +0000 Subject: [PATCH 8/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- doc/modules/benchmark.rst | 2 +- doc/modules/comparison.rst | 4 -- src/spikeinterface/benchmark/__init__.py | 2 +- .../benchmark/benchmark_base.py | 2 +- .../benchmark/benchmark_clustering.py | 4 +- .../benchmark/benchmark_matching.py | 3 +- .../benchmark/benchmark_peak_selection.py | 1 + .../benchmark/benchmark_plot_tools.py | 12 ++---- .../benchmark/benchmark_sorter.py | 8 ++-- .../tests/test_benchmark_peak_selection.py | 1 + .../benchmark/tests/test_benchmark_sorter.py | 4 +- src/spikeinterface/comparison/collision.py | 1 + .../comparison/groundtruthstudy.py | 3 +- src/spikeinterface/widgets/gtstudy.py | 43 +++++++++++++------ 14 files changed, 51 insertions(+), 39 deletions(-) diff --git a/doc/modules/benchmark.rst b/doc/modules/benchmark.rst index 71b84adde9..faf53be790 100644 --- a/doc/modules/benchmark.rst +++ b/doc/modules/benchmark.rst @@ -103,7 +103,7 @@ The all mechanism is based on an intrinsic organization into a "study_folder" wi # some plots m = comp.get_confusion_matrix() w_comp = sw.plot_agreement_matrix(sorting_comparison=comp) - + # Collect synthetic dataframes and display # As shown previously, the performance is returned as a pandas dataframe. # The spikeinterface.comparison.get_performance_by_unit() function, diff --git a/doc/modules/comparison.rst b/doc/modules/comparison.rst index 66451c0e87..a02d76664d 100644 --- a/doc/modules/comparison.rst +++ b/doc/modules/comparison.rst @@ -412,7 +412,3 @@ sorting analyzers from day 1 (:code:`analyzer_day1`) to day 5 (:code:`analyzer_d # match all m_tcmp = sc.compare_multiple_templates(waveform_list=analyzer_list, name_list=["D1", "D2", "D3", "D4", "D5"]) - - - - diff --git a/src/spikeinterface/benchmark/__init__.py b/src/spikeinterface/benchmark/__init__.py index 951a865ff9..3cf0c6a6f6 100644 --- a/src/spikeinterface/benchmark/__init__.py +++ b/src/spikeinterface/benchmark/__init__.py @@ -4,4 +4,4 @@ * some sorting components (clustering, motion, template matching) """ -from .benchmark_sorter import SorterStudy \ No newline at end of file +from .benchmark_sorter import SorterStudy diff --git a/src/spikeinterface/benchmark/benchmark_base.py b/src/spikeinterface/benchmark/benchmark_base.py index 7d5f17e948..b9cbf269c8 100644 --- a/src/spikeinterface/benchmark/benchmark_base.py +++ b/src/spikeinterface/benchmark/benchmark_base.py @@ -259,6 +259,7 @@ def get_run_times(self, case_keys=None): def plot_run_times(self, case_keys=None): from .benchmark_plot_tools import plot_run_times + return plot_run_times(self, case_keys=case_keys) def compute_results(self, case_keys=None, verbose=False, **result_params): @@ -445,4 +446,3 @@ def run(self): def compute_result(self): # run becnhmark result raise NotImplementedError - diff --git a/src/spikeinterface/benchmark/benchmark_clustering.py b/src/spikeinterface/benchmark/benchmark_clustering.py index 36010e6065..1c731ecb64 100644 --- a/src/spikeinterface/benchmark/benchmark_clustering.py +++ b/src/spikeinterface/benchmark/benchmark_clustering.py @@ -163,16 +163,18 @@ def get_count_units(self, case_keys=None, well_detected_score=None, redundant_sc # plotting by methods def plot_unit_counts(self, **kwargs): from .benchmark_plot_tools import plot_unit_counts + return plot_unit_counts(self, **kwargs) def plot_agreement_matrix(self, **kwargs): from .benchmark_plot_tools import plot_agreement_matrix + return plot_agreement_matrix(self, **kwargs) def plot_performances_vs_snr(self, **kwargs): from .benchmark_plot_tools import plot_performances_vs_snr - return plot_performances_vs_snr(self, **kwargs) + return plot_performances_vs_snr(self, **kwargs) def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)): diff --git a/src/spikeinterface/benchmark/benchmark_matching.py b/src/spikeinterface/benchmark/benchmark_matching.py index db5a00dc1a..c53567f460 100644 --- a/src/spikeinterface/benchmark/benchmark_matching.py +++ b/src/spikeinterface/benchmark/benchmark_matching.py @@ -63,12 +63,13 @@ def create_benchmark(self, key): def plot_agreement_matrix(self, **kwargs): from .benchmark_plot_tools import plot_agreement_matrix + return plot_agreement_matrix(self, **kwargs) def plot_performances_vs_snr(self, **kwargs): from .benchmark_plot_tools import plot_performances_vs_snr - return plot_performances_vs_snr(self, **kwargs) + return plot_performances_vs_snr(self, **kwargs) def plot_collisions(self, case_keys=None, figsize=None): if case_keys is None: diff --git a/src/spikeinterface/benchmark/benchmark_peak_selection.py b/src/spikeinterface/benchmark/benchmark_peak_selection.py index 7abeaaacc9..41edea156f 100644 --- a/src/spikeinterface/benchmark/benchmark_peak_selection.py +++ b/src/spikeinterface/benchmark/benchmark_peak_selection.py @@ -10,6 +10,7 @@ from .benchmark_base import Benchmark, BenchmarkStudy + class PeakSelectionBenchmark(Benchmark): def __init__(self, recording, gt_sorting, params, indices, exhaustive_gt=True): diff --git a/src/spikeinterface/benchmark/benchmark_plot_tools.py b/src/spikeinterface/benchmark/benchmark_plot_tools.py index c1683c6360..a6e9b6dacc 100644 --- a/src/spikeinterface/benchmark/benchmark_plot_tools.py +++ b/src/spikeinterface/benchmark/benchmark_plot_tools.py @@ -1,7 +1,6 @@ import numpy as np - def _simpleaxis(ax): ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) @@ -28,7 +27,6 @@ def plot_run_times(study, case_keys=None): run_times = study.get_run_times(case_keys=case_keys) colors = study.get_colors() - fig, ax = plt.subplots() labels = [] @@ -58,7 +56,6 @@ def plot_unit_counts(study, case_keys=None): if case_keys is None: case_keys = list(study.cases.keys()) - count_units = study.get_count_units(case_keys=case_keys) fig, ax = plt.subplots() @@ -95,6 +92,7 @@ def plot_unit_counts(study, case_keys=None): return fig + def plot_performances(study, mode="ordered", performance_names=("accuracy", "precision", "recall"), case_keys=None): """ Plot performances over case for a study. @@ -121,10 +119,9 @@ def plot_performances(study, mode="ordered", performance_names=("accuracy", "pre if case_keys is None: case_keys = list(study.cases.keys()) - perfs=study.get_performance_by_unit(case_keys=case_keys) + perfs = study.get_performance_by_unit(case_keys=case_keys) colors = study.get_colors() - if mode in ("ordered", "snr"): num_axes = len(performance_names) fig, axs = plt.subplots(ncols=num_axes) @@ -195,7 +192,6 @@ def plot_agreement_matrix(study, ordered=True, case_keys=None): if case_keys is None: case_keys = list(study.cases.keys()) - num_axes = len(case_keys) fig, axs = plt.subplots(ncols=num_axes) @@ -238,9 +234,9 @@ def plot_performances_vs_snr(study, case_keys=None, figsize=None, metrics=["accu y = study.get_result(key)["gt_comparison"].get_performance()[k].values ax.scatter(x, y, marker=".", label=label) ax.set_title(k) - + ax.set_ylim(0, 1.05) - + if count == 2: ax.legend() diff --git a/src/spikeinterface/benchmark/benchmark_sorter.py b/src/spikeinterface/benchmark/benchmark_sorter.py index 1f2dde3b32..c27d75a775 100644 --- a/src/spikeinterface/benchmark/benchmark_sorter.py +++ b/src/spikeinterface/benchmark/benchmark_sorter.py @@ -2,7 +2,6 @@ This replace the previous `GroundTruthStudy` """ - import numpy as np from ..core import NumpySorting from .benchmark_base import Benchmark, BenchmarkStudy @@ -45,6 +44,7 @@ def compute_result(self): ("gt_comparison", "pickle"), ] + class SorterStudy(BenchmarkStudy): """ This class is used to tests several sorter in several situtation. @@ -126,15 +126,15 @@ def get_count_units(self, case_keys=None, well_detected_score=None, redundant_sc # plotting as methods def plot_unit_counts(self, **kwargs): from .benchmark_plot_tools import plot_unit_counts + return plot_unit_counts(self, **kwargs) def plot_performances(self, **kwargs): from .benchmark_plot_tools import plot_performances + return plot_performances(self, **kwargs) def plot_agreement_matrix(self, **kwargs): from .benchmark_plot_tools import plot_agreement_matrix - return plot_agreement_matrix(self, **kwargs) - - + return plot_agreement_matrix(self, **kwargs) diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py b/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py index 92ed0f94ae..a6eb090a9d 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_peak_selection.py @@ -2,6 +2,7 @@ from pathlib import Path + @pytest.mark.skip() def test_benchmark_peak_selection(create_cache_folder): cache_folder = create_cache_folder diff --git a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py index 03ac86d715..2564d58d52 100644 --- a/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py +++ b/src/spikeinterface/benchmark/tests/test_benchmark_sorter.py @@ -15,6 +15,7 @@ def setup_module(tmp_path_factory): create_a_study(study_folder) return study_folder + def simple_preprocess(rec): return bandpass_filter(rec) @@ -75,14 +76,11 @@ def test_SorterStudy(setup_module): # import matplotlib.pyplot as plt # plt.show() - perf_by_unit = study.get_performance_by_unit() # print(perf_by_unit) count_units = study.get_count_units() # print(count_units) - - if __name__ == "__main__": study_folder = Path(__file__).resolve().parents[4] / "cache_folder" / "benchmarks" / "test_SorterStudy" diff --git a/src/spikeinterface/comparison/collision.py b/src/spikeinterface/comparison/collision.py index cff87e7a57..12bfab84ed 100644 --- a/src/spikeinterface/comparison/collision.py +++ b/src/spikeinterface/comparison/collision.py @@ -171,6 +171,7 @@ def compute_collision_by_similarity(self, similarity_matrix, unit_ids=None, good return similarities, recall_scores, pair_names + # This is removed at the moment. # We need to move this maybe one day in benchmark. # please do not delete this diff --git a/src/spikeinterface/comparison/groundtruthstudy.py b/src/spikeinterface/comparison/groundtruthstudy.py index c662ca38da..df9e1420cb 100644 --- a/src/spikeinterface/comparison/groundtruthstudy.py +++ b/src/spikeinterface/comparison/groundtruthstudy.py @@ -1,5 +1,3 @@ - - _txt_error_message = """ GroundTruthStudy has been replaced by SorterStudy with similar API but not back compatible folder loading. You can do: @@ -13,6 +11,7 @@ ... """ + class GroundTruthStudy: def __init__(self, study_folder): raise RuntimeError(_txt_error_message) diff --git a/src/spikeinterface/widgets/gtstudy.py b/src/spikeinterface/widgets/gtstudy.py index f32a15e429..5e160a6a5a 100644 --- a/src/spikeinterface/widgets/gtstudy.py +++ b/src/spikeinterface/widgets/gtstudy.py @@ -11,6 +11,7 @@ import warnings + class StudyRunTimesWidget(BaseWidget): """ Plot sorter run times for a SorterStudy. @@ -25,12 +26,15 @@ class StudyRunTimesWidget(BaseWidget): """ def __init__(self, study, case_keys=None, backend=None, **backend_kwargs): - warnings.warn("plot_study_run_times is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + warnings.warn( + "plot_study_run_times is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead." + ) plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): from spikeinterface.benchmark.benchmark_plot_tools import plot_run_times + plot_run_times(data_plot["study"], case_keys=data_plot["case_keys"]) @@ -48,12 +52,15 @@ class StudyUnitCountsWidget(BaseWidget): """ def __init__(self, study, case_keys=None, backend=None, **backend_kwargs): - warnings.warn("plot_study_unit_counts is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + warnings.warn( + "plot_study_unit_counts is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead." + ) plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) def plot_matplotlib(self, data_plot, **backend_kwargs): from spikeinterface.benchmark.benchmark_plot_tools import plot_unit_counts + plot_unit_counts(data_plot["study"], case_keys=data_plot["case_keys"]) @@ -87,7 +94,9 @@ def __init__( backend=None, **backend_kwargs, ): - warnings.warn("plot_study_performances is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + warnings.warn( + "plot_study_performances is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead." + ) plot_data = dict( study=study, mode=mode, @@ -98,13 +107,15 @@ def __init__( def plot_matplotlib(self, data_plot, **backend_kwargs): from spikeinterface.benchmark.benchmark_plot_tools import plot_performances + plot_performances( data_plot["study"], mode=data_plot["mode"], performance_names=data_plot["performance_names"], - case_keys=data_plot["case_keys"] + case_keys=data_plot["case_keys"], ) + class StudyAgreementMatrix(BaseWidget): """ Plot agreement matrix. @@ -128,7 +139,9 @@ def __init__( backend=None, **backend_kwargs, ): - warnings.warn("plot_study_agreement_matrix is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + warnings.warn( + "plot_study_agreement_matrix is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead." + ) plot_data = dict( study=study, case_keys=case_keys, @@ -139,11 +152,8 @@ def __init__( def plot_matplotlib(self, data_plot, **backend_kwargs): from spikeinterface.benchmark.benchmark_plot_tools import plot_agreement_matrix - plot_agreement_matrix( - data_plot["study"], - ordered=data_plot["ordered"], - case_keys=data_plot["case_keys"] - ) + + plot_agreement_matrix(data_plot["study"], ordered=data_plot["ordered"], case_keys=data_plot["case_keys"]) class StudySummary(BaseWidget): @@ -171,8 +181,10 @@ def __init__( backend=None, **backend_kwargs, ): - - warnings.warn("plot_study_summary is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead.") + + warnings.warn( + "plot_study_summary is to be deprecated. Use spikeinterface.benchmark.benchmark_plot_tools instead." + ) plot_data = dict(study=study, case_keys=case_keys) BaseWidget.__init__(self, plot_data, backend=backend, **backend_kwargs) @@ -180,7 +192,12 @@ def plot_matplotlib(self, data_plot, **backend_kwargs): study = data_plot["study"] case_keys = data_plot["case_keys"] - from spikeinterface.benchmark.benchmark_plot_tools import plot_agreement_matrix, plot_performances, plot_unit_counts, plot_run_times + from spikeinterface.benchmark.benchmark_plot_tools import ( + plot_agreement_matrix, + plot_performances, + plot_unit_counts, + plot_run_times, + ) plot_performances(study=study, case_keys=case_keys, mode="ordered") plot_performances(study=study, case_keys=case_keys, mode="snr") From 7cbbdef6725a6b596dcfa5bf7cd3cd13cab03766 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Mon, 7 Oct 2024 15:11:34 +0200 Subject: [PATCH 9/9] clean --- src/spikeinterface/benchmark/benchmark_sorter.py | 5 ----- src/spikeinterface/comparison/__init__.py | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/spikeinterface/benchmark/benchmark_sorter.py b/src/spikeinterface/benchmark/benchmark_sorter.py index 1f2dde3b32..39dd6a0c74 100644 --- a/src/spikeinterface/benchmark/benchmark_sorter.py +++ b/src/spikeinterface/benchmark/benchmark_sorter.py @@ -9,11 +9,6 @@ from ..sorters import run_sorter from spikeinterface.comparison import compare_sorter_to_ground_truth -# from spikeinterface.widgets import ( -# plot_agreement_matrix, -# plot_comparison_collision_by_similarity, -# ) - # TODO later integrate CollisionGTComparison optionally in this class. diff --git a/src/spikeinterface/comparison/__init__.py b/src/spikeinterface/comparison/__init__.py index 648ef4ed70..f4ada19f73 100644 --- a/src/spikeinterface/comparison/__init__.py +++ b/src/spikeinterface/comparison/__init__.py @@ -30,8 +30,8 @@ ) from .groundtruthstudy import GroundTruthStudy -from .collision import CollisionGTComparison, CollisionGTStudy -from .correlogram import CorrelogramGTComparison, CorrelogramGTStudy +from .collision import CollisionGTComparison +from .correlogram import CorrelogramGTComparison from .hybrid import ( HybridSpikesRecording,