Source code for hyrax.config_migrations.migrations.003_move_split_fraction_to_split
"""Config migration: version 3 → version 4.
Moves per-dataset ``split_fraction`` from ``[data_request]`` into the new
top-level ``[split]`` table.
"""
import tomlkit
from tomlkit.toml_document import TOMLDocument
from hyrax.config_migrations.migration_utils import migration_step
@migration_step(from_version=3)
[docs]
def move_split_fraction_to_split(cfg: TOMLDocument) -> TOMLDocument:
"""Move per-dataset ``split_fraction`` from [data_request] into [split]."""
data_request = cfg.get("data_request")
if not data_request:
return cfg
split_tbl = cfg.get("split", tomlkit.table())
for group_name, group in data_request.items():
if not isinstance(group, dict):
continue
for _friendly, dsdef in group.items():
if isinstance(dsdef, dict) and "split_fraction" in dsdef:
# The Pydantic schema guarantees split_fraction only sits on the
# group's primary dataset, so the last/only write per group wins.
split_tbl[group_name] = dsdef.pop("split_fraction")
if len(split_tbl):
cfg["split"] = split_tbl
return cfg