Code Convention

General Principles

Public API Rule

Transformer: Panel | Graph -> Graph
Composer:    (Panel | Graph, ...) -> Graph
Execution:   Graph -> Panel output

Do not add one Graph method per operation.

Custom Operations

Use decorators:

@transformer
def rolling_mean(frame: pd.DataFrame, *, window: int) -> pd.DataFrame:
    return frame.rolling(window).mean()


@composer
def average(*frames: pd.DataFrame) -> pd.DataFrame:
    return sum(frames) / len(frames)

Operation configuration must be deterministic and serializable.

Internal Layers

Panel inputs
    -> operation functions
    -> Graph logic nodes
    -> internal execution runtime
    -> cached Panel outputs

Style

Testing

Add focused tests for: