diff --git a/.github/workflows/test_kilosort4.yml b/.github/workflows/test_kilosort4.yml index 1966a2bba2..321c801e78 100644 --- a/.github/workflows/test_kilosort4.yml +++ b/.github/workflows/test_kilosort4.yml @@ -3,11 +3,11 @@ name: Testing Kilosort4 on: workflow_dispatch: schedule: - - cron: "0 12 * * 0" # Weekly on Sunday at noon UTC + - cron: "0 12 * * 0" # Weekly on Sunday at noon UTC pull_request: paths: - - '**/kilosort4.py' - - '**/test_kilosort4_ci.py' + - "**/kilosort4.py" + - "**/test_kilosort4_ci.py" jobs: versions: @@ -76,6 +76,16 @@ jobs: if: matrix.ks_version == '4.0.16' || matrix.ks_version == '4.0.17' || matrix.ks_version == '4.0.18' run: uv pip install --system setuptools==78.0.2 + - name: Install legacy numpy for KS4 4.1.1 - 4.1.5 + if: | + matrix.ks_version == '4.1.1' || + matrix.ks_version == '4.1.2' || + matrix.ks_version == '4.1.3' || + matrix.ks_version == '4.1.4' || + matrix.ks_version == '4.1.5' || + matrix.ks_version == '4.1.6' + run: uv pip install --system "numpy<2.4" + - name: Install Kilosort run: | uv pip install --system kilosort==${{ matrix.ks_version }} diff --git a/src/spikeinterface/sorters/external/kilosort4.py b/src/spikeinterface/sorters/external/kilosort4.py index 3c47f782ab..e54fb34cda 100644 --- a/src/spikeinterface/sorters/external/kilosort4.py +++ b/src/spikeinterface/sorters/external/kilosort4.py @@ -147,6 +147,7 @@ def _setup_recording(cls, recording, sorter_output_folder, params, verbose): @classmethod def _run_from_folder(cls, sorter_output_folder, params, verbose): from kilosort import __version__ as ks_version + from numpy import __version__ as np_version from kilosort.run_kilosort import ( set_files, initialize_ops, @@ -161,6 +162,13 @@ def _run_from_folder(cls, sorter_output_folder, params, verbose): from kilosort.io import load_probe, RecordingExtractorAsArray, BinaryFiltered, save_preprocessing from kilosort.parameters import DEFAULT_SETTINGS + if (version.parse("4.1.1") <= version.parse(ks_version) <= version.parse("4.1.6")) and version.parse( + np_version + ) >= version.parse("2.4.0"): + raise RuntimeError( + "Kilosort versions between 4.1.1 and 4.1.6 are not compatible with numpy versions above 2.4. Either upgrade Kilosort to 4.1.7 or above, or downgrade numpy to 2.3 or below." + ) + if version.parse(ks_version) >= version.parse("4.0.33"): HAS_DIAGNOSTIC_PLOTS = True import kilosort.plots as kplots