界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
数据与研究 · SKILL.md

circuits-and-simulation

circuits-and-simulation

【数据与研究】Turn OpenFermion operators and fermionic state data into bounded Cirq circuits, Trotter products, preparation circuits, and VPE measurement circuits while preserving dimension, ordering, and backend boundaries.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: circuits-and-simulation description: "Turn OpenFermion operators and fermionic state data into bounded Cirq circuits, Trotter products, preparation circuits, and VPE measurement circuits while preserving dimension, ordering, and backend boundaries." disable-model-invocation: true metadata: disco-role: operating parent: openfermion license: Apache 2.0

Circuits and simulation

Load this skill when the request is about a Trotter circuit, exponentiating a Pauli Hamiltonian, Cirq interoperability, Slater or Gaussian-state preparation, UCC/UCCSD generator construction, low-rank factorization helpers, basis rotations, circuit depth, term ordering, or variational phase estimation (VPE). This skill constructs circuit descriptions and bounded Cirq circuits; it does not choose a physical Hamiltonian, perform operator mapping/algebra, run external hardware, or make benchmark claims.

Use api-reference.md for verified signatures and shape contracts, workflows.md for recipes and preflight checks, and troubleshooting.md for failure diagnosis. The bounded helper is scripts/circuit_smoke.py.

Route before constructing

  1. If the input is a model, geometry, basis, or chemistry data choice, route to hamiltonians-and-chemistry.
  2. If the work is fermion/qubit algebra, a mapping, normal ordering, or term simplification, route to the sibling operators-and-transforms skill.
  3. Otherwise record the operator family, qubit/mode order, evolution time, Trotter order and step count, control qubit (if any), desired final qubit ordering, and the exact matrix/amplitude dimensions before calling an API.

Choose the circuit boundary

  • Cirq-native fermionic simulation: use simulate_trotter for an InteractionOperator or DiagonalCoulombHamiltonian. Choose an exposed algorithm explicitly when reproducibility matters: LOW_RANK, LINEAR_SWAP_NETWORK, or SPLIT_OPERATOR.
  • Qubit-Pauli product formula: use trotter_operator_grouping to inspect ordered single-term factors, then pauli_exp_to_qasm or trotterize_exp_qubop_to_qasm for the package's QASM-like text output. These functions do not return Cirq circuits.
  • Cirq interop: map a QubitOperator to a Cirq PauliSum with qubit_operator_to_pauli_sum, then exponentiate one commuting group at a time with the Cirq operation appropriate to the installed Cirq version. The helper uses cirq.PauliSumExponential for one-term groups; do not pass a noncommuting sum to that operation.
  • State preparation: use prepare_slater_determinant for an orthonormal row matrix, prepare_gaussian_state for a QuadraticHamiltonian, and bogoliubov_transform for an explicit basis transformation. All emit Cirq operation trees consumed by cirq.Circuit.

Product formulas and ordering

simulate_trotter(..., order=0) selects an asymmetric step; order=1 selects the first symmetric step, and larger positive orders recursively split that step. n_steps divides the requested time. Swap-network algorithms can reverse the mode-to-qubit ordering after a step. Preserve the returned permutation or set omit_final_swaps=True only when the caller accepts the reversed final ordering.

For trotter_operator_grouping, default term order is the sorted keys of the QubitOperator.terms dictionary. A supplied term_ordering is an explicit sequence of existing term keys and is part of the numerical approximation, not just display order. Second- and third-order grouping require at least two terms. Count factors before choosing a depth budget: first order has one pass per step, second order has a forward/backward palindrome, and the third-order helper expands recursively with signed coefficients.

Dimension and convention gates

  • A Slater matrix is eta x N with orthonormal rows; pass exactly N qubits. The initial computational-basis state has eta occupied modes, either the first eta modes (default integer 0 is the vacuum) or a caller-specified big-endian integer/index sequence.
  • A Bogoliubov matrix is (N, N) for number-conserving transformations or (N, 2*N) for general Gaussian transformations; pass N qubits. A spin-block optimization assumes all spin-up modes precede all spin-down modes.
  • Singlet UCCSD requires an even n_qubits value (spin orbitals). For n_electrons, use n_spatial = n_qubits // 2, n_occupied = ceil(n_electrons / 2), and n_virtual = n_spatial - n_occupied. The exact packed length is n_occupied*n_virtual + m*(m+1)//2, where m=n_occupied*n_virtual.
  • Low-rank decomposition expects the documented real/symmetric tensor contract. With spin_basis=True, the spin-orbital tensor must be spin-symmetric; spin-dependent interactions are rejected rather than silently downfolded.
  • VPE's qubits sequence defines measurement bit order. Each generated circuit measures every supplied qubit under key msmt; the estimator must receive results in the same rotation-set order.

Minimal bounded check

From any working directory, run:

python scripts/circuit_smoke.py --help
python scripts/circuit_smoke.py --tiny
python scripts/circuit_smoke.py --tiny --with-slater

The helper uses a two-qubit, two-term QubitOperator, reports qubits, operation count, and depth, and optionally reports a two-mode Slater preparation. It performs no network access, file writes, plugin discovery, or large simulation. It is a structural smoke check, not a physics benchmark.

Boundaries and handoff

OpenFermion's circuit layer depends on Cirq for Cirq-returning primitives and VPE circuits. Cirq itself supplies simulators, device targets, and gatesets; OpenFermion does not install, select, or verify external hardware plugins in this skill. QASM-like output from pauli_exp_to_qasm uses textual gate names and is not a promise of OpenQASM compatibility. For actual hardware routing, noise models, plugin simulators, or large-depth resource claims, preserve the operator/circuit contract and route to the approved backend workflow.

A useful handoff includes: operator class and basis, qubit order, matrix/tensor shapes, time, n_steps, formula order, explicit term ordering or algorithm, whether swaps are retained, circuit qubits/operations/depth, and any unresolved optional dependency or backend requirement.

我的收藏