Skip to content

Test FunctionMap keyword compatibility - #4070

Draft
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:agent/fix-functionmap-public-keyword-validation
Draft

Test FunctionMap keyword compatibility#4070
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:agent/fix-functionmap-public-keyword-validation

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jul 29, 2026

Copy link
Copy Markdown
Member

Ignore until reviewed by @ChrisRackauckas.

Summary

  • retain Base.structdiff in the FunctionMap compatibility constructor, as requested in review
  • narrowly allow that qualified access in FunctionMap QA because it preserves the statically known NamedTuple type after field removal
  • add regression coverage for the current step_limiter keyword, the legacy step_limiter! compatibility path, and exact errors for one or multiple unsupported keywords

There is no production-source change relative to current master; this PR adds regression tests and the focused ExplicitImports exception for the reviewed implementation.

Why the exception is narrow

Base.structdiff is deliberately used here to remove step_limiter! while retaining a statically known NamedTuple type. The QA allow-list is scoped to :structdiff in OrdinaryDiffEqFunctionMap and records that type-stability requirement.

Validation

All commands were run locally on Julia 1.12 with a workspace-local depot.

  • post-rebase focused constructor regressions: 4/4 passed
  • official OrdinaryDiffEqFunctionMap_Core on the validation-only Restore SciMLBase 3.39 compatibility for owner imports #4066 dependency stack: DiscreteProblem Defaults 21/21 and Discrete Algorithm Tests 18/18; package tests passed
  • post-rebase official OrdinaryDiffEqFunctionMap_QA on the same stack: AllocCheck 2/2, JET 1/1, Aqua/ExplicitImports 19/19; package tests passed
  • Runic on both changed files: exit 0
  • whole-repository Runic on this exact change plus the independent formatting-only Run Runic on the disco-optimizations files #4064 prerequisite: exit 0
  • git diff --check: passed

Clean master currently cannot resolve the official group before reaching FunctionMap because the local NonlinearSolve subpackage requires SciMLBase 3.40 while the root project still caps it at 3.39. That independent dependency-floor correction is #4066 and was applied only in a disposable validation worktree; it is absent from this two-file PR.

Copy link
Copy Markdown
Member Author

Investigation / validation scratchpad

  1. Synced the fork from upstream and created agent/fix-functionmap-public-keyword-validation from clean master.
  2. Reproduced the official clean-master group blocker first: dependency resolution stops because the root allows SciMLBase 3.39 while the local NonlinearSolve subpackage requires 3.40. This is the independent Restore SciMLBase 3.39 compatibility for owner imports #4066 prerequisite.
  3. Established the source boundary with the same ExplicitImports qualified-public check:
    • parent fde6e1e6bc: pass
    • child c017e6c452: NonPublicQualifiedAccessException specifically for Base.structdiff at algorithms.jl:27
  4. Replaced only that private helper with public keyword-container operations. Added four constructor regressions: current step_limiter, legacy step_limiter!, one unsupported keyword, and multiple unsupported keywords.
  5. Upstream advanced during validation, so I fetched both remotes, verified no remote branch existed, and rebased the commit onto e5489faa50 before publishing. Final head: 57f31ca99c140863dc65f68d6fac5c1b8367faae.
  6. Re-ran locally on the rebased head:
    • focused constructor regressions: 4/4
    • qualified-public ExplicitImports check: pass
    • GROUP=OrdinaryDiffEqFunctionMap_Core on the disposable Restore SciMLBase 3.39 compatibility for owner imports #4066 test stack: 21/21 defaults + 18/18 discrete algorithm tests; package passed
    • GROUP=OrdinaryDiffEqFunctionMap_QA on that stack: AllocCheck 2/2, JET 1/1, Aqua/ExplicitImports 19/19; package passed
    • Runic changed-file check: exit 0
    • whole-tree Runic on exact head plus independent Run Runic on the disco-optimizations files #4064: exit 0
    • git diff --check: pass

No test was skipped, broken, disabled, silenced, or loosened. The #4064/#4066 commits were used only in disposable validation worktrees and are absent from this PR's two-file diff.

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

CI is currently gated before it reaches this PR’s behavior by the independent prerequisite branches already called out in the body.

I am not changing this two-file PR for those failures. After #4064/#4066 merge, it should be rebased and the full CI matrix rerun; any failures that then reach FunctionMap need fresh classification.

@ChrisRackauckas

Copy link
Copy Markdown
Member

Allow base.structdiff

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude
ChrisRackauckas-Claude force-pushed the agent/fix-functionmap-public-keyword-validation branch from 57f31ca to 6b4b7e3 Compare July 29, 2026 22:23
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Use public APIs for FunctionMap keyword validation Test FunctionMap keyword compatibility Jul 29, 2026
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Addressed the review request to allow Base.structdiff.

  • Restored the production implementation to Base.structdiff.
  • Added a narrow FunctionMap QA allow-list entry for :structdiff, with the reason that it preserves the statically known NamedTuple type after field removal.
  • Retained the four keyword compatibility regressions.
  • Rebased onto current upstream master and reran locally: focused 4/4; official QA AllocCheck 2/2, JET 1/1, Aqua/ExplicitImports 19/19; changed-file Runic and git diff --check passed.

The PR now has no production-source diff relative to master; it is regression coverage plus the reviewed QA exception. No test was skipped, disabled, silenced, or loosened.

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Terminal CI classification for reviewed/rebased head 6b4b7e372a: 8 checks succeeded, 3 were skipped, and 119 failed.

No test body failed on this PR. Excluding Runic, all 118 failures stopped in resolution, source development, dependency installation, or package build before the workflow test step:

  • 57 julia-downgrade-compat resolver failures;
  • 32 julia-buildpkg failures;
  • 15 root in-repo source-development failures;
  • 12 downstream integration jobs, each inspected and each reporting the SciMLBase unsatisfiable requirement before Pkg.test;
  • 1 FunctionMap in-repo source-development failure;
  • 1 documentation dependency-install failure.

The 61 non-downgrade failures all explicitly report the current SciMLBase 3.39/3.40 resolver boundary. The 57 downgrade jobs stop inside the downgrade resolver with Unsatisfiable; the same root and sublibrary downgrade lanes succeed on the focused #4066 compatibility branch. The remaining failed check is whole-tree Runic, whose log lists only disco.jl, controllers.jl, and disco_tests.jl, exactly the clean-master formatting debt isolated in #4064; neither changed FunctionMap file appears.

Local validation therefore remains the only run that reaches this two-file change until #4064/#4066 merge: focused constructor regressions 4/4; official FunctionMap QA AllocCheck 2/2, JET 1/1, Aqua/ExplicitImports 19/19; changed-file Runic and diff check passed. No CI workaround or unrelated dependency change is being added.

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.

2 participants