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

FEniCS / ufl / 34579120279
81%

Build:
DEFAULT BRANCH: main
Ran 11 Sep 2026 08:27AM 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

11 Sep 2026 08:21AM UTC coverage: 80.564% (+0.3%) from 80.303%
34579120279

push

github

web-flow
Give each pull back an inverse (#511)

* Fix Interpolate holes

* Interpolate._cache

* Expose Interpolate to the form compiler

* Fix shape and negation

* ruff

* Fix mypy

* Give a base form operator all of its domains

A base form operator's argument slots are not among its operands, so
traversing the operands misses the domains they are defined over. An
interpolation onto a point cloud is the case that notices: the target is
reachable only through the dual argument, and the form compiler numbers
its domains against this list.

extract_unique_domain still answers with the operand's domain, which is
where the operator takes its value.

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

* ruff

* Give every base form operator its domain analysis

BaseForm requires _analyze_domains and ufl_domains of its subclasses, and
BaseFormOperator never supplied them: Interpolate carried the pair alone, so
every other operator fell through to the deprecated Expr.ufl_domains, which
answers by calling extract_domains and recurses forever now that
extract_domains routes a base form operator back through it. Differentiating
an interpolation is the case that notices, as BaseFormOperatorDerivative has
no such override.

The analysis reads ufl_operands and argument_slots, both of which every base
form operator has, so it belongs on the base class unchanged.

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

* Negate a base form operator through its parent type

Interpolate.__neg__ chose between the expression and the form negation by
testing is_dual(self._function_space), the interpolation's target space. That
space stays primal even when the interpolation is itself a form, so negating an
Interpolate built against a Cofunction gave a Product while multiplying the
same object by -1 gave a FormSum.

None of the other arithmetic operators consult the target space. __add__,
__radd__, __mul__ and __rmul__ all dispatch through _parent_type, which tests
is_dual(self... (continued)

83 of 84 new or added lines in 1 file covered. (98.81%)

10371 of 12873 relevant lines covered (80.56%)

0.81 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
92.26
8.58% ufl/pullback.py
Jobs
ID Job ID Ran Files Coverage
1 34579120279.1 11 Sep 2026 08:27AM UTC 110
80.56
GitHub Action Run
Source Files on build 34579120279
  • Tree
  • List 110
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • b4f06233 on github
  • Prev Build on main (#34578447636)
  • Next Build on main (#34580646555)
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