SegmentedPolynomial#
- class cuequivariance.SegmentedPolynomial(
- inputs: Sequence[SegmentedOperand],
- outputs: Sequence[SegmentedOperand],
- operations: Sequence[tuple[Operation | Sequence[int], SegmentedTensorProduct]],
A polynomial representation using segmented tensor products.
This class represents a polynomial using a collection of segmented tensor products, where each product is associated with an operation that specifies how inputs are combined. The polynomial maps a set of input tensors to output tensors through these tensor products.
- Parameters:
inputs (tuple of SegmentedOperand) – Input operands.
outputs (tuple of SegmentedOperand) – Output operands.
operations (list of tuple of Operation and SegmentedTensorProduct) – List of operation and tensor product pairs that define the polynomial transformation.
- property operands: tuple[SegmentedOperand, ...]#
Get all operands (inputs and outputs) of the polynomial.
- Returns:
Tuple of all operands.
- Return type:
tuple of
cue.SegmentedOperand
- property num_inputs: int#
Get the number of input operands.
- Returns:
Number of input operands.
- Return type:
- property num_outputs: int#
Get the number of output operands.
- Returns:
Number of output operands.
- Return type:
- property num_operands: int#
Get the total number of operands (inputs + outputs).
- Returns:
Total number of operands.
- Return type:
- classmethod eval_last_operand(
- stp: SegmentedTensorProduct,
Create a polynomial that evaluates the last operand of a segmented tensor product.
- Parameters:
stp (
cue.SegmentedTensorProduct
) – The tensor product to evaluate.- Returns:
A polynomial evaluating the last operand.
- Return type:
- classmethod stack(
- polys: list[SegmentedPolynomial],
- stacked: list[bool],
Stack segmented polynomials together.
This method combines multiple polynomials by stacking their operands where indicated by the stacked parameter. Non-stacked operands must be identical across all polynomials.
- Parameters:
polys (list of
cue.SegmentedPolynomial
) – List of polynomials to stack.stacked (list of bool) – List indicating which operands should be stacked.
- Returns:
The stacked polynomial.
- Return type:
Example
>>> p1 = cue.descriptors.spherical_harmonics(cue.SO3(1), [1, 2]).polynomial >>> p2 = cue.descriptors.spherical_harmonics(cue.SO3(1), [2, 3]).polynomial >>> cue.SegmentedPolynomial.stack([p1, p2], [False, True]) ╭ a=[3:3⨯()] -> B=[20:20⨯()] │ []·a[]➜B[] ───────── num_paths=3 │ []·a[]·a[]➜B[] ───── num_paths=22 ╰─ []·a[]·a[]·a[]➜B[] ─ num_paths=41
Note how the STPs of degree 2 has been automatically fused into a single STP.
- classmethod stack_tensor_products(
- inputs: Sequence[SegmentedOperand | None],
- outputs: Sequence[SegmentedOperand | None],
- operations: Sequence[tuple[Operation | Sequence[int], SegmentedTensorProduct]],
Stack segmented tensor products together.
- Parameters:
inputs (list of
cue.SegmentedOperand
| None) – Input operands.outputs (list of
cue.SegmentedOperand
| None) – Output operands.operations (list of tuple of
cue.Operation
| list of int andcue.SegmentedTensorProduct
) – Operations and tensor products.
- Returns:
The stacked polynomial.
- Return type:
- classmethod concatenate(
- inputs: Sequence[SegmentedOperand],
- outputs: Sequence[SegmentedOperand],
- polys: list[tuple[SegmentedPolynomial, Sequence[int | None]]],
Concatenate segmented polynomials.
- Parameters:
inputs (list of
cue.SegmentedOperand
) – Input operands for the concatenated polynomial.outputs (list of
cue.SegmentedOperand
) – Output operands for the concatenated polynomial.polys (list of tuple of
cue.SegmentedPolynomial
and list of int | None) – List of tuples containing (polynomial, mapping), where mapping[i] is the operand index in the polynomial that corresponds to the i-th operand in the concatenated polynomial. If mapping[i] is None, the i-th operand in the concatenated polynomial is not used in the polynomial.
- Returns:
The concatenated polynomial.
- Return type:
Example
>>> p1 = cue.descriptors.spherical_harmonics(cue.SO3(1), [1, 2]).polynomial >>> p2 = cue.descriptors.spherical_harmonics(cue.SO3(1), [2, 3]).polynomial >>> [vec, sh1] = p1.operands >>> [_, sh2] = p2.operands >>> cue.SegmentedPolynomial.concatenate( ... [vec], ... [sh1, sh2], ... [(p1, [0, 1, None]), (p2, [0, None, 1])], ... ) ╭ a=[3:3⨯()] -> B=[8:8⨯()] C=[12:12⨯()] │ []·a[]➜B[] ───────── num_paths=3 │ []·a[]·a[]➜B[] ───── num_paths=11 │ []·a[]·a[]➜C[] ───── num_paths=11 ╰─ []·a[]·a[]·a[]➜C[] ─ num_paths=41
- all_same_segment_shape() bool #
Check if all operands have the same segment shape.
- Returns:
True if all operands have the same segment shape.
- Return type:
- used_inputs() list[bool] #
Get list of boolean values indicating which inputs are used in the polynomial.
- used_outputs() list[bool] #
Get list of boolean values indicating which outputs are used in the polynomial.
- used_operands() list[bool] #
Get list of boolean values indicating which operands are used in the polynomial.
- apply_fn( ) SegmentedPolynomial #
Apply a function to each tensor product in the polynomial.
- Parameters:
f (Callable) – Function to apply to each operation and tensor product pair.
- Returns:
New polynomial with transformed tensor products.
- Return type:
- fuse_stps() SegmentedPolynomial #
Fuse segmented tensor products with identical operations and operands.
- Returns:
Polynomial with fused tensor products.
- Return type:
- consolidate() SegmentedPolynomial #
Consolidate the segmented tensor products by removing empty segments and squeezing modes.
- Returns:
Consolidated polynomial.
- Return type:
- flatten_modes( ) SegmentedPolynomial #
Flatten specified modes in the polynomial.
- Parameters:
- Returns:
Polynomial with flattened modes.
- Return type:
- canonicalize_subscripts() SegmentedPolynomial #
Canonicalize the subscripts of the segmented tensor products.
- Returns:
Polynomial with canonicalized subscripts.
- Return type:
- squeeze_modes( ) SegmentedPolynomial #
Squeeze specified modes in the polynomial.
- Parameters:
modes (str | None, optional) – Modes to squeeze. If None, squeezes all modes.
- Returns:
Polynomial with squeezed modes.
- Return type:
- flatten_coefficient_modes() SegmentedPolynomial #
Flatten the coefficient modes of the segmented tensor products.
- Returns:
Polynomial with flattened coefficient modes.
- Return type:
- symmetrize_for_identical_operands() SegmentedPolynomial #
Symmetrize the paths of the segmented tensor products for identical operands.
This operation increases the number of paths in the segmented tensor products.
- Returns:
Polynomial with symmetrized paths.
- Return type:
- unsymmetrize_for_identical_operands() SegmentedPolynomial #
Unsymmetrize the paths of the segmented tensor products for identical operands.
This operation decreases the number of paths in the segmented tensor products.
- Returns:
Polynomial with unsymmetrized paths.
- Return type:
- filter_keep_operands( ) SegmentedPolynomial #
Select which operands to keep in the polynomial.
Use this method when you want to compute only a subset of the polynomial outputs and have control over which inputs to keep. For keeping all inputs (even if not used), use filter_keep_outputs. For automatically removing unused operands, use filter_drop_unsued_operands.
- filter_keep_outputs( ) SegmentedPolynomial #
Select which outputs to keep in the polynomial.
- Parameters:
- Returns:
Polynomial with selected outputs.
- Return type:
- filter_drop_unsued_operands() SegmentedPolynomial #
Remove all unused operands from the polynomial.
- Returns:
Polynomial with unused operands removed.
- Return type:
- compute_only( ) SegmentedPolynomial #
Create a polynomial that only computes selected outputs.
The new polynomial will keep the same operands as the original one, but will only compute the selected outputs.
- jvp( ) tuple[SegmentedPolynomial, Callable[[tuple[list[Any], list[Any]]], tuple[list[Any], list[Any]]]] #
Compute the Jacobian-vector product of the polynomial.
- Parameters:
has_tangent (list of bool) – List indicating which inputs have tangents.
- Returns:
The JVP polynomial and a mapping function for inputs/outputs.
- Return type:
tuple of
cue.SegmentedPolynomial
and Callable
- transpose( ) tuple[SegmentedPolynomial, Callable[[tuple[list[Any], list[Any]]], tuple[list[Any], list[Any]]]] #
Transpose the polynomial for reverse-mode automatic differentiation.
- Parameters:
- Returns:
The transposed polynomial and a mapping function for inputs/outputs.
- Return type:
tuple of
cue.SegmentedPolynomial
and Callable
- backward( ) tuple[SegmentedPolynomial, Callable[[tuple[list[Any], list[Any]]], tuple[list[Any], list[Any]]]] #
Compute the backward pass of the polynomial for gradient computation.
- Parameters:
- Returns:
The backward polynomial and a mapping function for inputs/outputs.
- Return type:
tuple of
cue.SegmentedPolynomial
and Callable