48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import numpy as np
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from control_plane.trading_studio.indicators.parity_harness_v1 import (
|
||
|
|
FeatureVersion,
|
||
|
|
ParityStatus,
|
||
|
|
compare_array,
|
||
|
|
compare_state,
|
||
|
|
enumerate_native_evaluators,
|
||
|
|
load_frozen_engineering_map,
|
||
|
|
parity_manifest,
|
||
|
|
recompute_coverage,
|
||
|
|
)
|
||
|
|
|
||
|
|
pytestmark = pytest.mark.django_db
|
||
|
|
|
||
|
|
|
||
|
|
def test_manifest_is_pinned_to_the_frozen_engineering_map():
|
||
|
|
assert load_frozen_engineering_map()["counts"]["primitives"] == 711
|
||
|
|
assert parity_manifest()["comparison"]["tolerance_by_engineering_family"] == {}
|
||
|
|
|
||
|
|
|
||
|
|
def test_comparisons_record_exact_dtype_nan_and_state_key_failures():
|
||
|
|
record = compare_array(
|
||
|
|
"feature", np.array([np.nan, 1.0]), np.array([np.nan, 1.0], dtype=np.float32)
|
||
|
|
)
|
||
|
|
assert record.status == ParityStatus.FAIL
|
||
|
|
assert record.expected_dtype == "float64"
|
||
|
|
assert record.nan_mask_mismatches == 0
|
||
|
|
state = compare_state(
|
||
|
|
{"trend": np.array([1], dtype=np.int8)},
|
||
|
|
{"signal": np.array([1], dtype=np.int8)},
|
||
|
|
)
|
||
|
|
assert {item.reason for item in state} == {"state_key_mismatch"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_native_enumeration_and_coverage_use_only_submitted_versions():
|
||
|
|
passed = FeatureVersion("v1", "p1", "trend", 9, lambda _: np.array([1]), ParityStatus.PASS)
|
||
|
|
failed = FeatureVersion("v2", "p2", "trend", 1, None, ParityStatus.FAIL)
|
||
|
|
assert enumerate_native_evaluators([passed, failed]) == (passed,)
|
||
|
|
assert recompute_coverage([passed, failed]) == {
|
||
|
|
"submitted_feature_versions": 2, "passed_feature_versions": 1,
|
||
|
|
"submitted_usage_slots": 10, "passed_usage_slots": 9,
|
||
|
|
"coverage_percent": 90.0, "feature_versions": ["v1"],
|
||
|
|
}
|