qlinks.encoded package#
Submodules#
qlinks.encoded.binary_basis module#
- qlinks.encoded.binary_basis.encode_binary_config(config)[source]#
Encode binary config into a Python int.
bit i stores config[i].
- Parameters:
config (ArrayLike)
- Return type:
int
- qlinks.encoded.binary_basis.decode_binary_code(code, n_variables)[source]#
Decode Python int code back to binary config.
- qlinks.encoded.binary_basis.bitmask_from_indices(indices)[source]#
- Parameters:
indices (Iterable[int])
- Return type:
int
- class qlinks.encoded.binary_basis.BinaryEncodedBasis(layout, codes, index)[source]#
Bases:
objectBasis represented by integer bit patterns.
This is the production-oriented binary fast path. It is useful for PXP, QDM, toric-code qubits, and any model whose variables are {0, 1}.
- Parameters:
layout (VariableLayout)
index (dict[int, int])
- layout: VariableLayout#
- index: dict[int, int]#
- classmethod from_codes(layout, codes, *, sort=False)[source]#
- Parameters:
layout (VariableLayout)
codes (Iterable[int])
sort (bool)
- Return type:
- classmethod from_configs(layout, configs, *, sort=False)[source]#
- Parameters:
layout (VariableLayout)
configs (ArrayLike)
sort (bool)
- Return type:
- classmethod from_basis(basis, *, sort=False)[source]#
- Parameters:
basis (Basis)
sort (bool)
- Return type:
- classmethod full(layout, *, sort=True)[source]#
- Parameters:
layout (VariableLayout)
sort (bool)
- Return type:
- classmethod empty(layout)[source]#
- Parameters:
layout (VariableLayout)
- Return type:
- property n_states: int#
- property n_variables: int#
- __init__(layout, codes, index)#
- Parameters:
layout (VariableLayout)
index (dict[int, int])
- Return type:
None
qlinks.encoded.bitmask_builder module#
- class qlinks.encoded.bitmask_builder.BitmaskSparseBuildStats(n_basis: 'int', n_terms: 'int', n_raw_actions: 'int', n_kept_actions: 'int', n_missing_actions: 'int', nnz: 'int')[source]#
Bases:
object- Parameters:
n_basis (int)
n_terms (int)
n_raw_actions (int)
n_kept_actions (int)
n_missing_actions (int)
nnz (int)
- n_basis: int#
- n_terms: int#
- n_raw_actions: int#
- n_kept_actions: int#
- n_missing_actions: int#
- nnz: int#
- __init__(n_basis, n_terms, n_raw_actions, n_kept_actions, n_missing_actions, nnz)#
- Parameters:
n_basis (int)
n_terms (int)
n_raw_actions (int)
n_kept_actions (int)
n_missing_actions (int)
nnz (int)
- Return type:
None
- class qlinks.encoded.bitmask_builder.BitmaskSparseBuildResult(matrix: 'Any', stats: 'BitmaskSparseBuildStats')[source]#
Bases:
object- Parameters:
matrix (Any)
stats (BitmaskSparseBuildStats)
- matrix: Any#
- stats: BitmaskSparseBuildStats#
- __init__(matrix, stats)#
- Parameters:
matrix (Any)
stats (BitmaskSparseBuildStats)
- Return type:
None
- class qlinks.encoded.bitmask_builder.BitmaskSparseHamiltonianBuilder(dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')[source]#
Bases:
objectSparse Hamiltonian builder for BinaryEncodedBasis.
This avoids constructing NumPy config arrays during matrix assembly.
- Parameters:
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- dtype: DTypeLike#
- on_missing: Literal['skip', 'raise']#
- drop_zero_atol: float#
- backend: Literal['scipy', 'cupy', 'auto'] | SparseBackend#
- build(basis, operators)[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
- Return type:
Any
- build_with_stats(basis, operators)[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
- Return type:
- __init__(dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')#
- Parameters:
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- Return type:
None
- qlinks.encoded.bitmask_builder.build_bitmask_sparse_hamiltonian(basis, operators, *, dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- Return type:
Any
qlinks.encoded.bitmask_operators module#
- class qlinks.encoded.bitmask_operators.BitmaskAction(coefficient: 'complex', code: 'int')[source]#
Bases:
object- Parameters:
coefficient (complex)
code (int)
- coefficient: complex#
- code: int#
- __init__(coefficient, code)#
- Parameters:
coefficient (complex)
code (int)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskOperator(*args, **kwargs)[source]#
Bases:
Protocol- layout: VariableLayout#
- name: str#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(*args, **kwargs)#
- class qlinks.encoded.bitmask_operators.BitmaskDiagonalOperator(*args, **kwargs)[source]#
Bases:
BitmaskOperator,ProtocolConfiguration-space diagonal operator in binary bitmask encoding.
Returning
Nonemeans the operator gives no diagonal contribution for this code. Returning a complex number means the operator contributes that diagonal matrix element.
- class qlinks.encoded.bitmask_operators.BitmaskSingleActionOperator(*args, **kwargs)[source]#
Bases:
BitmaskOperator,ProtocolOperator that produces at most one non-diagonal action per input code.
Returning
Nonemeans the operator has no action on this code. Returning(coefficient, new_code)means the operator contributes one matrix element without allocating aBitmaskAction.
- class qlinks.encoded.bitmask_operators.BitmaskOperatorSum(terms: 'tuple[BitmaskOperator, ...]', name: 'str' = 'bitmask_operator_sum')[source]#
Bases:
object- Parameters:
terms (tuple[BitmaskOperator, ...])
name (str)
- terms: tuple[BitmaskOperator, ...]#
- name: str#
- classmethod from_terms(terms, name='bitmask_operator_sum')[source]#
- Parameters:
terms (Sequence[BitmaskOperator])
name (str)
- Return type:
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(terms, name='bitmask_operator_sum')#
- Parameters:
terms (tuple[BitmaskOperator, ...])
name (str)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskConstantDiagonalOperator(layout: 'VariableLayout', coefficient: 'complex', name: 'str' = 'bitmask_constant_diagonal')[source]#
Bases:
object- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, coefficient, name='bitmask_constant_diagonal')#
- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskBinaryFlipOperator(layout, variable_index, coefficient=1.0, name='bitmask_binary_flip')[source]#
Bases:
objectFlip one binary variable using XOR:
code -> code ^ (1 << variable_index)
- Parameters:
layout (VariableLayout)
variable_index (int)
coefficient (complex)
name (str)
- layout: VariableLayout#
- variable_index: int#
- coefficient: complex#
- name: str#
- property flip_mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, variable_index, coefficient=1.0, name='bitmask_binary_flip')#
- Parameters:
layout (VariableLayout)
variable_index (int)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskPXPSpinFlipOperator(layout, lattice, site_id, coefficient=1.0, name='bitmask_pxp_spin_flip')[source]#
Bases:
objectPXP constrained spin flip.
Flip site_id only when all neighboring sites are zero.
Since the encoded basis is binary, occupied_value is fixed to 1.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
site_id (int)
coefficient (complex)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- site_id: int#
- coefficient: complex#
- name: str#
- property site_variable: int#
- property neighbor_mask: int#
- property flip_mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, site_id, coefficient=1.0, name='bitmask_pxp_spin_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
site_id (int)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskPatternFlipOperator(layout, variable_indices, initial_values, final_values, coefficient=1.0, name='bitmask_pattern_flip')[source]#
Bases:
objectGeneral bitmask pattern transition.
If
code & mask == initial_bits
then replace the masked region with final_bits:
new_code = (code & ~mask) | final_bits
- Parameters:
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- property mask: int#
- property initial_bits: int#
- property final_bits: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, variable_indices, initial_values, final_values, coefficient=1.0, name='bitmask_pattern_flip')#
- class qlinks.encoded.bitmask_operators.BitmaskQDMFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qdm_flip')[source]#
Bases:
objectBinary QDM plaquette flip:
1010 <-> 0101
The pattern order is the lattice plaquette link order.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qdm_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
- class qlinks.encoded.bitmask_operators.BitmaskPatternDiagonalOperator(layout, variable_indices, pattern, coefficient=1.0, name='bitmask_pattern_diagonal')[source]#
Bases:
objectDiagonal projector onto a local binary pattern.
If
code & mask == pattern_bits
then return
coefficient * |code>
Otherwise return no action.
This is useful for QDM/QLM flippability potentials.
- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- property mask: int#
- property pattern_bits: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- qlinks.encoded.bitmask_operators.bitmask_qdm_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
Bitmask projectors onto QDM flippable plaquette patterns:
1010 and 0101
in the lattice plaquette link order.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- qlinks.encoded.bitmask_operators.binary_pattern_from_flux_pattern(flux_pattern)[source]#
Convert physical QLM flux values {-1, +1} to binary values {0, 1}.
- qlinks.encoded.bitmask_operators.bitmask_qlm_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
Bitmask projectors for spin-1/2 QLM flippable flux plaquettes.
The physical QLM flippable flux patterns are the oriented plaquette boundary pattern and its negative. With binary convention
-1 -> 0 +1 -> 1
these become binary_pattern and 1 - binary_pattern.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- class qlinks.encoded.bitmask_operators.BitmaskQLMFluxFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qlm_flux_flip')[source]#
Bases:
objectSpin-1/2 QLM plaquette ring exchange in binary flux encoding.
- Physical convention:
-1 -> 0 +1 -> 1
The flippable QLM flux patterns are given by the plaquette orientation signs and their negatives.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qlm_flux_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
- qlinks.encoded.bitmask_operators.bitmask_alternating_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- class qlinks.encoded.bitmask_operators.BitmaskAlternatingPlaquetteFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_alternating_plaquette_flip')[source]#
Bases:
objectGeneric binary alternating plaquette flip:
1010… <-> 0101…
Works for any even-length plaquette.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_alternating_plaquette_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
qlinks.encoded.flux module#
- qlinks.encoded.flux.flux_to_bit(value)[source]#
Encode spin-1/2 flux value as a bit.
-1 -> 0 +1 -> 1
- Parameters:
value (int)
- Return type:
int
- qlinks.encoded.flux.bit_to_flux(value)[source]#
Decode bit as spin-1/2 flux.
0 -> -1 1 -> +1
- Parameters:
value (int)
- Return type:
int
- qlinks.encoded.flux.binary_layout_like_flux_layout(flux_layout)[source]#
Create a binary link-variable layout with the same number/order of link variables as a spin-half-flux layout.
This assumes the QLM layout is link-only and ordered by link id.
- Parameters:
flux_layout (VariableLayout)
- Return type:
Module contents#
- class qlinks.encoded.BinaryEncodedBasis(layout, codes, index)[source]#
Bases:
objectBasis represented by integer bit patterns.
This is the production-oriented binary fast path. It is useful for PXP, QDM, toric-code qubits, and any model whose variables are {0, 1}.
- Parameters:
layout (VariableLayout)
index (dict[int, int])
- layout: VariableLayout#
- index: dict[int, int]#
- classmethod from_codes(layout, codes, *, sort=False)[source]#
- Parameters:
layout (VariableLayout)
codes (Iterable[int])
sort (bool)
- Return type:
- classmethod from_configs(layout, configs, *, sort=False)[source]#
- Parameters:
layout (VariableLayout)
configs (ArrayLike)
sort (bool)
- Return type:
- classmethod from_basis(basis, *, sort=False)[source]#
- Parameters:
basis (Basis)
sort (bool)
- Return type:
- classmethod full(layout, *, sort=True)[source]#
- Parameters:
layout (VariableLayout)
sort (bool)
- Return type:
- classmethod empty(layout)[source]#
- Parameters:
layout (VariableLayout)
- Return type:
- property n_states: int#
- property n_variables: int#
- __init__(layout, codes, index)#
- Parameters:
layout (VariableLayout)
index (dict[int, int])
- Return type:
None
- class qlinks.encoded.BitmaskAction(coefficient: 'complex', code: 'int')[source]#
Bases:
object- Parameters:
coefficient (complex)
code (int)
- coefficient: complex#
- code: int#
- __init__(coefficient, code)#
- Parameters:
coefficient (complex)
code (int)
- Return type:
None
- class qlinks.encoded.BitmaskBinaryFlipOperator(layout, variable_index, coefficient=1.0, name='bitmask_binary_flip')[source]#
Bases:
objectFlip one binary variable using XOR:
code -> code ^ (1 << variable_index)
- Parameters:
layout (VariableLayout)
variable_index (int)
coefficient (complex)
name (str)
- layout: VariableLayout#
- variable_index: int#
- coefficient: complex#
- name: str#
- property flip_mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, variable_index, coefficient=1.0, name='bitmask_binary_flip')#
- Parameters:
layout (VariableLayout)
variable_index (int)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.BitmaskConstantDiagonalOperator(layout: 'VariableLayout', coefficient: 'complex', name: 'str' = 'bitmask_constant_diagonal')[source]#
Bases:
object- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, coefficient, name='bitmask_constant_diagonal')#
- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.BitmaskDiagonalOperator(*args, **kwargs)[source]#
Bases:
BitmaskOperator,ProtocolConfiguration-space diagonal operator in binary bitmask encoding.
Returning
Nonemeans the operator gives no diagonal contribution for this code. Returning a complex number means the operator contributes that diagonal matrix element.
- class qlinks.encoded.BitmaskOperator(*args, **kwargs)[source]#
Bases:
Protocol- layout: VariableLayout#
- name: str#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(*args, **kwargs)#
- class qlinks.encoded.BitmaskOperatorSum(terms: 'tuple[BitmaskOperator, ...]', name: 'str' = 'bitmask_operator_sum')[source]#
Bases:
object- Parameters:
terms (tuple[BitmaskOperator, ...])
name (str)
- terms: tuple[BitmaskOperator, ...]#
- name: str#
- classmethod from_terms(terms, name='bitmask_operator_sum')[source]#
- Parameters:
terms (Sequence[BitmaskOperator])
name (str)
- Return type:
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(terms, name='bitmask_operator_sum')#
- Parameters:
terms (tuple[BitmaskOperator, ...])
name (str)
- Return type:
None
- class qlinks.encoded.BitmaskSingleActionOperator(*args, **kwargs)[source]#
Bases:
BitmaskOperator,ProtocolOperator that produces at most one non-diagonal action per input code.
Returning
Nonemeans the operator has no action on this code. Returning(coefficient, new_code)means the operator contributes one matrix element without allocating aBitmaskAction.
- class qlinks.encoded.BitmaskPatternFlipOperator(layout, variable_indices, initial_values, final_values, coefficient=1.0, name='bitmask_pattern_flip')[source]#
Bases:
objectGeneral bitmask pattern transition.
If
code & mask == initial_bits
then replace the masked region with final_bits:
new_code = (code & ~mask) | final_bits
- Parameters:
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- property mask: int#
- property initial_bits: int#
- property final_bits: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, variable_indices, initial_values, final_values, coefficient=1.0, name='bitmask_pattern_flip')#
- class qlinks.encoded.BitmaskPXPSpinFlipOperator(layout, lattice, site_id, coefficient=1.0, name='bitmask_pxp_spin_flip')[source]#
Bases:
objectPXP constrained spin flip.
Flip site_id only when all neighboring sites are zero.
Since the encoded basis is binary, occupied_value is fixed to 1.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
site_id (int)
coefficient (complex)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- site_id: int#
- coefficient: complex#
- name: str#
- property site_variable: int#
- property neighbor_mask: int#
- property flip_mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, site_id, coefficient=1.0, name='bitmask_pxp_spin_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
site_id (int)
coefficient (complex)
name (str)
- Return type:
None
- class qlinks.encoded.BitmaskQDMFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qdm_flip')[source]#
Bases:
objectBinary QDM plaquette flip:
1010 <-> 0101
The pattern order is the lattice plaquette link order.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qdm_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
- class qlinks.encoded.BitmaskSparseBuildResult(matrix: 'Any', stats: 'BitmaskSparseBuildStats')[source]#
Bases:
object- Parameters:
matrix (Any)
stats (BitmaskSparseBuildStats)
- matrix: Any#
- stats: BitmaskSparseBuildStats#
- __init__(matrix, stats)#
- Parameters:
matrix (Any)
stats (BitmaskSparseBuildStats)
- Return type:
None
- class qlinks.encoded.BitmaskSparseBuildStats(n_basis: 'int', n_terms: 'int', n_raw_actions: 'int', n_kept_actions: 'int', n_missing_actions: 'int', nnz: 'int')[source]#
Bases:
object- Parameters:
n_basis (int)
n_terms (int)
n_raw_actions (int)
n_kept_actions (int)
n_missing_actions (int)
nnz (int)
- n_basis: int#
- n_terms: int#
- n_raw_actions: int#
- n_kept_actions: int#
- n_missing_actions: int#
- nnz: int#
- __init__(n_basis, n_terms, n_raw_actions, n_kept_actions, n_missing_actions, nnz)#
- Parameters:
n_basis (int)
n_terms (int)
n_raw_actions (int)
n_kept_actions (int)
n_missing_actions (int)
nnz (int)
- Return type:
None
- class qlinks.encoded.BitmaskSparseHamiltonianBuilder(dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')[source]#
Bases:
objectSparse Hamiltonian builder for BinaryEncodedBasis.
This avoids constructing NumPy config arrays during matrix assembly.
- Parameters:
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- dtype: DTypeLike#
- on_missing: Literal['skip', 'raise']#
- drop_zero_atol: float#
- backend: Literal['scipy', 'cupy', 'auto'] | SparseBackend#
- build(basis, operators)[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
- Return type:
Any
- build_with_stats(basis, operators)[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
- Return type:
- __init__(dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')#
- Parameters:
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- Return type:
None
- qlinks.encoded.bitmask_from_indices(indices)[source]#
- Parameters:
indices (Iterable[int])
- Return type:
int
- qlinks.encoded.build_bitmask_sparse_hamiltonian(basis, operators, *, dtype=<class 'numpy.complex128'>, on_missing='skip', drop_zero_atol=0.0, backend='scipy')[source]#
- Parameters:
basis (BinaryEncodedBasis)
operators (Sequence[BitmaskOperator])
dtype (DTypeLike)
on_missing (Literal['skip', 'raise'])
drop_zero_atol (float)
backend (Literal['scipy', 'cupy', 'auto'] | ~qlinks.backends.sparse.SparseBackend)
- Return type:
Any
- qlinks.encoded.decode_binary_code(code, n_variables)[source]#
Decode Python int code back to binary config.
- qlinks.encoded.encode_binary_config(config)[source]#
Encode binary config into a Python int.
bit i stores config[i].
- Parameters:
config (ArrayLike)
- Return type:
int
- class qlinks.encoded.BitmaskPatternDiagonalOperator(layout, variable_indices, pattern, coefficient=1.0, name='bitmask_pattern_diagonal')[source]#
Bases:
objectDiagonal projector onto a local binary pattern.
If
code & mask == pattern_bits
then return
coefficient * |code>
Otherwise return no action.
This is useful for QDM/QLM flippability potentials.
- Parameters:
layout (VariableLayout)
coefficient (complex)
name (str)
- layout: VariableLayout#
- coefficient: complex#
- name: str#
- property mask: int#
- property pattern_bits: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- qlinks.encoded.bitmask_qdm_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
Bitmask projectors onto QDM flippable plaquette patterns:
1010 and 0101
in the lattice plaquette link order.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- class qlinks.encoded.BitmaskQLMFluxFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qlm_flux_flip')[source]#
Bases:
objectSpin-1/2 QLM plaquette ring exchange in binary flux encoding.
- Physical convention:
-1 -> 0 +1 -> 1
The flippable QLM flux patterns are given by the plaquette orientation signs and their negatives.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_qlm_flux_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
- qlinks.encoded.bitmask_qlm_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
Bitmask projectors for spin-1/2 QLM flippable flux plaquettes.
The physical QLM flippable flux patterns are the oriented plaquette boundary pattern and its negative. With binary convention
-1 -> 0 +1 -> 1
these become binary_pattern and 1 - binary_pattern.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- qlinks.encoded.bitmask_alternating_flippability_projectors(layout, lattice, plaquette_id, coefficient=1.0)[source]#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
- Return type:
tuple[BitmaskPatternDiagonalOperator, BitmaskPatternDiagonalOperator]
- class qlinks.encoded.BitmaskAlternatingPlaquetteFlipOperator(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_alternating_plaquette_flip')[source]#
Bases:
objectGeneric binary alternating plaquette flip:
1010… <-> 0101…
Works for any even-length plaquette.
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- layout: VariableLayout#
- lattice: LatticeGraph#
- plaquette_id: int#
- coefficient: complex#
- reverse_coefficient: complex | None#
- name: str#
- property mask: int#
- apply_code(code)[source]#
- Parameters:
code (int)
- Return type:
tuple[BitmaskAction, …]
- __init__(layout, lattice, plaquette_id, coefficient=1.0, reverse_coefficient=None, name='bitmask_alternating_plaquette_flip')#
- Parameters:
layout (VariableLayout)
lattice (LatticeGraph)
plaquette_id (int)
coefficient (complex)
reverse_coefficient (complex | None)
name (str)
- Return type:
None
- qlinks.encoded.binary_encoded_basis_from_flux_basis(flux_basis, *, sort=False)[source]#
Convert a {-1,+1} flux Basis into a BinaryEncodedBasis using
-1 -> 0 +1 -> 1
- Parameters:
flux_basis (Basis)
sort (bool)
- Return type:
- qlinks.encoded.binary_layout_like_flux_layout(flux_layout)[source]#
Create a binary link-variable layout with the same number/order of link variables as a spin-half-flux layout.
This assumes the QLM layout is link-only and ordered by link id.
- Parameters:
flux_layout (VariableLayout)
- Return type:
- qlinks.encoded.bit_to_flux(value)[source]#
Decode bit as spin-1/2 flux.
0 -> -1 1 -> +1
- Parameters:
value (int)
- Return type:
int