• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FEniCS / ufl / 41452961359
81%

Build:
DEFAULT BRANCH: main
Ran 02 Nov 2026 01:27PM UTC
Jobs 1
Files 110
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Nov 2026 01:22PM UTC coverage: 80.902% (+0.06%) from 80.839%
41452961359

push

github

web-flow
Fix dual-slot form argument counting (#527)

* Fix dual-slot form argument counting

* Compare the stored function space in Interpolate.__eq__

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Fix dual-slot form argument handling

* Remove outer_form argument plumbing

* Materialize dual-slot arguments

* Annotate delayed imports

* Contract the highest-numbered argument of a form dual slot

A form dual slot now contracts its highest-numbered primal argument, as
the left operand of an Action does, so Interpolate(u, F) numbers its
free arguments like Action(F, Interpolate(u, V)), starting at 0.
Coarguments in the slot stay free.

The stored slot is renumbered once, at construction, and argument
analysis reads it back. BaseFormOperatorDerivative rejects duplicate
argument numbers, and apply_derivatives numbers the direction after the
highest operator argument instead of after the argument count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Simplify the contracted argument renumbering

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Test that dual-slot contraction ignores numbering gaps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep arguments contracted inside a dual slot when renumbering

Renumbering the slot's own arguments with replace could rename one onto an
argument that an Action inside the slot contracts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Contract a form dual slot as an Action does

Renumbering the free arguments in the constructor rewrote the user's form
with replace, which needed _contained_arguments to avoid arguments that inner
Actions contract. That traversal was exponential in the depth of shared
subexpressions.

The free arguments now keep their numbers, and N(u; F) contracts the argument
that an Action would. If the primal slots use number 0, the output of N is
numbered last, so N is the left operand and F's lowest argument is contracted.
Otherwise F is the ... (continued)

46 of 48 new or added lines in 9 files covered. (95.83%)

10688 of 13211 relevant lines covered (80.9%)

0.81 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
92.92
1.49% ufl/core/base_form_operator.py
1
83.78
0.0% ufl/core/external_operator.py
Jobs
ID Job ID Ran Files Coverage
1 41452961359.1 02 Nov 2026 01:27PM UTC 110
80.9
GitHub Action Run
Source Files on build 41452961359
  • Tree
  • List 110
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 6a89eab9 on github
  • Prev Build on main (#40135585079)
  • Next Build on main (#41659136580)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc