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

FEniCS / ffcx / 40228706075
89%

Build:
DEFAULT BRANCH: main
Ran 25 Oct 2026 08:08PM UTC
Jobs 1
Files 60
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

25 Oct 2026 07:47PM UTC coverage: 88.921% (+0.2%) from 88.75%
40228706075

push

github

web-flow
Enable sum factorisation by default and improve O2 kernel generation (#906)

* Fix sum factorisation with several or one point quadrature rules

- 1D tensor factor tables were named FE_TF0, FE_TF1, ... from zero for
  each quadrature rule, so the tables of integrals with different
  quadrature degrees clashed and one rule read the other's tables, giving
  a wrong element tensor. Include the quadrature rule in their name.
- A piecewise table with tensor factors, such as a coefficient on a one
  point rule, is accessed outside the quadrature loop, where the
  quadrature index can't be split by direction, which failed an
  assertion. Its factors are constant over the points, so read point 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Make quadrature weights tensor products

* Add opt-in sum-factorised contraction for tensor product cell integrals

With `sum_factorization_contraction`, cell integrals on tensor product
rules cache the integrand on the whole rule and contract one direction at
a time, instead of updating every element tensor entry at every quadrature
point: O(N^2 Q^2 + N^4 Q) rather than O(Q^2 N^4) in 2D, and O(N^6 Q)
rather than O(Q^3 N^6) in 3D.

- The 1D quadrature weights are folded into the first argument's 1D
  tables at code generation time.
- Terms with the same dof loops share one loop nest; stage arrays and
  contributions shared by several terms are computed once, and each
  element tensor entry is updated once.
- Integrals whose buffers exceed a 256 KiB stack budget, or with an
  argument that doesn't factorise, keep the fused loop.
- Without the option, kernels use the fused loop with the full weights
  table, as before 59e849d6.
- Tensor factor tables are indexed by their own single permutation and
  entity.
- Unread element tables are pruned when the contraction is used.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Plan sum-factorised contractions once and declare only ... (continued)

425 of 426 new or added lines in 11 files covered. (99.77%)

13 existing lines in 4 files now uncovered.

5209 of 5858 relevant lines covered (88.92%)

0.89 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
95.17
0.52% ffcx/ir/integral.py

Coverage Regressions

Lines Coverage ∆ File
6
54.02
-2.47% ffcx/codegeneration/access.py
4
79.66
-0.58% ffcx/codegeneration/lnodes.py
2
96.14
-0.66% ffcx/codegeneration/optimizer.py
1
96.53
0.12% ffcx/codegeneration/integral_generator.py
Jobs
ID Job ID Ran Files Coverage
1 40228706075.1 25 Oct 2026 08:08PM UTC 60
88.92
GitHub Action Run
Source Files on build 40228706075
  • Tree
  • List 60
  • Changed 12
  • Source Changed 0
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • feb3cc41 on github
  • Prev Build on main (#40210089223)
  • Next Build on main (#40291595106)
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