Abstract Optuna’s built-in trial.report() raises NotImplementedError in multi-objective studies. MultiMetricPruner works around this by storing intermediate values in trial user attributes and constructing a synthetic single-objective study for the wrapped base pruner to evaluate.
The pruning mode is selected via the joint argument:
Mode joint report call (Example with metric_names = ["loss", "acc"]) Multi-metric True trial.report({"loss": v1, "acc": v2}, step) Per-metric False trial.report({"loss": v1, "acc": v2}, step) or trial.report({"loss": v}, step) Multi-metric mode (joint=True) All metrics are reported together as a dict at each step.