Skip to content

Plugins

Hooks fire in this order during Experiment.run:

  1. init_hook(experiment) – called when the plugin is attached to the experiment.
  2. before_run(experiment) – once before any replicates start.
  3. For each replicate:
    • before_replicate(experiment, ctx) – before fetching data and running steps.
    • For each step:
      • before_step(experiment, step) – just before the step executes.
      • after_step(experiment, step, data, ctx) – immediately after the step finishes and context/metrics are updated.
  4. after_run(experiment, result) – after all replicates finish and results are aggregated.
  • TYPE_CHECKING
  • REPLICATE_KEY
  • CONDITION_KEY
  • BASELINE_CONDITION
  • METADATA_FILENAME
  • SEED_USED_KEY

default_seed_function(seed: 'int') → None

Set deterministic seeds for common libraries if available.


Interface for extending the :class:~crystallize.experiments.experiment.Experiment lifecycle.

Subclasses can override any of the hook methods to observe or modify the behaviour of an experiment. Hooks are called in a well-defined order during :meth:Experiment.run allowing plugins to coordinate tasks such as seeding, logging, artifact storage or custom execution strategies.


after_run(experiment: 'Experiment', result: 'Result') → None

Execute cleanup or reporting after :meth:Experiment.run completes.


after_step(
experiment: 'Experiment',
step: 'PipelineStep',
data: 'Any',
ctx: 'FrozenContext'
) → None

Observe results after every :class:PipelineStep execution.


before_replicate(experiment: 'Experiment', ctx: 'FrozenContext') → None

Run prior to each pipeline execution for a replicate.


before_run(experiment: 'Experiment') → None

Execute logic before :meth:Experiment.run begins.


before_step(experiment: 'Experiment', step: 'PipelineStep') → None

init_hook(experiment: 'Experiment') → None

Configure the experiment instance during initialization.


run_experiment_loop(
experiment: "'Experiment'",
replicate_fn: 'Callable[[int], Any]'
) → List[Any]

Run all replicates and return their results.

Returning NotImplemented signals that the plugin does not provide a custom execution strategy and the default should be used instead.


Manage deterministic seeding for all random operations.

__init__(
seed: 'Optional[int]' = None,
auto_seed: 'bool' = True,
seed_fn: 'Optional[Callable[[int], None]]' = None
) → None

after_run(experiment: 'Experiment', result: 'Result') → None

Execute cleanup or reporting after :meth:Experiment.run completes.


after_step(
experiment: 'Experiment',
step: 'PipelineStep',
data: 'Any',
ctx: 'FrozenContext'
) → None

Observe results after every :class:PipelineStep execution.


before_replicate(experiment: 'Experiment', ctx: 'FrozenContext') → None

before_run(experiment: 'Experiment') → None

Execute logic before :meth:Experiment.run begins.


before_step(experiment: 'Experiment', step: 'PipelineStep') → None

init_hook(experiment: 'Experiment') → None

run_experiment_loop(
experiment: "'Experiment'",
replicate_fn: 'Callable[[int], Any]'
) → List[Any]

Run all replicates and return their results.

Returning NotImplemented signals that the plugin does not provide a custom execution strategy and the default should be used instead.


Configure experiment logging using the crystallize logger.

__init__(verbose: 'bool' = False, log_level: 'str' = 'INFO') → None

after_run(experiment: 'Experiment', result: 'Result') → None

after_step(
experiment: 'Experiment',
step: 'PipelineStep',
data: 'Any',
ctx: 'FrozenContext'
) → None

before_replicate(experiment: 'Experiment', ctx: 'FrozenContext') → None

Run prior to each pipeline execution for a replicate.


before_run(experiment: 'Experiment') → None

before_step(experiment: 'Experiment', step: 'PipelineStep') → None

init_hook(experiment: 'Experiment') → None

run_experiment_loop(
experiment: "'Experiment'",
replicate_fn: 'Callable[[int], Any]'
) → List[Any]

Run all replicates and return their results.

Returning NotImplemented signals that the plugin does not provide a custom execution strategy and the default should be used instead.


Persist artifacts produced during pipeline execution.

__init__(
root_dir: 'str' = './data',
versioned: 'bool' = False,
artifact_retention: 'int' = 3,
big_file_threshold_mb: 'int' = 10
) → None

after_run(experiment: 'Experiment', result: 'Result') → None

after_step(
experiment: 'Experiment',
step: 'PipelineStep',
data: 'Any',
ctx: 'FrozenContext'
) → None

Write any artifacts logged in ctx.artifacts to disk.


before_replicate(experiment: 'Experiment', ctx: 'FrozenContext') → None

Run prior to each pipeline execution for a replicate.


before_run(experiment: 'Experiment') → None

before_step(experiment: 'Experiment', step: 'PipelineStep') → None

init_hook(experiment: 'Experiment') → None

Configure the experiment instance during initialization.


run_experiment_loop(
experiment: "'Experiment'",
replicate_fn: 'Callable[[int], Any]'
) → List[Any]

Run all replicates and return their results.

Returning NotImplemented signals that the plugin does not provide a custom execution strategy and the default should be used instead.