Skip to content

feat(profiles): add IQMEmerald() — Crystal 54 full device profile#26

Merged
jack-champagne merged 1 commit into
mainfrom
feat/iqm-emerald-profile
Jun 17, 2026
Merged

feat(profiles): add IQMEmerald() — Crystal 54 full device profile#26
jack-champagne merged 1 commit into
mainfrom
feat/iqm-emerald-profile

Conversation

@kateebonner

@kateebonner kateebonner commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds IQMEmerald(), a TransmonDevice profile for the full 54-qubit IQM Emerald Crystal 54 QPU
  • Includes all 83 connected pairs from the Crystal 54 topology with real CZ fidelities from IRB calibration
  • Coherence times (T1, T2 Ramsey) and PRX fidelities are real values from the 2026-06-09 calibration snapshot
  • Qubit frequencies and coupling strengths are estimated from arXiv:2603.11018 (to be updated from Pulla calibration stash once pulse-level access is available)
  • QB46 is flagged as non-functional (PRX error 11.4%, T2 missing) but included for index consistency
  • All 89 existing tests pass locally

🤖 Generated with Claude Code

@kateebonner kateebonner force-pushed the feat/iqm-emerald-profile branch 2 times, most recently from 0086cb2 to 3e10b32 Compare June 9, 2026 21:15
@kateebonner

kateebonner commented Jun 10, 2026

Copy link
Copy Markdown
Contributor Author

I imagine it may be best to split this file up so we have: 1 file per device profile, all living in a "profiles" folder

@kateebonner kateebonner force-pushed the feat/iqm-emerald-profile branch from f50c274 to 2b7c185 Compare June 10, 2026 15:41

@jack-champagne jack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! The other data besides the TransmonQubit constructor I think we could have as a tabular file - maybe something like: iqm_emerald_2026-06-09.toml with a loader here that extracts the T1, T2, per-qubit PRX err, topology + per-edge CZ err`. That way we're updating that file instead of this one when recalibration data updates our numbers here (and we can backtest on old cal data easily).

Just a few nits otherwise!

Comment thread src/profiles.jl Outdated
11.20,
32.53,
11.56,
0.00,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might be a bit dangerous to be setting t2 as 0.0 - let's set as NaN so that this blows up noisily!

Comment thread src/profiles.jl Outdated
Comment on lines +67 to +122
qubits = [
TransmonQubit(4.20, 0.180, 3), # QB1 T1=46.4 T2=17.9 PRX_err=3.01e-04
TransmonQubit(4.40, 0.180, 3), # QB2 T1=24.9 T2=18.0 PRX_err=3.75e-04
TransmonQubit(4.20, 0.180, 3), # QB3 T1=42.4 T2=48.0 PRX_err=3.00e-04
TransmonQubit(4.40, 0.180, 3), # QB4 T1=39.8 T2=12.3 PRX_err=5.53e-04
TransmonQubit(4.20, 0.180, 3), # QB5 T1=37.5 T2=21.9 PRX_err=7.13e-04
TransmonQubit(4.40, 0.180, 3), # QB6 T1=56.5 T2=13.0 PRX_err=2.90e-04
TransmonQubit(4.20, 0.180, 3), # QB7 T1=66.0 T2=19.9 PRX_err=5.84e-04
TransmonQubit(4.40, 0.180, 3), # QB8 T1=36.9 T2=33.4 PRX_err=9.16e-04
TransmonQubit(4.20, 0.180, 3), # QB9 T1=47.2 T2=4.3 PRX_err=4.49e-03
TransmonQubit(4.40, 0.180, 3), # QB10 T1=50.4 T2=52.1 PRX_err=3.56e-04
TransmonQubit(4.20, 0.180, 3), # QB11 T1=20.9 T2=12.2 PRX_err=5.51e-04
TransmonQubit(4.40, 0.180, 3), # QB12 T1=61.2 T2=18.1 PRX_err=2.06e-04
TransmonQubit(4.20, 0.180, 3), # QB13 T1=32.3 T2=11.7 PRX_err=1.09e-03
TransmonQubit(4.40, 0.180, 3), # QB14 T1=45.3 T2=14.4 PRX_err=9.24e-04
TransmonQubit(4.20, 0.180, 3), # QB15 T1=32.3 T2=21.0 PRX_err=6.02e-04
TransmonQubit(4.40, 0.180, 3), # QB16 T1=55.7 T2=9.0 PRX_err=4.29e-04
TransmonQubit(4.20, 0.180, 3), # QB17 T1=46.8 T2=13.7 PRX_err=6.57e-04
TransmonQubit(4.40, 0.180, 3), # QB18 T1=57.1 T2=17.7 PRX_err=4.29e-04
TransmonQubit(4.20, 0.180, 3), # QB19 T1=54.1 T2=30.3 PRX_err=5.40e-04
TransmonQubit(4.40, 0.180, 3), # QB20 T1=66.1 T2=14.3 PRX_err=2.20e-04
TransmonQubit(4.20, 0.180, 3), # QB21 T1=50.5 T2=8.2 PRX_err=3.84e-04
TransmonQubit(4.40, 0.180, 3), # QB22 T1=56.0 T2=13.2 PRX_err=3.32e-04
TransmonQubit(4.20, 0.180, 3), # QB23 T1=60.4 T2=26.4 PRX_err=2.48e-04
TransmonQubit(4.40, 0.180, 3), # QB24 T1=62.1 T2=18.0 PRX_err=9.57e-04
TransmonQubit(4.20, 0.180, 3), # QB25 T1=46.3 T2=19.3 PRX_err=2.88e-04
TransmonQubit(4.40, 0.180, 3), # QB26 T1=49.4 T2=9.2 PRX_err=6.76e-04
TransmonQubit(4.20, 0.180, 3), # QB27 T1=49.0 T2=11.6 PRX_err=3.10e-04
TransmonQubit(4.40, 0.180, 3), # QB28 T1=50.0 T2=8.4 PRX_err=2.70e-04
TransmonQubit(4.20, 0.180, 3), # QB29 T1=48.0 T2=12.4 PRX_err=3.65e-04
TransmonQubit(4.40, 0.180, 3), # QB30 T1=58.1 T2=49.4 PRX_err=8.89e-04
TransmonQubit(4.20, 0.180, 3), # QB31 T1=48.9 T2=14.4 PRX_err=3.56e-04
TransmonQubit(4.40, 0.180, 3), # QB32 T1=33.6 T2=14.9 PRX_err=5.30e-04
TransmonQubit(4.20, 0.180, 3), # QB33 T1=50.0 T2=7.3 PRX_err=4.65e-04
TransmonQubit(4.40, 0.180, 3), # QB34 T1=64.5 T2=9.2 PRX_err=3.49e-04
TransmonQubit(4.20, 0.180, 3), # QB35 T1=39.0 T2=13.0 PRX_err=5.73e-04
TransmonQubit(4.40, 0.180, 3), # QB36 T1=55.7 T2=8.4 PRX_err=2.92e-04
TransmonQubit(4.20, 0.180, 3), # QB37 T1=54.8 T2=16.7 PRX_err=3.05e-03
TransmonQubit(4.40, 0.180, 3), # QB38 T1=64.7 T2=10.2 PRX_err=3.51e-04
TransmonQubit(4.20, 0.180, 3), # QB39 T1=64.1 T2=33.3 PRX_err=3.05e-04
TransmonQubit(4.40, 0.180, 3), # QB40 T1=51.2 T2=15.0 PRX_err=3.59e-04
TransmonQubit(4.20, 0.180, 3), # QB41 T1=45.6 T2=2.5 PRX_err=3.86e-04
TransmonQubit(4.40, 0.180, 3), # QB42 T1=37.9 T2=15.3 PRX_err=9.51e-04
TransmonQubit(4.20, 0.180, 3), # QB43 T1=40.5 T2=11.2 PRX_err=3.44e-04
TransmonQubit(4.40, 0.180, 3), # QB44 T1=65.3 T2=32.5 PRX_err=1.13e-03
TransmonQubit(4.20, 0.180, 3), # QB45 T1=43.5 T2=11.6 PRX_err=3.32e-04
TransmonQubit(4.40, 0.180, 3), # QB46 T1=51.9 T2=0.0 PRX_err=1.14e-01 ← broken
TransmonQubit(4.20, 0.180, 3), # QB47 T1=19.5 T2=12.7 PRX_err=5.12e-04
TransmonQubit(4.40, 0.180, 3), # QB48 T1=65.3 T2=6.1 PRX_err=2.72e-04
TransmonQubit(4.20, 0.180, 3), # QB49 T1=75.4 T2=16.5 PRX_err=1.91e-03
TransmonQubit(4.40, 0.180, 3), # QB50 T1=54.6 T2=50.5 PRX_err=2.58e-04
TransmonQubit(4.20, 0.180, 3), # QB51 T1=50.9 T2=27.6 PRX_err=6.58e-04
TransmonQubit(4.40, 0.180, 3), # QB52 T1=58.2 T2=21.7 PRX_err=3.57e-04
TransmonQubit(4.20, 0.180, 3), # QB53 T1=55.7 T2=18.2 PRX_err=2.10e-04
TransmonQubit(4.40, 0.180, 3), # QB54 T1=47.7 T2=14.5 PRX_err=3.40e-04
]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can replace most of this with a list comprehension (minus the comments, but those are duplicated down below).

Suggested change
qubits = [
TransmonQubit(4.20, 0.180, 3), # QB1 T1=46.4 T2=17.9 PRX_err=3.01e-04
TransmonQubit(4.40, 0.180, 3), # QB2 T1=24.9 T2=18.0 PRX_err=3.75e-04
TransmonQubit(4.20, 0.180, 3), # QB3 T1=42.4 T2=48.0 PRX_err=3.00e-04
TransmonQubit(4.40, 0.180, 3), # QB4 T1=39.8 T2=12.3 PRX_err=5.53e-04
TransmonQubit(4.20, 0.180, 3), # QB5 T1=37.5 T2=21.9 PRX_err=7.13e-04
TransmonQubit(4.40, 0.180, 3), # QB6 T1=56.5 T2=13.0 PRX_err=2.90e-04
TransmonQubit(4.20, 0.180, 3), # QB7 T1=66.0 T2=19.9 PRX_err=5.84e-04
TransmonQubit(4.40, 0.180, 3), # QB8 T1=36.9 T2=33.4 PRX_err=9.16e-04
TransmonQubit(4.20, 0.180, 3), # QB9 T1=47.2 T2=4.3 PRX_err=4.49e-03
TransmonQubit(4.40, 0.180, 3), # QB10 T1=50.4 T2=52.1 PRX_err=3.56e-04
TransmonQubit(4.20, 0.180, 3), # QB11 T1=20.9 T2=12.2 PRX_err=5.51e-04
TransmonQubit(4.40, 0.180, 3), # QB12 T1=61.2 T2=18.1 PRX_err=2.06e-04
TransmonQubit(4.20, 0.180, 3), # QB13 T1=32.3 T2=11.7 PRX_err=1.09e-03
TransmonQubit(4.40, 0.180, 3), # QB14 T1=45.3 T2=14.4 PRX_err=9.24e-04
TransmonQubit(4.20, 0.180, 3), # QB15 T1=32.3 T2=21.0 PRX_err=6.02e-04
TransmonQubit(4.40, 0.180, 3), # QB16 T1=55.7 T2=9.0 PRX_err=4.29e-04
TransmonQubit(4.20, 0.180, 3), # QB17 T1=46.8 T2=13.7 PRX_err=6.57e-04
TransmonQubit(4.40, 0.180, 3), # QB18 T1=57.1 T2=17.7 PRX_err=4.29e-04
TransmonQubit(4.20, 0.180, 3), # QB19 T1=54.1 T2=30.3 PRX_err=5.40e-04
TransmonQubit(4.40, 0.180, 3), # QB20 T1=66.1 T2=14.3 PRX_err=2.20e-04
TransmonQubit(4.20, 0.180, 3), # QB21 T1=50.5 T2=8.2 PRX_err=3.84e-04
TransmonQubit(4.40, 0.180, 3), # QB22 T1=56.0 T2=13.2 PRX_err=3.32e-04
TransmonQubit(4.20, 0.180, 3), # QB23 T1=60.4 T2=26.4 PRX_err=2.48e-04
TransmonQubit(4.40, 0.180, 3), # QB24 T1=62.1 T2=18.0 PRX_err=9.57e-04
TransmonQubit(4.20, 0.180, 3), # QB25 T1=46.3 T2=19.3 PRX_err=2.88e-04
TransmonQubit(4.40, 0.180, 3), # QB26 T1=49.4 T2=9.2 PRX_err=6.76e-04
TransmonQubit(4.20, 0.180, 3), # QB27 T1=49.0 T2=11.6 PRX_err=3.10e-04
TransmonQubit(4.40, 0.180, 3), # QB28 T1=50.0 T2=8.4 PRX_err=2.70e-04
TransmonQubit(4.20, 0.180, 3), # QB29 T1=48.0 T2=12.4 PRX_err=3.65e-04
TransmonQubit(4.40, 0.180, 3), # QB30 T1=58.1 T2=49.4 PRX_err=8.89e-04
TransmonQubit(4.20, 0.180, 3), # QB31 T1=48.9 T2=14.4 PRX_err=3.56e-04
TransmonQubit(4.40, 0.180, 3), # QB32 T1=33.6 T2=14.9 PRX_err=5.30e-04
TransmonQubit(4.20, 0.180, 3), # QB33 T1=50.0 T2=7.3 PRX_err=4.65e-04
TransmonQubit(4.40, 0.180, 3), # QB34 T1=64.5 T2=9.2 PRX_err=3.49e-04
TransmonQubit(4.20, 0.180, 3), # QB35 T1=39.0 T2=13.0 PRX_err=5.73e-04
TransmonQubit(4.40, 0.180, 3), # QB36 T1=55.7 T2=8.4 PRX_err=2.92e-04
TransmonQubit(4.20, 0.180, 3), # QB37 T1=54.8 T2=16.7 PRX_err=3.05e-03
TransmonQubit(4.40, 0.180, 3), # QB38 T1=64.7 T2=10.2 PRX_err=3.51e-04
TransmonQubit(4.20, 0.180, 3), # QB39 T1=64.1 T2=33.3 PRX_err=3.05e-04
TransmonQubit(4.40, 0.180, 3), # QB40 T1=51.2 T2=15.0 PRX_err=3.59e-04
TransmonQubit(4.20, 0.180, 3), # QB41 T1=45.6 T2=2.5 PRX_err=3.86e-04
TransmonQubit(4.40, 0.180, 3), # QB42 T1=37.9 T2=15.3 PRX_err=9.51e-04
TransmonQubit(4.20, 0.180, 3), # QB43 T1=40.5 T2=11.2 PRX_err=3.44e-04
TransmonQubit(4.40, 0.180, 3), # QB44 T1=65.3 T2=32.5 PRX_err=1.13e-03
TransmonQubit(4.20, 0.180, 3), # QB45 T1=43.5 T2=11.6 PRX_err=3.32e-04
TransmonQubit(4.40, 0.180, 3), # QB46 T1=51.9 T2=0.0 PRX_err=1.14e-01 ← broken
TransmonQubit(4.20, 0.180, 3), # QB47 T1=19.5 T2=12.7 PRX_err=5.12e-04
TransmonQubit(4.40, 0.180, 3), # QB48 T1=65.3 T2=6.1 PRX_err=2.72e-04
TransmonQubit(4.20, 0.180, 3), # QB49 T1=75.4 T2=16.5 PRX_err=1.91e-03
TransmonQubit(4.40, 0.180, 3), # QB50 T1=54.6 T2=50.5 PRX_err=2.58e-04
TransmonQubit(4.20, 0.180, 3), # QB51 T1=50.9 T2=27.6 PRX_err=6.58e-04
TransmonQubit(4.40, 0.180, 3), # QB52 T1=58.2 T2=21.7 PRX_err=3.57e-04
TransmonQubit(4.20, 0.180, 3), # QB53 T1=55.7 T2=18.2 PRX_err=2.10e-04
TransmonQubit(4.40, 0.180, 3), # QB54 T1=47.7 T2=14.5 PRX_err=3.40e-04
]
qubits = [TransmonQubit(isodd(i) ? 4.20 : 4.40, 0.180, 3) for i in 1:54]

The other data I think we could have as a tabular file - maybe something like: iqm_emerald_2026-06-09.toml with a loader here that extracts the T1, T2, per-qubit PRX err, topology + per-edge CZ err`

Adds IQMEmerald(), a TransmonDevice profile for the full 54-qubit IQM
Emerald Crystal 54 QPU. All calibration data lives in
src/data/iqm_emerald_2026-06-09.toml — IQMEmerald() is pure construction
logic; recalibration = update the data file only.

- All 83 connected pairs from Crystal 54 topology with CZ fidelities from
  IRB calibration
- T1, T2 Ramsey, and PRX fidelities from 2026-06-09 calibration snapshot
- Qubit frequencies and coupling strengths estimated from arXiv:2603.11018
- QB46 non-functional: T2 = NaN so arithmetic on this qubit fails loudly
- Native gate specs (PRX 20 ns, CZ 40 ns) loaded from TOML

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@kateebonner kateebonner force-pushed the feat/iqm-emerald-profile branch from 2125c9d to d838e5f Compare June 16, 2026 13:17
@kateebonner kateebonner requested review from jack-champagne and removed request for aarontrowbridge June 16, 2026 13:20
@jack-champagne

Copy link
Copy Markdown
Member

Awesome! Thanks @kateebonner 🎉

@jack-champagne jack-champagne merged commit 40490ad into main Jun 17, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants