<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pure State Labs</title>
    <description>The latest articles on DEV Community by Pure State Labs (@purestatelabs).</description>
    <link>https://dev.to/purestatelabs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4011301%2Fcb62d0ec-0e1e-40e3-8284-5fe2f188d016.jpg</url>
      <title>DEV Community: Pure State Labs</title>
      <link>https://dev.to/purestatelabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/purestatelabs"/>
    <language>en</language>
    <item>
      <title>The 99% Fidelity Lie: Why Your Quantum Control Models Are Lying to You</title>
      <dc:creator>Pure State Labs</dc:creator>
      <pubDate>Wed, 01 Jul 2026 22:29:17 +0000</pubDate>
      <link>https://dev.to/purestatelabs/the-99-fidelity-lie-why-your-quantum-control-models-are-lying-to-you-4cbo</link>
      <guid>https://dev.to/purestatelabs/the-99-fidelity-lie-why-your-quantum-control-models-are-lying-to-you-4cbo</guid>
      <description>&lt;h2&gt;
  
  
  The shortcut everyone takes when designing a gate
&lt;/h2&gt;

&lt;p&gt;Say you're building a two-qubit gate for a superconducting chip. The path of least resistance looks like this: optimize the pulse against a clean, closed-system simulation, admire the unitary fidelity, then tack on a factor of &lt;code&gt;exp(-t_g / T)&lt;/code&gt; at the end to "handle" decoherence.&lt;/p&gt;

&lt;p&gt;The problem is that this lies to you. On a qubit pair that's actually decoherence-limited, that after-the-fact factor overstates the CZ fidelity you'll really get by around &lt;code&gt;3e-3&lt;/code&gt;. The reason is simple: the optimizer never saw the noise while it was working, so it never had a reason to trade gate speed against it. You end up with a pulse tuned for a chip that doesn't exist.&lt;/p&gt;

&lt;p&gt;gradpulse does the opposite. It drops the whole open system — &lt;code&gt;T1&lt;/code&gt; relaxation, &lt;code&gt;T-phi&lt;/code&gt; dephasing, and leakage up into higher transmon levels — right into the forward pass, and then optimizes &lt;em&gt;through&lt;/em&gt; it with autodiff. Whatever pulse comes out was shaped against the noise from the start.&lt;/p&gt;

&lt;p&gt;There's a second rule it lives by, and it's the one I find more interesting: it won't report a fidelity it can't independently reproduce.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Built and maintained by &lt;a href="https://purestatelabs.com" rel="noopener noreferrer"&gt;Pure State Labs Inc.&lt;/a&gt;. MIT-licensed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The whole thing in one snippet
&lt;/h2&gt;

&lt;p&gt;Hand it a qubit pair and a target gate, and it finds the microwave-and-flux pulse that runs that gate through a full open-system sim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;gradpulse
&lt;span class="c"&gt;# with the validation + plotting extras&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"gradpulse[validate,viz]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gradpulse&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;gp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;gradpulse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viz&lt;/span&gt;

&lt;span class="c1"&gt;# generic profile, or load a measured Braket/IBM calibration
&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ParametricCouplerProfile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;optimize_cz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# optimize a CZ
&lt;/span&gt;&lt;span class="n"&gt;viz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot_pulse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="c1"&gt;# the pulse
&lt;/span&gt;&lt;span class="n"&gt;viz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot_convergence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# how it got there
&lt;/span&gt;
&lt;span class="c1"&gt;# where's the error coming from?
&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;optimizer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;error_budget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;best_raw_param&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;control + leakage: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r_control_leakage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;decoherence floor: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r_decoherence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;channel unitarity: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unitarity&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood it's differentiable GRAPE on PyTorch, so it'll use your GPU if you have one and backprops gradients straight through the Lindblad evolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three solvers, zero shared code
&lt;/h2&gt;

&lt;p&gt;Here's the bug that quietly wrecks control-simulation work: a solver can be totally self-consistent and still flat wrong. Flip a sign in an operator, normalize a collapse rate the wrong way, order your basis states differently than you meant to — the code happily agrees with itself and prints a confident, bogus fidelity.&lt;/p&gt;

&lt;p&gt;gradpulse guards against this by running every fidelity through three solvers that don't share any operator-building or matrix-exponential code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The PyTorch optimizer&lt;/strong&gt; — the differentiable Lie-Trotter propagator that does the actual work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A matched QuTiP integrator&lt;/strong&gt; — same Trotter step, but it builds its operators and contractions on its own. It lines up with the optimizer to about &lt;code&gt;1e-14&lt;/code&gt;. That catches transcription bugs, but it says nothing about the splitting error the two have in common.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A dependency-free NumPy Liouvillian&lt;/strong&gt; — takes the exact exponential of the full generator, backed up by QuTiP's adaptive &lt;code&gt;mesolve&lt;/code&gt; ODE. These two nail down the splitting error the first pair can't see.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the headline CZ, all of them land on the first-order Trotter error, roughly &lt;code&gt;2e-7&lt;/code&gt;, and that gap shrinks linearly as you shrink &lt;code&gt;dt&lt;/code&gt;. Freeze the pulse, sub-step, and Richardson-extrapolate to &lt;code&gt;dt -&amp;gt; 0&lt;/code&gt;, and the independent solvers agree to about &lt;code&gt;1e-13&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If any two solvers drift apart at the operating point, CI fails the build. That's the whole point: agreement is something that gets tested on every commit, not a line in a paper nobody rechecks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, but does it match real hardware?
&lt;/h2&gt;

&lt;p&gt;What gradpulse actually predicts is a gate's &lt;strong&gt;decoherence floor&lt;/strong&gt; — the error you'd see if &lt;code&gt;T1&lt;/code&gt; and &lt;code&gt;T2&lt;/code&gt; were the only things that mattered. Real gates carry more than that (control error, crosstalk, non-Markovian junk), so the floor is a &lt;em&gt;lower bound&lt;/em&gt;. It equals the measured error when a gate is coherence-limited, and sits under it otherwise.&lt;/p&gt;

&lt;p&gt;That gives you something you can actually falsify: the floor should never come out above the measured error of a coherence-limited gate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three published gates, three different groups
&lt;/h3&gt;

&lt;p&gt;Each one ships as a cited JSON file in the repo. Adding a fourth device means dropping in another JSON, not writing code.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Device&lt;/th&gt;
&lt;th&gt;Measured CZ error&lt;/th&gt;
&lt;th&gt;gradpulse floor&lt;/th&gt;
&lt;th&gt;Ratio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sung 2021, tunable coupler (PRX 11, 021058)&lt;/td&gt;
&lt;td&gt;2.4e-3&lt;/td&gt;
&lt;td&gt;2.4e-3&lt;/td&gt;
&lt;td&gt;0.99x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marxer 2023, long coupler (PRX Quantum 4, 010314)&lt;/td&gt;
&lt;td&gt;1.9e-3&lt;/td&gt;
&lt;td&gt;1.9e-3&lt;/td&gt;
&lt;td&gt;1.01x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stehlik 2021, parametric, pair 11 (PRL 127, 080505)&lt;/td&gt;
&lt;td&gt;4.9e-3&lt;/td&gt;
&lt;td&gt;5.1e-3&lt;/td&gt;
&lt;td&gt;1.05x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run it across all 11 Stehlik pairs and the floor stays a lower bound every time (11/11, median 0.37x), only catching up to the measurement on pair 11 — the pair under the most decoherence pressure. The fast, high-coherence pairs sit down at 0.2-0.4x, because gradpulse correctly blames most of &lt;em&gt;their&lt;/em&gt; error on control sources rather than decoherence. That matches what the authors themselves said: their short-gate error is loss of adiabaticity, not &lt;code&gt;T1&lt;/code&gt;/&lt;code&gt;T2&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A live 108-qubit chip
&lt;/h3&gt;

&lt;p&gt;The bigger test was Rigetti's Cepheus-1-108Q. Using the measured interleaved-RB CZ fidelity and both qubits' &lt;code&gt;T1&lt;/code&gt;/&lt;code&gt;T2&lt;/code&gt; for all 160 active pairs — and reading each pair's real gate duration out of the native calibration rather than assuming one — the floor comes in at or below the measured error on &lt;strong&gt;150 of 160&lt;/strong&gt; pairs, median &lt;strong&gt;0.66x&lt;/strong&gt;, with nothing fitted and nothing cherry-picked.&lt;/p&gt;

&lt;p&gt;A few things from the validation log are worth pulling out, because they're where the discipline shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error bars, not "percent off."&lt;/strong&gt; Every published CZ error has its own RB standard error, and on this chip that's +/-12-42%. So saying a prediction is "1.9% off" is meaningless noise. The honest number is distance in sigma. On the 41 saturation pairs, 32 land within 1 sigma, all 41 within 2 sigma, median 0.60 sigma. But that subset is &lt;em&gt;defined&lt;/em&gt; by saturation, so it tells you how tight the bound is — not how accurate the model is on its own. The real claim stays the one-sided bound across all 160.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It flags bad calibration instead of swallowing it.&lt;/strong&gt; One pair came back with a CZ error &lt;em&gt;below&lt;/em&gt; its own coherence floor, which is impossible for simultaneous measurements. Turned out the fault was in the data: the device benchmarks &lt;code&gt;T1&lt;/code&gt;/&lt;code&gt;T2&lt;/code&gt; and the CZ at different times, and it drifts about 2x over a few hours. Because gradpulse never lets a gate beat its own coherence limit, it surfaced the inconsistency rather than quietly "matching" it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No fudge factor for the gap.&lt;/strong&gt; The lower-bound behavior isn't the model failing. The Braket calibration only exposes idling-point &lt;code&gt;T1&lt;/code&gt;/&lt;code&gt;T2&lt;/code&gt;, not the gate-effective values the literature anchors used. A missing input, reported as a missing input.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Four architectures, one bar for validation
&lt;/h2&gt;

&lt;p&gt;There are four gate models in the box, and each one carries its own independent QuTiP cross-check of its operators. Three of them also get a library-independent, NumPy-only Liouvillian referee, so "three solvers, no shared code" holds across architectures, not just for the headline gate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parametric-coupler CZ&lt;/strong&gt; — tunable transmons with a flux-activated coupler that gets dispersively eliminated, plus AC-Stark pre-compensation and a differentiable transmission-line response. This is the flagship gate and the one Cepheus tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit tunable coupler&lt;/strong&gt; — a 27-D open-system model that keeps the coupler as a live transmon (the way it actually is on Rigetti and Google hardware), so coupler leakage gets modeled instead of assumed away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-resonance ZX&lt;/strong&gt; — fixed-frequency transmons with always-on exchange, derived-quadrature DRAG, and echoed-CR sequences that refocus ZZ into a single-qubit term.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;General N-qubit register&lt;/strong&gt; — arbitrary coupling graphs, optimizing a target gate on a subset while holding identity on everything else, so crosstalk and frequency collisions land &lt;em&gt;inside&lt;/em&gt; the optimization. You can drive disjoint subgraphs at once (parallel CZ), with sparse/Krylov propagation and MPS/TEBD trajectory unraveling kicking in once N is 6 or more.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pulling a gate's error apart
&lt;/h2&gt;

&lt;p&gt;One fidelity number is where you start, not where you stop. There's a whole set of tools for dissecting and stressing a gate, and all of them run in CI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error budgets&lt;/strong&gt; split the infidelity into a coherent control/leakage piece and a decoherence floor, with channel unitarity computed separately as a sanity check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crosstalk and collisions&lt;/strong&gt; — near-resonant frequency collisions, lossy two-level-system defects that carry their own &lt;code&gt;T1&lt;/code&gt;, and always-on ZZ between spectators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colored noise&lt;/strong&gt; — analytic dephasing filter functions &lt;code&gt;F(f)&lt;/code&gt;, Monte-Carlo &lt;code&gt;1/f^alpha&lt;/code&gt; sweeps with cross-qubit correlation, and finite-temperature bath jumps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spectral optimization&lt;/strong&gt; — build pulses directly in a band-limited Fourier/CRAB basis, so they're band-limited by construction: about 6x fewer parameters and no post-hoc smoothing penalty to babysit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leakage in the loop&lt;/strong&gt; — sweep a cross-resonance gate's duration and split each optimized gate's error. Slow gates stay coherence-limited and the one-line coherence formula tracks reality. Fast gates flip over to leakage-limited, where coherent leakage buries the decoherence floor and that same formula under-predicts the true error by something like 60x. That fast regime is exactly where an open-system, leakage-aware loop pays for itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting the pulse off the laptop
&lt;/h2&gt;

&lt;p&gt;gradpulse doesn't just score pulses, it designs and exports them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenPulse 3.0 / OpenQASM 3&lt;/strong&gt; — vendor-neutral export with the DRAG quadrature baked into the I/Q arrays, re-checked offline against an independent parser. (&lt;code&gt;qiskit.pulse&lt;/code&gt; got dropped in Qiskit 2.0, so this targets the standard that's actually alive.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Braket&lt;/strong&gt; — export to &lt;code&gt;PulseSequence&lt;/code&gt; and &lt;code&gt;ArbitraryWaveform&lt;/code&gt;, plus the native-calibration reader and the per-shot cost math used in the Cepheus study. You only need AWS credentials for the final submission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interleaved RB&lt;/strong&gt; — generate native-transpiled, verbatim-boxed IRB circuits that either benchmark the device's native CZ (which validates the model) or a gradpulse-designed pulse (which tests the optimizer), with canary, cost, and online-status guards before anything submits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a gradpulse-designed pulse has already run on Cepheus at canary depth — accepted and executed inside the RB verbatim box.&lt;/p&gt;

&lt;h2&gt;
  
  
  The section most READMEs hide: what it can't do
&lt;/h2&gt;

&lt;p&gt;gradpulse is upfront about its limits, which is honestly the part I'd steal for my own projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It predicts, it doesn't calibrate.&lt;/strong&gt; The fidelities are simulated, cross-checked, and matched against measured coherence budgets — but a full on-device fidelity for a gradpulse-&lt;em&gt;designed&lt;/em&gt; pulse hasn't been run yet. An open-loop transfer starts out below a device's tuned native CZ until closed-loop calibration closes the gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The floor is a lower bound.&lt;/strong&gt; It only equals the measured fidelity when a gate is coherence-limited. The analysis suite models the missing terms — control, crosstalk, structured noise — but none of them is a fitted correction dragging the answer back to a measured number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exact optimization taps out around four qubits.&lt;/strong&gt; Density-matrix GRAPE is a workstation tool up to ~4 qubits. The sparse and MPS paths push &lt;em&gt;evaluation&lt;/em&gt; into bigger weakly-entangling registers, but not optimization. gradpulse tunes one entangling gate among its neighbors; it isn't a whole-circuit compiler.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I think the design matters
&lt;/h2&gt;

&lt;p&gt;There's no shortage of gorgeous fidelities in the quantum-control literature that fall apart the moment they meet a real chip. gradpulse's two rules — optimize through the actual open system, and never print a number three independent solvers can't reproduce — are a decent blueprint for building simulation tools people are willing to trust.&lt;/p&gt;

&lt;p&gt;If you work on superconducting gates, the quickest way to get a feel for it is to run the quickstart above, then open &lt;code&gt;examples/decoherence_in_the_loop.py&lt;/code&gt; and watch the multiply-after shortcut fall over, and &lt;code&gt;notebooks/03_hardware_validation.ipynb&lt;/code&gt; to reproduce the 160-pair Cepheus scatter (it's free — it just reads the committed sweep).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;gradpulse
python &lt;span class="nt"&gt;-m&lt;/span&gt; gradpulse            &lt;span class="c"&gt;# welcome banner + quickstart&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/PureStateLabs/gradpulse" rel="noopener noreferrer"&gt;https://github.com/PureStateLabs/gradpulse&lt;/a&gt; — MIT-licensed — built by &lt;a href="https://purestatelabs.com" rel="noopener noreferrer"&gt;Pure State Labs Inc.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions or collaboration: &lt;a href="mailto:info@purestatelabs.com"&gt;info@purestatelabs.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>tools</category>
      <category>quantum</category>
    </item>
  </channel>
</rss>
