qrunch.quantum.internal
Unified Python module that contains all Rust-backed quantum classes. This consolidates all #[pyclass] definitions into a single .so file, which solves PyO3’s type identity issues across module boundaries.
Functions
Combined excitation index generation + metric computation + top-k selection (BigUint measurements). |
|
Combined excitation index generation + metric computation + top-k selection (u64 measurements). |
|
|
|
|
Generate the operators needed for the 1-particle reduced density matrix. |
|
Generate the operators needed for the 2-particle reduced density matrix. |
|
Generate the operators needed for the 3-particle reduced density matrix. |
|
Generate the operators needed for the 4-particle reduced density matrix. |
Generate all excitation gate pool indices for a molecular electron configuration. |
|
Generate excitation indices with exclusion filtering (Rust-accelerated). |
|
|
Generate all C(dimension, 2) HermitianPauliSums, each containing a single X⊗X Pauli string over every unique 2-qubit combination. |
|
Generate all |
|
Generate (X[x]*X[y]+Y[x]*Y[y]) * Z[p] operators. |
|
Generate (X[x]*X[y]+Y[x]*Y[y]) * Z[p]*Z[q] operators. |
|
Generate all C(dimension, 4) HermitianPauliSums, each containing two terms: X⊗X⊗X⊗X + Y⊗Y⊗Y⊗Y over every unique 4-qubit combination. |
|
Generate XXYY operators for pair-of-pairs iteration. |
|
Generate all |
|
Generate all C(dimension, 2) HermitianPauliSums, each containing a single Z⊗Z Pauli string over every unique 2-qubit combination. |
|
Generate all C(dimension, 3) HermitianPauliSums, each containing a single Z⊗Z⊗Z Pauli string over every unique 3-qubit combination. |
|
Generate all C(dimension, 4) HermitianPauliSums, each containing a single Z⊗Z⊗Z⊗Z Pauli string over every unique 4-qubit combination. |
|
Generate all C(dimension, 5) HermitianPauliSums, each containing a single Z⊗Z⊗Z⊗Z⊗Z Pauli string over every unique 5-qubit combination. |
Generate Z⊗Z⊗Z⊗Z⊗Z operators for a subset of qubit quintuples determined by active pair-breaking terms. |
|
|
|
|
|
|
|
|
Classes
- class AntiHermitianPauliSum
Bases:
object- classmethod __new__(*args, **kwargs)
- constant()
Returns the constant as a complex number (re=0)
- indices()
- len()
- number_of_qubits
- prune(tolerance)
- string_coefficient_pairs()
- terms_as_int
- class ExcitationGate
Bases:
object- classmethod __new__(*args, **kwargs)
- static new_double_excitation_gate(number_of_qubits, creation_index1, creation_index2, annihilation_index1, annihilation_index2, theta, float_type=Ellipsis, particle_conservation=Ellipsis, gate_zs=Ellipsis)
- static new_single_excitation_gate(number_of_qubits, creation_index, annihilation_index, theta, float_type=Ellipsis, particle_conservation=Ellipsis, gate_zs=Ellipsis)
- class ExcitationGateCircuit
Bases:
object- classmethod __new__(*args, **kwargs)
- add_gate(gate)
- get_energy(shots=None, hamiltonian=None, eps=None)
- get_parameters()
- get_samples(shots, eps=None)
- get_state_vector()
- run_circuit()
- set_gates(gates)
- set_grouping(grouping)
- set_hamiltonian(hamiltonian)
- update_parameter_at_index(parameter, index)
- update_parameters(parameters)
- class FloatType
Bases:
object- F32 = FloatType.F32
- F64 = FloatType.F64
- classmethod __new__(*args, **kwargs)
- class GateZs
Bases:
object- Exclude = GateZs.Exclude
- Include = GateZs.Include
- classmethod __new__(*args, **kwargs)
- class Hamiltonian
Bases:
object- classmethod __new__(*args, **kwargs)
- static from_hermitian_pauli_sum(pauli_sum, float_type=Ellipsis)
- class HermitianPauliSum
Bases:
object- classmethod __new__(*args, **kwargs)
- constant()
Expose the constant_value
- filter_untouched_qubits(untouched_mask)
Filters the sum based on a bitmask of untouched qubits. Any term acting with X or Y on an untouched qubit is removed.
- format_complex_str(suffix)
- indices()
Returns a sorted list of unique qubit indices acted upon by this sum.
- len()
- number_of_qubits
- prune(tolerance)
- string_coefficient_pairs()
- terms_as_int
- class ParallelSetting
Bases:
object- Parallel = ParallelSetting.Parallel
- Serial = ParallelSetting.Serial
- classmethod __new__(*args, **kwargs)
- class ParticleConservation
Bases:
object- Spin = ParticleConservation.Spin
- Total = ParticleConservation.Total
- classmethod __new__(*args, **kwargs)
- class PauliString
Bases:
object- classmethod __new__(*args, **kwargs)
- as_ints()
Returns bitmasks (x, y, z) as Python ints (via BigUint).
- commutative_sign(other)
Returns the sign when commuting with another PauliString (-1 or 1).
- classmethod from_sorted_and_disjoint_sets(x_indices=None, y_indices=None, z_indices=None)
- classmethod from_stabilizer(stabilizer)
- classmethod from_z_indices(z_indices)
- is_commuting(other)
Check if the Pauli string commutes with another.
- is_diagonal()
Check if the Pauli string only contains diagonal (I and Z) operators.
- is_identity()
- max_index
- min_index
- multiply(other)
Multiply with another PauliString.
- to_stabilizer(num_qubits=None)
Converts to Stabilizer.
- x_indices
- y_indices
- z_indices
- class RustCircuit
Bases:
object- classmethod __new__(*args, **kwargs)
- cx(control_qubit_index, target_qubit_index)
Append a gate corresponding to the CXGate in Kvantify Qrunch.
- decay(random_threshold, index)
Append a gate corresponding to the Decay.
- dephasing(random_threshold, index)
Append a gate corresponding to the Dephasing.
- double_excitation(parameter, creation_qubit_index_1, creation_qubit_index_2, annihilation_qubit_index_1, annihilation_qubit_index_2)
Append a gate corresponding to the DoubleExcitationGate in Kvantify Qrunch.
- num_qubits()
- requires_complex_numbers()
- rx(parameter, qubit_index)
Append a gate corresponding to the RXGate in Kvantify Qrunch.
- ry(parameter, qubit_index)
Append a gate corresponding to the RYGate in Kvantify Qrunch.
- rz(parameter, qubit_index)
Append a gate corresponding to the RZGate in Kvantify Qrunch.
- single_excitation(parameter, creation_qubit_index, annihilation_qubit_index)
Append a gate corresponding to the SingleExcitationGate in Kvantify Qrunch.
- x(qubit_index)
Append a gate corresponding to the XGate in Kvantify Qrunch.
- class RustEstimatingResult
Bases:
object- classmethod __new__(*args, **kwargs)
- expectation_values
- number_of_amplitudes_used
- state_vector_error
- class RustMemoryRestrictedSimulator
Bases:
object- classmethod __new__(*args, **kwargs)
- estimate(observables, circuit)
- get_cached_effective_max_number_of_amplitudes()
- sample(circuit, shots=None)
- class RustSamplingResult
Bases:
object- classmethod __new__(*args, **kwargs)
- number_of_amplitudes_used
- samples
- state_vector_error
- class Stabilizer
Bases:
objectStabilizer of Pauli strings, represented by z and x one-hot vectors. Each entry is 0 or 1.
- classmethod __new__(*args, **kwargs)
- multiply(other)
Multiplies with another stabilizer. Returns (Resulting Stabilizer, Complex Phase)
- x
- z
- compute_excitation_metrics_topk_biguint(observable, measurements_integer_dict, num_alpha_electrons, num_beta_electrons, num_spatial_orbitals, include_single, include_double, excluded_indices, metric_type, expectation_value, top_k, single_scaling_factor)
Combined excitation index generation + metric computation + top-k selection (BigUint measurements).
Same as compute_excitation_metrics_topk_u64 but for systems with >= 65 qubits. Excitations are processed in batches to limit peak memory.
- compute_excitation_metrics_topk_u64(observable, measurements_integer_dict, num_alpha_electrons, num_beta_electrons, num_spatial_orbitals, include_single, include_double, excluded_indices, metric_type, expectation_value, top_k, single_scaling_factor)
Combined excitation index generation + metric computation + top-k selection (u64 measurements).
This function combines three steps in a single Rust call, avoiding repeated Python↔Rust boundary crossings and the overhead of creating millions of Python GatePoolOperator objects: 1. Generate excitation indices in batches (filtering excluded ones) 2. Compute importance metrics for each batch 3. Stream results into a top-k accumulator
Excitations are processed in batches of EXCITATION_BATCH_SIZE to limit peak memory usage when the total count scales as O(N⁴).
- Parameters:
observable – The Hamiltonian / observable
measurements_integer_dict – Sparse measurement map {bitstring_int: probability}
num_alpha_electrons – Number of alpha (spin-up) electrons
num_beta_electrons – Number of beta (spin-down) electrons
num_spatial_orbitals – Number of spatial orbitals
include_single – Whether to include single excitations
include_double – Whether to include double excitations
excluded_indices – Indices to exclude (already selected/excluded gates)
metric_type – 0 = heuristic_gradient, 1 = full_heuristic_gradient, 2 = selected_ci
expectation_value – Current expectation value (only used for selected_ci)
top_k – Number of top entries to return
single_scaling_factor – Scaling factor applied to single excitation metrics
- Returns:
Tuple of (top_k_results, total_metric_sum) where top_k_results is a list of (indices, metric) tuples sorted by metric descending.
- create_hermitian_pauli_sum_from_fermionic_hamiltonian(one_body_alpha_alpha, one_body_beta_beta, two_body_alpha_alpha, two_body_beta_beta, two_body_beta_alpha, number_of_qubits, tolerance=1e-10)
- create_hermitian_pauli_sum_from_hardcore_bosonic_hamiltonian(one_body_matrix, two_body_matrix, number_of_qubits, tolerance=1e-10)
- full_heuristic_gradient_metrics_biguint(observable, measurements_integer_dict, gate_pool_as_generator_indices)
- full_heuristic_gradient_metrics_for_custom_operators(observable, measurements_integer_dict, gate_pool_as_generator_dict_list)
- full_heuristic_gradient_metrics_u64(observable, measurements_integer_dict, gate_pool_as_generator_indices)
- generate_1_rdm_operators(num_qubits)
Generate the operators needed for the 1-particle reduced density matrix.
Returns two lists: 1. diagonal_operators – n operators of the form 0.5*Z(p) + 0.5*Z(p+n). 2. off_diagonal_operators – C(n,2) operators for p < q with alpha+beta XX+YY terms.
The Python side uses them as: gamma[p,p] = 1 - <diagonal_op_p> and gamma[p,q] = gamma[q,p] = <off_diagonal_op_{p,q}>.
- generate_2_rdm_operators(num_qubits)
Generate the operators needed for the 2-particle reduced density matrix.
Returns a tuple of: 1. operators – the list of HermitianPauliSum to estimate. 2. skip_indexes – the set of (p, r, s, q) tuples that produced zero operators. 3. canonical_indices – the canonical (p, r, s, q) tuples from the iteration.
- generate_3_rdm_operators(num_qubits)
Generate the operators needed for the 3-particle reduced density matrix.
- generate_4_rdm_operators(num_qubits)
Generate the operators needed for the 4-particle reduced density matrix.
- generate_excitation_indices(num_alpha_electrons, num_beta_electrons, num_spatial_orbitals, include_single, include_double)
Generate all excitation gate pool indices for a molecular electron configuration.
This is a fast Rust implementation that generates all valid single and/or double excitation operators, returning them as index lists that can be directly used by the metric calculators.
- Parameters:
num_alpha_electrons – Number of alpha (spin-up) electrons
num_beta_electrons – Number of beta (spin-down) electrons
num_spatial_orbitals – Number of spatial orbitals
include_single – Whether to include single excitations
include_double – Whether to include double excitations
- Returns:
A list of index lists. Single excitations have 2 indices, double excitations have 4.
- generate_excitation_indices_filtered(num_alpha_electrons, num_beta_electrons, num_spatial_orbitals, include_single, include_double, excluded_indices)
Generate excitation indices with exclusion filtering (Rust-accelerated).
Same as generate_excitation_indices but filters out any indices that appear in the provided exclusion set. This avoids the overhead of converting all indices to Python tuples and checking membership in a Python set.
- Parameters:
num_alpha_electrons – Number of alpha (spin-up) electrons
num_beta_electrons – Number of beta (spin-down) electrons
num_spatial_orbitals – Number of spatial orbitals
include_single – Whether to include single excitations
include_double – Whether to include double excitations
excluded_indices – Set of index lists to exclude from the result
- Returns:
A list of index lists with excluded entries removed.
- generate_xx_operators(dimension)
Generate all C(dimension, 2) HermitianPauliSums, each containing a single X⊗X Pauli string over every unique 2-qubit combination.
- generate_xx_plus_yy_operators(dimension)
Generate all
C(dimension, 2)two-term HermitianPauliSumsX[x]*X[y] + Y[x]*Y[y]for each unique pair(x, y).
- generate_xx_plus_yy_with_z_operators(dimension)
Generate (X[x]*X[y]+Y[x]*Y[y]) * Z[p] operators.
For each (x, y) with x < y, and each p ∉ {x, y}, produce a two-term sum.
- generate_xx_plus_yy_with_zz_operators(dimension)
Generate (X[x]*X[y]+Y[x]*Y[y]) * Z[p]*Z[q] operators.
For each (x, y) with x < y, and each (p, q) with p < q and {p,q} ∩ {x,y} = ∅, produce a two-term sum.
- generate_xxxx_plus_yyyy_operators(dimension)
Generate all C(dimension, 4) HermitianPauliSums, each containing two terms: X⊗X⊗X⊗X + Y⊗Y⊗Y⊗Y over every unique 4-qubit combination.
- generate_xxyy_operators(dimension)
Generate XXYY operators for pair-of-pairs iteration.
For each (x, y) with x < y, and each (p, q) with p < q and {p,q} ∩ {x,y} = ∅, produce a single-term sum: X[x]*X[y]*Y[p]*Y[q].
- generate_z_operators(dimension)
Generate all
dimensionHermitianPauliSums, each containing a single Z Pauli string on one qubit.
- generate_zz_operators(dimension)
Generate all C(dimension, 2) HermitianPauliSums, each containing a single Z⊗Z Pauli string over every unique 2-qubit combination.
- generate_zzz_operators(dimension)
Generate all C(dimension, 3) HermitianPauliSums, each containing a single Z⊗Z⊗Z Pauli string over every unique 3-qubit combination.
- generate_zzzz_operators(dimension)
Generate all C(dimension, 4) HermitianPauliSums, each containing a single Z⊗Z⊗Z⊗Z Pauli string over every unique 4-qubit combination.
- generate_zzzzz_operators(dimension)
Generate all C(dimension, 5) HermitianPauliSums, each containing a single Z⊗Z⊗Z⊗Z⊗Z Pauli string over every unique 5-qubit combination.
- generate_zzzzz_operators_for_active_terms(active_terms, dimension)
Generate Z⊗Z⊗Z⊗Z⊗Z operators for a subset of qubit quintuples determined by active pair-breaking terms.
For each active term
(y, x, v, u)and each qubitein0..dimensionthat is not in{y, x, v, u}, produce a single-termHermitianPauliSumcontainingZ(y)*Z(x)*Z(v)*Z(u)*Z(e).The ordering exactly matches the Python loop:
for active_term in active_terms: for e in range(n): if e in {y, x, v, u}: continue ...
- heuristic_gradient_metrics_biguint(observable, measurements_integer_dict, gate_pool_as_generator_indices)
- heuristic_gradient_metrics_for_custom_operators(observable, measurements_integer_dict, gate_pool_as_generator_dict_list)
- heuristic_gradient_metrics_u64(observable, measurements_integer_dict, gate_pool_as_generator_indices)
- multiply_paulis(paulis)
- selected_ci_metrics_biguint(observable, measurements_integer_dict, gate_pool_as_generator_indices, expectation_value)
- selected_ci_metrics_for_custom_operators(observable, measurements_integer_dict, gate_pool_as_generator_dict_list, expectation_value)
- selected_ci_metrics_u64(observable, measurements_integer_dict, gate_pool_as_generator_indices, expectation_value)