def test_delete_hue() -> None: h1 = "a" h2 = "b" a = MetricsDict(hues=[h1, h2]) a.add_metric("foo", 1.0, hue=h1) a.add_metric("bar", 2.0, hue=h2) a.delete_hue(h1) assert a.get_hue_names(include_default=False) == [h2] assert list(a.enumerate_single_values()) == [(h2, "bar", 2.0)]
def test_metrics_store_mixed_hues() -> None: """ Test to make sure metrics dict is able to handle default and non-default hues """ m = MetricsDict(hues=["A", "B"]) m.add_metric("foo", 1) m.add_metric("foo", 1, hue="B") m.add_metric("bar", 2, hue="A") assert list(m.enumerate_single_values()) == \ [('A', 'bar', 2), ('B', 'foo', 1), (MetricsDict.DEFAULT_HUE_KEY, 'foo', 1)]
def test_metrics_dict_flatten(hues: Optional[List[str]]) -> None: m = MetricsDict(hues=hues) _hues = hues or [MetricsDict.DEFAULT_HUE_KEY] * 2 m.add_metric("foo", 1.0, hue=_hues[0]) m.add_metric("foo", 2.0, hue=_hues[1]) m.add_metric("bar", 3.0, hue=_hues[0]) m.add_metric("bar", 4.0, hue=_hues[1]) if hues is None: average = m.average(across_hues=True) # We should be able to flatten out all the singleton values that the `average` operation returns all_values = list(average.enumerate_single_values()) assert all_values == [(MetricsDict.DEFAULT_HUE_KEY, "foo", 1.5), (MetricsDict.DEFAULT_HUE_KEY, "bar", 3.5)] # When trying to flatten off a dictionary that has two values, this should fail: with pytest.raises(ValueError) as ex: list(m.enumerate_single_values()) assert "only hold 1 item" in str(ex) else: average = m.average(across_hues=False) all_values = list(average.enumerate_single_values()) assert all_values == [('A', 'foo', 1.0), ('A', 'bar', 3.0), ('B', 'foo', 2.0), ('B', 'bar', 4.0)]