Skip to content

Migrate build configuration to pyproject.toml#3600

Open
davidt0x wants to merge 9 commits into
develfrom
feat/pyproject_toml
Open

Migrate build configuration to pyproject.toml#3600
davidt0x wants to merge 9 commits into
develfrom
feat/pyproject_toml

Conversation

@davidt0x

@davidt0x davidt0x commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

This PR is an effort to move the package to the modern python project TOML. I also decided to swap out versioneer for setuptools_scm since it would let us get rid of setup.py entirely. setuptools_scm dynamically generates _version.py on package install rather than have it tracked in setup.cfg is only needed now for pycodestyle since it doesn't support pyproject.toml for whatever reason. My vote would be to drop pycodestyle for ruff in another PR.

🤖 AI-Generated Description Below

Consolidate build, packaging, and tooling configuration into a single pyproject.toml and remove the setup.py/versioneer machinery:

  • Add pyproject.toml with the setuptools build backend. Project metadata, pytest, coverage, and ruff config all live here. Dependencies and optional-dependencies are read dynamically from the *requirements.txt files, preserving them as the source of truth for CI/dependabot.
  • Replace versioneer with setuptools-scm for git-tag-based versioning. Delete versioneer.py and the generated, tracked _version.py (now a build-time artifact, gitignored). version is imported from the generated _version.py with an importlib.metadata fallback for un-built source trees.
  • Fold ruff.toml into [tool.ruff]; delete ruff.toml.
  • Trim setup.cfg to only the [pycodestyle] section, since pycodestyle cannot be configured from pyproject.toml (it reads setup.cfg/tox.ini).
  • Update the CI build step to python -m build, and update docs conf.py and MANIFEST.in accordingly.

Assisted-By: Claude Opus 4.8 noreply@anthropic.com

davidt0x added 4 commits July 23, 2026 13:39
Consolidate build, packaging, and tooling configuration into a single
pyproject.toml and remove the setup.py/versioneer machinery:

- Add pyproject.toml with the setuptools build backend. Project metadata,
  pytest, coverage, and ruff config all live here. Dependencies and
  optional-dependencies are read dynamically from the *requirements.txt
  files, preserving them as the source of truth for CI/dependabot.
- Replace versioneer with setuptools-scm for git-tag-based versioning.
  Delete versioneer.py and the generated, tracked _version.py (now a
  build-time artifact, gitignored). __version__ is imported from the
  generated _version.py with an importlib.metadata fallback for
  un-built source trees.
- Fold ruff.toml into [tool.ruff]; delete ruff.toml.
- Trim setup.cfg to only the [pycodestyle] section, since pycodestyle
  cannot be configured from pyproject.toml (it reads setup.cfg/tox.ini).
- Update the CI build step to `python -m build`, and update docs
  conf.py and MANIFEST.in accordingly.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
Follow-up to the pyproject.toml migration, addressing setuptools-scm
edge cases that versioneer previously masked:

- Add fallback_version = "0.0.0" so any environment lacking SCM info
  (shallow clones without a reachable tag, git-archive tarballs) still
  produces an installable version instead of failing.
- Remove the now-dead `.gitattributes` export-subst entry, which
  referenced the previously committed _version.py (now a build-time,
  gitignored artifact).
- test-release.yml: check out with fetch-depth 0 so the tagged release
  build can always resolve the version from git.
- .appveyor.yml: deepen clone_depth from 15 to 200 so setuptools-scm
  can reach a release tag when building the editable install.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
Add setuptools-scm's git-archive integration so builds from a source
tarball produced by `git archive` (e.g. GitHub's auto-generated
"Source code" assets) can still determine a version without a .git
directory:

- .git_archival.txt holds $Format:$ placeholders that git expands at
  archive time (commit hash, date, describe name).
- .gitattributes marks it export-subst so the substitution happens.

This replaces the equivalent support that versioneer previously
provided through the committed _version.py.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This PR causes the following changes to the html docs (ubuntu-latest-3.11):

diff -r docs-base/AGT.html docs-head/AGT.html
13c13
<   <title>AGT &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>AGT &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
279c279
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/AGTControlMechanism.html docs-head/AGTControlMechanism.html
13c13
<   <title>AGTControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>AGTControlMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
473c473
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/AutoAssociativeLearningMechanism.html docs-head/AutoAssociativeLearningMechanism.html
13c13
<   <title>AutoAssociativeLearningMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>AutoAssociativeLearningMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
605c605
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/AutoAssociativeProjection.html docs-head/AutoAssociativeProjection.html
13c13
<   <title>AutoAssociativeProjection &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>AutoAssociativeProjection &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
423c423
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/AutodiffComposition.html docs-head/AutodiffComposition.html
13c13
<   <title>AutodiffComposition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>AutodiffComposition &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
2486c2486
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/BasicsAndPrimer.html docs-head/BasicsAndPrimer.html
13c13
<   <title>Basics and Primer &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Basics and Primer &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
1231c1231
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/BeukersNBackModel.html docs-head/BeukersNBackModel.html
13c13
<   <title>Nback Model &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Nback Model &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
277c277
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/BeukersNBackModel_NB.html docs-head/BeukersNBackModel_NB.html
13c13
<   <title>Nback Model Notebook &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Nback Model Notebook &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
258c258
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/BotvinickConflictMonitoringModel.html docs-head/BotvinickConflictMonitoringModel.html
13c13
<   <title>Conflict Monitoring and Cognitive Control (Botvinick et al., 2001) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Conflict Monitoring and Cognitive Control (Botvinick et al., 2001) &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
355c355
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/BustamanteStroopXORLVOCModel.html docs-head/BustamanteStroopXORLVOCModel.html
13c13
<   <title>LVOC Model of Stroop XOR Task (Bustamante et al. 2017) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>LVOC Model of Stroop XOR Task (Bustamante et al. 2017) &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
275c275
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Cohen_HustonModel.html docs-head/Cohen_HustonModel.html
13c13
<   <title>Stroop GRAIN model (Cohen &amp; Huston, 1994) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Stroop GRAIN model (Cohen &amp; Huston, 1994) &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
399c399
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ComparatorMechanism.html docs-head/ComparatorMechanism.html
13c13
<   <title>ComparatorMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ComparatorMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
539c539
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Compilation.html docs-head/Compilation.html
13c13
<   <title>Compilation &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Compilation &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
304c304
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Component.html docs-head/Component.html
13c13
<   <title>Component &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Component &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
1554c1554
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Components.html docs-head/Components.html
13c13
<   <title>Components &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Components &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
302c302
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Composition.html docs-head/Composition.html
13c13
<   <title>Composition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Composition &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
6772c6772
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/CompositionFunctionApproximator.html docs-head/CompositionFunctionApproximator.html
13c13
<   <title>CompositionFunctionApproximator &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>CompositionFunctionApproximator &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
376c376
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/CompositionInterfaceMechanism.html docs-head/CompositionInterfaceMechanism.html
13c13
<   <title>CompositionInterfaceMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>CompositionInterfaceMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
594c594
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Compositions.html docs-head/Compositions.html
13c13
<   <title>Compositions &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Compositions &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
279c279
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Condition.html docs-head/Condition.html
13c13
<   <title>Condition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Condition &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
2530c2530
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Context.html docs-head/Context.html
13c13
<   <title>Context &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Context &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
688c688
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ContrastiveHebbianMechanism.html docs-head/ContrastiveHebbianMechanism.html
13c13
<   <title>ContrastiveHebbianMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ContrastiveHebbianMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
1112c1112
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ContributorsGuide.html docs-head/ContributorsGuide.html
13c13
<   <title>Contributors Guide &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Contributors Guide &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
103c103
<                   0.0.0.0
---
>                   0.19.0.1
367c367
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ControlMechanism.html docs-head/ControlMechanism.html
13c13
<   <title>ControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ControlMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
1240c1240
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ControlMechanisms.html docs-head/ControlMechanisms.html
13c13
<   <title>ControlMechanisms &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ControlMechanisms &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
297c297
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ControlProjection.html docs-head/ControlProjection.html
13c13
<   <title>ControlProjection &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ControlProjection &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
488c488
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ControlProjections.html docs-head/ControlProjections.html
13c13
<   <title>Control Projections &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Control Projections &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
283c283
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ControlSignal.html docs-head/ControlSignal.html
13c13
<   <title>ControlSignal &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>ControlSignal &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
985c985
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/ConventionsAndDefinitions.html docs-head/ConventionsAndDefinitions.html
13c13
<   <title>Conventions and Definitions &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Conventions and Definitions &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
477c477
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Core.html docs-head/Core.html
13c13
<   <title>Core &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Core &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
384c384
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/DDM.html docs-head/DDM.html
13c13
<   <title>DDM &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>DDM &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
104c104
<                   0.0.0.0
---
>                   0.19.0.1
1007c1007
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/DefaultControlMechanism.html docs-head/DefaultControlMechanism.html
13c13
<   <title>DefaultControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>DefaultControlMechanism &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>                   0.19.0.1
263c263
<          <script src="_static/documentation_options.js?v=3afd854e"></script>
---
>          <script src="_static/documentation_options.js?v=620ffb1f"></script>
diff -r docs-base/Defaults.html docs-head/Defaults.html
13c13
<   <title>Defaults &mdash; PsyNeuLink 0.0.0.0 documentation</title>
---
>   <title>Defaults &mdash; PsyNeuLink 0.19.0.1.dev7+g8482d4ee2 documentation</title>
102c102
<                   0.0.0.0
---
>              
...

See CI logs for the full diff.

@coveralls

coveralls commented Jul 23, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 84.653% (+0.5%) from 84.186% — feat/pyproject_toml into devel

@davidt0x
davidt0x requested review from jvesely and kmantel and removed request for kmantel July 24, 2026 02:21
The docs comparison workflow pinned the version rendered into the
generated HTML by creating a temporary 'v0.0.0.0' git tag, relying on
versioneer resolving the version live (via git describe) at import time.

setuptools-scm resolves the version at build/install time instead, so the
tag - which is created after the PNL install step, deliberately, to avoid
interfering with dependency resolution - no longer had any effect. The
real version leaked into every generated page and polluted the docs diff
on pull requests.

Pin the version through a PNL_DOCS_VERSION environment variable read by
docs/source/conf.py instead. This is independent of how the installed
package determines its version, and removes the fragile requirement that
the tag be created at a specific point relative to installation.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This PR causes the following changes to the html docs (ubuntu-latest-3.11):

diff -r docs-base/AGT.html docs-head/AGT.html
13c13
<   <title>AGT &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>AGT &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
279c279
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/AGTControlMechanism.html docs-head/AGTControlMechanism.html
13c13
<   <title>AGTControlMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>AGTControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
473c473
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/AutoAssociativeLearningMechanism.html docs-head/AutoAssociativeLearningMechanism.html
13c13
<   <title>AutoAssociativeLearningMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>AutoAssociativeLearningMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
605c605
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/AutoAssociativeProjection.html docs-head/AutoAssociativeProjection.html
13c13
<   <title>AutoAssociativeProjection &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>AutoAssociativeProjection &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
423c423
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/AutodiffComposition.html docs-head/AutodiffComposition.html
13c13
<   <title>AutodiffComposition &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>AutodiffComposition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
2486c2486
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/BasicsAndPrimer.html docs-head/BasicsAndPrimer.html
13c13
<   <title>Basics and Primer &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Basics and Primer &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
1231c1231
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/BeukersNBackModel.html docs-head/BeukersNBackModel.html
13c13
<   <title>Nback Model &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Nback Model &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
277c277
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/BeukersNBackModel_NB.html docs-head/BeukersNBackModel_NB.html
13c13
<   <title>Nback Model Notebook &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Nback Model Notebook &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
258c258
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/BotvinickConflictMonitoringModel.html docs-head/BotvinickConflictMonitoringModel.html
13c13
<   <title>Conflict Monitoring and Cognitive Control (Botvinick et al., 2001) &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Conflict Monitoring and Cognitive Control (Botvinick et al., 2001) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
355c355
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/BustamanteStroopXORLVOCModel.html docs-head/BustamanteStroopXORLVOCModel.html
13c13
<   <title>LVOC Model of Stroop XOR Task (Bustamante et al. 2017) &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>LVOC Model of Stroop XOR Task (Bustamante et al. 2017) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
275c275
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Cohen_HustonModel.html docs-head/Cohen_HustonModel.html
13c13
<   <title>Stroop GRAIN model (Cohen &amp; Huston, 1994) &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Stroop GRAIN model (Cohen &amp; Huston, 1994) &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
399c399
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ComparatorMechanism.html docs-head/ComparatorMechanism.html
13c13
<   <title>ComparatorMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ComparatorMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
539c539
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Compilation.html docs-head/Compilation.html
13c13
<   <title>Compilation &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Compilation &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
304c304
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Component.html docs-head/Component.html
13c13
<   <title>Component &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Component &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
1554c1554
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Components.html docs-head/Components.html
13c13
<   <title>Components &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Components &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
302c302
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Composition.html docs-head/Composition.html
13c13
<   <title>Composition &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Composition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
6772c6772
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/CompositionFunctionApproximator.html docs-head/CompositionFunctionApproximator.html
13c13
<   <title>CompositionFunctionApproximator &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>CompositionFunctionApproximator &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
376c376
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/CompositionInterfaceMechanism.html docs-head/CompositionInterfaceMechanism.html
13c13
<   <title>CompositionInterfaceMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>CompositionInterfaceMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
594c594
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Compositions.html docs-head/Compositions.html
13c13
<   <title>Compositions &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Compositions &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
279c279
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Condition.html docs-head/Condition.html
13c13
<   <title>Condition &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Condition &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
2530c2530
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Context.html docs-head/Context.html
13c13
<   <title>Context &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Context &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
688c688
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ContrastiveHebbianMechanism.html docs-head/ContrastiveHebbianMechanism.html
13c13
<   <title>ContrastiveHebbianMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ContrastiveHebbianMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
1112c1112
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ContributorsGuide.html docs-head/ContributorsGuide.html
13c13
<   <title>Contributors Guide &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Contributors Guide &mdash; PsyNeuLink 0.0.0.0 documentation</title>
103c103
<                   0.19.0.0+2
---
>                   0.0.0.0
367c367
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ControlMechanism.html docs-head/ControlMechanism.html
13c13
<   <title>ControlMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
1240c1240
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ControlMechanisms.html docs-head/ControlMechanisms.html
13c13
<   <title>ControlMechanisms &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ControlMechanisms &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
297c297
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ControlProjection.html docs-head/ControlProjection.html
13c13
<   <title>ControlProjection &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ControlProjection &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
488c488
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ControlProjections.html docs-head/ControlProjections.html
13c13
<   <title>Control Projections &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Control Projections &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
283c283
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ControlSignal.html docs-head/ControlSignal.html
13c13
<   <title>ControlSignal &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>ControlSignal &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
985c985
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/ConventionsAndDefinitions.html docs-head/ConventionsAndDefinitions.html
13c13
<   <title>Conventions and Definitions &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Conventions and Definitions &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
477c477
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Core.html docs-head/Core.html
13c13
<   <title>Core &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Core &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
384c384
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/DDM.html docs-head/DDM.html
13c13
<   <title>DDM &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>DDM &mdash; PsyNeuLink 0.0.0.0 documentation</title>
104c104
<                   0.19.0.0+2
---
>                   0.0.0.0
1007c1007
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/DefaultControlMechanism.html docs-head/DefaultControlMechanism.html
13c13
<   <title>DefaultControlMechanism &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>DefaultControlMechanism &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
263c263
<          <script src="_static/documentation_options.js?v=b20e7ecf"></script>
---
>          <script src="_static/documentation_options.js?v=3afd854e"></script>
diff -r docs-base/Defaults.html docs-head/Defaults.html
13c13
<   <title>Defaults &mdash; PsyNeuLink 0.19.0.0+2.g3d508d8e4 documentation</title>
---
>   <title>Defaults &mdash; PsyNeuLink 0.0.0.0 documentation</title>
102c102
<                   0.19.0.0+2
---
>                   0.0.0.0
262c262
<          
...

See CI logs for the full diff.

The previous commit replaced the temporary 'v0.0.0.0' git tag with the
PNL_DOCS_VERSION environment variable, but removing the tag broke the
'base' half of the docs comparison.

The two docs builds are asymmetric while this change is in flight: the
workflow definition comes from the PR merge commit and so applies to both,
but the 'base' build checks out the base branch, whose conf.py resolves the
version live from git and knows nothing about PNL_DOCS_VERSION. The tag was
the only mechanism that build responds to; without it the base docs rendered
the real version and every page differed.

Keep both mechanisms so both halves are pinned to 0.0.0.0: the tag covers
builds that resolve the version from git, PNL_DOCS_VERSION covers builds
that resolve it at install time. The tag steps can be dropped once the base
branch also supports PNL_DOCS_VERSION.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This PR causes the following changes to the html docs (ubuntu-latest-3.11):

diff -r docs-base/TransformFunctions.html docs-head/TransformFunctions.html
1495c1495
< <span class="sig-name descname"><span class="pre">parameters</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;psyneulink.core.components.functions.nonstateful.transformfunctions.MatrixMemory.Parameters</span> <span class="pre">object&gt;</span> <span class="pre">:</span> <span class="pre">(</span> <span class="pre">	changes_shape</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='changes_shape'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	decay_rate</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0.)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		modulable=True</span> <span class="pre">		modulation_combination_function=None</span> <span class="pre">		name='decay_rate'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	enable_output_type_conversion</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='enable_output_type_conversion'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execute_until_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execute_until_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execution_count</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execution_count'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	has_initializers</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='has_initializers'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		setter=&lt;function</span> <span class="pre">_has_initializers_setter&gt;</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	is_finished_flag</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='is_finished_flag'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	max_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(1000)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='max_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	memory</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=None</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name='B'</span> <span class="pre">		name='memory'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	multiplicative_param</span> <span class="pre">=</span> <span class="pre">ParameterAlias(name='multiplicative_param',</span> <span class="pre">aliases=None,</span> <span class="pre">_source=&lt;weakref</span> <span class="pre">at</span> <span class="pre">0x7f2fb23b6a20;</span> <span class="pre">to</span> <span class="pre">'Parameter'&gt;,</span> <span class="pre">constructor_argument=None),</span> <span class="pre">	normalize_memories</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='normalize_memories'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=Time(run:</span> <span class="pre">0,</span> <span class="pre">trial:</span> <span class="pre">0,</span> <span class="pre">pass:</span> <span class="pre">0,</span> <span class="pre">time_step:</span> <span class="pre">0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	output_type</span> <span class
...

See CI logs for the full diff.

@jvesely jvesely left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pycodestyle cannot be removed until ruff supports the same checks. Otherwise it would have been replaced at the same time as pydocstyle.

# install time rather than live from git, which the tag above cannot
# affect. Read by docs/source/conf.py.
env:
PNL_DOCS_VERSION: ${{ github.event_name == 'pull_request' && '0.0.0.0' || '' }}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this needed in addition to the tag?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we don't really need the tag anymore for this. With the switch to setuptools_scm, the tag here didn't work to spoof the version because it is only read at package install time when _version.py is generated. Based on the comment that says moving the tag before the install would mess up mdf's dependency resolution when the package is really (0.0.0.0). We can drop the tag completely now. I did that first but it caused big one-time diff on this PR because the base build we are comparing against is still using the versioneer and without the tag it gets the correct version. So the tag is really vestigial at the point, it can be removed.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, makes sense, so removing the tag is a follow up?

Comment thread docs/source/conf.py Outdated
Comment thread psyneulink/__init__.py
try:
from ._version import __version__ # noqa: E402
except ImportError:
from importlib.metadata import version as _pkg_version, PackageNotFoundError

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would this import ever fail?
and why should we silently change the version number instead of reporting failure in that case.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_version.py is generated by setuptools-scm at build/install time and is gitignored now, so it's absent when importing straight from a source tree that puts the repo root on sys.path ahead of any installed copy. This is what we are doing in docs conf.py actually. The fallback gets it from package metadata in that case. If the package is not actually installed, then we fallback to unknown version.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why should it work when the package is not actually installed? Why can't it fail?

Comment thread .appveyor.yml Outdated

@kmantel kmantel left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would also be good to compare the distributions produced with and without these changes, and twine check, if you haven't.

Also, I'm not sure if it's expected or not, but it seems odd looking at the doc difference comments on the PR: for some of them, the version is 0.0.0.0 on the base and 0.19.x.x on the head, and for others it's 0.19.x.x on the base and 0.0.0.0 on the head.

Comment thread MANIFEST.in
Comment thread setup.py
Comment on lines +104 to +105
# PNL_DOCS_VERSION pins the version for builds where it is resolved at
# install time rather than live from git, which the tag above cannot

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean that the versioning doesn't change with editable installs?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is probably the one big difference between setuptools_scm and versioneer. The installed version is stuck at whatever it was when pip install -e . It does not run git describe every time you import to figure out the version.

Comment thread pyproject.toml Outdated
version_file = "psyneulink/_version.py"
# Guarantee an installable version even when SCM info is unavailable
# (shallow clones without a reachable tag, git-archive tarballs, etc.)
fallback_version = "0.0.0"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this different than the other numbers including .github/workflows/pnl-ci-docs.yml, docs/source/conf.py:82, and psyneulink/__init__.py:61?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whoops, yeah, I think fallback_version in pyproject.toml and the init.py fallback should be 0+unknown. This is what versioneer returned when it couldn't figure out the version. I changed them to be consistent now. The docs ones are just 0.0.0.0 to stay fixed so that the diff doesn't get polluted. Lets leave them the same I think.

- Remove .appveyor.yml; the AppVeyor CI has been unused for a long time,
  so deleting it is cleaner than deepening its clone for setuptools-scm.
- docs/source/conf.py: psyneulink.__version__ is always set, so drop the
  redundant getattr() fallback and reference the attribute directly.

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@davidt0x

Copy link
Copy Markdown
Collaborator Author

pycodestyle cannot be removed until ruff supports the same checks. Otherwise it would have been replaced at the same time as pydocstyle.

@jvesely, It seems like most of the pycodestyle checks we are supported by ruff? Which missing ones are you most concerned with? I think it is missing some of the format based ones but we have most of these ignored anyway it seems.

@davidt0x

Copy link
Copy Markdown
Collaborator Author

I think it would also be good to compare the distributions produced with and without these changes, and twine check, if you haven't.

@kmantel, good point on the twine check. I just ran it locally and it seems to pass. I will try to compare the distributions.

Also, I'm not sure if it's expected or not, but it seems odd looking at the doc difference comments on the PR: for some of them, the version is 0.0.0.0 on the base and 0.19.x.x on the head, and for others it's 0.19.x.x on the base and 0.0.0.0 on the head.

These difference were tied to a quirk of how we were spoofing the version number for the docs builds so that we wouldn't pollute the diff with a bunch of lines showing different version number differences each PR. The old approach used a v0.0.0.0 tag placed after package install but before docs build. versioneer would pickup this tag and render the docs with v0.0.0.0 for the diff base. However, with setuptools_scm, version is determined at package install time from the tag, not and import time. So this spoof didn't work anymore. I replaced that tag with an environment variable for the docs version spoof. I think this has been resolved now with the follow on commits I made, take a look at the last diff.

setuptools-scm's file finder includes every git-tracked file in the sdist
by default, unlike the previous setup.py/MANIFEST.in flow which only added
an explicit set. This ballooned the source distribution from ~2.6 MB to
~115 MB, bundling docs/source/_static (multi-MB images/PDFs/GIFs),
Scripts/, Matlab/, test_results/, .github/ and other non-distribution
material.

Add prune/exclude directives to MANIFEST.in (applied after the scm finder)
to drop that content. The sdist returns to ~3.5 MB, in line with the old
build, and still passes `twine check --strict`. The wheel is unaffected
(it only ships the package + declared data), and CI testing is unaffected
(test-release.yml runs tests from a checkout, not from the sdist).

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@davidt0x

Copy link
Copy Markdown
Collaborator Author

I think it would also be good to compare the distributions produced with and without these changes

Good call on comparing the distributions. The wheel was the same but the sdist was way bigger. It seems the setuptools_scm default is to include any git tracked file in the sdist. With setuptools_scm, MANIFEST.in is used to opt things out with prune and exclude directives. This is the opposite of the current approach so large binary assets from docs and Scripts were getting put in the sdist. I have modified the MANIFEST.in to exclude this stuff so now the sdist is about the same as before.

@github-actions

Copy link
Copy Markdown

This PR causes the following changes to the html docs (ubuntu-latest-3.11):

diff -r docs-base/TransformFunctions.html docs-head/TransformFunctions.html
1495c1495
< <span class="sig-name descname"><span class="pre">parameters</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;psyneulink.core.components.functions.nonstateful.transformfunctions.MatrixMemory.Parameters</span> <span class="pre">object&gt;</span> <span class="pre">:</span> <span class="pre">(</span> <span class="pre">	changes_shape</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='changes_shape'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	decay_rate</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0.)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		modulable=True</span> <span class="pre">		modulation_combination_function=None</span> <span class="pre">		name='decay_rate'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	enable_output_type_conversion</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='enable_output_type_conversion'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execute_until_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execute_until_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execution_count</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execution_count'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	has_initializers</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='has_initializers'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		setter=&lt;function</span> <span class="pre">_has_initializers_setter&gt;</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	is_finished_flag</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='is_finished_flag'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	max_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(1000)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='max_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	memory</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=None</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name='B'</span> <span class="pre">		name='memory'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	multiplicative_param</span> <span class="pre">=</span> <span class="pre">ParameterAlias(name='multiplicative_param',</span> <span class="pre">aliases=None,</span> <span class="pre">_source=&lt;weakref</span> <span class="pre">at</span> <span class="pre">0x7f89b81f67f0;</span> <span class="pre">to</span> <span class="pre">'Parameter'&gt;,</span> <span class="pre">constructor_argument=None),</span> <span class="pre">	normalize_memories</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='normalize_memories'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=Time(run:</span> <span class="pre">0,</span> <span class="pre">trial:</span> <span class="pre">0,</span> <span class="pre">pass:</span> <span class="pre">0,</span> <span class="pre">time_step:</span> <span class="pre">0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	output_type</span> <span class
...

See CI logs for the full diff.

Align the build-time version fallback with the runtime fallback in
psyneulink/__init__.py (and with the value versioneer previously reported
when it could not determine a version). Both "version unavailable" paths
now yield the same string instead of "0.0.0" vs "0+unknown".

Assisted-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This PR causes the following changes to the html docs (ubuntu-latest-3.11):

diff -r docs-base/TransformFunctions.html docs-head/TransformFunctions.html
1495c1495
< <span class="sig-name descname"><span class="pre">parameters</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;psyneulink.core.components.functions.nonstateful.transformfunctions.MatrixMemory.Parameters</span> <span class="pre">object&gt;</span> <span class="pre">:</span> <span class="pre">(</span> <span class="pre">	changes_shape</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='changes_shape'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	decay_rate</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0.)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		modulable=True</span> <span class="pre">		modulation_combination_function=None</span> <span class="pre">		name='decay_rate'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	enable_output_type_conversion</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='enable_output_type_conversion'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execute_until_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execute_until_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	execution_count</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='execution_count'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=False</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	has_initializers</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=False</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='has_initializers'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		setter=&lt;function</span> <span class="pre">_has_initializers_setter&gt;</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	is_finished_flag</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='is_finished_flag'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	max_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(1000)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='max_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	memory</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=None</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name='B'</span> <span class="pre">		name='memory'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	multiplicative_param</span> <span class="pre">=</span> <span class="pre">ParameterAlias(name='multiplicative_param',</span> <span class="pre">aliases=None,</span> <span class="pre">_source=&lt;weakref</span> <span class="pre">at</span> <span class="pre">0x7f7d9b1eb510;</span> <span class="pre">to</span> <span class="pre">'Parameter'&gt;,</span> <span class="pre">constructor_argument=None),</span> <span class="pre">	normalize_memories</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=True</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='normalize_memories'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=False</span> <span class="pre">		port=None</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=Time(run:</span> <span class="pre">0,</span> <span class="pre">trial:</span> <span class="pre">0,</span> <span class="pre">pass:</span> <span class="pre">0,</span> <span class="pre">time_step:</span> <span class="pre">0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value='default'</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=False</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	num_executions_before_finished</span> <span class="pre">=</span> <span class="pre">Parameter(</span> <span class="pre">		_user_specified=False</span> <span class="pre">		bool_as_number=True</span> <span class="pre">		default_value=array(0)</span> <span class="pre">		delivery_condition=&lt;LogCondition.OFF:</span> <span class="pre">0&gt;</span> <span class="pre">		dependencies=None</span> <span class="pre">		fallback_value=&lt;class</span> <span class="pre">'psyneulink.core.globals.parameters.ParameterNoValueError'&gt;</span> <span class="pre">		function_arg=True</span> <span class="pre">		history={}</span> <span class="pre">		history_max_length=1</span> <span class="pre">		history_min_length=0</span> <span class="pre">		loggable=True</span> <span class="pre">		mdf_name=None</span> <span class="pre">		name='num_executions_before_finished'</span> <span class="pre">		parse_spec=False</span> <span class="pre">		pnl_internal=True</span> <span class="pre">		port=None</span> <span class="pre">		read_only=True</span> <span class="pre">		reference=False</span> <span class="pre">		specify_none=False</span> <span class="pre">		stateful=True</span> <span class="pre">		structural=False</span> <span class="pre">		user=True</span> <span class="pre">		values={}</span> <span class="pre">	),</span> <span class="pre">	output_type</span> <span class
...

See CI logs for the full diff.

uses: actions/checkout@v7
# Full history + tags needed for setuptools-scm to determine the version
with:
fetch-depth: 0

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will take a long time. The full history is ~1.5GB and counting. Can it be restricted to ~1000? now that there's an automated PR to master every month, the gaps between tags shouldn't be that big.

@jvesely

jvesely commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

pycodestyle cannot be removed until ruff supports the same checks. Otherwise it would have been replaced at the same time as pydocstyle.

@jvesely, It seems like most of the pycodestyle checks we are supported by ruff? Which missing ones are you most concerned with? I think it is missing some of the format based ones but we have most of these ignored anyway it seems.

From the docs [1,2] at least E12?, E13?, W503, W504. I haven't checked if they're present under different code in other categories.

Rather than checking if they're ignored now, the question is whether it'd be useful to check in the future.
Unless pycodestyle goes the way pydocstyle and gets abandoned, at which point we won't have much choice.

[1] https://pycodestyle.pycqa.org/en/latest/intro.html#error-codes
[2] https://docs.astral.sh/ruff/rules/#pycodestyle-e-w

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants