|
|
@@ -17,6 +17,7 @@ from roi_control.fission_multiplier import (
|
|
|
DISPLAY_TOTAL_TO_FIRST_COLUMN,
|
|
|
FALLBACK_FILE,
|
|
|
GZH_FILE,
|
|
|
+ LEGACY_FISSION_PARAMETER_VERSION,
|
|
|
MATCH_GZH_EXACT,
|
|
|
MATCH_GZH_PARTNER,
|
|
|
MATCH_MINIAPP_EXACT,
|
|
|
@@ -30,6 +31,7 @@ from roi_control.fission_multiplier import (
|
|
|
QIWEI_REFERENCE_MULTIPLIER,
|
|
|
QIWEI_REFERENCE_VERSION,
|
|
|
RELEASES,
|
|
|
+ SOURCE_TOTAL_TO_FIRST_COLUMN,
|
|
|
apply_fission_multiplier,
|
|
|
load_fission_multiplier_parameters,
|
|
|
parameter_content_sha256,
|
|
|
@@ -72,6 +74,11 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
)
|
|
|
self.assertEqual(
|
|
|
parameter_content_sha256(self.parameters),
|
|
|
+ "af62237a0f6ee8de75ad90f9be82b0c880a783ee5a8ecb3e42c27b777e6dd213",
|
|
|
+ )
|
|
|
+ legacy = load_fission_multiplier_parameters(LEGACY_FISSION_PARAMETER_VERSION)
|
|
|
+ self.assertEqual(
|
|
|
+ parameter_content_sha256(legacy),
|
|
|
"c447dc53fb560a9ca7dd954b27966ec46bb4e25e1dfd6916d607431c106242c6",
|
|
|
)
|
|
|
|
|
|
@@ -171,6 +178,10 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
formal = replace(
|
|
|
self.parameters,
|
|
|
qiwei_by_partner={"合作方A": 2.2},
|
|
|
+ total_to_first={
|
|
|
+ **self.parameters.total_to_first,
|
|
|
+ ("qiwei", MATCH_QIWEI_PARTNER, "合作方A", ""): 0.75,
|
|
|
+ },
|
|
|
qiwei_exact_rows=2,
|
|
|
qiwei_exact_available_rows=1,
|
|
|
)
|
|
|
@@ -179,6 +190,7 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
fallback = formal.match("qiwei", partner="未知合作方")
|
|
|
self.assertEqual(exact.match_level, MATCH_QIWEI_PARTNER)
|
|
|
self.assertEqual(exact.multiplier, 2.2)
|
|
|
+ self.assertEqual(exact.multiplier_vs_first, 0.75)
|
|
|
self.assertEqual(fallback.match_level, MATCH_QIWEI_REFERENCE)
|
|
|
self.assertEqual(fallback.multiplier, QIWEI_REFERENCE_MULTIPLIER)
|
|
|
|
|
|
@@ -186,6 +198,10 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
formal = replace(
|
|
|
self.parameters,
|
|
|
qiwei_by_partner={"合作方A": 2.2},
|
|
|
+ total_to_first={
|
|
|
+ **self.parameters.total_to_first,
|
|
|
+ ("qiwei", MATCH_QIWEI_PARTNER, "合作方A", ""): 0.75,
|
|
|
+ },
|
|
|
qiwei_exact_rows=2,
|
|
|
qiwei_exact_available_rows=1,
|
|
|
)
|
|
|
@@ -223,6 +239,10 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
formal = replace(
|
|
|
self.parameters,
|
|
|
qiwei_by_partner={"合作方A": 2.2},
|
|
|
+ total_to_first={
|
|
|
+ **self.parameters.total_to_first,
|
|
|
+ ("qiwei", MATCH_QIWEI_PARTNER, "合作方A", ""): 0.75,
|
|
|
+ },
|
|
|
qiwei_exact_rows=2,
|
|
|
qiwei_exact_available_rows=1,
|
|
|
)
|
|
|
@@ -255,7 +275,7 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
/ "roi_control"
|
|
|
/ "data"
|
|
|
/ "fission_multiplier"
|
|
|
- / DEFAULT_FISSION_PARAMETER_VERSION
|
|
|
+ / self.parameters.release.source_version
|
|
|
)
|
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
|
parameter_root = Path(temporary)
|
|
|
@@ -273,6 +293,7 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
"首层UV": 600,
|
|
|
"A0活跃裂变UV": 200,
|
|
|
"A0-A15累计裂变活跃人次": 400,
|
|
|
+ SOURCE_TOTAL_TO_FIRST_COLUMN: 400 / 600,
|
|
|
"T1-T15相对T0尾部系数": 1.0,
|
|
|
"T15成熟系数(相对T0)": 2.0,
|
|
|
"样本状态": "可用",
|
|
|
@@ -293,6 +314,8 @@ class RoiFissionMultiplierTest(unittest.TestCase):
|
|
|
name: sha256(target / name)
|
|
|
for name in (MINIAPP_FILE, GZH_FILE, QIWEI_FILE, FALLBACK_FILE)
|
|
|
},
|
|
|
+ source_version=version,
|
|
|
+ includes_total_to_first=True,
|
|
|
)
|
|
|
with patch.dict(RELEASES, {version: release}):
|
|
|
parameters = load_fission_multiplier_parameters(
|