You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from apps.web.experiment_baked_sleeves import read_effective_baked_sleeves
|
|
|
|
|
|
def test_read_effective_baked_sleeves_inherits_from_base_config(tmp_path: Path):
|
|
project_root = tmp_path
|
|
backtest_dir = project_root / "configs" / "backtest"
|
|
experiment_dir = project_root / "configs" / "experiments"
|
|
backtest_dir.mkdir(parents=True)
|
|
experiment_dir.mkdir(parents=True)
|
|
|
|
base_config = {
|
|
"risk": {"cash_parking_preset": "parking_base"},
|
|
"idle_alpha_sleeve_preset": "idle_base",
|
|
"form4_capture_sleeve_preset": "form4_base",
|
|
"ownership_capture_sleeve_preset": "ownership_base",
|
|
"risk_off_alpha_sleeve_preset": "riskoff_base",
|
|
}
|
|
(backtest_dir / "base.json").write_text(json.dumps(base_config))
|
|
|
|
manifest = {
|
|
"experiment_name": "exp_a",
|
|
"dataset_snapshot_id": "snapshot",
|
|
"base_config": "configs/backtest/base.json",
|
|
"overrides": {
|
|
"risk": {"cash_parking_preset": "parking_override"},
|
|
"idle_alpha_sleeve_preset": "idle_override",
|
|
},
|
|
"strategy_engines": [],
|
|
"splits": [],
|
|
"tags": [],
|
|
}
|
|
config_path = experiment_dir / "exp_a.json"
|
|
config_path.write_text(json.dumps(manifest))
|
|
|
|
assert read_effective_baked_sleeves(config_path, project_root) == {
|
|
"parking": "parking_override",
|
|
"idle_alpha": "idle_override",
|
|
"form4_sleeve": "form4_base",
|
|
"ownership_sleeve": "ownership_base",
|
|
"risk_off_sleeve": "riskoff_base",
|
|
}
|
|
|
|
|
|
def test_read_effective_baked_sleeves_respects_explicit_null_override(tmp_path: Path):
|
|
project_root = tmp_path
|
|
runs_dir = project_root / "runs" / "example_run"
|
|
experiment_dir = project_root / "configs" / "experiments"
|
|
runs_dir.mkdir(parents=True)
|
|
experiment_dir.mkdir(parents=True)
|
|
|
|
resolved_config = {
|
|
"risk": {"cash_parking_preset": "parking_base"},
|
|
"idle_alpha_sleeve_preset": "idle_base",
|
|
"form4_capture_sleeve_preset": "form4_base",
|
|
"ownership_capture_sleeve_preset": "ownership_base",
|
|
"risk_off_alpha_sleeve_preset": "riskoff_base",
|
|
}
|
|
(runs_dir / "resolved_config.json").write_text(json.dumps(resolved_config))
|
|
|
|
manifest = {
|
|
"experiment_name": "exp_b",
|
|
"dataset_snapshot_id": "snapshot",
|
|
"base_config": "runs/example_run/resolved_config.json",
|
|
"overrides": {
|
|
"form4_capture_sleeve_preset": None,
|
|
},
|
|
"strategy_engines": [],
|
|
"splits": [],
|
|
"tags": [],
|
|
}
|
|
config_path = experiment_dir / "exp_b.json"
|
|
config_path.write_text(json.dumps(manifest))
|
|
|
|
assert read_effective_baked_sleeves(config_path, project_root) == {
|
|
"parking": "parking_base",
|
|
"idle_alpha": "idle_base",
|
|
"form4_sleeve": None,
|
|
"ownership_sleeve": "ownership_base",
|
|
"risk_off_sleeve": "riskoff_base",
|
|
}
|