From 15673b2a958b50f578ee91bf8ee04f8f243129cc Mon Sep 17 00:00:00 2001 From: Nikhil Chandra Date: Tue, 15 Apr 2025 17:25:09 -0500 Subject: [PATCH 1/6] Incorporated kilosort4's setup_logger() function to ensure generation of kilosort4.log file in sorter_output folder. --- .../sorters/external/kilosort4.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 78afde868e..80229ba9b4 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -167,6 +167,7 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): cluster_spikes, save_sorting, get_run_parameters, + setup_logger, ) from kilosort.io import load_probe, RecordingExtractorAsArray, BinaryFiltered, save_preprocessing from kilosort.parameters import DEFAULT_SETTINGS @@ -174,11 +175,27 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): import time import torch import numpy as np - - if verbose: - import logging - - logging.basicConfig(level=logging.INFO) + import logging + + # setup kilosort's console and file log handlers + setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures + # that the console handler's log level + # is logging.INFO + + # if verbose is False, set the console handler's log + # level to logging.WARNING to preserve original + # behavior prior to addition of setup_logger() above + if not verbose: + logger = logging.getLogger("kilosort") + + # find the stream handler + stream_handler = None + for handler in logger.handlers: + if type(handler)==logging.StreamHandler: + stream_handler = handler + break + + stream_handler.setLevel(logging.WARNING) if version.parse(cls.get_sorter_version()) < version.parse("4.0.16"): raise RuntimeError( From 92f9c6f36525be27c8cbe2ed5a34307b78a65fad Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:28:25 +0000 Subject: [PATCH 2/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../sorters/external/kilosort4.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 80229ba9b4..3c3e5c977e 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -176,14 +176,14 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): import torch import numpy as np import logging - + # setup kilosort's console and file log handlers - setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures - # that the console handler's log level - # is logging.INFO - - # if verbose is False, set the console handler's log - # level to logging.WARNING to preserve original + setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures + # that the console handler's log level + # is logging.INFO + + # if verbose is False, set the console handler's log + # level to logging.WARNING to preserve original # behavior prior to addition of setup_logger() above if not verbose: logger = logging.getLogger("kilosort") @@ -191,10 +191,10 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): # find the stream handler stream_handler = None for handler in logger.handlers: - if type(handler)==logging.StreamHandler: + if type(handler) == logging.StreamHandler: stream_handler = handler break - + stream_handler.setLevel(logging.WARNING) if version.parse(cls.get_sorter_version()) < version.parse("4.0.16"): From d8812568f3d7124aa85f3c46f79f022f87077c03 Mon Sep 17 00:00:00 2001 From: Nikhil Chandra Date: Wed, 16 Apr 2025 17:21:19 -0500 Subject: [PATCH 3/6] Added logic to account for different versions of Kilosort4 when calling setup_logger(). --- .../sorters/external/kilosort4.py | 57 ++++++++++++------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 3c3e5c977e..3dec070a13 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -177,26 +177,6 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): import numpy as np import logging - # setup kilosort's console and file log handlers - setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures - # that the console handler's log level - # is logging.INFO - - # if verbose is False, set the console handler's log - # level to logging.WARNING to preserve original - # behavior prior to addition of setup_logger() above - if not verbose: - logger = logging.getLogger("kilosort") - - # find the stream handler - stream_handler = None - for handler in logger.handlers: - if type(handler) == logging.StreamHandler: - stream_handler = handler - break - - stream_handler.setLevel(logging.WARNING) - if version.parse(cls.get_sorter_version()) < version.parse("4.0.16"): raise RuntimeError( "Kilosort versions before 4.0.16 are not supported" @@ -204,6 +184,43 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): "Please upgrade Kilosort version." ) + # setup kilosort's console and file log handlers + if version.parse(cls.get_sorter_version()) > version.parse("4.0.18"): + # v4.0.19 and higher + setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures + # that the stream handler's log level + # is logging.INFO, not logging.DEBUG. + + # if verbose is False, set the stream handler's log + # level to logging.WARNING to preserve original + # behavior prior to addition of setup_logger() above + if not verbose: + logger = logging.getLogger("kilosort") + + # find the stream handler + stream_handler = None + for handler in logger.handlers: + if type(handler)==logging.StreamHandler: + stream_handler = handler + break + + stream_handler.setLevel(logging.WARNING) + else: + # v4.0.16, v4.0.17, v4.0.18 + setup_logger(sorter_output_folder) + + if not verbose: + logger = logging.getLogger('') # Kilosort's logger is unnamed + + # find the stream handler + stream_handler = None + for handler in logger.handlers: + if type(handler)==logging.StreamHandler: + stream_handler = handler + break + + stream_handler.setLevel(logging.WARNING) + sorter_output_folder = sorter_output_folder.absolute() probe_filename = sorter_output_folder / "probe.prb" From 04b9383b88f036a406355eba2017173671a1fe85 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 22:26:27 +0000 Subject: [PATCH 4/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../sorters/external/kilosort4.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 3dec070a13..354873aea2 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -187,12 +187,12 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): # setup kilosort's console and file log handlers if version.parse(cls.get_sorter_version()) > version.parse("4.0.18"): # v4.0.19 and higher - setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures - # that the stream handler's log level - # is logging.INFO, not logging.DEBUG. - - # if verbose is False, set the stream handler's log - # level to logging.WARNING to preserve original + setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures + # that the stream handler's log level + # is logging.INFO, not logging.DEBUG. + + # if verbose is False, set the stream handler's log + # level to logging.WARNING to preserve original # behavior prior to addition of setup_logger() above if not verbose: logger = logging.getLogger("kilosort") @@ -200,27 +200,27 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): # find the stream handler stream_handler = None for handler in logger.handlers: - if type(handler)==logging.StreamHandler: + if type(handler) == logging.StreamHandler: stream_handler = handler break - + stream_handler.setLevel(logging.WARNING) else: # v4.0.16, v4.0.17, v4.0.18 setup_logger(sorter_output_folder) if not verbose: - logger = logging.getLogger('') # Kilosort's logger is unnamed + logger = logging.getLogger("") # Kilosort's logger is unnamed # find the stream handler stream_handler = None for handler in logger.handlers: - if type(handler)==logging.StreamHandler: + if type(handler) == logging.StreamHandler: stream_handler = handler break - + stream_handler.setLevel(logging.WARNING) - + sorter_output_folder = sorter_output_folder.absolute() probe_filename = sorter_output_folder / "probe.prb" From 6d3b477fe1799670746b1fe2a0f6aab0968ed977 Mon Sep 17 00:00:00 2001 From: Nikhil Chandra Date: Wed, 16 Apr 2025 18:38:49 -0500 Subject: [PATCH 5/6] Updated version logic for setup_logger() to accommodate kilosort v4.0.19 and v4.0.20. --- .../sorters/external/kilosort4.py | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 354873aea2..dde77c7fce 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -185,41 +185,35 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): ) # setup kilosort's console and file log handlers - if version.parse(cls.get_sorter_version()) > version.parse("4.0.18"): + setup_logger_takes_verbose_console = ( version.parse(cls.get_sorter_version()) > version.parse("4.0.18")) + logger_is_named = ( version.parse(cls.get_sorter_version()) > version.parse("4.0.20") ) + + if setup_logger_takes_verbose_console: # v4.0.19 and higher - setup_logger(sorter_output_folder, verbose_console=False) # setting verbose_console=False ensures - # that the stream handler's log level - # is logging.INFO, not logging.DEBUG. - - # if verbose is False, set the stream handler's log - # level to logging.WARNING to preserve original - # behavior prior to addition of setup_logger() above - if not verbose: - logger = logging.getLogger("kilosort") - - # find the stream handler - stream_handler = None - for handler in logger.handlers: - if type(handler) == logging.StreamHandler: - stream_handler = handler - break - - stream_handler.setLevel(logging.WARNING) + setup_logger(sorter_output_folder, verbose_console=False) else: # v4.0.16, v4.0.17, v4.0.18 setup_logger(sorter_output_folder) - if not verbose: - logger = logging.getLogger("") # Kilosort's logger is unnamed - - # find the stream handler - stream_handler = None - for handler in logger.handlers: - if type(handler) == logging.StreamHandler: - stream_handler = handler - break - - stream_handler.setLevel(logging.WARNING) + # if verbose is False, set the stream handler's log + # level to logging.WARNING to preserve original + # behavior prior to addition of setup_logger() above + if not verbose: + if logger_is_named: + # v4.0.21 and above + logger = logging.getLogger("kilosort") + else: + # v4.0.16, v4.0.17, v4.0.18, v4.0.19, v4.0.20 + logger = logging.getLogger("") + + # find the stream handler + stream_handler = None + for handler in logger.handlers: + if type(handler)==logging.StreamHandler: + stream_handler = handler + break + + stream_handler.setLevel(logging.WARNING) sorter_output_folder = sorter_output_folder.absolute() From 9d1f243490418778380f5a805ce9a878f1151e56 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 23:40:03 +0000 Subject: [PATCH 6/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/spikeinterface/sorters/external/kilosort4.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index dde77c7fce..2fc2617f44 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -185,9 +185,9 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): ) # setup kilosort's console and file log handlers - setup_logger_takes_verbose_console = ( version.parse(cls.get_sorter_version()) > version.parse("4.0.18")) - logger_is_named = ( version.parse(cls.get_sorter_version()) > version.parse("4.0.20") ) - + setup_logger_takes_verbose_console = version.parse(cls.get_sorter_version()) > version.parse("4.0.18") + logger_is_named = version.parse(cls.get_sorter_version()) > version.parse("4.0.20") + if setup_logger_takes_verbose_console: # v4.0.19 and higher setup_logger(sorter_output_folder, verbose_console=False) @@ -196,7 +196,7 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): setup_logger(sorter_output_folder) # if verbose is False, set the stream handler's log - # level to logging.WARNING to preserve original + # level to logging.WARNING to preserve original # behavior prior to addition of setup_logger() above if not verbose: if logger_is_named: @@ -205,14 +205,14 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): else: # v4.0.16, v4.0.17, v4.0.18, v4.0.19, v4.0.20 logger = logging.getLogger("") - + # find the stream handler stream_handler = None for handler in logger.handlers: - if type(handler)==logging.StreamHandler: + if type(handler) == logging.StreamHandler: stream_handler = handler break - + stream_handler.setLevel(logging.WARNING) sorter_output_folder = sorter_output_folder.absolute()