ComplexTermSum¶
- class zixy.qubit.state.ComplexTermSum(qubits: int | Qubits = 0)[source]¶
Bases:
NumericTermSum[QubitStateArray,None|Sequence[bool] |set[int] |str,complex],TermSum[complex]A sum of terms consisting of state strings and complex coefficients.
A set-like container of qubit-based terms with
complexcoefficients that may be used to store unique terms and perform algebraic operations on them.Note
Coefficients are mutable in-place, but components are the keys of a hashmap and therefore are not.
- __getitem__(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) CoeffT¶
Get the coefficient of the term with component specified by
value.- Parameters:
value – The component or term specifier.
- Returns:
The coefficient of the term with component specified by
value.- Raises:
KeyError – The component specified by
valuewas not found inself.
- __imul__(scalar: int | float | complex | Sign | ComplexSign | Expr) Self¶
In-place multiplication of
selfbyscalar.
- __init__(qubits: int | Qubits = 0)¶
Initialize the term set.
- Parameters:
qubits – The qubit register or qubit count.
- __itruediv__(scalar: int | float | complex | Sign | ComplexSign | Expr) Self¶
In-place division of
selfbyscalar.
- __mul__(scalar: int | float | complex | Sign | ComplexSign | Expr) Self¶
Multiplication of
selfbyscalar.
- __rmul__(scalar: int | float | complex | Sign | ComplexSign | Expr) Self¶
Multiplication of
scalarbyself.
- __setitem__(key: SpecT | Term[ImplT, SpecT, CoeffT], coeff: CoeffT) None¶
Set the coefficient of the term with component specified by
key.
- __truediv__(scalar: int | float | complex | Sign | ComplexSign | Expr) Self¶
Division of
selfbyscalar.
- add_iterable(iterable: Iterable[Term[ImplT, SpecT, CoeffT]]) None¶
In-place addition of the terms in
iterabletoself.- Parameters:
iterable – Iterable of terms to add to
self.
Note
This method operates in-place.
- contains(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) bool¶
Check whether the component specified by
valueis stored inself.- Parameters:
value – The component specifier.
- Returns:
Whether the lookup of
valuewas successful.
- filter_insignificant(atol: float = 1e-08) Self¶
Eagerly get terms in
selfwith coefficients less thanatol.- Parameters:
atol – Absolute tolerance.
- Returns:
New instance containing all terms that meet the criterion.
- filter_map(f: Callable[[Term[ImplT, SpecT, CoeffT]], bool]) Self¶
Eagerly evaluate a filter-map operation over the terms of
self.- Parameters:
f – Function which may mutate copies of the terms of
self, returningTrueif those mutated copies are to be included in the generator. The function signature should take a singleTerminstance as an argument, and return a boolean.- Returns:
New instance containing the occurrences of selected (and possibly mutated) components of
selfaccording tof.
Note
The resulting generator enforces uniqueness of components by overwriting coefficients of duplicate components.
- filter_significant(atol: float = 1e-08) Self¶
Eagerly get terms in
selfwith coefficients no less thanatol.- Parameters:
atol – Absolute tolerance.
- Returns:
New instance containing all terms that meet the criterion.
- classmethod from_dense(qubits: int | Qubits | None = None, source: Sequence[float] = (), big_endian: bool = False) ComplexTermSum[source]¶
Create an instance of
clsfrom a dense vector.- Parameters:
qubits – The qubit register or qubit count.
source – The vector to read from.
big_endian – Whether to use big endian ordering for the resulting matrix. If
False, little endian ordering is used. In big (little) endian ordering, the least significant bit in the basis index integer is determined by the last (first) qubit in the register.
- Returns:
The constructed instance.
- classmethod from_iterable(iterable: Iterable[Term[ImplT, SpecT, CoeffT]], *args: Any, **kwargs: Any) Self¶
Create a new instance of
clsfrom an iterable.- Parameters:
iterable – Iterable returning specifiers of all the terms to be appended.
args – Positional arguments to forward to the constructor of
cls.kwargs – Keyword arguments to forward to the constructor of
cls.
- Returns:
New instance of
clscontaining the terms specified byiterable.
- classmethod from_terms(terms: Terms[ImplT, SpecT, CoeffT]) Self¶
Create a new instance of
clsfromterms.- Parameters:
terms – Terms-derived object from which to construct the set of terms.
- Returns:
A new instance of
clscontaining the terms interms.
- property imag_part: RealTermSum¶
Return the imaginary part of
self.
- insert(key: Term[ImplT, SpecT, CoeffT] | Cmpnt[ImplT, SpecT] | SpecT | tuple[SpecT | Cmpnt[ImplT, SpecT] | None, CoeffT | None] | None) int¶
Try to insert the given term.
- Parameters:
key – The term specifier.
- Returns:
The index at which the term was inserted, or the index at which it already was stored if insertion is unsuccessful.
Note
This method operates in-place.
- insert_iterable(source: Iterable[Term[ImplT, SpecT, CoeffT] | Cmpnt[ImplT, SpecT] | SpecT | tuple[SpecT | Cmpnt[ImplT, SpecT] | None, CoeffT | None] | None] = ()) None¶
Insert many terms from an iterable source.
- Parameters:
source – Iterable over any term specifiers.
Note
This method operates in-place.
- into(t: type[TermSet[ImplT, SpecT, OtherCoeffT]]) TermSet[ImplT, SpecT, OtherCoeffT]¶
Clone
selfinto a new related container of typet.- Parameters:
t – Type of the new container to create.
- Returns:
A new instance of
tcontaining the same data asself.
- iter_filter_insignificant(atol: float = 1e-08) Iterator[Term[ImplT, SpecT, NumberT]]¶
Lazily generate terms in
selfwith coefficients less thanatol.- Parameters:
atol – Absolute tolerance.
- Returns:
Iterator of terms that meet the criterion.
- iter_filter_map(f: Callable[[Term[ImplT, SpecT, CoeffT]], bool]) Iterator[Term[ImplT, SpecT, CoeffT]]¶
Lazily evaluate a filter-map operation over the terms of
self.- Parameters:
f – Function which may mutate copies of the terms of
self, returningTrueif those mutated copies are to be included in the generator. The function signature should take a singleTerminstance as an argument, and return a boolean.- Returns:
Iterator over the selected (and possibly mutated) components of
selfaccording tof.
Note
The resulting generator does not enforce uniqueness of components.
- iter_filter_nonzero() Iterator[Term[ImplT, SpecT, CoeffT]]¶
Iterate over the non-zero terms of
self.
- iter_filter_significant(atol: float = 1e-08) Iterator[Term[ImplT, SpecT, NumberT]]¶
Lazily generate terms in
selfwith coefficients no less thanatol.- Parameters:
atol – Absolute tolerance.
- Returns:
Iterator of terms that meet the criterion.
- property l1_norm: NumberT¶
Get the L1 norm of
self.
- property l2_norm_square: NumberT¶
Get the square of the L2 norm of
self.
- lookup(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) tuple[int, CoeffT] | None¶
Try to find the index and coefficient of the component specified by
value.- Parameters:
value – The component or term specifier.
- Returns:
The index at which the value was inserted, or
Noneif the value was not found.
- lookup_coeff(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) CoeffT | None¶
Try to find the coefficient of the term specified by
valueinself.- Parameters:
value – The component or term specifier.
- Returns:
The coefficient of the term specified by
valueif it is present inself, andNoneotherwise.
- lookup_index(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) int | None¶
Try to find the index of the component specified by
valueinself.- Parameters:
value – The component or term specifier.
- Returns:
The index of the component specified by
valueif it is present inself, andNoneotherwise.
- property real_part: RealTermSum¶
Return the real part of
self.
- remove(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) int¶
Try to remove the component specified by
valuefromself.If the component is found, removal proceeds via swap-remove.
- Parameters:
value – The component specifier.
- Returns:
The index at which the component was removed.
- Raises:
KeyError – The component was not found.
- soft_insert(key: Term[ImplT, SpecT, CoeffT] | Cmpnt[ImplT, SpecT] | SpecT | tuple[SpecT | Cmpnt[ImplT, SpecT] | None, CoeffT | None] | None) tuple[int, bool]¶
Insertion method which does not overwrite coefficient values.
Operates similarly to
insert(), but does not overwrite coefficient values if the component specified bykeyis already present inself.- Parameters:
key – The term specifier.
- Returns:
Index at which the term was inserted or found, and a boolean indicating whether insertion was successful (i.e. whether the component specified by
keywas not already present inself).
Note
This method operates in-place.
- terms_type¶
alias of
ComplexTerms
- to_dataframe() DataFrame¶
Convert
selfto aDataFrame.
- to_dense(big_endian: bool = False) NDArray[complex128][source]¶
Convert
selfto a dense vector.- Parameters:
big_endian – Whether to use big endian ordering for the resulting matrix. If
False, little endian ordering is used. In big (little) endian ordering, the least significant bit in the basis index integer is determined by the last (first) qubit in the register.- Returns:
The dense vector.
- vdot(rhs: ComplexTermSum) complex[source]¶
Compute the inner product of
selfwithrhs.