Downloads · 30 days
49
2% of all-time downloads
Ryukijano/h-cgqe-gic2026
h-cgqe-gic2026 is a reinforcement learning model from Ryukijano. Use it for the reinforcement learning task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as mit.
<p align="center" <h1 align="center"⚛️ Conditional-GQE (H-cGQE)</h1 <p align="center" <strongAI-Driven Generative Quantum Circuit Design for Molecular & Materials Discovery</strong<br <emGenerative AI × Reinforcement…
Downloads · 30 days
49
2% of all-time downloads
All-time downloads
2K
Public
Repo size
1.6 GB
Likes
1
Public
Click a slice to open those files.
.pt803 MB · 49%
From the Hugging Face model README
Conditional-GQE (H-cGQE) is an artificial intelligence framework that automatically designs quantum computing circuits for chemistry and materials science.
Traditional Quantum Virtual Eigensolvers (VQEs) rely on manual, human-designed quantum circuits that are either too deep for real quantum hardware or get trapped in mathematical dead-ends called barren plateaus and diagonal collapse.
H-cGQE pairs a Chemical Graph Neural Network (GNN) and a Transformer with Quality-Diversity Reinforcement Learning (QD-GRPO) to amortize ansatz design: conditioned on molecular structure and the electronic Hamiltonian, the model proposes compact operator sequences whose continuous angles are refined classically (L-BFGS-B). The goal is chemical accuracy ($\le 1.6 \text{ mHa}$) within stated active spaces on simulators, with selective hardware checks.
┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────────┐
│ Molecular Structure │ ───► │ AI Transformer Agent │ ───► │ Compact Quantum Circuit│
│ (Atoms, Bonds, Energy) │ │ (GNN + QD-GRPO Policy) │ │ (Optimized for QPUs) │
└────────────────────────┘ └────────────────────────┘ └────────────────────────┘
🔗 Model Weights & Artifacts: Hosted on HuggingFace at
Ryukijano/h-cgqe-gic2026
| Benchmark / Molecule | Active Space / Qubits | Reported Metric | Baseline / Context | Highlight / Caveat |
|---|---|---|---|---|
| Methyl Iodide ($\text{CH}_3\text{I}$) | 8q CAS(4e,4o) | $0.63 \text{ mHa}$ vs active-space CASCI/FCI | $2.65 \text{ mHa}$ (CUDA-Q GQE)<br>$988 \text{ mHa}$ (HEA-VQE) | Sub-chemical accuracy ($\le 1.6 \text{ mHa}$) in a controlled 8q comparison (results/phase3_final/benchmark_ch3i_consolidated.json). Distinct from the larger GIC methyl_iodide_cas12 Hamiltonian. |
| Hydrogen ($\text{H}_2$) | 4 Qubits | $1.48 \text{ mHa}$ GPU↔AWS SV1 gap | Shot-noise simulator cross-check | Cross-backend energy discrepancy on a shallow circuit (results/eval/simulator_validation.json); not an FCI error. |
| IQM Emerald QPU | 8 Qubits | $87.5%$ state fidelity | Ideal bitstring target | 1024-shot hardware run; fidelity is to the expected computational-basis string, not energy accuracy on QPU. |
| Benzene ($\text{C}_6\text{H}_6$) | 40q (QSCI/MPS path) | QSCI subspace estimate (~19 s) | Full SV OOM / infeasible | Runtime scaling demonstration; not a claim of exact FCI/CASCI match. See results/phase3_final/qsci/. |
| Ethylene ($\text{C}_2\text{H}_4$) | 28 Qubits | MPS bond-dim. sweep ($D=32\ldots256$) | Full SV stressful / often impractical | ~300 s single-GPU MPS convergence study; accuracy depends on bond dimension. |
| GIC molecule suite | 4q – 28q | Conditioned generation + collapse mitigations | Diagonal / commuting collapse is a known GQE failure mode | UCCSD pools + entanglement constraints are designed to suppress Z-only collapse. Suite-wide chemical-accuracy rates should be reported from eval JSONs, not assumed 100%. |
Notes: Chemical accuracy ≈ $1.6 \text{ mHa}$ ($\approx 1 \text{ kcal/mol}$). Where “exact” references appear below, they mean CASCI/FCI within the stated active space, not full CI in the complete basis. Held-out / zero-shot molecule generalization remains an open evaluation item.




4q 12q 20q 28q 40q
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ H₂ │ │ LiH │ │ N₂ │ │ C₂H₄│ │C₆H₆│
│ (4q)│ │(12q)│ │(20q)│ │(28q)│ │(40q)│
└──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ CUDA-Q Statevector (nvidia-mqpu, 3× L40S) │
│ ● Fast: <1s per circuit ● RL training rewards │
│ ● B200 SQLite Cache (24k+ entries) │
│ ● QPU Validation (qBraid: IQM, Rigetti) │
└──────────────────────┬──────────────────────────────┘
│ 24q threshold (PCIe L40S)
▼
┌─────────────────────────────────────────────────────┐
│ MPS Tensor Network (bond dim D=32…256) │
│ ● Ethylene 28q: ~300s on single L40S │
│ ● Bond convergence sweep required for accuracy │
└──────────────────────┬──────────────────────────────┘
│ 28q threshold
▼
┌─────────────────────────────────────────────────────┐
│ QSCI + FMO2 (28–40q) │
│ ● Benzene 40q: ~19s QSCI/MPS path (subspace estimate) │
│ ● FMO2: fragment → evaluate → reassemble parent │
│ ● NOT brute-force statevector (scientifically wrong│
│ for 32–40q JW chemistry circuits) │
└─────────────────────────────────────────────────────┘
ChemistryEncoder)Unlike standard NLP transformers, C-GQE features an Edge-Aware Message-Passing Graph Neural Network (src/gqe/models/chemistry_encoder.py) that encodes the physical topology of the molecule — conceptually analogous to how AlphaFold's Evoformer processes structural relationships:

In early GQE implementations, AI agents discovered a "lazy shortcut": generating commuting $Z$-basis operators (e.g., $IZIZ$, $ZZII$). Because these operators commute with the Hartree-Fock state, their energy gradients are identically zero ($\frac{\partial E}{\partial \theta} = 0$). Classical optimizers trap them at $E = E_{\text{HF}}$, killing training gradient variance (std(rewards) = 0).
❌ COLLAPSED SEQUENCE (Z-only, commuting) ✅ ENTANGLED SEQUENCE (UCCSD, non-commuting)
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
│ A₁ = IZIZ (Z-only) │ │ A₁ = YZXI (X+Y entangling) │
│ A₂ = ZZII (Z-only) │ │ A₂ = XZYI (X+Y entangling) │
│ A₃ = IZIZ (duplicate) │ │ A₃ = IYZX (X+Y entangling) │
│ A₄ = ZIIZ (Z-only) │ │ A₄ = ZXIY (X+Y entangling) │
│ │ │ │
│ [A_i, A_j] = 0 ∀ i,j │ │ [A_i, A_j] ≠ 0 (non-commuting) │
│ ∂E/∂θ_i = 0 (zero gradient) │ │ ∂E/∂θ_i ≠ 0 (non-zero grad) │
│ E = E_HF (trapped at baseline) │ │ E < E_HF (energy improvement) │
│ std(rewards) = 0 → no learning │ │ std(rewards) > 0 → RL learns │
└─────────────────────────────────┘ └─────────────────────────────────┘
force_entanglement=True in the decoder masks Z-only tokens during sampling, ensuring at least one multi-qubit entangler per sequence.
Verified pool statistics: H₂ (4q): 16 Pauli words, 0 Z-only, 192 pool entries. LiH (12q): 1,408 Pauli words, 0 Z-only. N₂ (20q): 11,088 Pauli words, 0 Z-only. BeH₂ (14q): 3,456 Pauli words, 0 Z-only.
Standard Policy Gradient methods (PPO/GRPO) suffer from mode collapse, finding only one circuit structure. We implement MAP-Elites QD-GRPO (src/gqe/rl/map_elites.py):

For a generated sequence $[A_1, A_2, \dots, A_k]$, each operator $A_i = e^{i\theta_i \hat{P}i}$ requires a continuous rotation angle $\theta_i \in \mathbb{R}$. The energy landscape is: $$E(\boldsymbol{\theta}) = \langle \psi_0 | U{j_k}^\dagger \cdots U_{j_1}^\dagger \hat{H} U_{j_1} \cdots U_{j_k} | \psi_0 \rangle$$


results/train/rl_energy_cache.sqlite).src/gqe/data/cache_to_pretrain.py recovers 17,408 (operators, energy) pairs by replaying deterministic circuit generation. This allows replay-buffer mixing of known-good circuits without CUDA-Q.--cache-only returns HF energy for cache misses (no CUDA-Q). Useful for buffer imitation, but on-policy rollouts rarely hit the fixed cache → flat rewards → DAPO advantage collapse. For real RL, use write-through (drop --cache-only) so misses are evaluated and stored. See bash scripts/train_rl.sh full.Direct statevector simulation breaks above 28 qubits ($2^{28} \approx 268$M amplitudes). To tackle 32–40 qubit systems required by the GIC challenge, we deploy two scientific scaling pillars:

To contextualize C-GQE against contemporary generative quantum eigensolvers, the table below compares H-cGQE with GPT-QE (NVIDIA / U. Toronto / St. Jude, arXiv:2401.09253) and SpinGQE (Mindbeam AI, March 2026, arXiv:2603.24298):
| Technical Dimension | GPT-QE (NVIDIA/Toronto, 2024) | SpinGQE (Mindbeam AI, March 2026) | Our H-cGQE (Quantum-Buddies, 2026) |
|---|---|---|---|
| Target Systems | Single-molecule Fermionic UCCSD ($H_2, LiH, N_2, CO_2$) | 4-qubit Heisenberg Spin Model | 35 GIC 2026 Molecular Hamiltonians (4q–28q, extended to 40q) |
| Model Topology | Unconditional Decoder-Only (GPT-2) | Unconditional Decoder-Only (GPT-2) | Conditional Encoder-Decoder Transformer |
| Conditioning Mode | None (1 model per fixed molecule) | None (1 model per fixed Hamiltonian) | Chemistry GNN + Hamiltonian Term Cross-Attention |
| Training Objective | Softmax Boltzmann weighting $\exp(-\beta E)$ | Weighted MSE Loss: $w(E) \cdot (l_t - E_t)^2$ | DAPO Policy Gradient (GRPO) + Asymmetric Clipping |
| Parameterization | Discretized evolution times $e^{i P t_k}$ | Discretized evolution times / angle refinement | Two-Stage: Discrete Topology $\rightarrow$ L-BFGS-B Continuous $\vec{\theta}$ Optimization |
| Exploration & Diversity | Inverse temperature schedule $\beta$ | Inverse temperature schedule $\beta$ | MAP-Elites Quality-Diversity Archive (QD-GRPO) |
| Diagonal Collapse Mitigation | None | Temperature tuning | UCCSD Excitations + Commutator Loss + Entropy Floor |
| Generalization | Single instance | Single instance | Conditioned for cross-molecule generation (held-out energy tables still needed) |
Cross-Molecule Conditioning via Encoder-Decoder:
HamiltonianEncoder + ChemistryEncoder (MPNN) condition a shared policy on $(H, \text{graph})$. This enables multi-molecule amortization; rigorous leave-one-family-out energy evaluation is the right test of whether that conditioning generalizes.Policy Optimization (DAPO RL) vs. Weighted MSE Loss:
Decoupled Two-Stage Optimization (Topology vs. Continuous Rotation Angles):
nvidia-mqpu.Quality-Diversity Archive (MAP-Elites) preventing Diagonal Collapse:
The framework is benchmarked across the complete GIC 2026 challenge molecule suite:
| Category | Molecules Included | Qubit Range |
|---|---|---|
| Small Diatomics / Hydrides | $\text{H}_2$ (4 bond lengths), $\text{LiH}$ (4 bond lengths), $\text{BeH}_2$ (3 bond lengths), $\text{HF}$ | 4q – 14q |
| Organic & Volatile Compounds | $\text{H}_2\text{O}$, $\text{NH}_3$, $\text{CH}_4$, Formaldehyde, Acetylene, Ethylene | 14q – 28q |
| Aromatic & Heteroaromatic Systems | Benzene, Toluene, Anisole, o-Cresol, Phenol | 12q – 24q |
| Heavy-Atom & CAS Systems | Methyl Iodide ($\text{CH}_3\text{I}$), Iodobenzene, IMePh, Diarylethene fragment | 12q – 24q |
| Challenge 40q Scaling Set | Benzene / $\text{N}_2$ large active spaces (QSCI/MPS path) | 40q (subspace / TN estimates) |
git clone https://github.com/Quantum-Buddies/Conditional_GQE.git
cd Conditional_GQE
bash scripts/setup_env.sh
setup_env.sh handles everything — no sudo or system conda needed:
$HOME/.local/bin (prebuilt, no root)python3 -m pip (qBraid-safe)LFS artifacts on main:
| File | Purpose |
|---|---|
results/train/h_cgqe_model_b200_sft.pt | SFT warm-start checkpoint |
results/train/gqe_supervised_dataset.pt | Supervised training dataset |
results/train/rl_energy_cache.sqlite | 25K circuit→energy cache (4–28q) |
results/train/rl_pretrain_from_cache.json | 24K pretrain bootstrap circuits |
On qBraid Lab, use the Launch on qBraid button or:
For local or HPC setups:
conda env create -f environment-dgx-spark-cudaq.yml
conda activate conditional-gqe-cudaq
pip install -r requirements-qbraid.txt
bash scripts/train_rl.sh smoke
bash scripts/train_rl.sh full # write-through RL from SFT (skips cache-only)
bash scripts/train_rl.sh online-rl # 50 epochs, write-through cache + CUDA-Q misses
bash scripts/train_rl.sh cache-warmup # buffer imitation only (weak on-policy RL)
bash scripts/evaluate_rl.sh all # infer → eval → optimize → report
bash scripts/evaluate_rl.sh infer # generate circuits from checkpoint
bash scripts/evaluate_rl.sh eval # CUDA-Q energy evaluation
bash scripts/evaluate_rl.sh optimize # L-BFGS-B coefficient optimization
python scripts/qpu_preflight.py --dry-run --device qbraid:qbraid:sim:qir-sv
bash scripts/run_hpc_qbraid_workflow.sh --qpu-submit
bash scripts/run_hpc_qbraid_workflow.sh --qpu-retrieve
| Script | Purpose |
|---|---|
scripts/setup_env.sh | One-shot setup: git-lfs, pip deps, GPU verify (no sudo) |
scripts/env_gpu.sh | Auto-detect GPU, set CUDA-Q gate fusion / mempool env vars |
scripts/train_rl.sh | Write-through RL from SFT (smoke / cache-warmup / online-rl / full) |
scripts/evaluate_rl.sh | Evaluation pipeline (infer / eval / optimize / report / all) |
bash scripts/train_rl.sh smoke # 2 epochs, 2 molecules (~2 min)
bash scripts/train_rl.sh full # write-through RL from SFT (skips cache-only)
bash scripts/evaluate_rl.sh all # infer → eval → optimize → report
# Optional: MAX_QUBITS_OVERRIDE=28 bash scripts/train_rl.sh full
train_rl.sh modes: full / online-rl use write-through caching (CUDA-Q evaluates misses and stores them). Prefer these for real learning. full always starts from the SFT checkpoint (ignores any stale *_rl_warmup.pt). cache-warmup (--cache-only) is kept for buffer-imitation experiments only — on-policy samples almost never hit the precomputed MD5 keys, so misses get a flat HF penalty and DAPO/GRPO advantages collapse.
GPU auto-detection: env_gpu.sh reads compute capability and sets CUDA-Q gate fusion level (Hopper CC 9.0 → fusion 5, Blackwell CC 10.0 → +FP32 emulation, Ampere CC 8.0 → fusion 4). Molecule lists are auto-generated from the Hamiltonians JSON filtered by GPU-specific qubit limits (train_rl.sh defaults to ≤22q on H200).
Import order note: Triton (torch.compile) and CUDA-Q both embed LLVM. train_rl_dapo.py lazy-imports CUDA-Q after torch.compile. Do not import cudaq before compiling the model in the same process.
Portable entry point: scripts/launch_b200_training.sh
bash scripts/launch_b200_training.sh sft # supervised warm-start
bash scripts/launch_b200_training.sh ablation # RL from scratch (ablation)
bash scripts/launch_b200_training.sh cache # precompute energy cache (≤28q only)
bash scripts/launch_b200_training.sh both # SFT → RL main pipeline
Energy cache: SQLite-backed circuit→energy store for fast RL. Default cap CACHE_MAX_QUBITS=28. Do not precompute 32–40q SV caches — use QSCI/FMO2 instead. train_rl.sh defaults to ≤22q on H200 (override with MAX_QUBITS_OVERRIDE).
# Optional: one-time cache fill (append-safe, skips existing keys)
bash scripts/launch_b200_training.sh cache
Blackwell / B200 env knobs: scripts/env_b200_blackwell.sh (source before import cudaq). GPU auto-env for H100/H200/etc.: scripts/env_gpu.sh.
| File | Molecules | Qubits | Purpose |
|---|---|---|---|
results/data/hamiltonians_gic2026/ | 35 | 4–28 | GIC challenge set |
results/data/hamiltonians_rl_b200/ | 51 | 4–40 | RL scaling curriculum |
results/data/hamiltonians_merged.json | 21 | 4–40 | SFT + baselines |
results/data/fragments/fmo_hamiltonians.json | — | 4–12 | FMO2 fragments |
Generate new Hamiltonians:
python src/gqe/data/generate_hamiltonians.py --help
h2, iodobenzene, imeph_cas12).cudaq.observe), not raw state probability.python scripts/qpu_preflight.py --dry-run
python src/gqe/eval/submit_qpu.py --help
Conditional_GQE/
├── README.md # This file
├── QUICKSTART.md # Short reproduction guide
├── AGENTS.md # Canonical training decisions
├── docs/B200_TRAINING_PLAN.md # B200 / Blackwell notes
├── scripts/
│ ├── launch_b200_training.sh # SFT / RL / cache launcher
│ ├── run_hpc_qbraid_workflow.sh # HPC → QPU orchestration
│ └── phase3/ # Experiment scripts (01–09)
├── src/gqe/
│ ├── models/ # Transformer, train_rl_dapo.py
│ ├── eval/ # evaluate, QSCI, FMO2, submit_qpu
│ ├── rl/ # MAP-Elites, energy_cache
│ └── data/ # Hamiltonians, precompute cache
└── results/
├── train/ # Checkpoints (LFS), metrics, cache
└── phase3_final/ # Published experiment artifacts
| Safeguard | What it prevents |
|---|---|
--gate-auxiliary-rewards | Reward hacking without energy improvement |
--statevector-max-qubits 24 | GPU OOM on L40S |
| MPS bond sweep (D=32,64,128,256) | False accuracy from single bond dim |
| QPU preflight (ZNE/REM limits) | Infeasible mitigation on deep circuits |
| RL cache cap at 28q | Wasting GPU weeks on 32q+ SV observe loops |
| Platform | Statevector | MPS | QPU validation |
|---|---|---|---|
| qBraid L40S | ≤24q | 28q+ | Primary dev target |
| qBraid B200 | ≤32q (reference only) | 28–40q | Optional local CUDA-Q |
| AIRE 3× L40S | ≤24q (MQPU task-parallel) | 28q | Slurm jobs |
L40S is PCIe-only: keep
n_qubits ≤ 24fornvidia-mqputo avoid distributed statevector segfaults.
bash scripts/phase3/00_smoke_test.sh
This runs 5 verification tests: DedupCache SQLite persistence, offline RL cache-only mode, FMO2 exact reconstruction, QPU manifest generation (QWC grouping), and code import sanity.
The Phase 3 pipeline is a 3-stage hybrid GPU→GPU→QPU workflow:

| Stage | Hardware | What Happens | Script |
|---|---|---|---|
| 1. Precompute | B200 GPU (qBraid) | Generate Hamiltonians, run H-cGQE inference, cache energies to SQLite | scripts/launch_b200_training.sh |
| 2. Offline RL Training | L40S GPU (HPC) | Buffer-imitation / cache lookups; prefer write-through on CUDA-Q GPUs for real RL | train_rl_dapo.py --energy-cache ... (± --cache-only) |
| 3. QPU Validation | Rigetti Cepheus (qBraid) | Execute QWC-grouped measurement circuits on 108q QPU | scripts/phase3/generate_qpu_manifests.py |
# On qBraid B200 instance — generates rl_energy_cache.sqlite
bash scripts/launch_b200_training.sh cache
python src/gqe/models/train_rl_dapo.py \
--molecules h2_0.74 lih_1.6_full \
--qd-mode \
--energy-cache results/train/rl_energy_cache.sqlite \
--cache-only \
--epochs 50 \
--out results/train/h_cgqe_rl_dapo_phase3.pt
Key flags:
--energy-cache: Path to SQLite file from Stage 1. DedupCache / PersistentEnergyCache loads precomputed energies.--cache-only: Skips CUDA-Q; uncached circuits get HF penalty. Prefer without --cache-only (write-through) when CUDA-Q is available so novel circuits get real energies. On qBraid: bash scripts/train_rl.sh full.# Generate 3-fragment iodobenzene Hamiltonians (monomers 4q, dimers 8q, parent 12q)
python scripts/generate_fmo2_fragments.py
# Run FMO2 exact + H-cGQE + L-BFGS-B
python scripts/run_fmo2_scaling.py
python scripts/run_fmo2_lbfgs.py
# Submit dimer/monomer circuits to Rigetti Cepheus QPU
python scripts/submit_fmo2_qpu.py --submit
# Retrieve QPU results + SQD post-processing
python scripts/retrieve_and_sqd.py --meta results/qpu/fmo2_cepheus_submission_meta.json \
--hamiltonians results/data/fragments/dimers.json \
--out results/qpu/fmo2_cepheus_sqd_results.json
Key result: 12q parent recovered from max 8q circuits (33% qubit reduction). Fragmentation error: 11.3 mHa (nonzero → non-tautological).
# Submit L-BFGS-B optimized + zero-theta circuits to Cepheus
python scripts/submit_lbfgs_qpu.py --submit --include-zero-theta
# Retrieve + SQD
python scripts/retrieve_and_sqd.py --meta results/qpu/lbfgs_cepheus_submission_meta.json \
--hamiltonians results/data/hamiltonians_gic2026/hamiltonians.json \
--out results/qpu/lbfgs_cepheus_sqd_results.json
Bi-level pipeline: RL discovers operator topology (outer loop) → L-BFGS-B optimizes continuous angles (inner loop) → QPU executes → SQD recovers energy.
python scripts/phase3/generate_qpu_manifests.py \
--molecules h2_0.74 lih_1.6_full \
--hamiltonians results/data/hamiltonians_merged.json \
--optimized results/eval/h_cgqe_uccsd_optimized.json \
--out-dir results/qpu/manifests \
--shots 4096
Outputs per-molecule JSON manifests with QWC-grouped QASM 2.0 measurement circuits, ready for qBraid submission to Rigetti Cepheus.
| Component | File | Description |
|---|---|---|
| DedupCache (SQLite) | src/gqe/rl/map_elites.py | Persistent energy cache with from_sqlite() classmethod for offline loading |
| Offline / write-through RL | src/gqe/models/train_rl_dapo.py | --energy-cache; omit --cache-only for write-through CUDA-Q misses |
| FMO2 Pipeline | src/gqe/eval/run_fmo2.py | Fragment → GQE → reassemble with MAP-Elites archive integration |
| QPU Manifests | scripts/phase3/generate_qpu_manifests.py | QWC grouping, QASM export, cost estimation for Rigetti Cepheus |
| Smoke Test | scripts/phase3/00_smoke_test.sh | Single-command verification for judges |
@software{conditional_gqe,
title = {Conditional-GQE: Scalable Generative Quantum Eigensolver with RL, QSCI, and FMO2},
author = {{Ryoushi Quantum Buddies}},
url = {https://github.com/Quantum-Buddies/Conditional_GQE},
year = {2026}
}
MIT — © 2025–2026 Ryoushi Quantum Buddies
NVIDIA CUDA-Q · Mitsubishi Chemical Group · AIST · qBraid · PySCF · OpenFermion · Park & Walsh (Chemeleon2, arXiv:2511.07158) · Nakaji et al. (GQE, arXiv:2401.09253)