Source code for marivo.analysis.lineage

"""Lineage dataclasses for analysis frames."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any


[docs] @dataclass(frozen=True) class LineageStep: intent: str job_ref: str | None inputs: list[str] params_digest: str params: dict[str, Any] = field(default_factory=dict)
[docs] @dataclass(frozen=True) class Lineage: steps: list[LineageStep] = field(default_factory=list) external_inputs: list[str] = field(default_factory=list)
[docs] @classmethod def compose(cls, a: Lineage, b: Lineage, *, new_step: LineageStep) -> Lineage: """Concatenate two source lineages plus a new step.""" merged_external = sorted(set(a.external_inputs) | set(b.external_inputs)) return cls( steps=[*a.steps, *b.steps, new_step], external_inputs=merged_external, )