TermSet

class zixy.container.terms.TermSet(terms: Terms[ImplT, SpecT, CoeffT])[source]

Bases: Generic[ImplT, SpecT, CoeffT]

A collection of unique terms consisting of components and coefficients.

A set-like container of terms that may be used to store unique terms and perform set-like operations on them.

Note

Coefficients are mutable in-place, but components are the keys of a hashmap and therefore are not.

__eq__(other: object) bool[source]

Return whether self and other are equal.

__getitem__(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) CoeffT[source]

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 value was not found in self.

__init__(terms: Terms[ImplT, SpecT, CoeffT])[source]

Initialize the term set.

Parameters:

terms – Terms-derived object from which to construct the set of components and their coefficients.

Note

Components which appear multiple times in terms will appear only once in

self.

__iter__() Iterator[Term[ImplT, SpecT, CoeffT]][source]

Iterate over the elements of self.

__len__() int[source]

Get the number of elements in self.

__repr__() str[source]

Return a string representation of self.

__setitem__(key: SpecT | Term[ImplT, SpecT, CoeffT], coeff: CoeffT) None[source]

Set the coefficient of the term with component specified by key.

clone() Self[source]

Return a deep copy of self.

property cmpnt_type: type[Cmpnt[ImplT, SpecT]]

Get the component type of self.

property cmpnts_type: type[Cmpnts[ImplT, SpecT]]

Get the component container type of self.

property coeff_type: type[CoeffT]

Get the coefficient type of self.

property coeffs_type: type[Coeffs[CoeffT]]

Get the coefficient container type of self.

contains(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) bool[source]

Check whether the component specified by value is stored in self.

Parameters:

value – The component specifier.

Returns:

Whether the lookup of value was successful.

filter_map(f: Callable[[Term[ImplT, SpecT, CoeffT]], bool]) Self[source]

Eagerly evaluate a filter-map operation over the terms of self.

Parameters:

f – Function which may mutate copies of the terms of self, returning True if those mutated copies are to be included in the generator. The function signature should take a single Term instance as an argument, and return a boolean.

Returns:

New instance containing the occurrences of selected (and possibly mutated) components of self according to f.

Note

The resulting generator enforces uniqueness of components by overwriting coefficients of duplicate components.

filter_nonzero() Self[source]

Filter self to only the non-zero terms.

classmethod from_iterable(iterable: Iterable[Term[ImplT, SpecT, CoeffT] | Cmpnt[ImplT, SpecT] | SpecT | tuple[SpecT | Cmpnt[ImplT, SpecT] | None, CoeffT | None] | None], *args: Any, **kwargs: Any) Self[source]

Create a new instance of cls from 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 cls containing the terms specified by iterable.

classmethod from_terms(terms: Terms[ImplT, SpecT, CoeffT]) Self[source]

Create a new instance of cls from terms.

Parameters:

terms – Terms-derived object from which to construct the set of terms.

Returns:

A new instance of cls containing the terms in terms.

insert(key: Term[ImplT, SpecT, CoeffT] | Cmpnt[ImplT, SpecT] | SpecT | tuple[SpecT | Cmpnt[ImplT, SpecT] | None, CoeffT | None] | None) int[source]

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[source]

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][source]

Clone self into a new related container of type t.

Parameters:

t – Type of the new container to create.

Returns:

A new instance of t containing the same data as self.

iter_filter_map(f: Callable[[Term[ImplT, SpecT, CoeffT]], bool]) Iterator[Term[ImplT, SpecT, CoeffT]][source]

Lazily evaluate a filter-map operation over the terms of self.

Parameters:

f – Function which may mutate copies of the terms of self, returning True if those mutated copies are to be included in the generator. The function signature should take a single Term instance as an argument, and return a boolean.

Returns:

Iterator over the selected (and possibly mutated) components of self according to f.

Note

The resulting generator does not enforce uniqueness of components.

iter_filter_nonzero() Iterator[Term[ImplT, SpecT, CoeffT]][source]

Iterate over the non-zero terms of self.

lookup(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) tuple[int, CoeffT] | None[source]

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 None if the value was not found.

lookup_coeff(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) CoeffT | None[source]

Try to find the coefficient of the term specified by value in self.

Parameters:

value – The component or term specifier.

Returns:

The coefficient of the term specified by value if it is present in self, and None otherwise.

lookup_index(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) int | None[source]

Try to find the index of the component specified by value in self.

Parameters:

value – The component or term specifier.

Returns:

The index of the component specified by value if it is present in self, and None otherwise.

remove(value: SpecT | Cmpnt[ImplT, SpecT] | Term[ImplT, SpecT, CoeffT]) int[source]

Try to remove the component specified by value from self.

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][source]

Insertion method which does not overwrite coefficient values.

Operates similarly to insert(), but does not overwrite coefficient values if the component specified by key is already present in self.

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 key was not already present in self).

Note

This method operates in-place.

terms_type: type[Terms[ImplT, SpecT, CoeffT]]
to_dataframe() DataFrame[source]

Convert self to a DataFrame.

to_terms() Terms[ImplT, SpecT, CoeffT][source]

Get a collection of terms containing the same data as self.