SimphonyBackend

class SimphonyBackend(model, parameters=None)

Lower a gate set’s native gates to pulses on a central-spin device model.

Assumes exactly one electron spin (qubit 0, microwave-driven) surrounded by nuclear spins (DDRF-driven). Serves both CROTGateSet (free-angle gates) and FixedCROTGateSet (fixed-angle), since their native gates are the same physical actions.

Binds one device model for its whole lifetime. The gate set is not bound here; pass it explicitly to compile/benchmark_*, or use PulseCompiler.

The model gives every frequency. A duration that parameters leaves empty takes its default:

  • The electron’s pi pulse lasts 6.76 ns, unless its amplitude is given. Every microwave pulse lasts this long, and its amplitude follows its rotation angle.

  • A DDRF sequence holds 4 decoupling pulses.

  • A DDRF sequence plays RF for a time \(\tau\) at either end, and for \(2\tau\) between two decoupling pulses. \(\tau\) lasts ten periods of the frequency gap between the driven nuclear transition and the nearest other nuclear transition.

Simphony orders its spins the other way from Qiskit: spin 0 is the left tensor factor. A state or an operator read from a simulation of model is in that order, and needs reversing before a comparison with Qiskit. The benchmarks reverse it themselves.

Parameters:
  • model (Any) – Simphony model of the target device.

  • parameters (PulseParameters | None) – Physical parameters. When omitted, resolved from model with the defaults above.

Raises:

ValidationError – If the model’s spins or driving fields do not match what the backend requires.

Note

Pulse compilation requires the model to define the microwave and radio-frequency driving fields listed in REQUIRED_DRIVING_FIELDS.

Attributes

model

Return the Simphony model bound to this backend.

n_qubits

Number of qubits the bound parameters describe.

parameters

Physical parameters the backend reads for this device.

Low-level API methods

analyze_driving_properties([verbose])

Report driving-spectrum diagnostics for the bound model.

append_pulses(circuit, gateset, model, ...)

Append the pulses of a native circuit to a model without clearing it.

benchmark_circuit(circuit, gateset[, verbose])

Benchmark the pulse implementation of a whole native circuit.

benchmark_gate(gate, gateset[, angle, ...])

Benchmark the pulse implementation of a single native gate.

benchmark_gateset(gateset, **kwargs)

Benchmark the pulse implementation of every native gate.

compile(circuit, gateset)

Compile a native circuit into pulses on the bound model.

pulse_template(gate, gateset)

Return the pulse template realizing a native gate.

pulse_templates_in(circuit, gateset)

Return the pulse templates a circuit actually uses.

qubit_kinds(gate, gateset)

Return the kind of spin at each of a gate's qubits.