🚧 Prototype: unified Astro + Starlight docs site (Python + Rust)#367
Draft
Roger-luo wants to merge 19 commits into
Draft
🚧 Prototype: unified Astro + Starlight docs site (Python + Rust)#367Roger-luo wants to merge 19 commits into
Roger-luo wants to merge 19 commits into
Conversation
Adds a new documentation website under website/ (Astro 5 + Starlight) that unifies Python + Rust API reference under one theme, search, and version switcher, alongside the existing MkDocs site (untouched, still live). Highlights: - Language-native emitters -> MDX via a shared component contract: griffe (Python) and rustdoc-JSON (Rust). Astro owns all presentation. - docs.sources.toml manifest + resolver: aggregate scattered repos by pinned tag (uv pip show), or a local monorepo path. Adding a source (e.g. ppvm) is one entry. - Cross-references resolve via a merged inventory; emits a Sphinx-compatible objects.inv. Broken-xref check (XREF_STRICT=1). - Versioning: single distribution axis (bloqade meta-version) + auto-generated compatibility matrix; only /api is versioned, shell/guides/blog are evergreen. - Unified Pagefind search across guides, blog, landing and API symbols. - One design system: a single token layer feeds the custom landing/blog AND all Starlight --sl-* vars; shared header/footer + widget styling (no default Starlight look). - Additive CI (.github/workflows/website-*.yml) deploys to isolated gh-pages subpaths (/next/, astro-preview/pr-N/); publish.sh abstracts the host (one-line Vercel swap). - Representative content migrated (getting-started, digital + analog narrative, blog); full tutorial/example migration is the gradual follow-up. Generated per-version API content, versions.json and the merged inventory are gitignored and regenerated by scripts/build_versions.py. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
|
Signature radius 0.5rem->10px (matches the site's code/install chips) and gray-5 borders -> --sl-color-hairline (matches cards, tables, asides), so the generated Python/Rust API pages share the single design-token widget system with no leftover default-Starlight shapes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… notebook cache Task runner: replace justfiles with a root mise.toml (pins node/pnpm[npm-backend]/uv; namespaced tasks — bare build/test = the bloqade package, docs:* = the Astro site, mkdocs:* = legacy). Update CONTRIBUTING + website/README. Content: complete the legacy MkDocs -> Astro migration (definitive 45/45 mapping). All getting-started/digital/analog prose, all 3 blog posts, and all 12 tutorials (via the notebook pipeline; interop executed, tsim/gemini static pending backend). reference/index superseded by the generated api/index. Cross-references: strict-xref build passes (0 unresolved, objects.inv). Fix emitter link bugs (Python dangling .md docstring links; Rust versionless ApiXref URLs -> version-aware) and repoint legacy relative/mkdocstrings links in migrated prose. Harness: scripts/check_links.mjs — a post-build crawler validating every internal link, fragment anchor, redirect stub and /api/latest fallback; wired as 12:25:20 [bloqade-xref] xref inventory: 5621 symbol(s), versions [0.35, dev] 12:25:20 [WARN] [router] The route "/404" is defined in both "src/pages/404.astro" and "node_modules/.pnpm/@astrojs+starlight@0.37.0_astro@5.18.2_@types+node@24.13.3_rollup@4.62.2_typescript@5.9.3_/node_modules/@astrojs/starlight/routes/static/404.astro". A static route cannot be defined more than once. 12:25:20 [WARN] [router] A collision will result in an hard error in following versions of Astro. 12:25:20 [vite] Re-optimizing dependencies because vite config has changed 12:25:20 [content] Syncing content 12:25:21 [content] Synced content 12:25:21 [types] Generated 342ms 12:25:21 [build] output: "static" 12:25:21 [build] mode: "static" 12:25:21 [build] directory: /Users/roger/Code/python/bloqade/website/dist/ 12:25:21 [build] Collecting build info... 12:25:21 [build] ✓ Completed in 579ms. 12:25:21 [build] Building static entrypoints... 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/dev/python/bloqade/analog/ir/scalar.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/0.35/python/bloqade/analog/ir/scalar.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/dev/python/bloqade/analog/ir/control/field.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/dev/python/bloqade/analog/ir/control/waveform.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/0.35/python/bloqade/analog/ir/control/field.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/0.35/python/bloqade/analog/ir/control/waveform.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/dev/python/bloqade/analog/ir/control/waveform.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "bnf" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/api/0.35/python/bloqade/analog/ir/control/waveform.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:25 [WARN] [astro-expressive-code] Error while highlighting code block using language "qasm" in document "/Users/roger/Code/python/bloqade/website/src/content/docs/guides/digital/compilation.mdx". The language could not be found. Using "txt" instead. Ensure that all required languages are either part of the bundle or custom languages provided in the "langs" config option. 12:25:29 [vite] ✓ built in 8.65s 12:25:29 [build] ✓ Completed in 8.66s. building client (vite) 12:25:29 [vite] transforming... 12:25:32 [vite] ✓ 2105 modules transformed. 12:25:32 [vite] rendering chunks... 12:25:32 [vite] computing gzip size... 12:25:32 [vite] dist/_astro/ec.0vx5m.js 2.52 kB 12:25:32 [vite] dist/_astro/ec.v4551.css 18.22 kB │ gzip: 3.96 kB 12:25:32 [vite] dist/_astro/channel.5wtNvd3W.js 0.12 kB │ gzip: 0.13 kB 12:25:32 [vite] dist/_astro/init.Gi6I4Gst.js 0.15 kB │ gzip: 0.13 kB 12:25:32 [vite] dist/_astro/chunk-2Q5K7J3B.DDqsui9T.js 0.20 kB │ gzip: 0.16 kB 12:25:32 [vite] dist/_astro/chunk-JWPE2WC7.DUObDP5j.js 0.23 kB │ gzip: 0.17 kB 12:25:32 [vite] dist/_astro/chunk-XXDRQBXY.DTR4DM11.js 0.24 kB │ gzip: 0.21 kB 12:25:32 [vite] dist/_astro/chunk-5VM5RSS4.D_lMW1qV.js 0.37 kB │ gzip: 0.27 kB 12:25:32 [vite] dist/_astro/stateDiagram-v2-6OUMAXLB.BDWtKtBh.js 0.44 kB │ gzip: 0.31 kB 12:25:32 [vite] dist/_astro/classDiagram-OUVF2IWQ.DbFMjC3u.js 0.48 kB │ gzip: 0.32 kB 12:25:32 [vite] dist/_astro/classDiagram-v2-EOCWNBFH.DbFMjC3u.js 0.48 kB │ gzip: 0.32 kB 12:25:32 [vite] dist/_astro/chunk-VR4S4FIN.BK3R1NuH.js 0.51 kB │ gzip: 0.36 kB 12:25:32 [vite] dist/_astro/swimlanesDiagram-G3AALYLV.EHJBt7f5.js 0.56 kB │ gzip: 0.37 kB 12:25:32 [vite] dist/_astro/infoDiagram-FWYZ7A6U.DKU3bugU.js 0.60 kB │ gzip: 0.41 kB 12:25:32 [vite] dist/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js 0.67 kB │ gzip: 0.40 kB 12:25:32 [vite] dist/_astro/sizeCapture-X5ZJPWSS.BGeCohRL.js 0.95 kB │ gzip: 0.54 kB 12:25:32 [vite] dist/_astro/preload-helper.BlTxHScW.js 1.11 kB │ gzip: 0.65 kB 12:25:32 [vite] dist/_astro/ordinal.BYWQX77i.js 1.19 kB │ gzip: 0.57 kB 12:25:32 [vite] dist/_astro/railroadDiagram-RFXS5EU6.zGSd6GrA.js 1.62 kB │ gzip: 0.76 kB 12:25:32 [vite] dist/_astro/TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js 1.67 kB │ gzip: 0.86 kB 12:25:32 [vite] dist/_astro/Search.astro_astro_type_script_index_0_lang.CLg7mG-P.js 1.80 kB │ gzip: 0.93 kB 12:25:32 [vite] dist/_astro/abnfDiagram-VRR7QNED.CecFFecm.js 1.82 kB │ gzip: 0.90 kB 12:25:32 [vite] dist/_astro/chunk-32BRIVSS.Caa9Cywj.js 1.88 kB │ gzip: 0.83 kB 12:25:32 [vite] dist/_astro/MermaidHead.astro_astro_type_script_index_0_lang.DXik5SDI.js 1.96 kB │ gzip: 0.95 kB 12:25:32 [vite] dist/_astro/pegDiagram-2B236MQR.C-gordCP.js 1.97 kB │ gzip: 0.93 kB 12:25:32 [vite] dist/_astro/ebnfDiagram-CCIWWBDH.CoZzdRTl.js 2.01 kB │ gzip: 0.89 kB 12:25:32 [vite] dist/_astro/page.B1D-nYk3.js 2.24 kB │ gzip: 1.01 kB 12:25:32 [vite] dist/_astro/arc.BZPNHrXO.js 3.44 kB │ gzip: 1.48 kB 12:25:32 [vite] dist/_astro/diagram-NH7WQ7WH.ZEmw3djj.js 4.22 kB │ gzip: 1.84 kB 12:25:32 [vite] dist/_astro/defaultLocale.DX6XiGOO.js 4.69 kB │ gzip: 2.18 kB 12:25:32 [vite] dist/_astro/map.DdKrh-jQ.js 5.07 kB │ gzip: 2.07 kB 12:25:32 [vite] dist/_astro/linear.BnLAsUV7.js 5.66 kB │ gzip: 2.31 kB 12:25:32 [vite] dist/_astro/diagram-WEI45ONY.r0L1GLc-.js 5.94 kB │ gzip: 2.55 kB 12:25:32 [vite] dist/_astro/pieDiagram-ENE6RG2P.DLQY_7zh.js 6.32 kB │ gzip: 2.64 kB 12:25:32 [vite] dist/_astro/chunk-RYQCIY6F.ep7f9nTI.js 7.08 kB │ gzip: 2.72 kB 12:25:32 [vite] dist/_astro/diagram-OA4YK3LP.D_SiWKBq.js 8.34 kB │ gzip: 3.72 kB 12:25:32 [vite] dist/_astro/dagre-VKFMJZFB.BaKxBJKl.js 8.61 kB │ gzip: 3.32 kB 12:25:32 [vite] dist/_astro/cynefinDiagram-TSTJHNR4.DcyCpRw0.js 10.11 kB │ gzip: 3.64 kB 12:25:32 [vite] dist/_astro/stateDiagram-2N3HPSRC.Bg4klyfs.js 10.43 kB │ gzip: 3.66 kB 12:25:32 [vite] dist/_astro/diagram-FQU43EPY.CWkkV61N.js 10.75 kB │ gzip: 4.14 kB 12:25:32 [vite] dist/_astro/chunk-MOJQB5TN.wxQDCp32.js 15.73 kB │ gzip: 4.40 kB 12:25:32 [vite] dist/_astro/diagram-G47NLZAW.B7REC4n8.js 15.96 kB │ gzip: 5.70 kB 12:25:32 [vite] dist/_astro/ishikawaDiagram-FXEZZL3T.DtPtlT6o.js 17.48 kB │ gzip: 6.66 kB 12:25:32 [vite] dist/_astro/kanban-definition-HUTT4EX6.D3jMiE7H.js 20.30 kB │ gzip: 7.21 kB 12:25:32 [vite] dist/_astro/mindmap-definition-LN4V7U3C.yxvt4P77.js 23.18 kB │ gzip: 7.82 kB 12:25:32 [vite] dist/_astro/sankeyDiagram-HTMAVEWB.B6jHN-kk.js 23.22 kB │ gzip: 8.56 kB 12:25:32 [vite] dist/_astro/journeyDiagram-5HDEW3XC.a-QlzWbi.js 23.58 kB │ gzip: 8.36 kB 12:25:32 [vite] dist/_astro/graph.DOmOIIwC.js 23.92 kB │ gzip: 8.32 kB 12:25:32 [vite] dist/_astro/wardleyDiagram-EHGQE667.CVku8pLO.js 25.51 kB │ gzip: 6.80 kB 12:25:32 [vite] dist/_astro/erDiagram-Q63AITRT.DEeK8-sm.js 27.11 kB │ gzip: 9.42 kB 12:25:32 [vite] dist/_astro/gitGraphDiagram-IHSO6WYX.3CPoD9lH.js 29.43 kB │ gzip: 8.71 kB 12:25:32 [vite] dist/_astro/timeline-definition-FHXFAJF6.CoU4D2BQ.js 30.84 kB │ gzip: 10.16 kB 12:25:32 [vite] dist/_astro/layout.D29r7aS-.js 31.00 kB │ gzip: 11.19 kB 12:25:32 [vite] dist/_astro/requirementDiagram-TGXJPOKE.C9IoQdc8.js 31.01 kB │ gzip: 9.74 kB 12:25:32 [vite] dist/_astro/quadrantDiagram-ABIIQ3AL.CFKeeJ5W.js 34.02 kB │ gzip: 9.97 kB 12:25:32 [vite] dist/_astro/chunk-EX3LRPZG.h04zUZDu.js 38.13 kB │ gzip: 12.51 kB 12:25:32 [vite] dist/_astro/xychartDiagram-FW5EYKEG.DIpyEEhB.js 41.91 kB │ gzip: 11.96 kB 12:25:32 [vite] dist/_astro/vennDiagram-L72KCM5P.CrTHzgbo.js 41.97 kB │ gzip: 15.71 kB 12:25:32 [vite] dist/_astro/chunk-V7JOEXUC.CK3HrZqZ.js 49.18 kB │ gzip: 15.74 kB 12:25:32 [vite] dist/_astro/flowDiagram-23GEKE2U.BVIi0mbU.js 60.71 kB │ gzip: 19.50 kB 12:25:32 [vite] dist/_astro/ganttDiagram-NO4QXBWP.vp5eEt4p.js 69.70 kB │ gzip: 23.56 kB 12:25:32 [vite] dist/_astro/c4Diagram-LMCZKHZV.Dnkvl_VM.js 69.95 kB │ gzip: 19.63 kB 12:25:32 [vite] dist/_astro/blockDiagram-677ZJIJ3.Ij9t4-pf.js 73.77 kB │ gzip: 21.26 kB 12:25:32 [vite] dist/_astro/cose-bilkent-JH36ORCC.3yMy3Y9P.js 81.71 kB │ gzip: 22.48 kB 12:25:32 [vite] dist/_astro/ui-core.D7EsID-j.js 94.16 kB │ gzip: 27.33 kB 12:25:32 [vite] dist/_astro/sequenceDiagram-DBY2YBRQ.uVikkfpc.js 116.97 kB │ gzip: 31.12 kB 12:25:32 [vite] dist/_astro/swimlanes-5IMT3BWC.rcZt7f_L.js 118.81 kB │ gzip: 43.64 kB 12:25:32 [vite] dist/_astro/architectureDiagram-ZJ3FMSHR.BJ2EJGjV.js 151.37 kB │ gzip: 43.01 kB 12:25:32 [vite] dist/_astro/katex.HP8lGamR.js 261.31 kB │ gzip: 77.57 kB 12:25:32 [vite] dist/_astro/cytoscape.esm.OyMbaexL.js 443.69 kB │ gzip: 142.36 kB 12:25:32 [vite] dist/_astro/mermaid.core.DOYMDAxU.js 621.80 kB │ gzip: 149.08 kB 12:25:32 [vite] dist/_astro/cynefin-VYW2F7L2.Cwb8MA-s.js 688.00 kB │ gzip: 152.07 kB 12:25:32 [WARN] [vite] (!) Some chunks are larger than 500 kB after minification. Consider: - Using dynamic import() to code-split the application - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit. 12:25:32 [vite] ✓ built in 2.85s generating static routes 12:25:33 ▶ @astrojs/starlight/routes/static/404.astro 12:25:33 └─ /404.html (+10ms) 12:25:33 ▶ @astrojs/starlight/routes/static/index.astro 12:25:33 ├─ /api/index.html (+28ms) 12:25:33 ├─ /api/compatibility/index.html (+4ms) 12:25:33 ├─ /guides/example/index.html (+5ms) 12:25:33 ├─ /reference/index.html (+2ms) 12:25:33 ├─ /api/0.35/rust/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/index.html (+2ms) 12:25:33 ├─ /api/dev/rust/index.html (+2ms) 12:25:33 ├─ /api/dev/python/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/index.html (+2ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/astar/index.html (+29ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/expander/index.html (+8ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/config/index.html (+5ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/frontier/index.html (+4ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/heuristic/index.html (+4ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/heuristic_expander/index.html (+2ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/lane_index/index.html (+4ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/index.html (+2ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/solve/index.html (+3ms) 12:25:33 ├─ /api/0.35/rust/bloqade_lanes_search/graph/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/post_processing/index.html (+8ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/device/index.html (+12ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/constants/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/factory/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/atom_arrangement/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/index.html (+2ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/astar/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/migrate/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/serialize/index.html (+4ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/config/index.html (+4ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/heuristic/index.html (+3ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/expander/index.html (+2ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/frontier/index.html (+4ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/graph/index.html (+4ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/heuristic_expander/index.html (+2ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/device/index.html (+6ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/solve/index.html (+3ms) 12:25:33 ├─ /api/dev/rust/bloqade_lanes_search/lane_index/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/types/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/task/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/cudaq_integration/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/compile/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/logical_mvp/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/metrics/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/noise_model/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/prelude/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/steane_defaults/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/transform/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/types/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/utils/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/upstream/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/group/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/compiler/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/args/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/assign/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/coupling/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/drive/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/field/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/parallelize/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/route/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/pragmas/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/sequence_builder/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/spatial/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/start/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/typing/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/waveform/index.html (+10ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/sparse_operator/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/analog_circuit/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/scalar/index.html (+9ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/base/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/braket/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/load_config/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/mock/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/quera/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/bloqade/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/base/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/batch/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/braket/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/braket_simulator/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/exclusive/index.html (+8ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/task/quera/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/atom_arrangement/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/constants/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/factory/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/serialize/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/migrate/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/lineprog/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/lowering/index.html (+10ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/parallelize/index.html (+8ms) 12:25:33 ├─ /api/dev/python/bloqade/gemini/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/gemini/device/index.html (+10ms) 12:25:33 ├─ /api/dev/python/bloqade/gemini/post_processing/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/native/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/base/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/native/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/device/index.html (+7ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/reg/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/target/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/cudaq_integration/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/pyqrack/task/index.html (+6ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/compile/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/noise_model/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/prelude/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/logical_mvp/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/metrics/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/steane_defaults/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/transform/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/types/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/utils/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/lanes/upstream/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/glob/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/noise/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/parallel/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/groups/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/qasm2/types/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/qbraid/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/qbraid/lowering/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/qbraid/schema/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/qbraid/simulation_result/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/qbraid/target/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/qubit/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/qubit/stmts/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/squin/groups/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/rewrite/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/squin/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/visual/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/analysis/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/stim/groups/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/stim/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/arch/builder/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/arch/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/arch/topology/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/arch/zone/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/arch/word_factory/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/bytecode/arch/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/bytecode/exceptions/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/bytecode/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/dialects/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/dialects/move/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/dialects/place/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/arch/index.html (+9ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/encoding/index.html (+9ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/move_metric/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/numpy_compat/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/path/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/layout/word/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/logical_layout/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/logical_placement/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/move_synthesis/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/physical_layout/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/physical_placement/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/physical_movement/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/heuristics/simple_layout/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/circuit2place/index.html (+8ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/place2move/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/squin2stim/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/state/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/rewrite/transversal/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/search/configuration/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/search/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/search/tree/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/search/scoring/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/search/search_params/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/validation/address/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/validation/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/visualize/app/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/visualize/artist/index.html (+13ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/visualize/debug/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/lanes/visualize/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/logical_validation/analysis/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/logical_validation/impls/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/logical_validation/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/measurement_validation/analysis/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/measurement_validation/impls/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/analysis/measurement_validation/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/dialects/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/impls/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/impls/measure_id/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/rewrite/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/rewrite/initialize/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/rewrite/qubit_count/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/stdlib/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/gemini/logical/stdlib/post_processing/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/compiler/passes/emulator/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/compiler/passes/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/backend/bloqade/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/backend/braket/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/backend/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/backend/quera/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/parse/builder/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/parse/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/parse/stream/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/builder/parse/trait/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/ir/atom_type/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/ir/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/ir/emulator/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/ir/space/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/emulate/ir/state_vector/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/control/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/control/field/index.html (+5ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/control/pulse/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/control/sequence/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/control/waveform/index.html (+12ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/location/bravais/index.html (+12ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/location/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/location/location/index.html (+8ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/braket/index.html (+4ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/params/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/bloqade/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/base/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/index.html (+1ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/ir/routine/quera/index.html (+6ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/braket/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/capabilities/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/index.html (+7ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/parallel/index.html (+3ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/task_results/index.html (+2ms) 12:25:33 ├─ /api/0.35/python/bloqade/analog/submission/ir/task_specification/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/address/analysis/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/address/impls/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/address/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/address/lattice/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/fidelity/analysis/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/fidelity/impls/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/fidelity/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/args/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/coupling/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/drive/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/assign/index.html (+7ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/field/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/parallelize/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/route/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/pragmas/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/sequence_builder/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/spatial/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/start/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/typing/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/builder/waveform/index.html (+10ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/measure_id/analysis/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/measure_id/impls/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/measure_id/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analysis/measure_id/lattice/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/compiler/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/emulate/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/ir/analog_circuit/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/ir/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/emulate/sparse_operator/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/ir/scalar/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/base/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/braket/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/load_config/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/mock/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/submission/quera/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/base/index.html (+6ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/bloqade/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/batch/index.html (+5ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/braket/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/braket_simulator/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/exclusive/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/analog/task/quera/index.html (+3ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/emit/base/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/emit/gate/index.html (+4ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/emit/index.html (+1ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/emit/qubit/index.html (+2ms) 12:25:33 ├─ /api/dev/python/bloqade/cirq_utils/emit/noise/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/cirq_utils/noise/conflict_graph/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/cirq_utils/noise/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/cirq_utils/noise/transform/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/dialects/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/cirq_utils/noise/model/index.html (+8ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/rewrite/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/rewrite/initialize/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/native/dialects/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/native/stdlib/broadcast/index.html (+8ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/group/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/native/stdlib/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/native/upstream/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/native/stdlib/simple/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/native/upstream/squin2native/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/noise/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/noise/native/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/qasm2/core/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/qasm2/parallel/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/qasm2/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/qasm2/glob/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/qasm2/uop/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/qubit/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/builder/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/topology/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/dialects/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/word_factory/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/zone/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/dialects/place/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/logical_layout/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/dialects/move/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/logical_placement/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/move_synthesis/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/physical_layout/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/physical_placement/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/physical_movement/index.html (+8ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/heuristics/simple_layout/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/arch/index.html (+9ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/move_metric/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/encoding/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/numpy_compat/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/path/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/layout/word/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/bytecode/arch/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/bytecode/exceptions/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/bytecode/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/circuit2place/index.html (+8ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/squin2stim/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/state/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/place2move/index.html (+8ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/transversal/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/configuration/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/scoring/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/search_params/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/tree/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/visualize/app/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/validation/address/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/visualize/artist/index.html (+13ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/validation/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/visualize/debug/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/visualize/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/glob/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/emit/base/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/parallel/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/indexing/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/inline/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/emit/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/emit/gate/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/emit/main/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/emit/target/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/ast/index.html (+11ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/build/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/lowering/index.html (+11ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/parser/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/print/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/parse/visitor/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/glob/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/desugar/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/insert_qubits/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/native_gates/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/parallel_to_glob/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/parallel_to_uop/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/register/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/rewrite/uop_to_parallel/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/fold/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/lift_qubits/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/glob/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/noise/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/parallel/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/py2qasm/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/qasm2py/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/passes/unroll_if/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qubit/analysis/address_impl/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/qubit/analysis/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qubit/stdlib/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qubit/stdlib/broadcast/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/qubit/stdlib/simple/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/rules/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/rules/split_ifs/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/passes/callgraph/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/passes/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/analysis/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/passes/aggressive_unroll/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/rewrite/passes/canonicalize_ilist/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/gate/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/analysis/schedule/index.html (+9ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/gate/stmts/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/passes/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/passes/qasm2_gate_func_to_squin/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/passes/qasm2_to_squin/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/stdlib/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/rewrite/U3_to_clifford/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/rewrite/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/rewrite/remove_dangling_qubits/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/noise/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/rewrite/non_clifford_to_U3/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/visual/animation/animate/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/rewrite/wrap_analysis/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/squin/noise/stmts/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/visual/animation/gate_event/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/visual/animation/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/visual/animation/base/index.html (+9ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/atom/analysis/index.html (+4ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/atom/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/atom/impl/index.html (+5ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/atom/atom_state_data/index.html (+4ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/atom/lattice/index.html (+6ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/placement/analysis/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/placement/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/placement/strategy/index.html (+4ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/placement/lattice/index.html (+6ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/layout/analysis/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/analysis/layout/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/dialects/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/emit/impls/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/emit/stim_str/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/emit/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/parse/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/parse/lowering/index.html (+13ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/passes/flatten/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/passes/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/passes/simplify_ifs/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/passes/squin_to_stim/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/upstream/from_squin/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/upstream/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/arch/gemini/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/get_record_util/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/ifs_to_stim/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/py_constant_to_stim/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/qubit_to_stim/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/set_detector_to_stim/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/set_observable_to_stim/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/squin_measure/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/squin_noise/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/stim/rewrite/util/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/rewrite/move2squin/base/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/rewrite/move2squin/gates/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/rewrite/move2squin/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/base/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/rewrite/move2squin/noise/index.html (+24ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/aod_grouping/index.html (+7ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/exhaustive/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/greedy/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/heuristic/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/generators/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/gemini/logical/dialects/operations/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/astar/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/gemini/logical/dialects/operations/stmts/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/bfs/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/driver/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/entropy_guided/index.html (+4ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/goal/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/greedy/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/interface/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/lanes/search/traversal/step_info/index.html (+6ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/assignment_scan/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/check_slices/index.html (+6ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/is_constant/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/is_hyperfine/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/scan_channels/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/common/scan_variables/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/hardware/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/hardware/lattice/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/python/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/hardware/channels/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/hardware/piecewise_linear/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/hardware/piecewise_constant/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/analysis/python/waveform/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/add_padding/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/assign_to_literal/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/assign_variables/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/canonicalize/index.html (+7ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/flatten/index.html (+3ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/common/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/passes/hardware/components/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/passes/hardware/define/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/passes/hardware/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/passes/hardware/units/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/python/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/compiler/rewrite/python/waveform/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/ir/control/traits/append/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/ir/control/traits/canonicalize/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/ir/control/traits/hash/index.html (+1ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/ir/control/traits/slice/index.html (+2ms) 12:25:34 ├─ /api/0.35/python/bloqade/analog/ir/control/traits/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/backend/bloqade/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/backend/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/backend/braket/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/backend/quera/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/parse/builder/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/parse/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/parse/stream/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/compiler/passes/emulator/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/builder/parse/trait/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/compiler/passes/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/emulate/ir/atom_type/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/emulate/ir/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/emulate/ir/emulator/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/compiler/analysis/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/compiler/rewrite/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/emulate/ir/space/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/emulate/ir/state_vector/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/control/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/control/field/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/control/sequence/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/control/pulse/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/location/bravais/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/control/waveform/index.html (+10ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/location/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/location/location/index.html (+10ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/bloqade/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/base/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/braket/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/params/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/capabilities/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/ir/routine/quera/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/braket/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/parallel/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/task_specification/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/analog/submission/ir/task_results/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/dialects/logical/groups/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/dialects/logical/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/dialects/logical/stmts/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/dialects/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/impls/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/rewrite/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/impls/measure_id/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/rewrite/qubit_count/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/rewrite/initialize/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/stdlib/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/logical/stdlib/post_processing/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/logical_validation/analysis/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/logical_validation/impls/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/logical_validation/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/measurement_validation/analysis/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/measurement_validation/impls/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/gemini/analysis/measurement_validation/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/native/dialects/gate/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/native/dialects/gate/stmts/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/atom/analysis/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/atom/atom_state_data/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/atom/impl/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/atom/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/layout/analysis/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/atom/lattice/index.html (+6ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/layout/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/placement/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/placement/analysis/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/placement/lattice/index.html (+5ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/analysis/placement/strategy/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/gate/gate/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/gate/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/noise/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/pyqrack/squin/noise/native/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/move2squin/gates/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/move2squin/base/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/move2squin/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/arch/gemini/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/rewrite/move2squin/noise/index.html (+24ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/aod_grouping/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/base/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/exhaustive/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/greedy/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/heuristic/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/generators/index.html (+1ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/core/index.html (+4ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/core/address/index.html (+12ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/traversal/astar/index.html (+3ms) 12:25:34 ├─ /api/dev/python/bloqade/qasm2/dialects/core/stmts/index.html (+7ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/traversal/bfs/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/traversal/driver/index.html (+2ms) 12:25:34 ├─ /api/dev/python/bloqade/lanes/search/traversal/entropy_guided/i…
…it tests Fix /404 route collision: move the on-brand 404 + /api/latest deep-link fallback into Starlight's content-driven 404 (src/content/docs/404.mdx -> NotFound.astro); remove src/pages/404.astro. Zero-warning build: register bnf/qasm Expressive-Code grammars (committed TextMate JSON, no dep); fix KaTeX (μ -> \mu + strict-ignore config for benign codes); set PAGEFIND_ROOT_SELECTOR=body so redirect stubs don't warn; draft:true on 404.mdx to drop it from the [...slug] catch-all; raise Vite chunk-size limit. Only remaining line is a documented third-party DEP0190 from Starlight's Pagefind spawn. Test harness (mise run docs:test): a build-warning gate (scripts/check_build.mjs, narrow allowlist) + a Playwright per-page runtime crawl (scripts/crawl_runtime.mjs) over all ~996 built pages capturing console errors, page exceptions, unhandled rejections and failed requests. Wired into CI with cached Playwright browsers. Separate from docs:check (links/xref). Widget + lib unit tests (mise run docs:unit): vitest + Astro Container API, 69 tests over the API components (ApiFn/ApiClass/ApiModule/Signature/Params/Returns/Raises/Source/ApiXref), widgets (VersionSwitcher, NotFound, SiteHeader/SiteFooter), and lib (xref resolveXref, versions, nav). Hermetic w.r.t. the generated inventory (mocked). Wired into CI. Gates all green: docs:check (links/xref), docs:test (build warnings + runtime), docs:unit (units). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… + Rust) with a verification harness Docstring/doc-comment cross-references now render as real <ApiXref> links (marked origin="docstring"), resolving against the merged inventory. Python (emitters/python/xref.py, via griffe): supports cross-refs in ALL docstring formats — reStructuredText/Sphinx object roles (:class:/:func:/:meth:/:obj:/:attr:/:exc:/:mod:/:data:/:const: incl. :py:* and ~short/explicit-title forms + .. seealso::), Google (roles and/or Markdown in Google prose), NumPy/SciPy (roles + the See Also section object list), and Markdown/mkdocstrings autorefs ([label][target], [target][], backtick-target, bare identifiers). Detection runs on parsed prose so it's parser-independent. Rust (emitters/rust/emit_rust.py): consumes rustdoc JSON per-item map to turn resolved intra-doc links into <ApiXref>. Safe by construction: an <ApiXref> is emitted only when the target resolves to a symbol the emitter documents (present in its inventory) — otherwise the reference degrades to inline code/text — so no docstring xref can ever be unresolved under XREF_STRICT. ApiXref gains an optional origin prop (data-xref-origin) for verification. Harness: scripts/check_xrefs.mjs (wired into docs:check + CI) asserts docstring-origin xrefs are present per-language (floors) and none are unresolved — catching silent regressions where an emitter stops producing them. Full build: 112 docstring xrefs (python 48, rust 64), 0 unresolved. Emitter unit tests cover every convention (python 95, rust 87); docs:unit 72; docs:check + docs:test green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nt, /api-only) The version selector now renders in the top bar on /api/** pages instead of only in the sidebar (where it was easy to miss, and never seen until you were deep inside a versioned page). Reuses the existing VersionSwitcher (which self-hides off /api/**), restyled compact for the header; removed the duplicate sidebar mount. Verified: the version select renders on /api/<version>/** pages and is absent on the landing, guides, and the /api overview. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
build_versions.py injects Starlight pagefind:false into every non-latest api/<V>/ page after generation, so site-wide search returns only the LATEST API (plus evergreen guides/blog/reference); older/dev API stays browsable via the header version selector but out of search. Pagefind indexed pages drop ~992 -> ~523 (469 dev API pages excluded); no duplicate cross-version hits. scripts/check_search_scope.mjs (wired into docs:check) reads the real version labels from versions.json and asserts non-latest api/<V> pages are excluded from search while the latest is indexed (evergreen api/index + api/compatibility are not versions and stay searchable). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Append check_search_scope.mjs to the 'Check internal links + API xrefs' step in website-deploy.yml + website-preview.yml (mirrors mise run docs:check, reuses the same dist-check build). check_search_scope now resolves versions.json relative to the passed dist dir, so it works both from website/ (mise, dist) and the repo root (CI, website/dist-check). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add amplify.yml (repo-root buildspec) reproducing the generate->build half of website-deploy.yml: uv sync + Rust nightly + notebook execution, then `pnpm --dir website build`, artifacts at website/dist. Served at the domain root so SITE_BASE is "/" (no gh-pages subpath juggling). Delete website-preview.yml: PR previews now come from Amplify, and pushing each PR's built site into gh-pages was bloating the repo history. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Amplify's pnpm install died with ERR_PNPM_IGNORED_BUILDS (exit 1): recent pnpm blocks dependency build scripts by default and treats an unapproved one as a hard failure in CI. esbuild and sharp both need their build scripts and are required by `astro build`. The existing `onlyBuiltDependencies: [esbuild, sharp]` allowlist is read by pnpm but not applied from a settings-only pnpm-workspace.yaml in pnpm 11.x, so the CI install kept failing. Switch to `dangerouslyAllowAllBuilds: true`, which does take effect; esbuild + sharp are the only packages with build scripts in the lockfile, so the scope is unchanged. Also drop the malformed `allowBuilds:` stub. Verified: clean `CI=true pnpm install --frozen-lockfile` exits 0, runs both build scripts, and esbuild transformSync + sharp native load both succeed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The build phase died in resolve_sources.py with `ModuleNotFoundError: No module named 'tomllib'`. tomllib is stdlib only in Python 3.11+, but the repo declares requires-python ">=3.10" with no version pin, so uv on Amplify's Amazon Linux created the venv with a <=3.10 interpreter. (Locally and on GH Actions uv happens to pick 3.13.) Set UV_PYTHON=3.13 so uv fetches/uses 3.13 for both the root env and the notebook emitter project (both declare >=3.10 and resolve to 3.13 locally), giving resolve_sources.py + gen_compat_matrix.py their tomllib. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…env pins node/pnpm/uv were pinned three times (mise.toml, amplify.yml, the website GH workflows) and the rustdoc nightly date twice. Make mise.toml the single source of truth for the website build path: * amplify.yml installs mise + `mise install` (drops NODE_VERSION/PNPM_VERSION/ UV_VERSION/RUST_TOOLCHAIN); `eval "$(mise env -s bash)"` puts the tools on PATH and exports the shared constants. * website-deploy.yml / website-release.yml swap setup-uv/pnpm-action/setup-node/ dtolnay-rust-toolchain for jdx/mise-action@v2. * New mise.toml [env] RUSTDOC_NIGHTLY is the ONE place the nightly date lives. build_versions.py --rust-toolchain now defaults to $RUSTDOC_NIGHTLY, so no caller repeats it. It is a plain shared constant, NOT a rust-toolchain.toml: nightly is only ever invoked via `cargo +$RUSTDOC_NIGHTLY rustdoc` for docstring extraction, so the main crates keep building with the default stable toolchain. Python stays pinned as UV_PYTHON=3.13 in amplify.yml (not mise [env]) on purpose: ci.yml runs a real 3.10/3.11/3.12 matrix a global UV_PYTHON would clobber. The uv-only workflows (ci/release/doc*) are intentionally left on setup-uv — pointing them at mise.toml would needlessly install node+pnpm and doesn't fit ci's matrix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nore lib/ rule The astro build failed on a clean clone (Amplify) with "Could not resolve ../lib/nav from src/components/SiteFooter.astro". Root cause: the Python-template `.gitignore` rule `lib/` matches directories named lib at ANY depth, so it silently excluded website/src/lib/ (nav.ts, versions.ts, xref.ts) — real source imported by SiteFooter, SiteHeader, VersionSwitcher, NotFound, and ApiXref — plus their tests in website/tests/unit/lib/. These files existed only locally and were never in any clone, so the site could never build off a fresh checkout. Re-include both dirs with negation rules and commit the 6 files. Verified with git check-ignore (no longer ignored) and a full scan for other swallowed source (only generated content / caches remain ignored). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Version-manage the AWS CLI alongside node/pnpm/uv via the aqua backend so it can read Amplify build logs / manage the Hosting app. It rides along in `mise install` (a small cached download in CI/Amplify); can move to a personal mise.local.toml to keep it out of CI if desired. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adding aws-cli to the shared mise.toml broke the Amplify build: `mise install` resolves the aqua aws-cli package via the GitHub API, which is 403 rate-limited on Amplify's shared build IPs (unauthenticated), failing before the site builds. aws-cli is a local operational tool, not a build dep, so it belongs in a personal gitignored mise.local.toml that never reaches CI/Amplify. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Amplify rejects the whole cache tarball if it exceeds 5GB ("Unable to write
cache: File size must be less than 5GB"), which was happening — ~/.rustup (~8GB)
and ~/.cache/uv (~12GB) alone blew the budget, so NOTHING was cached and every
build ran fully cold (uv sync ~3m + all 12 notebooks ~4m, every time).
Cache only small, high-value paths (~2.85GB total): the content-addressed
notebook cache (~4MB — so a PR changing one notebook now re-runs only that one),
the two uv venvs (~1.2GB each — skips uv sync), node_modules + .astro. Drop the
multi-GB/low-payoff rustup/cargo/uv-download/mise caches (reinstall is ~10-20s).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous trim still exceeded Amplify's 5GB cache limit — the uv venvs are far larger on Amplify's Linux than the ~1.2GB local du showed (different wheels + uv copies instead of hardlinks), so the whole cache kept getting rejected and every build stayed cold. Cache only the notebook cache (~4MB), node_modules, and .astro — guaranteed under 5GB so the cache finally persists and per-notebook caching works. Add a [cache-size] du probe to the build to log real Amplify sizes so we can revisit adding a venv if there's headroom. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…GHTLY) Four independent CI failures on the astro-docs PR, all from the new website/ tree: - ruff: drop 4 unused imports; rename ambiguous `l` -> line/lang (E741) in website/scripts/build_versions.py. - black: format the 21 new website/ python files. - build (3.10/3.11/3.12): ci.yml ran bare `uv run pytest`, which swept website/emitters/*/tests whose standalone packages aren't installed by `uv sync` -> ModuleNotFoundError. Scope to `pytest test` (matches `mise run test`); emitter suites run under the website tooling. - Build + publish /next/: jdx/mise-action doesn't propagate mise.toml [env] into $GITHUB_ENV, so $RUSTDOC_NIGHTLY was empty and `rustup toolchain install ""` crashed (and build_versions.py silently fell back to generic `nightly`). Re-export it explicitly after mise-action in website-deploy.yml + website-release.yml (mirrors amplify.yml); mise.toml stays the single source of truth. Fix the now inaccurate comments. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A prototype of a new documentation website (
website/, built with Astro 5 + Starlight) that unifies our Python and Rust API reference under one theme, one search box, and one version switcher — designed to grow with the ongoing Rust refactor (bloqade-lanes,bloqade-circuit,tsim,ppvm, … eventually one monorepo).It lives alongside the current MkDocs site. Nothing about the existing site changes — the old workflows,
mkdocs.yml, anddocs/are untouched and still deploy to production. This branch only adds files.Why
bloqadeversion).🔍 See it locally
Requirements: Node ≥ 20 and
pnpm. (The full API reference additionally needsuvand a Rust nightly toolchain.)Quick preview — landing, guides, blog, and the design system (no Python/Rust needed)
This renders the landing page, all migrated guides, the blog, and the full theme/design — enough to review look-and-feel and navigation.
Full site including the versioned Python + Rust API reference
The per-version API pages are generated from pinned sources (and are gitignored, not committed), so generate them first, then serve:
Notes:
rustup toolchain install nightly(used forcargo rustdoc --output-format json).EXECUTE_NOTEBOOKS=1before building to execute them.pnpm --dir website build→ output inwebsite/dist/(this is what CI publishes).Live preview (once CI passes)
The newly-added workflows deploy this branch to an isolated gh-pages subpath so it can't touch the live site:
https://bloqade.quera.com/next/https://bloqade.quera.com/astro-preview/pr-<N>/These workflows are brand new and may need a fixup pass on their first run — if the live preview isn't up yet, use the local steps above.
How it's built (architecture)
ApiModule/ApiClass/ApiFn/Signature/Params/…); Astro owns all presentation. Python via griffe (same lib mkdocstrings uses), Rust via rustdoc JSON.website/docs.sources.tomllists each API source as a repo pinned by tag (pin-from:<pkg>→uv pip show) or a local monorepopath=. Addingppvm= one entry; flipping a source to an in-repo path later changes nothing else.<ApiXref>resolves against a merged inventory; the build emits a Sphinx-compatibleobjects.inv(so downstream Sphinx projects can intersphinx to us). Optional strict mode (XREF_STRICT=1) fails the build on broken refs.bloqademeta-version, plus an auto-generated compatibility matrix (bloqade X → circuit/analog/lanes/tsim). Only/apiis versioned; landing/guides/blog are evergreen./api-scoped version switcher.--sl-*variable; header, footer, and widgets (cards, callouts, tabs, code blocks) are shared/consistent — no default Starlight look..github/workflows/website-*.ymlbuild in GitHub Actions and publish viawebsite/scripts/publish.sh(a thin seam; swapping to Vercel--prebuiltlater is one line).Current build: 744 pages, all cross-refs resolved,
objects.invemitted.Not done yet (intentionally)
/api/latest/<symbol>deep-link aliasing) — a separate step once we're happy.ghz) is migrated as a proof; the rest is the gradual "move things over" work.Feedback wanted
🤖 Generated with Claude Code