58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import math
|
|
from pathlib import Path
|
|
|
|
|
|
HERE = Path(__file__).resolve().parent
|
|
|
|
|
|
def load_module():
|
|
spec = importlib.util.spec_from_file_location(
|
|
"intervention_response_v0", HERE / "analyze_phase6.py"
|
|
)
|
|
module = importlib.util.module_from_spec(spec)
|
|
assert spec.loader is not None
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
def pair(module, delta: dict[str, float]) -> dict[str, object]:
|
|
state = {feature: 0.0 for feature in module.ALL_FEATURES}
|
|
state.update(delta)
|
|
return {"delta_state": state}
|
|
|
|
|
|
def main() -> None:
|
|
module = load_module()
|
|
assert module.numeric([0.0, 1.0, 1.0]) == {
|
|
"n": 3,
|
|
"min": 0.0,
|
|
"max": 1.0,
|
|
"distinct_n": 2,
|
|
}
|
|
assert math.isclose(module.quantile([0.0, 10.0], 0.95), 9.5)
|
|
|
|
actions = [
|
|
pair(module, {"queue_waiting_mean": -1.0 - 0.1 * index})
|
|
for index in range(8)
|
|
]
|
|
repeats = [
|
|
pair(module, {"queue_waiting_mean": 0.01 * ((index % 3) - 1)})
|
|
for index in range(20)
|
|
]
|
|
stats = module.response_statistics(actions, repeats)
|
|
waiting = stats["queue_waiting_mean"]
|
|
assert waiting["qualifies"]
|
|
assert waiting["action_signs"]["negative"] == 8
|
|
assert waiting["action_signs"]["consistency"] == 1.0
|
|
assert waiting["effect_to_repeat_median"] > 2.0
|
|
assert not stats["kv_usage_mean"]["qualifies"]
|
|
print("intervention response v0 analysis: PASS")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|