Transmon single-qubit gates
Task ids: transmon/XGate-v0, transmon/SXGate-v0. Model:
qenvs.models.transmon.Transmon. Environment: qenvs.envs.gate.GateControl.
Gate tools: qenvs.gates.
A multi-level transmon (a weakly anharmonic Duffing oscillator) driven by two quadratures, I and Q, in the rotating frame of the drive. The agent or optimiser builds a gate, not a state: the environment state is the propagator of the whole pulse so far, and the reward is the average gate fidelity on the computational subspace \(\{|0\rangle, |1\rangle\}\). Population that leaks to \(|2\rangle\) counts as error.
Units
Time is in nanoseconds (ns). Angular frequencies, including the Hamiltonian,
the actions and action_bound, are in rad/ns. Parameters you type are
ordinary frequencies in GHz (anharmonicity_ghz, detuning_ghz,
max_rabi_ghz), converted with \(\omega = 2\pi f\), and coherence times in
microseconds (t1_us, t2_us). \(\hbar = 1\). An action of
\(\Omega = 2\pi \times 0.05\) rad/ns is a 50 MHz Rabi frequency, and a constant
\(\Omega_I\) for \(\pi/\Omega\) ns is an X gate.
import jax.numpy as jnp
import qenvs
from qenvs.tasks.transmon import reference_actions
env = qenvs.make("transmon/XGate-v0") # closed, 3 levels, 16 x 2 ns
actions = reference_actions("transmon/XGate-v0", env) # Gaussian DRAG baseline, rad/ns
state, rewards = env.rollout(actions) # state.qstate = 3 x 3 propagator
print(env.fidelity(state.qstate), env.leakage(state.qstate)) # about 1 - 4.9e-6, 4.3e-6
noisy = qenvs.make("transmon/XGate-v0", t1_us=100.0, t2_us=100.0) # 9 x 9 superoperator
GRAPE through the environment (examples/grape_jax.py):
python examples/grape_jax.py --task transmon/XGate-v0 --steps 300 --json
python examples/grape_jax.py --task transmon/SXGate-v0 --set t1_us=150 --set t2_us=120 --json
Physics
Rotating-frame Hamiltonian (rotating-wave approximation, frame at the drive
frequency \(\omega_d\)), truncated to levels = \(d\) states, \(n = a^\dagger a\):
The level energies in the rotating frame are \(E_n = \Delta n + \alpha n (n-1)/2\), so \(E_2 - E_1 = \Delta + \alpha\): the \(1 \to 2\) transition sits \(\alpha\) below the qubit transition (Koch et al. 2007; Krantz et al. 2019, Sec. II).
Controls. Two channels in the order [Omega_I, Omega_Q]. With
\(\varepsilon = \Omega_I + i \Omega_Q\) the drive term is
\((\varepsilon a^\dagger + \varepsilon^* a)/2\). For \(d = 2\) the control operators
are exactly \(\sigma_x/2\) and \(\sigma_y/2\) in the computational basis (index 0 =
ground, index 1 = excited, \(\sigma_y = [[0, -i], [i, 0]]\)), so constant controls
give \(R_\phi(\theta) = \exp[-i \tfrac{\theta}{2}(\cos\phi\, \sigma_x + \sin\phi\, \sigma_y)]\)
with \(\theta = \Omega T\), \(\Omega_I = \Omega \cos\phi\), \(\Omega_Q = \Omega \sin\phi\).
Before the RWA these controls correspond to a lab-frame drive
\([\Omega_I(t) \cos\omega_d t + \Omega_Q(t) \sin\omega_d t]\,(a + a^\dagger)\)
(our own derivation: move to the frame \(e^{i\omega_d n t}\) and drop terms at
\(2\omega_d\); not cross-checked against a lab-frame simulation).
Dissipation (Lindblad, only when t1_us and/or t2_us is given):
- Relaxation uses the harmonic ladder: level \(n\) decays to \(n - 1\) at rate \(n / T_1\) (matrix element \(\sqrt{n}\)). This is an approximation for a transmon, whose ladder matrix elements are only approximately harmonic.
- Pure dephasing \(L_\phi \propto n\) makes the \(m\)-\(n\) coherence decay at \((m - n)^2 / T_\phi + (m + n)/(2 T_1)\); the 0-1 coherence decays at exactly \(1/T_2\). White (Markovian) noise only: no \(1/f\) noise, no echo-dependent \(T_2\).
- \(T_2 \le 2 T_1\) is enforced (
ValueErrorotherwise).t1_usalone means \(T_2 = 2 T_1\);t2_usalone means \(T_1 = \infty\) and \(T_\phi = T_2\). - The dissipator is that of the undriven transmon, applied unchanged during the pulse.
Gate fidelity and leakage
Let \(k = 2\) be the size of the target \(U_t\) and \(P\) the projector on the first \(k\) levels.
Unitary (closed system). Pedersen, Moller and Molmer (2007), with \(M = P U_t^\dagger U P\) (\(k \times k\)):
The second form of \(L\) (equal for unitary \(U\)) is what the code evaluates; it avoids cancellation for tiny leakage. \(F\) ignores global phases but counts relative phases, i.e. Z errors. No virtual-Z frame correction is applied: a pulse that implements X up to a Z rotation is penalised.
Channel (open system). The average over Haar-random pure inputs inside the computational subspace of the overlap with the ideal output (Wood and Gambetta 2018, Eqs. (5) and (6)):
This reduces to the unitary formula when \(\mathcal{E}\) is unitary (checked).
tests/test_gate_env.py also checks it against a direct average over the six
Pauli eigenstates (a qubit 2-design) for a leaky 3-level channel.
Vectorisation. dynamiqs 0.3.6 uses column stacking,
\(\mathrm{vec}(\rho)_{i + d j} = \rho_{ij}\), for dq.vectorize and
dq.mepropagator (tested: \(S\,\mathrm{vec}(\rho_0)\) matches mesolve to
\(10^{-8}\)). Hence \(\mathrm{vec}(U\rho U^\dagger) = (\bar U \otimes U)\,\mathrm{vec}(\rho)\),
qenvs.gates.unitary_to_superop. Feeding a row-stacking superoperator
\(U \otimes \bar U\) to the column-stacking formulas is the same as replacing \(U\)
by \(\bar U\). Leakage and the fidelity against real targets (X, Z, H, \(R_y\)) are
unchanged by that swap, and so is Y (its conjugate is \(-Y\), a global phase), but the
fidelity against a target whose conjugate is not proportional to it (SX, \(R_z(\theta)\))
is not: for a random 3-level unitary (np.random.default_rng(2)) the fidelity
against SX is 0.55355 with column stacking and 0.35396 with the swap
(tests/test_gate_env.py pins both numbers). apply_superop is not invariant
either. Always use unitary_to_superop and apply_superop, never raw reshapes.
Environment
- State:
state.qstateis the accumulated map: the \(d \times d\) propagator \(U\) (closed) or the \(d^2 \times d^2\) superoperator \(S\) (open), both starting at the identity. Each step multiplies by the step propagator of constant controls, fromdq.sepropagator/dq.mepropagator. - Solver:
method = Expm()(default) exponentiates the generator exactly for piecewise-constant controls. ODE methods are allowed; note thatTsit5()with default tolerances differs fromExpm()by about \(4 \times 10^{-5}\) in the matrix elements of a 16-step map, so tightenrtol/atolif you use it. - Actions:
[Omega_I, Omega_Q]in rad/ns, held fordtns, clipped to \(\pm\)action_boundper channel (box constraint, not a bound on \(\sqrt{\Omega_I^2 + \Omega_Q^2}\)). Actions are cast to the default float dtype (float64 under x64). - Observation: real and imaginary parts of the flattened map plus \(t/T\): \(2 d^2 + 1\) numbers closed (19 for 3 levels), \(2 d^4 + 1\) open (163).
- Done:
doneis False after steps 1 tohorizon - 1and True after stephorizon; the last observation entry is then exactly 1.0 (the time fraction). - Reward: per-step gain of \(F\); the return is \(F_T - F_0\) with \(F_0 = F(\mathbb{1}, U_t)\) = 1/3 for X and 2/3 for SX.
- info:
fidelity,leakage(gate quantities above), and the model observablesp0...p{d-1}andstate_leakage(population outside \(\{0, 1\}\)) evaluated on the map applied tomodel.initial_state()(|0> by default). The model observable namedleakageis renamedstate_leakageininfoto keep it apart from the gate leakage. jax.jit(jax.vmap(env.step)),jax.gradthroughenv.rollout(closed and open; checked against finite differences) andexamples/grape_jax.run_grapework.
Parameters and defaults
| kwarg | default | unit | meaning |
|---|---|---|---|
horizon |
16 | steps | control steps; gate time horizon * dt |
dt |
2.0 | ns | control period (16 x 2 ns = 32 ns gate) |
action_bound |
\(2\pi \times 0.05 = 0.31416\) | rad/ns | primary bound on each of $ |
max_rabi_ghz |
(unset) | GHz | alternative: action_bound = 2 pi max_rabi_ghz; giving both raises |
levels |
3 | transmon levels kept; 2 = ideal qubit | |
anharmonicity_ghz |
-0.34 | GHz | \(\alpha / 2\pi\) |
detuning_ghz |
0.0 | GHz | \(f_q - f_d\) |
t1_us |
None | us | \(T_1\); any of t1_us / t2_us switches to Lindblad dynamics |
t2_us |
None | us | \(T_2 \le 2 T_1\) |
method |
Expm() |
dynamiqs method per step |
Typical values. Krantz et al. (2019) state that transmon anharmonicities are negative and usually designed to \(|\alpha|/2\pi\) = 100 to 300 MHz (Sec. II; "typically around 200 to 300 MHz", Sec. IV), and that intrinsic coherence times have reached above 100 us (Sec. V). The default -0.34 GHz and the examples with \(T_1, T_2\) of 100 to 200 us are representative choices of ours for current fixed-frequency devices, not values taken from that reference. For a specific IBM backend, use the per-qubit anharmonicity, \(T_1\) and \(T_2\) from its published calibration data. The default 32 ns gate is meant to be of the order of single-qubit gate lengths on current superconducting hardware (check your backend's reported gate length); arbitrary waveform generators sample much faster than our 2 ns control period.
IBM backends calibrate X and SX with one shared pulse duration, whereas the two tasks here are free to use any waveform. IBM calibrations also use virtual-Z frame updates, which this model does not (see Known limitations), so fidelities here against targets that differ by a Z rotation are stricter than on that hardware.
DRAG
gaussian_drag(horizon, dt, amplitude, sigma, beta) returns a (horizon, 2)
pulse: a Gaussian centred in the window and lifted to vanish at \(t = 0\) and
\(t = T\) on I, and \(\Omega_Q = \beta\, d\Omega_I/dt\) (analytic derivative) on Q,
both sampled at step midpoints. gaussian_amplitude(angle, ...) sets the area.
Coefficient in this sign convention. On resonance the \(1 \to 2\) transition is driven by the Fourier component of \(\varepsilon(t) = \Omega_I + i\Omega_Q\) at frequency \(\alpha\). For \(\varepsilon = \Omega_I + i\beta\dot\Omega_I\), integration by parts gives \(\int \varepsilon\, e^{i\alpha t} dt = (1 + \beta\alpha) \int \Omega_I e^{i\alpha t} dt\), so first-order leakage vanishes at
drag_beta(anharmonicity_ghz, "leakage" | "phase") returns these (ns; positive
for a transmon). This is the DRAG idea of Motzoi et al. (2009), a second
quadrature proportional to the derivative of the first; Gambetta et al. (2011)
develop the general family of such corrections. The magnitudes match Krantz et
al. (2019), Eq. (101), \(Q = \lambda\, \dot s / \alpha\) with \(\lambda = 1\) for
leakage and \(\lambda = 0.5\) for phase errors; our sign is opposite, which we
attribute to a different sign convention for the Q quadrature (we did not trace
it). Lucero et al. (2010) call the phase-optimal choice "half derivative". If
your hardware stack defines the drive as \(\mathrm{Re}[(I + iQ) e^{i\omega_d t}] = I\cos - Q\sin\),
then \(\Omega_Q = -Q\) relative to ours, and so is the sign of \(\beta\). We have not
compared numerically with Qiskit Dynamics' transmon examples or with the
Qiskit Drag pulse convention, so check the sign on your setup (flipping it
increases leakage, which tests/test_transmon.py asserts).
Measured sweep (closed, 3 levels, \(\alpha/2\pi = -0.34\) GHz, X gate, \(\sigma = T/4\), \(dt = 0.25\) ns, \(\beta\) swept on \([0, 2\beta_{\mathrm{theory}}]\) with 41 points then refined to 0.25 %; float64):
| \(T\) (ns) | peak \(\Omega_I/2\pi\) (MHz) | \(L(\beta=0)\) | \(\min_\beta L\) | \(\beta^\star_L / \beta_L\) | \(1-F(\beta=0)\) | \(\min_\beta (1-F)\) | \(\beta^\star_F / \beta_\phi\) |
|---|---|---|---|---|---|---|---|
| 8 | 117 | 3.69e-04 | 2.22e-06 | 1.037 | 1.47e-02 | 2.26e-04 | 0.980 |
| 10 | 93 | 1.02e-04 | 5.74e-10 | 0.948 | 9.35e-03 | 7.99e-05 | 0.985 |
| 12 | 78 | 5.70e-05 | 8.16e-10 | 0.980 | 6.51e-03 | 4.09e-05 | 0.990 |
| 16 | 58 | 1.84e-05 | 2.74e-10 | 0.980 | 3.66e-03 | 1.30e-05 | 0.995 |
| 20 | 47 | 8.19e-06 | 4.22e-10 | 0.978 | 2.34e-03 | 5.31e-06 | 0.997 |
The leakage-optimal \(\beta\) is within 5.2 % of \(-1/\alpha\) and the fidelity-optimal \(\beta\) within 2 % of \(-1/(2\alpha)\) for every length. At \(\beta_L\) leakage drops by 4 to 5 orders of magnitude (from 10 ns on) but the fidelity barely improves, because the drive-induced phase error dominates; at \(\beta_\phi\) the infidelity drops 65x to 440x. The remaining infidelity is higher order (and would need the detuning correction of Motzoi et al., not implemented here).
Default task grid (16 x 2 ns, \(\sigma = 8\) ns, closed unless stated, float64):
| pulse | \(1 - F\) (closed) | \(L\) (closed) | \(1 - F\) (\(T_1 = T_2 = 100\) us) |
|---|---|---|---|
| Gaussian, \(\beta = 0\) | 9.07e-04 | 2.35e-06 | 1.07e-03 |
DRAG \(\beta_\phi\) (reference_actions) |
4.85e-06 | 4.31e-06 | 1.65e-04 |
| DRAG \(\beta_L\) | 9.25e-04 | 6.84e-06 | 1.09e-03 |
| GRAPE, 300 Adam steps (lr 0.1, seed 0, 1.9 s CPU) | 4.7e-15 | 1.67e-04 | |
| idle-decoherence reference \(1 - (2F_{\mathrm{pro}}+1)/3\) for 32 ns | 1.60e-04 |
The idle-decoherence reference is the infidelity of an idle qubit against the identity over the gate duration. It sets the scale of the coherence limit, but it is not a lower bound on the infidelity of a gate: the DRAG and GRAPE rows (1.65e-04 and 1.67e-04) are 3 to 4 percent above it here, and a driven gate need not have the same T1 and T2 error as an idle qubit.
With 2 ns sample-and-hold the spectrum of the piecewise-constant pulse is no
longer the smooth Gaussian, so \(\beta_L\) does not minimise leakage on this grid.
GRAPE (run_grape, closed X, 3 levels) passes \(F > 0.999\) after 30 to 60 Adam
steps for seeds 0, 1, 2 at lr 0.05 and 0.1 (history sampled every 10 steps) and
the SX task behaves the same; with \(T_1 = T_2 = 100\) us it reaches the
coherence limit of the 32 ns window.
Validation
All checks live in qenvs.validation.transmon.CHECKS, run in
tests/test_transmon.py (float64 via the test conftest, and once more in a
float32 subprocess) and are printed by qenvs validate. Measured on CPU,
dynamiqs 0.3.6, jax 0.10.2, qutip 5.3.1.
| Check | Reference | Tol | Error x64 | Error float32 |
|---|---|---|---|---|
qubit_limit_gates |
levels 2: \(H_I = \sigma_x/2\), \(H_Q = \sigma_y/2\); \(\Omega_I T = \pi\) gives X; \(\Omega_Q T = \pi/2\) gives \(R_y(\pi/2)\) (sign-sensitive) | 2e-6 | 8.9e-16 | 4.8e-7 |
rabi_units |
25 MHz Rabi flips at \(1/(2f) = 20\) ns; 20 MHz detuned: \(P_1 = \Omega^2/(\Omega^2 + \Delta^2)\) at \(t = \pi/\sqrt{\Omega^2+\Delta^2}\) | 1e-6 | 0 | 1.5e-8 |
drift_spectrum |
4 levels, idle 1.5 ns: \(U = \mathrm{diag}(e^{-iE_n t})\), \(E_n = 2\pi(0.013 n - 0.155 n(n-1))\) | 1e-5 | 4.7e-16 | 1.5e-7 |
fidelity_closed_forms |
\(R_z(\theta)\) vs I: \((2 + 4\cos^2(\theta/2))/6\) (unitary and superoperator); \(\lvert 1\rangle \leftrightarrow \lvert 2\rangle\) permutation: \(F = 1/3\) vs I, \(1/6\) vs X, \(L = 1/2\); \(F(\mathbb{1}, X) = 1/3\), \(F(\mathbb{1}, SX) = 2/3\) | 1e-9 (x64), 10 eps (f32) | 2.2e-16 | 4.0e-8 |
closed_open_agree |
16 random I/Q steps: \(S\) with \(T_1 = T_2 = 10^6\) us vs \(\bar U \otimes U\); \(F\) against SX, H, \(R_z(0.7)\), Y and \(L\) from both formulas | 1e-5 | 6.5e-8 | 3.4e-6 |
info_observables_orientation |
closed and open (T1 = 50 ns, T2 = 40 ns), 3 levels, 10 MHz detuning, initial \(\lvert 1\rangle\), 16 random I/Q steps: info \(p_0, p_1, p_2\) and state_leakage vs \(\lvert U_{k1}\rvert^2\) and \(\mathrm{diag}\,S\,\mathrm{vec}(\lvert 1\rangle\langle 1\rvert)\) from an independent numpy reference (exponentials built in numpy); fails if the transposed map would not change the result |
1e-9 (x64), 100 eps (f32) | 3.2e-15 | 1.6e-7 |
sx_orientation |
levels 2, \(\Omega_I T = \pi/2\): \(e^{i\pi/4} U = \mathrm{SX}\) elementwise (global phase fixed analytically; SX\(^\dagger\) is 1.0 away), so SX is told apart from its adjoint | 2e-6 | 6.3e-16 | 1.1e-7 |
idle_coherence_fidelity |
levels 2 and 3, \(T_1 = 40\) ns, \(T_2 = 50\) ns, 32 ns idle: \(F = (2F_{\mathrm{pro}} + 1)/3\), \(F_{\mathrm{pro}} = (1 + e^{-t/T_1} + 2e^{-t/T_2})/4\) | 1e-6 | 8.9e-16 | 1.9e-7 |
harmonic_t1_ladder |
from \(\lvert 2\rangle\): \(P_2 = e^{-2t/T_1}\), \(P_1 = 2(e^{-t/T_1} - e^{-2t/T_1})\) | 1e-6 | 3.9e-16 | 1.4e-7 |
superop_trace_preserving_cp |
open random pulse: \(\lvert\operatorname{tr} S(\rho) - 1\rvert\), Hermiticity on 5 random \(\rho\), Choi matrix negativity | 1e-6 | 4.4e-16 | 2.4e-7 |
drag_coefficient |
12 ns X: \(\lvert\beta^\star/\beta_{\mathrm{th}} - 1\rvert\) for leakage (\(-1/\alpha\)) and fidelity (\(-1/(2\alpha)\)); fails unless \(L\) drops 100x and \(1-F\) 50x vs \(\beta = 0\) | 0.05 | 2.0e-2 | 2.0e-2 |
qutip_cross_check |
QuTiP 5, independent construction from GHz / us: open mesolve from a random \(\rho_0\) (\(T_1 = 30\) ns, \(T_2 = 25\) ns, 12 random I/Q steps) and closed propagator |
1e-5 | 2.6e-11 | 5.9e-7 |
solver_convergence |
default Expm() vs Tsit5(rtol=atol=1e-10), closed and open 16-step maps |
1e-4 | 2.3e-9 | 8.9e-6 |
env_return_equals_gain |
\(\sum_k r_k = F_T - 1/3\), closed and open | 1e-6 | 1.1e-16 | 3.6e-8 |
qubit_limit_gates has a 2e-6 tolerance (4x its float32 error; the float64 error
is 1e-15) so that single-precision matrix exponentials do not make it flaky.
solver_convergence has a looser tolerance because in float32 the Pade matrix
exponential is off by about 6e-7 per 2 ns step and these errors add up over the
16 steps; in float64 the difference is 2e-9.
Discrimination: we ran the checks against deliberately broken versions: Q sign
flipped, I control doubled, detuning without \(2\pi\), anharmonicity sign flipped,
\(\alpha n^2/2\) instead of \(\alpha n(n-1)/2\), relaxation rate doubled, relaxation
via \(a^\dagger\), dephasing \(\sqrt{1/T_\phi}\,n\), \(1/T_\phi = 1/T_2\), \(T_1\) in
ns instead of us, half-transposed superoperator indices, Pedersen denominator
\(k^2\), \(\operatorname{Tr}(MM^\dagger)\) replaced by \(k\), leakage without \(1/k\)
(unitary and channel), conjugated target in the channel fidelity, drag_beta
sign flipped, DRAG Q without the amplitude factor, map composition order
reversed, reward scaled by 1.01. Every one fails at least one check.
The GateControl mutants that the physics checks cannot see are pinned by
tests/test_gate_env.py, each verified to fail: the closed and open info map
transposed (m.T @ psi0; also caught by info_observables_orientation), the
fidelity computed against target.T, done = step > horizon, and actions cast
to float32 under x64. Replacing SX by its adjoint fails sx_orientation.
Assumptions and validity
- Rotating-wave approximation in the drive frame; valid for \(|\Omega|, |\Delta|, |\alpha| \ll \omega_q\) (GHz-scale qubit, tens of MHz of drive). Counter-rotating terms and Bloch-Siegert shifts are not modelled.
- Duffing truncation: \(H\) keeps only the Kerr term \(\alpha n(n-1)/2\), which is accurate for the lowest levels of a transmon with large \(E_J/E_C\) (Koch et al. 2007); higher-order corrections to level energies and to the charge matrix elements are dropped (the drive couples through \(a + a^\dagger\) with harmonic matrix elements \(\sqrt{n}\)).
- Harmonic \(T_1\) ladder, white-noise dephasing, undriven dissipator (see above).
- Piecewise-constant controls on a
dtgrid; no transfer function, bandwidth limit, rise time or amplitude noise of the control electronics. - Classical, deterministic controls; no drive-line crosstalk.
Known limitations
- Single qubit only: no couplers, no two-qubit gates (CR, CZ) yet.
- No readout, no measurement-induced dephasing, no state preparation errors.
- No virtual-Z gates: the fidelity is not maximised over Z frame updates.
- The default 2 ns control period is coarse compared with hardware AWGs;
smaller
dtwith largerhorizonis supported but costs more steps. action_boundis a per-channel box, not an amplitude-circle constraint.toolkit.run_rollout's genericpi-pulsepolicy puts \(\pi/T\) on both channels, which is not an X gate here (it gives \(F \approx 0.54\)); useqenvs.tasks.transmon.reference_actionsfor a physical baseline.- Coherence parameters must be Python floats (not traced arrays) because the presence of jump operators is decided when the model is built.
qutip_cross_checkneeds theqenvs[dev]extra; without QuTiP it is reported as skipped.
References
- J. Koch, T. M. Yu, J. Gambetta, A. A. Houck, D. I. Schuster, J. Majer, A. Blais, M. H. Devoret, S. M. Girvin and R. J. Schoelkopf, "Charge-insensitive qubit design derived from the Cooper pair box", Phys. Rev. A 76, 042319 (2007). Transmon, negative anharmonicity.
- P. Krantz, M. Kjaergaard, F. Yan, T. P. Orlando, S. Gustavsson and W. D. Oliver, "A quantum engineer's guide to superconducting qubits", Appl. Phys. Rev. 6, 021318 (2019). Typical anharmonicity and coherence (Secs. II, V), DRAG Eq. (101) with \(\lambda = 0.5\) (phase) and 1 (leakage).
- F. Motzoi, J. M. Gambetta, P. Rebentrost and F. K. Wilhelm, "Simple pulses for elimination of leakage in weakly nonlinear qubits", Phys. Rev. Lett. 103, 110501 (2009). DRAG: a second quadrature proportional to the time derivative of the first.
- J. M. Gambetta, F. Motzoi, S. T. Merkel and F. K. Wilhelm, "Analytic control methods for high-fidelity unitary operations in a weakly nonlinear oscillator", Phys. Rev. A 83, 012308 (2011). General family of DRAG-type solutions.
- E. Lucero et al., "Reduced phase error through optimized control of a superconducting qubit", Phys. Rev. A 82, 042339 (2010). "Half derivative" DRAG for phase errors.
- L. H. Pedersen, N. M. Moller and K. Molmer, "Fidelity of quantum operations", Phys. Lett. A 367, 47 (2007). Closed-form average gate fidelity.
- C. J. Wood and J. M. Gambetta, "Quantification and characterization of leakage errors", Phys. Rev. A 97, 032306 (2018). Leakage rate (Eq. (2)) and average gate fidelity of leaky channels (Eqs. (5), (6)).