DDDMitigation#
- class qiskit_calculquebec.mitigation.ddd.DDDMitigation(backend, rule: str = 'xyxy', num_trials: int = 3, shots: int = 1024)#
Bases:
objectDigital Dynamical Decoupling (DDD) for MonarQ.
Inserts decoupling gate sequences into idle windows to suppress dephasing noise. Results are averaged over
num_trialsrandomized placements.- Parameters:
backend (MonarQBackend) – Calcul Québec backend.
rule (str) – DDD rule:
'xx','yy', or'xyxy'(default).num_trials (int) – Number of repetitions to average over the stochastic placement. Default: 3.
shots (int) – Shots per circuit. Default: 1024.
Examples
Default observable — P(|0…0⟩):
>>> ddd = DDDMitigation(backend, rule='xyxy') >>> result = ddd.run(circuit) >>> print(f"Raw: {ddd.run_unmitigated(circuit):.4f} DDD: {result:.4f}")
Arbitrary Pauli observable:
>>> from mitiq import Observable, PauliString >>> obs = Observable(PauliString("ZZ", support=[0, 1])) # <Z0 Z1> >>> result = ddd.run(circuit, observable=obs)
DDD combined with REM:
>>> rem = ReadoutMitigation(backend, method='m3') >>> rem.cals_from_system() >>> pm = generate_preset_pass_manager(optimization_level=0, backend=backend) >>> t = pm.run(circuit) >>> physical_qubits = ( ... [t.layout.final_layout[q] for q in t.qubits] ... if t.layout and t.layout.final_layout ... else list(range(circuit.num_qubits)) ... ) >>> ddd = DDDMitigation(backend, rule='xyxy') >>> result = ddd.run(circuit, rem=rem, qubits=physical_qubits)
Methods
run(circuit[, observable, rem, qubits])Run the circuit with DDD and return the mitigated value.
run_unmitigated(circuit[, observable, rem, ...])Run the circuit without DDD for baseline comparison.
- run(circuit, observable=None, rem=None, qubits=None) float#
Run the circuit with DDD and return the mitigated value.
Measurements are stripped before passing to mitiq in both modes:
observable mode: mitiq adds its own measurements via
observable.measure_in().float mode: the executor re-adds measurements via
measure_all()if absent.
- Parameters:
circuit (QuantumCircuit) – Circuit to execute. Measurements are handled internally by mitiq.
observable (mitiq.Observable | None) – Pauli observable to measure.
None→ P(|0…0⟩). Example:Observable(PauliString("ZZ", support=[0, 1]))rem (ReadoutMitigation | None) – Optional REM correction applied inside the executor.
qubits (list[int] | None) – Physical qubits; required when
remis provided.
- Returns:
- Mitigated ⟨observable⟩ (averaged over
num_trials), or P(|0…0⟩) if
observableis None.
- Mitigated ⟨observable⟩ (averaged over
- Return type:
float
- run_unmitigated(circuit, observable=None, rem=None, qubits=None) float#
Run the circuit without DDD for baseline comparison.
- Parameters:
circuit (QuantumCircuit) – Circuit to execute.
observable (mitiq.Observable | None) – Pauli observable to measure.
None→ P(|0…0⟩).rem (ReadoutMitigation | None) – Optional REM correction applied inside the executor.
qubits (list[int] | None) – Physical qubits; required when
remis provided.
- Returns:
Raw ⟨observable⟩, or P(|0…0⟩) if
observableis None.- Return type:
float