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

Qiskit / qiskit-fermions / 33873559976
98%

Build:
DEFAULT BRANCH: main
Ran 04 Sep 2026 12:40PM UTC
Jobs 1
Files 111
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

04 Sep 2026 12:35PM UTC coverage: 98.197% (+0.001%) from 98.196%
33873559976

push

github

web-flow
fix(circuit): terminate the Evolution decomposition at atomic factors (#312)

The decomposition of an `Evolution` gate had no base case. A gate holding a single
operator term decomposed into an identical single-term `Evolution`, so expanding it
again made no progress. `inverse()` recurses through the definition, so it hit the
interpreter's recursion limit instead of returning.

The same missing base case had a second, quieter consequence. Splitting an operator
that carries groups descended past the groups and split each one term by term. An
individual term is generally not Hermitian even when the group containing it is --
a UCC cluster generator holds conjugate pairs precisely so that each *group* is
Hermitian -- and the exponential of a non-Hermitian factor is not unitary. The
fermion-to-qubit stage rejected such factors with a complaint about complex
coefficients, but `expm_multiply` applied them without objection, returning a state
vector of norm ~1.8 with nothing raised anywhere.

Both follow from the same thing: a factor a synthesis method emits is finished.
Splitting it again either makes no progress or discards the very partition that was
chosen. Marking those factors atomic terminates the recursion and, with it, stops
the group-splitting that manufactured the non-Hermitian factors.

An atomic gate deliberately leaves its definition unset rather than assigning an
empty circuit: an empty definition makes `decompose()` *drop* the evolution rather
than keep it, which would silently replace it with the identity.

`inverse()` is also implemented directly now, negating the time and preserving the
operator and synthesis method. The inherited version rebuilt the gate from its
definition and returned a plain `Gate`, losing both.

Refs #298

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

8 of 8 new or added lines in 1 file covered. (100.0%)

13455 of 13702 relevant lines covered (98.2%)

481400.67 hits per line

Jobs
ID Job ID Ran Files Coverage
1 33873559976.1 04 Sep 2026 12:40PM UTC 111
98.2
GitHub Action Run
Source Files on build 33873559976
  • Tree
  • List 111
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33873559976
  • a2dc9d51 on github
  • Prev Build on main (#33872240997)
  • Next Build on main (#33876183741)
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