Core (Rust extension)#

The ferrmion.core module contains the Rust-accelerated functions that power the encoding and optimisation pipelines. All functions are compiled via PyO3 and available directly on the ferrmion namespace through re-exports in ferrmion/__init__.py.

class ferrmion.core.FermionHamiltonian(*, terms: dict[str, ndarray[tuple[int, ...], dtype[float64]]] | None = None, constant_energy: float = 0.0)[source]#

Bases: object

Builder for fermionic Hamiltonians.

add_constant(constant_energy: float) FermionHamiltonian[source]#
annihilation() FermionHamiltonian[source]#
constant_energy: float#
creation() FermionHamiltonian[source]#
property n_modes: int#
property signatures_and_coefficients: tuple[list[str], list[ndarray[tuple[int, ...], dtype[float64]]]]#
property terms: dict[str, ndarray[tuple[int, ...], dtype[float64]]]#
to_majorana_sparse() MajoranaSparse[source]#
to_sparse_majorana() dict[tuple[int, ...], complex][source]#
with_coefficients(coefficients: ndarray[tuple[int, ...], dtype[float64]]) FermionHamiltonian[source]#
class ferrmion.core.MajoranaEncoding(ipowers: ndarray[tuple[int, ...], dtype[uint8]], symplectics: ndarray[tuple[int, ...], dtype[bool]], vacuum_state: ndarray[tuple[int, ...], dtype[bool]] | None = None)[source]#

Bases: object

A fermion-to-qubit encoding defined by its Majorana operators.

anneal_enumeration(fham: FermionHamiltonian, temperature: float | None = None, initial_guess: list[int] | None = None, coefficient_weighted: bool = False, seed: int | None = None) float[source]#
apply_mode_enumeration(mode_op_map: list[int]) MajoranaEncoding[source]#
batch_pauli_weights(fham: FermionHamiltonian, permutations: ndarray[tuple[int, ...], dtype[uint64]]) tuple[ndarray[tuple[int, ...], dtype[float64]], ndarray[tuple[int, ...], dtype[float64]]][source]#
static bravyi_kitaev(n_modes: int, n_qubits: int | None = None) MajoranaEncoding[source]#
decode(states: ndarray[tuple[int, ...], dtype[bool]]) ndarray[tuple[int, ...], dtype[bool]][source]#
edge_operator(edge_indices: tuple[int, int], coeff: complex = 1.0, with_conjugate: bool = False) QubitHamiltonian[source]#
encode(fham: FermionHamiltonian) QubitHamiltonian[source]#
encode_annealed(fham: FermionHamiltonian, temperature: float | None = None, initial_guess: list[int] | None = None, coefficient_weighted: bool = True, seed: int | None = None) QubitHamiltonian[source]#
encode_fermion_product(signature: str, mode_indices: list[int], coeff: complex = 1.0, with_conjugate: bool = False) QubitHamiltonian[source]#
static from_flatpack(flatpack: TTFlatpack, n_qubits: int | None = None) MajoranaEncoding[source]#
static from_json(data: dict) MajoranaEncoding[source]#
hartree_fock_state(fermionic_hf_state: ndarray[tuple[int, ...], dtype[bool]], mode_op_map: ndarray[tuple[int, ...], dtype[uint64]] | None = None) ndarray[tuple[int, ...], dtype[bool]][source]#
interaction_operator(mode_indices: tuple[int, int, int, int], coeff: complex = 1.0, physicist_notation: bool = True, with_conjugate: bool = False) QubitHamiltonian[source]#
property ipowers: ndarray[tuple[int, ...], dtype[uint8]]#
static jkmn(n_modes: int, n_qubits: int | None = None) MajoranaEncoding[source]#
static jordan_wigner(n_modes: int, n_qubits: int | None = None) MajoranaEncoding[source]#
static maxnto(n_modes: int) MajoranaEncoding[source]#
property n_modes: int#
property n_qubits: int#
number_operator(mode: int, coeff: complex = 1.0) QubitHamiltonian[source]#
static parity(n_modes: int, n_qubits: int | None = None) MajoranaEncoding[source]#
property symplectic_matrix: ndarray[tuple[int, ...], dtype[bool]]#
to_json() dict[source]#
property vacuum_state: ndarray[tuple[int, ...], dtype[bool]]#
class ferrmion.core.MajoranaSparse[source]#

Bases: object

A sparse Majorana-operator representation of a Hamiltonian.

property coefficients: ndarray[tuple[int, ...], dtype[complex128]]#
property constant: float#
property indices: list[list[int]]#
class ferrmion.core.QubitHamiltonian(data: dict[str, complex] | None = None)[source]#

Bases: object

Mapping from Pauli strings to complex coefficients.

clifford_heuristic(temperature: float | None = None, coefficient_weighted: bool = False, seed: int | None = None, clifford_subset: str = 'chs') QubitHamiltonian[source]#
coeff_pauli_weight() float[source]#
get(key: str, default=None)[source]#
items() list[tuple[str, complex]][source]#
keys() list[str][source]#
property n_qubits: int#
pauli_weight() int[source]#
randomised_subsystem_descent(iterations: int, subsystem_dimension: int, temperature: float | None = None, coefficient_weighted: bool = False, sampler: str = 'hamming', seed: int | None = None, clifford_subset: str = 'chs') QubitHamiltonian[source]#
to_dict() dict[str, complex][source]#
values() list[complex][source]#
ferrmion.core.encode_topphatt(flatpack: TTFlatpack, n_qubits: int, fham: FermionHamiltonian, parallelize: bool = True, heuristic: str = 'min_weight', seed: int | None = None, backend: str = 'dense_transpose') tuple[QubitHamiltonian, MajoranaEncoding][source]#
ferrmion.core.hatt(fham: FermionHamiltonian, n_modes: int | None = None) tuple[TTFlatpack, int][source]#
ferrmion.core.pauli_to_symplectic(pauli: str, ipower: int) tuple[ndarray[tuple[int, ...], dtype[bool]], int][source]#
ferrmion.core.symplectic_product(left: ndarray[tuple[int, ...], dtype[bool]], right: ndarray[tuple[int, ...], dtype[bool]]) tuple[int, ndarray[tuple[int, ...], dtype[bool]]][source]#
ferrmion.core.symplectic_to_pauli(symplectic: ndarray[tuple[int, ...], dtype[bool]], ipower: int = 0) tuple[str, int][source]#
ferrmion.core.symplectic_to_sparse(symplectic: ndarray[tuple[int, ...], dtype[bool]], ipower: int) tuple[str, ndarray[tuple[int, ...], dtype[uint64]], complex][source]#
ferrmion.core.topphatt(flatpack: TTFlatpack, n_qubits: int, hamiltonian: MajoranaSparse, parallelize: bool = True, heuristic: str = 'min_weight', seed: int | None = None, backend: str = 'dense_transpose') MajoranaEncoding[source]#