From 7a086dba20e7e4119874e5465bfd8390c115e2e3 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 30 Apr 2025 12:43:20 -0700 Subject: [PATCH 01/10] feat: add variance selector --- src/peppr/selector.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/peppr/selector.py b/src/peppr/selector.py index fcd4728..48ff6ec 100644 --- a/src/peppr/selector.py +++ b/src/peppr/selector.py @@ -5,6 +5,7 @@ "OracleSelector", "TopSelector", "RandomSelector", + "VarianceSelector", ] from abc import ABC, abstractmethod @@ -164,3 +165,15 @@ def select(self, values: np.ndarray, smaller_is_better: bool) -> float: return np.nanmin(top_values) else: return np.nanmax(top_values) + +class VarianceSelector(Selector): + """ + Selector that computes the variance of the values. + """ + + @property + def name(self) -> str: + return "variance" + + def select(self, values: np.ndarray, smaller_is_better: bool) -> float: + return np.nanvar(values) From 9b0cf96b6e9e5ce47acf334295a087d32d1a3b00 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 30 Apr 2025 12:49:19 -0700 Subject: [PATCH 02/10] tests: add test for VarianceSelector --- tests/test_selectors.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_selectors.py b/tests/test_selectors.py index 6ad7d8b..61cec78 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -46,3 +46,18 @@ def test_random_selector(): ] assert np.isclose(np.mean(selected_values), 9, rtol=0.5) + +def test_variance_selector(): + """ + Test the VarianceSelector's behavior. + + This test verifies that the VarianceSelector returns the expected value of + variance for a given set of values. + """ + selector = peppr.VarianceSelector() + values = np.linspace(0, 10, 10 + 1) + expected_variance = np.var(values) + + selected_value = selector.select(values, smaller_is_better=False) + + assert np.isclose(selected_value, expected_variance) \ No newline at end of file From 15da5b5e845cc727b3d3a51bc0c4560edbc88dec Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 30 Apr 2025 12:51:07 -0700 Subject: [PATCH 03/10] format: add new line --- tests/test_selectors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_selectors.py b/tests/test_selectors.py index 61cec78..4e0b9e0 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -60,4 +60,4 @@ def test_variance_selector(): selected_value = selector.select(values, smaller_is_better=False) - assert np.isclose(selected_value, expected_variance) \ No newline at end of file + assert np.isclose(selected_value, expected_variance) From 1ea8c4c2f3e9f9b3d30b669b067673a17997b696 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 30 Apr 2025 12:52:04 -0700 Subject: [PATCH 04/10] format: add whitespace --- tests/test_selectors.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_selectors.py b/tests/test_selectors.py index 4e0b9e0..9aa1873 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -47,6 +47,7 @@ def test_random_selector(): assert np.isclose(np.mean(selected_values), 9, rtol=0.5) + def test_variance_selector(): """ Test the VarianceSelector's behavior. From b6cbafe30be28174d0a77d98937ae8804dbd71a1 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 30 Apr 2025 13:33:22 -0700 Subject: [PATCH 05/10] format: more whitespace --- src/peppr/selector.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/peppr/selector.py b/src/peppr/selector.py index 48ff6ec..9089bc0 100644 --- a/src/peppr/selector.py +++ b/src/peppr/selector.py @@ -166,6 +166,7 @@ def select(self, values: np.ndarray, smaller_is_better: bool) -> float: else: return np.nanmax(top_values) + class VarianceSelector(Selector): """ Selector that computes the variance of the values. From 2965e71ec6e0692c5516c6778f7d6794e7c9b336 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 7 May 2025 16:27:02 -0700 Subject: [PATCH 06/10] docs: add motivation for variance selector --- src/peppr/selector.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/peppr/selector.py b/src/peppr/selector.py index 9089bc0..fa45e2e 100644 --- a/src/peppr/selector.py +++ b/src/peppr/selector.py @@ -169,7 +169,8 @@ def select(self, values: np.ndarray, smaller_is_better: bool) -> float: class VarianceSelector(Selector): """ - Selector that computes the variance of the values. + Selector that computes the variance of the values. This can be used to + assess the consistency of accuracy of a set of predicted poses. """ @property From 2debdee3fbfbe076773ca8430211bf8814516eae Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 7 May 2025 16:28:06 -0700 Subject: [PATCH 07/10] Update tests/test_selectors.py Co-authored-by: Patrick Kunzmann --- tests/test_selectors.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_selectors.py b/tests/test_selectors.py index 9aa1873..38c2be5 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -50,8 +50,6 @@ def test_random_selector(): def test_variance_selector(): """ - Test the VarianceSelector's behavior. - This test verifies that the VarianceSelector returns the expected value of variance for a given set of values. """ From 38e6b4f1e7d532b34b28616e9ff63b359c00111c Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Wed, 7 May 2025 16:29:57 -0700 Subject: [PATCH 08/10] chore: replace variance selector with standard deviation selector --- src/peppr/selector.py | 12 ++++++------ tests/test_selectors.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/peppr/selector.py b/src/peppr/selector.py index fa45e2e..90b7212 100644 --- a/src/peppr/selector.py +++ b/src/peppr/selector.py @@ -5,7 +5,7 @@ "OracleSelector", "TopSelector", "RandomSelector", - "VarianceSelector", + "StandardDeviationSelector", ] from abc import ABC, abstractmethod @@ -167,15 +167,15 @@ def select(self, values: np.ndarray, smaller_is_better: bool) -> float: return np.nanmax(top_values) -class VarianceSelector(Selector): +class StandardDeviationSelector(Selector): """ - Selector that computes the variance of the values. This can be used to - assess the consistency of accuracy of a set of predicted poses. + Selector that computes the standard deviation of the values. This can be + used to assess the consistency of accuracy of a set of predicted poses. """ @property def name(self) -> str: - return "variance" + return "stdev" def select(self, values: np.ndarray, smaller_is_better: bool) -> float: - return np.nanvar(values) + return np.nanstd(values) diff --git a/tests/test_selectors.py b/tests/test_selectors.py index 38c2be5..dca2d56 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -48,15 +48,15 @@ def test_random_selector(): assert np.isclose(np.mean(selected_values), 9, rtol=0.5) -def test_variance_selector(): +def test_standard_deviation_selector(): """ - This test verifies that the VarianceSelector returns the expected value of - variance for a given set of values. + This test verifies that the StandardDeviationSelector returns the expected + value of standard deviation for a given set of values. """ - selector = peppr.VarianceSelector() + selector = peppr.StandardDeviationSelector() values = np.linspace(0, 10, 10 + 1) - expected_variance = np.var(values) + expected_std = np.std(values) selected_value = selector.select(values, smaller_is_better=False) - assert np.isclose(selected_value, expected_variance) + assert np.isclose(selected_value, expected_std) From 01dcbed8e7fddcf2b5865950ca0650938cd603ee Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Fri, 16 Jan 2026 10:59:15 -0800 Subject: [PATCH 09/10] chore: rename StandardDeviationSelector to DeviationAggregator --- src/peppr/selector.py | 6 +++--- tests/test_selectors.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/peppr/selector.py b/src/peppr/selector.py index 90b7212..26ee223 100644 --- a/src/peppr/selector.py +++ b/src/peppr/selector.py @@ -5,7 +5,7 @@ "OracleSelector", "TopSelector", "RandomSelector", - "StandardDeviationSelector", + "DeviationAggregator", ] from abc import ABC, abstractmethod @@ -167,9 +167,9 @@ def select(self, values: np.ndarray, smaller_is_better: bool) -> float: return np.nanmax(top_values) -class StandardDeviationSelector(Selector): +class DeviationAggregator(Selector): """ - Selector that computes the standard deviation of the values. This can be + Aggregator that computes the standard deviation of the values. This can be used to assess the consistency of accuracy of a set of predicted poses. """ diff --git a/tests/test_selectors.py b/tests/test_selectors.py index dca2d56..55a2852 100644 --- a/tests/test_selectors.py +++ b/tests/test_selectors.py @@ -48,12 +48,12 @@ def test_random_selector(): assert np.isclose(np.mean(selected_values), 9, rtol=0.5) -def test_standard_deviation_selector(): +def test_deviation_aggregator(): """ - This test verifies that the StandardDeviationSelector returns the expected + This test verifies that the DeviationAggregator returns the expected value of standard deviation for a given set of values. """ - selector = peppr.StandardDeviationSelector() + selector = peppr.DeviationAggregator() values = np.linspace(0, 10, 10 + 1) expected_std = np.std(values) From d41c9543cc5fcc3b6d9a62bf593767371d0af080 Mon Sep 17 00:00:00 2001 From: michaelpun <16233540+michaelpun@users.noreply.github.com> Date: Fri, 16 Jan 2026 11:17:12 -0800 Subject: [PATCH 10/10] chore: add DeviationAggregator to api.rst --- docs/api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api.rst b/docs/api.rst index cc03375..f997097 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -61,6 +61,7 @@ Selection of the desired metric result from multiple poses. OracleSelector TopSelector RandomSelector + DeviationAggregator Analysis functions ------------------