PolyPipeline

The PolyPipeline class supports mixed multiview/single-view workflows with runtime mode inference. It can run sklearn-style estimators per view in multiview mode and supports late-fusion chaining.

See also

class polyview.pipeline.polypipeline.PolyPipeline(*args: Any, **kwargs: Any)

Bases: _BaseComposition

Pipeline that supports both multiview and single-view flows.

The pipeline infers data mode at runtime from step outputs: - multiview (“mv”): list/tuple of 2-D arrays - single-view (“sv”): one 2-D array

Allowed transitions are: - mv -> mv - mv -> sv - sv -> mv - sv -> sv

A reverse transition (sv -> mv) is rejected.

Parameters:
  • steps (sequence of (str, estimator) tuples) – List of (name, transform) tuples that are chained in the pipeline order.

  • per_view_step_params (dict or None, default=None) – Optional per-view hyperparameters for specific steps.

  • name (str or None, default=None) – Display name for the pipeline, shown in diagrams. If None, defaults to “PolyPipeline flow”.

draw(start_mode: Literal['mv', 'sv'] | None = None, *, ax: Any = None, show: bool = True, mode_colors: Dict[str, str] | None = None, title: str | None = None, node_text_color: str = 'white', node_border_color: str = '#1A1A1A', edge_color: str = '#333333', transition_text_color: str = '#222222', show_legend: bool = True, show_title: bool = True) → Any

Draw a mode-aware pipeline diagram using NetworkX.

Parameters:
  • start_mode ({"mv", "sv"} or None, default=None) – Optional starting mode for preview. Useful before fitting. - None: use fitted input mode if available. - "mv"/"sv": simulate flow from that start mode.

  • ax (matplotlib.axes.Axes or None, default=None) – Matplotlib axis to draw onto. If None, a new figure is created.

  • show (bool, default=True) – Whether to call matplotlib.pyplot.show() after drawing.

  • node_size (int, default=2300) – Minimum size hint for node rectangles.

  • mode_colors (dict or None, default=None) – Optional color overrides for node modes and types. Supported keys are "mv", "sv", "lf", "labels" (clustering/classification steps), "output", and "default".

  • title (str or None, default=None) – Plot title. If None, uses the pipeline’s name attribute.

  • node_text_color (str, default="white") – Color of node labels.

  • node_border_color (str, default="#1A1A1A") – Stroke color for node borders.

  • edge_color (str, default="#333333") – Arrow color.

  • transition_text_color (str, default="#222222") – Color of edge transition labels.

  • show_legend (bool, default=True) – Whether to display a legend showing color meanings (MV/SV/LF modes and label output).

  • show_title (bool, default=True) – Whether to display the plot title.

Returns:

Directed graph with mode and transition metadata.

Return type:

networkx.DiGraph

fit(X: Any, y: Any = None) → PolyPipeline
fit_predict(X: Any, y: Any = None) → Any
fit_transform(X: Any, y: Any = None) → Any
get_params(deep: bool = True) → Dict[str, Any]

Get parameters, including those of the steps when deep=True.

Step parameters are exposed as <step>__<parameter>, as in sklearn.pipeline.Pipeline, so that the pipeline can be tuned with GridSearchCV.

property named_steps: Dict[str, Any]

Unfitted steps as a {name: estimator} dictionary.

predict(X: Any) → Any
print(start_mode: Literal['mv', 'sv'] | None = None) → str

Render a readable ASCII diagram of pipeline flow.

Parameters:

start_mode ({"mv", "sv"} or None, default=None) – Optional starting mode for preview. Useful before fitting. - None: use fitted input mode if available. - "mv"/"sv": simulate flow from that start mode.

Returns:

Multi-line diagram string (also printed).

Return type:

str

Examples

>>> from sklearn.preprocessing import StandardScaler
>>> from polyview.augmentation.random_projections import (
...     RandomProjectionViews,
... )
>>> from polyview.cluster.mv_kmeans import MultiViewKMeans
>>> pipe = PolyPipeline([
...     ("rp", RandomProjectionViews(n_views=3)),
...     ("scale", StandardScaler()),
...     ("cluster", MultiViewKMeans(n_clusters=3, random_state=0))
... ])
>>> diagram = pipe.print(start_mode='sv')
PolyPipeline flow
input
  ↓ (split 1 -> 3 branches)
[rp: RandomProjectionViews]
  ↓ ↓ ↓ (3 parallel branches)
[scale: StandardScaler]
  ↓ ↓ ↓ (merge 3 -> 1)
[cluster: MultiViewKMeans]
  ↓ (output)
output
score(X: Any, y: Any = None) → Any
set_params(**kwargs: Any) → PolyPipeline

Set parameters, including <step>__<parameter> and whole steps.

transform(X: Any) → Any