You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
motief/tests/test_compute_party_centroid...

58 lines
1.9 KiB

import numpy as np
from explorer_helpers import compute_party_centroids
def test_full_coverage():
windows = ["w1", "w2"]
positions_by_window = {
"w1": {"mp1": (0.0, 0.0), "mp2": (2.0, 0.0)},
"w2": {"mp1": (1.0, 1.0), "mp2": (3.0, 1.0)},
}
party_map = {"mp1": "P1", "mp2": "P2"}
centroids, meta = compute_party_centroids(positions_by_window, party_map, windows)
# both parties present in both windows -> no nans and correct lengths
assert set(centroids.keys()) == {"P1", "P2"}
for vals in centroids.values():
assert len(vals) == len(windows)
for x, y in vals:
assert not (np.isnan(x) or np.isnan(y))
def test_partial_coverage():
windows = ["w1", "w2", "w3"]
positions_by_window = {
"w1": {"mp1": (0.0, 0.0), "mp2": (2.0, 0.0)},
"w2": {"mp1": (1.0, 1.0)},
"w3": {"mp2": (3.0, 1.0)},
}
party_map = {"mp1": "P1", "mp2": "P2"}
centroids, meta = compute_party_centroids(positions_by_window, party_map, windows)
# Expect P1 present in w1,w2 but missing in w3
assert centroids["P1"][0] == (0.0, 0.0)
assert centroids["P1"][1] == (1.0, 1.0)
assert np.isnan(centroids["P1"][2][0]) and np.isnan(centroids["P1"][2][1])
# Expect P2 present in w1,w3 but missing in w2
assert centroids["P2"][0] == (2.0, 0.0)
assert np.isnan(centroids["P2"][1][0]) and np.isnan(centroids["P2"][1][1])
assert centroids["P2"][2] == (3.0, 1.0)
# metadata counts should reflect non-nan entries
assert meta["per_party_counts"]["P1"] == 2
assert meta["per_party_counts"]["P2"] == 2
assert meta["total_windows"] == len(windows)
def test_no_parties():
windows = ["w1", "w2"]
positions_by_window = {}
party_map = {}
centroids, meta = compute_party_centroids(positions_by_window, party_map, windows)
assert centroids == {}
assert meta["total_windows"] == len(windows)