Added
- Define Custom Operations via the C API (#16549)
- Add base implementation of
LoweringPassManager(#17105) - Define
PassandPassContexthandles for Python (#17104) - Add implementation of IR handle extraction (#17103)
- Define Python API for Rust-native
PassManager(#17089) - Add Delay with units of
Dtto the C API (#16915) - Expose the pass manager to C (#16839)
- Add
VtableEntryto C API (#17055) - Centralise dynamic-typing subsystem (#17050)
- Add MCTS to default HLS synthesis plugin for PauliEvolution gates (#16879)
- QPY: C API (#16881)
- Add access to
QkParamtypes from the C API (#16936) - A pass manager in Rust (#16820)
- feat(dagcircuit): allow DAGCircuit.op_nodes to accept iterable of operation types (#16552)
- Add dirty-ancilla Maslov MCX synthesis (#16815)
- Add non-allocating instruction views to C API (#16798)
- Implement
SparseObservable.to_matrix(#16809) - Add
ParameterExpression.structurally_equalviaSymbolExpr::eq_exact(#16952) - Implement
MCTSalgorithm for synthesizingPauliEvolutiongates (#16581) - QPY 18: store each ParameterVector once and reference it by index (#16846)
- Add barrier label rendering with barrier_label_len to the Rust circuit drawer (#16598)
- feat: add
qk_obs_with_capacity(#16889) - Update Register pack for QPY v18 (#16813)
- Improved synthesis of MCXGate without ancillas (#16693)
- Allow null pointer in
qk_circuit_barrier(#16797) - Expose
n_localto C API (#16295) - New efficient decomposition of
MCPhaseGate(#16550) - Synthesize controlled RCCX with an exact compact decomposition (#16657)
- Parameter
labeladded to all QuantumCircuit gate-methods that produce a single gate (#16373) - Make a shallow copy of
metadatain QuantumCircuit <> DAG conversion (#16142) - Rewrite OpenQASM 2 expression parser as iterative (#16425)
- Allow transpile() to accept a Target as the backend positional argument (#15954)
- Use ParameterExpression.numeric() in SparsePauliOp.simplify (#16345)
Fixed
- Raise ValueError when BitArray samples do not fit in num_bits (#17123)
- Preserve seeded pass-manager qubit metadata (#16827)
- Fix divide by zero in
QDrift.expand(#17117) - Leave unitaries unchanged when UnitarySynthesis has no basis or target (#16944)
- Make null-freeing uniform across the C API
qk_*_freefunctions (#17067) - QPY ancilla registers handling (#16836)
- Rename identifiers colliding with OpenQASM 3 built-in constants (#16183)
- Fix star-import of
qiskit.visualization(#17008) - Fix potential panics in QPY deserialization on malformed payloads (#16973)
- Fix:
CouplingMapstoring parallel edges (#16988) - Avoid hard allocation abort from QPY provided sizes (#16966)
- Fix GIL deadlock in
CommutationAnalysiswith Python-defined gates (#16963) - Fix Litinski transformation on PPR with 32+ qubits (#16950)
- Fixed
HighLevelSynthesisqubit tracking for if-then-else instructions (#16896) - Apply to_instruction parameter_map to definition.global_phase (#16234)
- Fix BlueprintCircuit.compose to respect inline_captures (#16538)
- fix(transpiler): preserve layout in OptimizeSwapBeforeMeasure (#16920)
- Fix identity one-qubit gates in the U and U3 Euler bases (#16834)
- Accumulate add/sub in
SymbolExpron the fly (#16753) - fix template optimization bug (#10151)
- Bug-Fix: BarrierBeforeFinalMeasurements can reorder measurements sharing the same Clbit and change circuit semantics (#16900)
- Fix ParameterExpression equality for inverse vs negative power (#16840) (#16883)
- Keep identical summands when running
FindCommutingPauliEvolutions. (#16892) - Implement
DropforSymbolExpriteratively (#16775) - Port synth_cnot_phase_aam to Rust (#12937)
- Fix
DAGCircuit.__eq__withUnitary,PPRs andPPMs (#16826) - Fixed Litinski transformation on PPMs with negative phases (#16880)
- Fix spurious clone on
SparsePauliOp.to_matrix(sparse=False)(#16828) - QPY: Bug fix in Rust implementation of
SparsePauliObservableElemPack(#16788) - Preserve MCPhase parameters in MCX synthesis (#16781)
- Reject multi-qubit Solovay-Kitaev basis gates (#16718)
- Sum VF2Layout average errors in a deterministic order (#16732)
- Fix add/sub optimizations including the same symbols (#16752)
- Reimplement SymbolExpr::eval to be iterative (#16756)
- dagcircuit: transfer DAG-level variables in
substitute_node_with_dag(#15542) - Fix memory leak in Suzuki-Trotter synthesis (#16687)
- Fix OptimizeCliffordT producing non-unitarily-equivalent output when basis excludes sx/sxdg (#16729)
- Fix potential panic in DAGCircuit.depth by bumping rustworkx-core to 0.18.1 (#16686)
- Parameter expression bugfixes (#16283)
- Update to
rsgridsynth0.2.2 (#16685) - Consistent identity removal for
ConsolidateBlocks(#16082) - Preserve StatePreparation width in inverse (#16431)
- Fix circuit drawing layer overlaps inside of ControlFlowOps (#16639)
- Fix non-determinism in
DAGCircuit::remove_qubits(#16656) - Fix serial_layers global phase copying (#16362)
- Fix deadlock in Optimize1qGatesDecomposition (#16592)
- Fix transpiler error message with routing_pass when layout_trials or swap_trials is set (#16637)
- Clarify error message about gate missing from WrapAngleRegistry (#16633)
- Fix
sxresynthesis of negative angles inCommutativeCancellation(#16599) - Use target error rates when selecting Euler basis in Optimize1qGatesDecomposition (#16575)
- Fix commuting2q block parameter preservation (#16459)
- Fix tautological boolean oracle synthesis (#16530)
- fixes #11393 sampled_expectation_value returning incorrect results for complex coefficients (gave 0.0 rather than 1j) (#16443)
- Fix OverflowError in QuantumCircuit.for_loop for negative integers in list indexset (#16432)
- Fix
Initialize.gates_to_uncomputefor integer inputs (#16492) - Fix incorrect global phase shift for P and U1 gates in CommutativeCancellation (#16402)
- Fix qasm3 experimental exporter delay units for ms and ps (#16233)
Changed
- Add Delay with units of
Dtto the C API (#16915) - Disable multiprocessing by default on Linux (#16904)
- Add
Param::Intvariant forDtin Rust. (#16768) - OQ2 import: Move custom-instruction expression evaluation fully into Rust (#16697)
- Split
PyDAGCircuitandDAGCircuit(#16471) - QPY: make custom gate names deterministic (#16843)
- Narrow QPY 18 SPARSE_OBSERVABLE bit terms from uint16_t to uint8_t (#16800)
- QPY 18: give the register/clbit payload a tag byte instead of a "\x00"-prefixed string (#16765)
- Qpy v18 big endian (#16707)
Build System
Performance
- Faster Heisenberg-frame evolution of Paulis by
Clifford(#16842) - Migrate synth_mcx_{1,2}_kg24 to Rust (#16783)
- speed up case of
BasePauli._evolve_clifford(#16835) - Port synth_mcx_noaux_sp22 to Rust (#16818)
- Port synth_cnot_phase_aam to Rust (#12937)
- Allow
calloc-like optimisations inSparsePauliOpallocations (#16830) - Port synth_mcp_noaux_sp22 to Rust (#16755)
- Port the Quantum Fourier Transform (QFT) all-to-all implementation to Rust (#16789)
- Allow null pointer in
qk_circuit_barrier(#16797) - Migrate synth_mcx_n_clean_m15 to Rust (#16703)
- Migrate synth_mcx_1_clean_b95 synthesis to Rust (#16710)
- Remove redundant name check when adding
QuantumCircuitregisters. (#16678) - Simplify optimization loops in Clifford+T pass manager (#16406)
- Fix cache and prediction misses in
Target::qargs(#16476)