From 87af72e2af36f0caa04ce3475c16a359fc7a2be9 Mon Sep 17 00:00:00 2001 From: bmusangu Date: Sun, 9 Aug 2026 10:19:28 +0200 Subject: [PATCH 1/2] Add project citation metadata and centralize copyright notices Introduce CITATION.cff with structured software metadata for GitHub and Zenodo, including the documented authorship, Harvard Medical School affiliations, repository links, manuscript keywords, and ORCID identifiers for Brooks M. Musangu and Jan Drugowitsch. Make LICENSE.txt the authoritative copyright location, update the project copyright range through 2026, and remove duplicated project and Elephant notices from individual source files, tests, and CI configuration. The upstream Elephant notice remains in LICENSE.txt as part of the redistributed license attribution. Normalize author capitalization in pyproject.toml, correct the Sphinx release value from 0.1.0. to 0.1.0, and update the preprocessing example to import EventTimesToCounts from blockinvgpfa. --- .github/workflows/tests.yml | 1 - CITATION.cff | 27 +++++++++++++++++++++++++++ LICENSE.txt | 2 +- README.md | 6 +----- blockinvgpfa/__init__.py | 3 +-- blockinvgpfa/blockinvgpfa.py | 4 +--- blockinvgpfa/preprocessing.py | 3 +-- docs/conf.py | 6 ++---- pyproject.toml | 4 ++-- test/test_blockinvgpfa.py | 1 - test/test_preprocessing.py | 1 - 11 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 CITATION.cff diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b9f295a..51c07f4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,5 +1,4 @@ # ... -# Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. # license Modified BSD, see LICENSE.txt for details. # ... name: CI Tests and Docs diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..de48851 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,27 @@ +cff-version: 1.2.0 +message: "If you use this software, please cite it using the metadata below." +type: software +title: "BlockInvGPFA" +abstract: >- + A scikit-learn-compatible implementation of Gaussian-process factor + analysis using block matrix inversion for efficient inference with + variable-length time series. +authors: + - family-names: "Musangu" + given-names: "Brooks M." + email: "brooks_musangu@hms.harvard.edu" + affiliation: "Department of Neurobiology, Harvard Medical School" + orcid: "https://orcid.org/0000-0002-7137-3707" + - family-names: "Drugowitsch" + given-names: "Jan" + email: "jan_drugowitsch@hms.harvard.edu" + affiliation: "Department of Neurobiology, Harvard Medical School" + orcid: "https://orcid.org/0000-0002-7846-0408" +version: "0.1.0" +license: "BSD-3-Clause" +repository-code: "https://github.com/CausalityInMotion/BlockInverseGPFA" +url: "https://blockinversegpfa.readthedocs.io/en/latest/" +keywords: + - "Gaussian Processes" + - "block matrices" + - "latent variable models" diff --git a/LICENSE.txt b/LICENSE.txt index 58faeb4..817d0b3 100755 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,5 +1,5 @@ Code based on Elephant - Electrophysiology Analysis Toolkit: Copyright (c) 2014-2019, Elephant authors and contributors -Modifications and additions: Copyright (c) 2021 Brooks M. Musangu and Jan Drugowitsch +Modifications and additions: Copyright (c) 2021-2026 Brooks M. Musangu and Jan Drugowitsch All rights reserved. diff --git a/README.md b/README.md index b5b285d..65f393e 100644 --- a/README.md +++ b/README.md @@ -82,10 +82,6 @@ Tests are automatically run via [GitHub Actions](https://github.com/CausalityInM Modified BSD License based on Elephant, see [LICENSE.txt](LICENSE.txt) for details. -## Copyright - -:copyright: 2021-2025 Brooks M. Musangu and Jan Drugowitsch - ## Acknowledgments -See [acknowledgments](docs/acknowledgments.rst). \ No newline at end of file +See [acknowledgments](docs/acknowledgments.rst). diff --git a/blockinvgpfa/__init__.py b/blockinvgpfa/__init__.py index 856eeb7..ad7fe91 100644 --- a/blockinvgpfa/__init__.py +++ b/blockinvgpfa/__init__.py @@ -1,6 +1,5 @@ """ -:copyright: Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. -:license: Modified BSD, see LICENSE.txt for details. +:license: Modified BSD, see LICENSE.txt for details. """ from .blockinvgpfa import BlockInvGPFA from .preprocessing import EventTimesToCounts diff --git a/blockinvgpfa/blockinvgpfa.py b/blockinvgpfa/blockinvgpfa.py index cd99d94..95362f2 100644 --- a/blockinvgpfa/blockinvgpfa.py +++ b/blockinvgpfa/blockinvgpfa.py @@ -1,7 +1,5 @@ # ... -# Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. -# Copyright 2014-2020 by the Elephant team. -# Modified BSD, see LICENSE.txt for details. +# Modified BSD, see LICENSE.txt for details. # ... from __future__ import division, print_function, unicode_literals diff --git a/blockinvgpfa/preprocessing.py b/blockinvgpfa/preprocessing.py index e0f7aca..f24bf6e 100644 --- a/blockinvgpfa/preprocessing.py +++ b/blockinvgpfa/preprocessing.py @@ -1,5 +1,4 @@ # ... -# Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. # license Modified BSD, see LICENSE.txt for details. # ... @@ -53,7 +52,7 @@ class EventTimesToCounts(sklearn.base.TransformerMixin): Examples -------- >>> import numpy as np - >>> from gpfa import EventTimesToCounts + >>> from blockinvgpfa import EventTimesToCounts >>> bin_size = 0.1 # [s] >>> t_stop = 0.8 # [s] >>> X = [ diff --git a/docs/conf.py b/docs/conf.py index fb78a23..77c3158 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -5,7 +5,6 @@ import sys import os -from datetime import date # include root path to allow autodoc to find blockgpfa module sys.path.insert(0, os.path.abspath('../')) @@ -24,9 +23,8 @@ project = 'BlockInvGPFA Documentation' authors = 'Brooks M. Musangu and Jan Drugowitsch' -copyright = "2021-{this_year}, {authors}".format( - this_year=date.today().year, authors=authors) -release = '0.1.0.' +copyright = f"2021, {authors}" +release = '0.1.0' version = '0.1.0' # -- General configuration --------------------------------------------------- diff --git a/pyproject.toml b/pyproject.toml index 2fb27b7..0ce6754 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,8 +7,8 @@ name = "blockinversegpfa" version = "0.1.0" description = "A scikit-learn-compatible GPFA implementation using block matrix inversion." authors = [ - {name = "Brooks M. MUSANGU", email = "brooks_musangu@hms.harvard.edu"}, - {name = "Jan DRUGOWITSCH", email = "jan_drugowitsch@hms.harvard.edu"} + {name = "Brooks M. Musangu", email = "brooks_musangu@hms.harvard.edu"}, + {name = "Jan Drugowitsch", email = "jan_drugowitsch@hms.harvard.edu"} ] license = {file = "LICENSE.txt"} readme = "README.md" diff --git a/test/test_blockinvgpfa.py b/test/test_blockinvgpfa.py index 1348a06..b81f606 100644 --- a/test/test_blockinvgpfa.py +++ b/test/test_blockinvgpfa.py @@ -1,5 +1,4 @@ # ... -# Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. # license Modified BSD, see LICENSE.txt for details. # ... """ diff --git a/test/test_preprocessing.py b/test/test_preprocessing.py index 51556e2..9682aff 100644 --- a/test/test_preprocessing.py +++ b/test/test_preprocessing.py @@ -1,5 +1,4 @@ # ... -# Copyright 2021 Brooks M. Musangu and Jan Drugowitsch. # license Modified BSD, see LICENSE.txt for details. # ... """ From 28cb32c24389a8a32c177eda619ee8e890b026a7 Mon Sep 17 00:00:00 2001 From: bmusangu Date: Sun, 9 Aug 2026 11:22:13 +0200 Subject: [PATCH 2/2] Align CI with the supported scientific Python stack Replace the floating Python 3.x CI selector with an explicit test matrix covering Python 3.10, 3.11, 3.12, and 3.13. Keep the documentation build on Python 3.13 to match the Read the Docs configuration. Declare requires-python as >=3.10,<3.14 because the currently pinned NumPy 2.2.1 and SciPy 1.15.0 releases support Python 3.10 through 3.13. This prevents Python 3.14 from attempting unsupported source builds and makes the package metadata accurately describe the validated runtime range. --- .github/workflows/tests.yml | 10 +++++++--- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 51c07f4..c9a55bf 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,8 +11,12 @@ on: jobs: test: - name: Run Pytest Suite + name: Test Python ${{ matrix.python-version }} runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - name: Checkout repository @@ -21,7 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: ${{ matrix.python-version }} - name: Install package and test dependencies run: | @@ -43,7 +47,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: "3.13" - name: Install Pandoc run: | diff --git a/pyproject.toml b/pyproject.toml index 0ce6754..ce70420 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ authors = [ ] license = {file = "LICENSE.txt"} readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.10,<3.14" dependencies = [ "numpy==2.2.1", "scikit-learn==1.6.0",