From 833f8a593e52406bc6bf1bdbc05febf0ac82a490 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 10:36:08 -0500 Subject: [PATCH 1/8] update python and package versions --- .github/workflows/CI.yaml | 4 ++-- pyproject.toml | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 5c4709a..0947672 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -29,7 +29,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.11" cache: pip cache-dependency-path: pyproject.toml @@ -44,7 +44,7 @@ jobs: fail-fast: false matrix: os: [macOS-latest, ubuntu-latest, windows-latest] - python-version: [3.9, "3.10", 3.11, 3.12] + python-version: [3.11, 3.12, 3.13] steps: - uses: actions/checkout@v3 diff --git a/pyproject.toml b/pyproject.toml index 3b3bdd8..6d3e7c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ maintainers = [ {name = 'Hugo MacDermott-Opeskin', email = 'hugomacdermott@gmail.com'} ] -requires-python = ">=3.8" +requires-python = ">=3.11" keywords = [ "python", "science", "chemistry", "biophysics", "molecular-dynamics", @@ -28,9 +28,9 @@ keywords = [ ] dependencies = [ - 'numpy>=1.20.0', + 'numpy>=2.2', 'pandas>=2.2', - 'mdanalysis>=2.0.0', + 'mdanalysis>=2.8', 'pytest', 'matplotlib', 'setuptools', @@ -49,10 +49,9 @@ classifiers = [ 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Bio-Informatics', 'Topic :: Scientific/Engineering :: Chemistry', From 7879b7b127032b43a9c7964afedd1ec2f9a39316 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 10:36:16 -0500 Subject: [PATCH 2/8] update testing --- solvation_analysis/rdf_parser.py | 4 ++-- solvation_analysis/tests/test_rdf_parser.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/solvation_analysis/rdf_parser.py b/solvation_analysis/rdf_parser.py index f1ab6ae..b7d5aef 100644 --- a/solvation_analysis/rdf_parser.py +++ b/solvation_analysis/rdf_parser.py @@ -375,10 +375,10 @@ def identify_cutoff_poly( cr_pts, cr_vals = identify_minima(f) if not good_cutoff(cutoff_region, cr_pts, cr_vals): if failure_behavior == "silent": - return np.NaN + return np.nan if failure_behavior == "warn": warnings.warn("No solvation shell detected.") - return np.NaN + return np.nan if failure_behavior == "exception": raise RuntimeError( "Solute could not identify a solvation radius for at least one solvent. " diff --git a/solvation_analysis/tests/test_rdf_parser.py b/solvation_analysis/tests/test_rdf_parser.py index 6569869..d1cd2ba 100644 --- a/solvation_analysis/tests/test_rdf_parser.py +++ b/solvation_analysis/tests/test_rdf_parser.py @@ -85,7 +85,7 @@ def test_good_cutoff(cutoff_region, cr_pts, cr_vals, expected): @pytest.mark.parametrize( "rdf_tag, cutoff", [ - ("fec_F", np.NaN), + ("fec_F", np.nan), ("fec_O", 3.30), ("fec_all", 2.74), ("bn_all", 2.64), @@ -108,7 +108,7 @@ def test_identify_cutoff_poly_easy( @pytest.mark.parametrize( "rdf_tag, cutoff", [ - ("fec_F", np.NaN), + ("fec_F", np.nan), ("fec_O", 3.30), ("fec_all", 2.74), ("bn_all", 2.64), @@ -122,7 +122,7 @@ def test_identify_cutoff_scipy_easy( ): bins, rdf = rdf_bins_and_data_easy[rdf_tag] np.testing.assert_allclose( - identify_cutoff_scipy(bins, rdf, failure_behavior="warn", default=np.NaN), + identify_cutoff_scipy(bins, rdf, failure_behavior="warn", default=np.nan), cutoff, atol=0.2, equal_nan=True, @@ -148,8 +148,8 @@ def test_identify_scipy_hard( bins_ez, rdf_ez = rdf_bins_and_data_easy[rdf_tag] bins_hd, rdf_hd = rdf_bins_and_data_hard[rdf_tag] np.testing.assert_allclose( - identify_cutoff_scipy(bins_hd, rdf_hd, failure_behavior="warn", default=np.NaN), - identify_cutoff_scipy(bins_ez, rdf_ez, failure_behavior="warn", default=np.NaN), + identify_cutoff_scipy(bins_hd, rdf_hd, failure_behavior="warn", default=np.nan), + identify_cutoff_scipy(bins_ez, rdf_ez, failure_behavior="warn", default=np.nan), atol=0.2, equal_nan=True, ) @@ -201,11 +201,11 @@ def test_identify_cutoff_non_solv(rdf_tag, rdf_bins_and_data_non_solv): bins, rdf = rdf_bins_and_data_non_solv[rdf_tag] np.testing.assert_allclose( identify_cutoff_poly(bins, rdf, failure_behavior="warn"), - np.NaN, + np.nan, equal_nan=True, ) np.testing.assert_allclose( - identify_cutoff_scipy(bins, rdf, failure_behavior="warn", default=np.NaN), - np.NaN, + identify_cutoff_scipy(bins, rdf, failure_behavior="warn", default=np.nan), + np.nan, equal_nan=True, ) From 613e1276b0c7f19af04ae3170f3d44dcb3957a77 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 10:41:01 -0500 Subject: [PATCH 3/8] Fix paper build by updating upload-artifact action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update actions/upload-artifact from deprecated v1 to v4 to fix paper build failures. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/draft-pdf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index ea431d4..068a7b6 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -14,7 +14,7 @@ jobs: # This should be the path to the paper within your repo. paper-path: joss_paper/paper.md - name: Upload - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: paper # This is the output path where Pandoc will write the compiled From fcc1a9269fc3aa217a4ecc52c04f13bd47d97443 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 10:41:07 -0500 Subject: [PATCH 4/8] Fix docs build by updating Python and dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update docs requirements to match new minimum versions: - Python >=3.11 - numpy >=2.2 - mdanalysis >=2.8 - Remove pinned scipy version to allow compatibility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- docs/requirements.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/requirements.yaml b/docs/requirements.yaml index 9472208..43017b7 100644 --- a/docs/requirements.yaml +++ b/docs/requirements.yaml @@ -4,17 +4,17 @@ channels: - defaults dependencies: # Base depends - - python + - python>=3.11 - pip - - numpy + - numpy>=2.2 - pytest - - mdanalysis + - mdanalysis>=2.8 - nglview - nbsphinx - ipython - plotly - sphinx_rtd_theme - - scipy==1.12.0 + - scipy # Pip-only installs From 5107705946a86c04eab6fcc3cedf18ee741f3eb5 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 10:42:50 -0500 Subject: [PATCH 5/8] Re-enable CI workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add workflow_dispatch trigger to allow manual workflow runs and re-enable the CI workflow that was disabled due to inactivity. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/CI.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 0947672..6fc0acf 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -10,6 +10,7 @@ on: pull_request: branches: - "main" + workflow_dispatch: schedule: # Midnight Tuesdays and Fridays - cron: "0 0 * * 2,5" From e7bb41db4f6d72b619f1779bb91f1c031fe570b0 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 11:49:48 -0500 Subject: [PATCH 6/8] Fix ReadTheDocs conda environment configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Change python>=3.11 to python=3.12 (conda requires exact version) - Add missing pandas>=2.2 dependency - Keep proven mambaforge-22.9 version 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- docs/requirements.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.yaml b/docs/requirements.yaml index 43017b7..53860fc 100644 --- a/docs/requirements.yaml +++ b/docs/requirements.yaml @@ -4,11 +4,12 @@ channels: - defaults dependencies: # Base depends - - python>=3.11 + - python=3.12 - pip - numpy>=2.2 - pytest - mdanalysis>=2.8 + - pandas>=2.2 - nglview - nbsphinx - ipython From 433eda51688d1a5bb4e0e78d054b861dd27c227b Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 16:13:40 -0500 Subject: [PATCH 7/8] Add required sphinx.configuration to readthedocs.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReadTheDocs now requires explicit sphinx.configuration key. Set it to docs/conf.py as per the deprecation notice. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- readthedocs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readthedocs.yml b/readthedocs.yml index 05b9992..4e27524 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -9,3 +9,6 @@ build: conda: environment: docs/requirements.yaml + +sphinx: + configuration: docs/conf.py From ca5e0de98aa458e6addc6bdcde8b9f5934da6728 Mon Sep 17 00:00:00 2001 From: orionarcher Date: Wed, 26 Nov 2025 16:21:22 -0500 Subject: [PATCH 8/8] Remove Windows from CI test matrix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove windows-latest from the CI test matrix to focus on macOS and Linux testing only. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/CI.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 6fc0acf..d8284be 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -44,7 +44,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macOS-latest, ubuntu-latest, windows-latest] + os: [macOS-latest, ubuntu-latest] python-version: [3.11, 3.12, 3.13] steps: