Changelog
All notable changes to QUASAR (quasar and its compiled backend quasarcpp). The format follows
Keep a Changelog. Entries say what changed for a user;
Breaking marks a change that needs user code to change.
[0.9.0]
Added
State preparation.
GateCompiler.compile_state(target, initial_state=None)compiles a circuit that prepares one target state.compile(circuit, initial_state=...)compiles a circuit for one known start state. Both are usually much shallower than a compile of the full unitary.state_preparation_errorgives the error of such a circuit.Pauli readout. A trailing
PauliProductMeasurementasks for one or several Pauli strings to be read. The compiled circuit ends with the native readout, andmetadata["pauli_readout_products"]maps each delivered string to the requested one. Helpers:append_pauli_readout,remove_pauli_readouts,GateSet.pauli_readouts_nativeandGateCompiler.build_pauli_readout_circuit.Resets. A
resetcompiles to the device’s own initialization. Every star gate set takesspam_qubits, the qubits the device resets and reads out together,(0,)by default. Helpers:GateSet.lower_resetsandGateSet.reset_circuit.Qiskit order. Every Pauli string QUASAR takes or returns is in Qiskit’s order: its last letter is qubit
0.XeedQ.
XeedQBackend.from_cloud_backendreads the calibration of an XeedQ device and compilesFixedCROTGateSetcircuits into pulse programs.to_xeedq_circuitandfrom_xeedq_circuittranslate a compiled circuit to and from the XeedQ toolchain’s gate names.Gate errors and durations on the gate set. Every gate set takes
single_qubit_gate_error,entangler_gate_error,gate_errors, the matching durations andreserved_qubits_by_gate.with_propertiesreturns a copy with new values.GateCompiler.estimate_errorsreturns the compilation, physical and overall error of a compiled circuit, as anErrorEstimate.Layout search.
layout_method="diagonal_search"uses one mapping for the input and the output.layout_objectiveranks the candidates by"gate_count","error"or"duration", andmetadata["duration"]holds the duration of the result.Rotation rounding. Angles close to 0, and on
FixedCROTGateSetclose to π/2, are rounded where the result stays within the tolerance.round_single_qubit_rotationsnames the angles, and()turns rounding off.Error-aware search. The error-aware strategies trade circuit depth against the gate errors.
PlateauWarningandplot_error_aware_historyreport the search.Search settings on every synthesis config:
global_search,n_trials_warm,n_trials_cold,warm_start_from_levelandrefine_best_trial.PulseCompiler.compilewarns withLayoutWarningwhen a circuit carries a qubit relabeling that its pulses do not.quasar.__version__. At import,quasarchecks that the installedquasarcppis the version it was released with.ConvergenceError,ErrorEstimate,LayoutWarning,LicenseErrorandPlateauWarningare exported from the package root.The
plotextra installs whatplot_error_aware_historyand the tutorials’ drawings need.New tutorials: Qubit Layout and State Preparation and Pauli Readout. The other four tutorials cover the error model.
Changed
Breaking. Gate errors come from the gate set. The configs take no error arguments (
layer_error).Breaking. Error-aware searches decide by one overall error, which combines the compilation error with the gate errors. No config takes a
cost_function.Breaking.
metadata["error_aware"]names its errorscompilation_error(wasdecomposition_error),physical_error(wasestimated_gate_error) andoverall_error(new).Breaking.
layout_objectiveexists only onAdaptiveConfigandTreeSearchConfig. An error-aware config always minimizes the overall error.Breaking. Config names and values:
QiskitConfig.seed_transpiler→seed;use_basin_hopping(a number) →global_search(a name);parallel_modeandverbositytake names instead of numbers.Breaking. A synthesis that misses
tolerance_errorraisesConvergenceErrorinstead ofBackendError.Breaking. Pauli readouts:
append_pauli_measurement→append_pauli_readout, andremove_pauli_measurement→remove_pauli_readouts, which returns a list of strings.GateCompiler.build_pauli_readout_circuit(pauli_readout, compiled)takes nosuffix_permutation.Breaking. A gate set describes its topology by placements (qubit tuples) instead of pairs.
EdgeEntanglerGateSetis renamedEntanglerGateSet.TwoQubitNativeGateandSynthesisDescriptionare no longer part of the documented API.Breaking.
CNOTGateSetandCRXGateSetlower single-qubit gates torzandrxinstead ofrzandr.Breaking. No gate set has an
idgate.GateCompiler.compiledrops anidor adelayfrom its input. In a native circuit given toPulseCompiler, anidplays nothing and adelayraisesValidationError.Breaking. Pulse parameters: one
PulseParametersrecord per device, withDriveParameters,NuclearParameters,DriveStrengthandDeviceParameters. A backend is built from it:SimphonyBackend(model, parameters=None),XeedQBackend(parameters)..configanddefault_config()become.parameters, andpulse_recipe(gate)becomespulse_template(gate, gateset).AdaptiveConfig.level_mindefaults to 0, so a target that needs no entangler gets none.Error-aware configs return at least one entangler by default (
level_min/layer_min= 1).Every strategy runs a cold trial by default, and searches to depth 25 instead of 20 (
level_max/layer_max).compressdefaults toNone: the gate set decides, and every gate set of this package compresses.The tolerance is an average gate infidelity, and a state infidelity for a state target.
With a
seed, a compile returns the same circuit on every run, also when the backend runs on several threads. A seed is a non-negative Python or NumPy integer.A frame change (
rz) reserves no qubit when a duration is scheduled.quasarneeds NumPy 2 or later, and no longer installsqiskit-aer.The
simphony-backendextra installs simphonyv0.2.1.The macOS wheels install on macOS 15 and later.
Removed
SimphonyConfig,XeedQConfig,SingleQubitDrive,ConditionalTransitionandEntanglerCalibration.PulseParametersreplaces them.ErrorAwareTreeSearchConfig.scouting_trials.n_trials_warmandn_trials_coldreplace it.FixedCROTGateSet.rotation_ansatz_layer_errors.GateSet.readable_qubits.spam_qubitsnames the qubits the device reads, andpauli_readouts_native()the Pauli strings it reads directly.
Fixed
layout_method="full_search"ranked every candidate the same, so it kept the first mapping it tried.Wrong arguments to the compiled backend raise a Python exception instead of ending the process.
Three cases where the compiled backend could crash.
cu’s fourth parameter survives conversion.compilation_error,estimate_errors,state_preparation_errorandcompile(..., initial_state=...)raiseValidationErrorfor a circuit that holds a Pauli readout, a reset or a measurement.A state whose norm is not 1 raises
ValidationError.A
delaycompiled on the Qiskit path raised Qiskit’sQiskitErroron every gate set butCROTGateSet.An
rxorrrotation within rounding of zero is dropped, and plays no pulse.append_pauli_readoutrefuses an all-Istring and an unknown letter withValidationError.FixedCROTGateSet.rotation_ansatzdoes the same for an unknown edge.A negative
level_min,layer_maxortolerance_error, and anoptimization_leveloutside 0 to 3, raiseConfigErroron every config.
[0.5.1]
Added
FixedCROTGateSetchooses the rotation each layer and the closing layer put on a qubit.
Changed
A
ugate lowers to the fewestsxits angle allows.
[0.5.0]
First public release: gate-level compilation for star-topology central-spin devices
(CROTGateSet, FixedCROTGateSet, CNOTGateSet, CRXGateSet); adaptive, tree-search and
error-aware synthesis strategies; boundary-permutation layout search; the Qiskit-transpiler
path; pulse-level compilation through Simphony and XeedQ; licence-checked compiled backend.