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

Qiskit / qiskit / 34398810386
88%
main: 88%

Build:
Build:
LAST BUILD BRANCH: c-custom-gates
DEFAULT BRANCH: main
Ran 09 Sep 2026 08:34PM UTC
Jobs 1
Files 968
Run time 3min
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

09 Sep 2026 08:04PM UTC coverage: 87.933% (+0.02%) from 87.918%
34398810386

Pull #16916

github

mtreinish
Make the op contract flat, positional, and monomorphic

An op declares its arity, whether Qiskit ships an in-process implementation of
it, how to derive its result types from its operand types, and how to evaluate
itself. Operands and results are flat slices in positional order, so an op
describes its interface as two lists rather than as a tree of named ports.

That makes a dtype concrete by construction: the polymorphism the contract used
to express as `DTypeLike::Var` and `DTypeLike::Promotion` inside static type
trees is subsumed by `infer_output_types`, which is handed real operand types.
`DTypeLike`, `DTypeVar` and `DTypePromotion` go, `TensorType` pairs a `DType`
with a shape, and with the polymorphic dtype gone it derives `PartialEq`, `Eq`
and `Hash` and renders itself as `F64[4000, <=2]`.

`Store`, which held a whole data tree, becomes `Constant`, which holds one
tensor and produces one value. The catalogue moves up beside it, so an op is
reached as `ops::Add` rather than `ops::math::Add`, and what the arithmetic,
bitwise and reduction ops share lives in `ops/inference.rs` and `ops/error.rs`.

The ops still coerce their operands: dtypes promote and shapes broadcast, as
they did when a type tree expressed it. Inference is written once per family,
with each op contributing only the dtypes it accepts, so the catalogue cannot
drift towards one rule per op. Which dtypes an op admits is checked against the
dtype its operands promote to, since that is the one it computes in. So `add`
takes a bit tensor alongside a float and refuses only two bit tensors together,
and `mean` of a bit tensor is a float, which no promotion rule could have
expressed.

A value satisfies a type rather than equalling it. `Tensor::matches` admits any
size up to a bounded axis's bound, since a tensor's shape is how much of it
means something.

Two panics a caller could reach become values instead. Averaging a zero-length
axis divides by zero and yields NaN, and a delta-degree... (continued)
Pull Request #16916: Update the QuantumProgram node trait to support monomorphism

761 of 860 new or added lines in 8 files covered. (88.49%)

17 existing lines in 3 files now uncovered.

117882 of 134059 relevant lines covered (87.93%)

976570.01 hits per line

Uncovered Changes

Lines Coverage ∆ File
51
75.71
crates/providers/src/ops/bitwise.rs
25
85.39
crates/providers/src/ops/reduction.rs
18
90.16
crates/providers/src/ops/binary.rs
5
93.6
-0.24% crates/providers/src/tensor/value.rs

Coverage Regressions

Lines Coverage ∆ File
12
97.16
-0.47% crates/qasm2/src/parse.rs
3
93.05
-0.34% crates/providers/src/data_tree.rs
2
81.7
-0.03% crates/circuit/src/parameter/symbol_expr.rs
Jobs
ID Job ID Ran Files Coverage
1 34398810386.1 09 Sep 2026 08:34PM UTC 968
87.93
GitHub Action Run
Source Files on build 34398810386
  • Tree
  • List 968
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34398810386
  • Pull Request #16916
  • PR Base - ihincks/qp-02-tensor-bounds (#34398810191)
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