From 07f3f8e02445d5343591185fb7e747078fa10382 Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 21 Aug 2026 18:11:44 +0530 Subject: [PATCH 1/2] Fix MANIFEST.in referencing three files that do not exist Three of the six directives named README.rst, LICENSE.txt and NOTICE.txt. The repository ships README.md and LICENSE, and no notice file at all, so `python -m build --sdist` printed on every build: warning: no files found matching 'README.rst' warning: no files found matching 'LICENSE.txt' warning: no files found matching 'NOTICE.txt' Rename the two that have a counterpart in the tree and drop the third. The sdist contents do not change: setuptools already included the readme through project.readme and LICENSE through its default license-files patterns. Verified by building the sdist before and after -- identical 216-entry file list, three fewer warnings. --- MANIFEST.in | 5 ++--- docs/source/whats_new.rst | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index e0e32117b4..213a3a44ab 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,5 @@ -include README.rst -include LICENSE.txt -include NOTICE.txt +include README.md +include LICENSE include moabb/datasets/summary_*.csv diff --git a/docs/source/whats_new.rst b/docs/source/whats_new.rst index c60ffcfffb..a6ae4f1d9d 100644 --- a/docs/source/whats_new.rst +++ b/docs/source/whats_new.rst @@ -98,6 +98,7 @@ Bugs Code health ~~~~~~~~~~~ +- Point ``MANIFEST.in`` at the files the repository actually ships. Three of its six directives named ``README.rst``, ``LICENSE.txt`` and ``NOTICE.txt``; the repository has ``README.md`` and ``LICENSE``, and no notice file at all, so every ``python -m build --sdist`` printed three ``warning: no files found matching ...`` lines. The sdist contents are unchanged -- setuptools already picked up the readme and the license through ``project.readme`` and its default ``license-files`` -- only the warnings go away (by `Bhargav Kowshik`_). - Bump the ``ruff-pre-commit`` hook from ``v0.15.9`` to ``v0.15.20`` (quarterly ``pre-commit.ci`` autoupdate). The bump is lint-neutral on the current tree: ``ruff check`` and ``ruff format --check`` return identical results at both pins across all 229 tracked ``*.py`` / ``*.pyi`` files, and ``pre-commit run --all-files`` rewrites no file (:gh:`1119` by `pre-commit-ci`_). - Fix deprecated ``pyriemann.utils.{mean,covariance,base}`` import paths: bump the minimum ``pyriemann`` to ``0.12`` and update all import sites in ``moabb/pipelines/csp.py``, ``moabb/pipelines/classification.py``, ``moabb/datasets/preprocessing.py``, and the Riemannian artifact rejection example to use ``pyriemann.geometry.*`` (introduced in pyriemann 0.12, removal of the old paths scheduled for 0.14), and import ``Potato``/``PotatoField`` from ``pyriemann.artifact_detection`` (moved from ``pyriemann.clustering`` in 0.12) (by `copilot-swe-agent`_). - Install CPU-only PyTorch wheels in CI by setting ``UV_TORCH_BACKEND=cpu`` in the test, braindecode, and docs workflows, so runners no longer download multi-GB CUDA builds of ``torch`` (pulled transitively via the ``deeplearning`` extra / braindecode) (:gh:`1083` by `Bhargav Kowshik`_). From d6df6da3a5e7ef42c4f90000885f5892fffecd6a Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 21 Aug 2026 18:11:44 +0530 Subject: [PATCH 2/2] Fix the LogVariance+LDA pipeline link in the paper results tables prepare_paper_results_tables.py mapped LogVariance+LDA to LogVar_grid.yml, which is `name: Log Variance SVM grid` and classifies with SVC; the next line mapped LogVariance+SVM to that same file. The LDA row corresponds to LogVar.yml (`name: Log Variance LDA`). Point it there, and drop the #L7 fragment from the SVM entry: line 7 is the shared LogVariance step, not the SVC one, so the anchor highlights the wrong part of the file. Regenerating the tables from results/ changes exactly those two links. --- docs/prepare_paper_results_tables.py | 4 ++-- docs/source/whats_new.rst | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/prepare_paper_results_tables.py b/docs/prepare_paper_results_tables.py index bec52442d2..35b3418c56 100644 --- a/docs/prepare_paper_results_tables.py +++ b/docs/prepare_paper_results_tables.py @@ -34,8 +34,8 @@ "EEGTCNet": "Keras_EEGITNet.yml", "FilterBank+SVM": "FBCSP.py", "FgMDM": "FgMDM.yml", - "LogVariance+LDA": "LogVar_grid.yml", - "LogVariance+SVM": "LogVar_grid.yml#L7", + "LogVariance+LDA": "LogVar.yml", + "LogVariance+SVM": "LogVar_grid.yml", "MDM": "MDM.yml", "ShallowConvNet": "Keras_ShallowConvNet.yml", "TRCSP+LDA": "WTRCSP.py", diff --git a/docs/source/whats_new.rst b/docs/source/whats_new.rst index a6ae4f1d9d..275f807252 100644 --- a/docs/source/whats_new.rst +++ b/docs/source/whats_new.rst @@ -61,6 +61,7 @@ Requirements Bugs ~~~~ +- Fix the ``LogVariance+LDA`` row of the benchmark results page (:doc:`paper_results`) linking to ``pipelines/LogVar_grid.yml``, which is the ``Log Variance SVM grid`` pipeline and classifies with ``SVC``. It now links to ``pipelines/LogVar.yml``, the ``Log Variance LDA`` pipeline the row reports. The ``LogVariance+SVM`` row keeps ``LogVar_grid.yml`` and loses its ``#L7`` fragment, which highlighted the shared ``LogVariance`` step rather than the ``SVC`` one (by `Bhargav Kowshik`_). - Wire the NEMAR sourcedata store into loading (:gh:`1147`): ``data_dl`` and the deprecated ``data_path`` now serve a requested file from the dataset's ``NEMAR//sourcedata/`` store before consulting the URL-derived layout, probing the store by the trailing segments of the URL path since it keeps the upstream filenames. ``dataset.download()`` followed by ``get_data()`` therefore no longer re-contacts the upstream host -- verified live against ``Schirrmeister2017``, whose host is currently unreachable. The URL-derived trees remain as lookups so nothing already downloaded is fetched again; ``force_update`` still refetches upstream and pinning the provider to ``"upstream"`` opts loading out of the store (:gh:`1146` by `Bruno Aristimunha`_) - Store :class:`moabb.datasets.ErpCore2021` as the single combined BIDS dataset it is, with components separated by the ``task-`` entity in one shared ``MNE-erpcore2021-data`` root, instead of seven standalone per-component BIDS datasets; likewise store Dreyer2023 in one shared ``MNE-dreyer2023-data`` root, since the A/B/C classes only select subject ranges of one globally numbered dataset. Pre-existing downloads in the legacy separated layouts are still read without re-fetching (:gh:`1146` by `Bruno Aristimunha`_) - Honor the download-flag contract across every dataset: ``CacheConfig.overwrite_*`` now erases the cache even when ``use=False`` (previously a silent no-op with the default config), :class:`moabb.datasets.CompoundDataset` forwards ``path``/``force_update``/``update_path``/``verbose`` to the wrapped dataset, ``data_path`` implementations that ignored ``path`` or ``force_update`` (14 datasets, including Kojima2024's narrowed signature that made ``download()`` raise ``TypeError``) now honor them, ``force_update`` also re-extracts stale archives, and a regression test enforces the contract for every future dataset. On the NEMAR side, :meth:`moabb.datasets.base.BaseDataset.download` falls back to the upstream host per failing subject instead of discarding the whole NEMAR batch, :meth:`~moabb.datasets.base.BaseDataset.sourcedata_path` matches provenance subjects by both the raw MOABB id and the dataset's ``nemar_subject_template`` label, transport failures are no longer misreported as "deposit publishes no sourcedata", and manifest filenames containing glob metacharacters are escaped before selection (:gh:`1146` by `Bruno Aristimunha`_)