Product Modules¶
Product¶
Multiplies over the feature dimension of input modules.
- class spflow.modules.products.Product(inputs)[source]¶
Bases:
ModuleProduct node implementing factorization via conditional independence.
Computes joint distribution as product of child distributions. Multiple inputs are automatically concatenated along the feature dimension.
- inputs¶
Input module(s), concatenated if multiple.
- Type:
Module
- __init__(inputs)[source]¶
Initialize product node.
- Parameters:
inputs (
Module|list[Module]) – Single module or list of modules (concatenated along features).
- log_likelihood(data, cache=None)[source]¶
Compute log likelihood by summing child log-likelihoods across features.
ElementwiseProduct¶
Element-wise product over inputs with disjoint scopes.
- class spflow.modules.products.ElementwiseProduct(inputs, num_splits=2, split_mode=None)[source]¶
Bases:
BaseProductElementwise product with automatic broadcasting.
Multiplies inputs element-wise with broadcasting support. All input scopes must be pairwise disjoint. Commonly used in RAT-SPN architectures.
- __init__(inputs, num_splits=2, split_mode=None)[source]¶
Initialize elementwise product.
- Parameters:
inputs (
Module|tuple[Module,Module] |list[Module]) –List of Modules. The scopes for all child modules need to be pair-wise disjoint.
If inputs is a list of Modules, they have to be of disjoint scopes and have equal number of features or a single feature wich will the be broadcast and an equal number of channels or a single channel which will be broadcast.
- Example shapes:
inputs = ((3, 4), (3, 4)) output = (3, 4)
inputs = ((3, 4), (3, 1)) output = (3, 4) # broadcasted
inputs = ((3, 4), (1, 4)) output = (3, 4) # broadcasted
inputs = ((3, 1), (1, 4)) output = (3, 4) # broadcasted
num_splits (
int|None) – Number of splits when wrapping single input in Split.split_mode (
SplitMode|None) – Optional split configuration for single input mode. Use SplitMode.consecutive() or SplitMode.interleaved(). Defaults to SplitMode.consecutive(num_splits=num_splits) if not specified.
- Raises:
ValueError – Invalid arguments.
- map_out_channels_to_in_channels(output_ids)[source]¶
Map output channel indices to input channel indices.
- Parameters:
output_ids (
Tensor) – Tensor of output channel indices to map.- Returns:
Mapped input channel indices.
- Return type:
Tensor
OuterProduct¶
Outer (Cartesian) product over input channels, creating all combinations.
- class spflow.modules.products.OuterProduct(inputs, num_splits=2, split_mode=None)[source]¶
Bases:
BaseProductOuter product creating all pairwise channel combinations.
Computes Cartesian product of input channels. Output channels equal product of input channels. All input scopes must be pairwise disjoint.
- unraveled_channel_indices¶
Mapping from output to input channel pairs.
- Type:
Tensor
- __init__(inputs, num_splits=2, split_mode=None)[source]¶
Initialize outer product.
- Parameters:
inputs (
list[Module]) – Modules with pairwise disjoint scopes.num_splits (
int|None) – Number of splits for input operations.split_mode (
SplitMode|None) – Optional split configuration for single input mode. Use SplitMode.consecutive() or SplitMode.interleaved(). Defaults to SplitMode.consecutive(num_splits=num_splits) if not specified.
- check_shapes()[source]¶
Check if input shapes are compatible for outer product.
- Returns:
True if shapes are compatible, False if no shapes to check.
- Return type:
- Raises:
ValueError – If input shapes are not broadcastable.
- log_likelihood(data, cache=None)[source]¶
Compute log likelihood via outer sum of pairwise combinations.
- Parameters:
- Returns:
Log likelihood values with shape [batch_size, out_features, out_channels, num_repetitions].
- Return type:
Tensor
- Raises:
ValueError – If output tensor has invalid number of dimensions.
- map_out_channels_to_in_channels(output_ids)[source]¶
Map output channel indices to input channel indices.
- Parameters:
output_ids (
Tensor) – Tensor of output channel indices to map.- Returns:
Mapped input channel indices corresponding to the output channels.
- Return type:
Tensor
- Raises:
NotImplementedError – If split type is not supported.
- map_out_mask_to_in_mask(mask)[source]¶
Map output mask to input masks.
- Parameters:
mask (
Tensor) – Output mask tensor to map to input masks.- Returns:
Mapped input masks corresponding to the output mask.
- Return type:
Tensor
- Raises:
NotImplementedError – If split type is not supported.