From 5bf45562bc73f7058b5400d23d633e7bddf01f7a Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Wed, 7 Aug 2024 18:33:44 +0800 Subject: [PATCH 01/13] add test for dataclusters --- src/diffpy/srmise/tests/test_dataclusters.py | 51 ++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/diffpy/srmise/tests/test_dataclusters.py diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py new file mode 100644 index 0000000..f0cce5a --- /dev/null +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -0,0 +1,51 @@ +import numpy as np +import pytest + +from diffpy.srmise.dataclusters import DataClusters + + +@pytest.mark.parametrize( + "input_x, input_y, input_res, expected_x, expected_y, expected_data_order, expected_clusters, expected_res, " + "expected_current_index, expected_last_cluster_idx, expected_last_pt_idx, expected_status", + [ + ( + np.array([1, 2, 3]), + np.array([3, 2, 1]), + 4, + np.array([]), + np.array([]), + np.array([], dtype=np.int32), + np.array([[]], dtype=np.int32), + 0, + 0, + None, + None, + 0, + ) + ], +) +def test_clear( + input_x, + input_y, + input_res, + expected_x, + expected_y, + expected_data_order, + expected_clusters, + expected_res, + expected_current_index, + expected_last_cluster_idx, + expected_last_pt_idx, + expected_status, +): + c1 = DataClusters(x=input_x, y=input_y, res=input_res) + c1.clear() + assert np.array_equal(c1.x, expected_x) + assert np.array_equal(c1.y, expected_y) + assert np.array_equal(c1.data_order, expected_data_order) + assert np.array_equal(c1.clusters, expected_clusters) + assert c1.res == expected_res + assert c1.current_idx == expected_current_index + assert c1.lastcluster_idx == expected_last_cluster_idx + assert c1.lastpoint_idx == expected_last_pt_idx + assert c1.status == expected_status From e3fe16fa1cb10f4cf75d59fb22977d3f8a7fddc1 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 00:39:53 +0800 Subject: [PATCH 02/13] define eq method in dataclusters.py --- src/diffpy/srmise/dataclusters.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 1eabb26..ee5e16d 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -68,6 +68,21 @@ def __init__(self, x, y, res): def __iter__(self): return self + def __eq__(self, other): + # this function makes sure two DataClusters object is equal. Namely equal here means + # all the attribute of two objects are equal. + return ( + np.array_equal(self.x, other.x) + and np.array_equal(self.y, other.y) + and np.array_equal(self.data_order, other.data_order) + and np.array_equal(self.clusters, other.clusters) + and self.res == other.res + and self.current_idx == other.current_idx + and self.lastcluster_idx == other.lastcluster_idx + and self.lastpoint_idx == other.lastpoint_idx + and self.status == other.status + ) + def clear(self): """Clear all members, including user data.""" self.x = np.array([]) From fdab59cef52ab1ec8a8fad018c5b5ed7c33b5a28 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 01:37:58 +0800 Subject: [PATCH 03/13] change parametrization form --- src/diffpy/srmise/tests/test_dataclusters.py | 70 +++++++++----------- 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index f0cce5a..970edd5 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -5,47 +5,39 @@ @pytest.mark.parametrize( - "input_x, input_y, input_res, expected_x, expected_y, expected_data_order, expected_clusters, expected_res, " - "expected_current_index, expected_last_cluster_idx, expected_last_pt_idx, expected_status", + "inputs, expected", [ ( - np.array([1, 2, 3]), - np.array([3, 2, 1]), - 4, - np.array([]), - np.array([]), - np.array([], dtype=np.int32), - np.array([[]], dtype=np.int32), - 0, - 0, - None, - None, - 0, - ) + { + "input_x": np.array([1, 2, 3]), + "input_y": np.array([3, 2, 1]), + "input_res": 4, + }, + { + "x": np.array([]), + "y": np.array([]), + "data_order": np.array([], dtype=np.int32), + "clusters": np.array([[]], dtype=np.int32), + "res": 0, + "current_idx": 0, + "lastcluster_idx": None, + "lastpoint_idx": None, + "status": 0, + }, + ), ], ) -def test_clear( - input_x, - input_y, - input_res, - expected_x, - expected_y, - expected_data_order, - expected_clusters, - expected_res, - expected_current_index, - expected_last_cluster_idx, - expected_last_pt_idx, - expected_status, -): - c1 = DataClusters(x=input_x, y=input_y, res=input_res) +def test_clear(inputs, expected): + # Initialize DataClusters with input parameters + c1 = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) + + # Perform the clear operation c1.clear() - assert np.array_equal(c1.x, expected_x) - assert np.array_equal(c1.y, expected_y) - assert np.array_equal(c1.data_order, expected_data_order) - assert np.array_equal(c1.clusters, expected_clusters) - assert c1.res == expected_res - assert c1.current_idx == expected_current_index - assert c1.lastcluster_idx == expected_last_cluster_idx - assert c1.lastpoint_idx == expected_last_pt_idx - assert c1.status == expected_status + + # Assert each expected attribute against its actual value after clearing + for attr, expected_value in expected.items(): + assert ( + np.array_equal(getattr(c1, attr), expected_value) + if isinstance(expected_value, np.ndarray) + else getattr(c1, attr) == expected_value + ) From 82888bb8a91d4acac8204fc056ab03c15fd72741 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 02:03:28 +0800 Subject: [PATCH 04/13] add one more case and change reference name to actual --- src/diffpy/srmise/tests/test_dataclusters.py | 26 +++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 970edd5..539f564 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -25,19 +25,37 @@ "status": 0, }, ), + ( + { + "input_x": np.array([1]), + "input_y": np.array([3]), + "input_res": 4, + }, + { + "x": np.array([]), + "y": np.array([]), + "data_order": np.array([], dtype=np.int32), + "clusters": np.array([[]], dtype=np.int32), + "res": 0, + "current_idx": 0, + "lastcluster_idx": None, + "lastpoint_idx": None, + "status": 0, + }, + ), ], ) def test_clear(inputs, expected): # Initialize DataClusters with input parameters - c1 = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) + actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) # Perform the clear operation - c1.clear() + actual.clear() # Assert each expected attribute against its actual value after clearing for attr, expected_value in expected.items(): assert ( - np.array_equal(getattr(c1, attr), expected_value) + np.array_equal(getattr(actual, attr), expected_value) if isinstance(expected_value, np.ndarray) - else getattr(c1, attr) == expected_value + else getattr(actual, attr) == expected_value ) From f63abd5b125de2eb0154e32af79c3bbb29b019cc Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 11:06:32 +0800 Subject: [PATCH 05/13] delete comment --- src/diffpy/srmise/dataclusters.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index ee5e16d..4b00d9d 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -69,8 +69,6 @@ def __iter__(self): return self def __eq__(self, other): - # this function makes sure two DataClusters object is equal. Namely equal here means - # all the attribute of two objects are equal. return ( np.array_equal(self.x, other.x) and np.array_equal(self.y, other.y) From b959a0915493ff81a2349dfc3b9f7a98a737895f Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 16:55:31 +0800 Subject: [PATCH 06/13] add two more tests for DataClusters class function. --- src/diffpy/srmise/tests/test_dataclusters.py | 79 ++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 539f564..3b8c62e 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -59,3 +59,82 @@ def test_clear(inputs, expected): if isinstance(expected_value, np.ndarray) else getattr(actual, attr) == expected_value ) + + +@pytest.mark.parametrize( + "inputs, expected", + [ + ( + { + "input_x": np.array([1, 2, 3]), + "input_y": np.array([3, 2, 1]), + "input_res": 4, + }, + DataClusters(np.array([1, 2, 3]), np.array([3, 2, 1]), 4), + ), + ( + { + "input_x": np.array([1]), + "input_y": np.array([3]), + "input_res": 1, + }, + DataClusters(np.array([1]), np.array([3]), 1), + ), + ], +) +def test_reset_clusters(inputs, expected): + actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) + actual.reset_clusters() + assert actual == expected + + +@pytest.mark.parametrize( + "inputs, expected", + [ + ( + { + "input_x": np.array([1, 2, 3]), + "input_y": np.array([3, 2, 1]), + "input_res": 4, + }, + DataClusters(np.array([1, 2, 3]), np.array([3, 2, 1]), 4), + ), + ( + { + "input_x": np.array([1]), + "input_y": np.array([3]), + "input_res": 1, + }, + DataClusters(np.array([1]), np.array([3]), 1), + ), + ], +) +def test_set_data(inputs, expected): + actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) + assert actual == expected + + +@pytest.mark.parametrize( + "inputs, msg", + [ + ( + { + "input_x": np.array([1, 2, 3]), + "input_y": np.array([3, 2]), + "input_res": 4, + }, + "Sequences x and y must have the same length.", + ), + ( + { + "input_x": np.array([1]), + "input_y": np.array([3]), + "input_res": -1, + }, + "Resolution res must be greater than 0.", + ), + ], +) +def test_set_data_order_bad(inputs, msg): + with pytest.raises(ValueError, match=msg): + DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) From de2e9646f7b842c08aa9e45f4ea28a3cf15e8db6 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Thu, 8 Aug 2024 23:08:51 +0800 Subject: [PATCH 07/13] change in docstring for clearer explanation for clear method, remove duplicated case for testing behavior, remove other tests. --- src/diffpy/srmise/dataclusters.py | 3 +- src/diffpy/srmise/tests/test_dataclusters.py | 97 -------------------- 2 files changed, 2 insertions(+), 98 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 4b00d9d..07c6c45 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -82,7 +82,8 @@ def __eq__(self, other): ) def clear(self): - """Clear all members, including user data.""" + """Remove all the points from the cluster list, + and reset x, y value sequences to empty list. Reset the resolution to 0.""" self.x = np.array([]) self.y = np.array([]) self.data_order = np.array([], dtype=np.int32) diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 3b8c62e..8ecb429 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -25,24 +25,6 @@ "status": 0, }, ), - ( - { - "input_x": np.array([1]), - "input_y": np.array([3]), - "input_res": 4, - }, - { - "x": np.array([]), - "y": np.array([]), - "data_order": np.array([], dtype=np.int32), - "clusters": np.array([[]], dtype=np.int32), - "res": 0, - "current_idx": 0, - "lastcluster_idx": None, - "lastpoint_idx": None, - "status": 0, - }, - ), ], ) def test_clear(inputs, expected): @@ -59,82 +41,3 @@ def test_clear(inputs, expected): if isinstance(expected_value, np.ndarray) else getattr(actual, attr) == expected_value ) - - -@pytest.mark.parametrize( - "inputs, expected", - [ - ( - { - "input_x": np.array([1, 2, 3]), - "input_y": np.array([3, 2, 1]), - "input_res": 4, - }, - DataClusters(np.array([1, 2, 3]), np.array([3, 2, 1]), 4), - ), - ( - { - "input_x": np.array([1]), - "input_y": np.array([3]), - "input_res": 1, - }, - DataClusters(np.array([1]), np.array([3]), 1), - ), - ], -) -def test_reset_clusters(inputs, expected): - actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) - actual.reset_clusters() - assert actual == expected - - -@pytest.mark.parametrize( - "inputs, expected", - [ - ( - { - "input_x": np.array([1, 2, 3]), - "input_y": np.array([3, 2, 1]), - "input_res": 4, - }, - DataClusters(np.array([1, 2, 3]), np.array([3, 2, 1]), 4), - ), - ( - { - "input_x": np.array([1]), - "input_y": np.array([3]), - "input_res": 1, - }, - DataClusters(np.array([1]), np.array([3]), 1), - ), - ], -) -def test_set_data(inputs, expected): - actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) - assert actual == expected - - -@pytest.mark.parametrize( - "inputs, msg", - [ - ( - { - "input_x": np.array([1, 2, 3]), - "input_y": np.array([3, 2]), - "input_res": 4, - }, - "Sequences x and y must have the same length.", - ), - ( - { - "input_x": np.array([1]), - "input_y": np.array([3]), - "input_res": -1, - }, - "Resolution res must be greater than 0.", - ), - ], -) -def test_set_data_order_bad(inputs, msg): - with pytest.raises(ValueError, match=msg): - DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) From b25e9a408716b2823714eebefc40a376150ee5b7 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Fri, 9 Aug 2024 13:47:01 +0800 Subject: [PATCH 08/13] change clear method docstring into numpydoc format. Delete dtype for numpy array. --- src/diffpy/srmise/dataclusters.py | 24 ++++++++++++++++---- src/diffpy/srmise/tests/test_dataclusters.py | 4 ++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 07c6c45..4cf8507 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -82,12 +82,28 @@ def __eq__(self, other): ) def clear(self): - """Remove all the points from the cluster list, - and reset x, y value sequences to empty list. Reset the resolution to 0.""" + """ + Clear all data and reset the cluster object to a transient initial state. + + This method performs the following steps: + - Remove all the points from the clusters list. + - Reset the x and y value sequences to empty NumPy arrays. + - Reset dataorder list to empty NumPy arrays. + - Reset the resolution to 0. + - Reset current_idx to 0. + - Reset lastcluster_idx and lastpoint_idx to None. + - Reset status to INIT. + + The purpose of this method is to provide a clean state before creating new clustering operations. + + Returns + ------- + None + """ self.x = np.array([]) self.y = np.array([]) - self.data_order = np.array([], dtype=np.int32) - self.clusters = np.array([[]], dtype=np.int32) + self.data_order = np.array([]) + self.clusters = np.array([[]]) self.res = 0 self.current_idx = 0 self.lastcluster_idx = None diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 8ecb429..28f24fe 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -16,8 +16,8 @@ { "x": np.array([]), "y": np.array([]), - "data_order": np.array([], dtype=np.int32), - "clusters": np.array([[]], dtype=np.int32), + "data_order": np.array([]), + "clusters": np.array([[]]), "res": 0, "current_idx": 0, "lastcluster_idx": None, From 17582f02f5231f6c3d0916778168b2a3d48523ed Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Fri, 9 Aug 2024 21:11:10 +0800 Subject: [PATCH 09/13] remove block --- src/diffpy/srmise/dataclusters.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 4cf8507..9e05ba7 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -85,16 +85,8 @@ def clear(self): """ Clear all data and reset the cluster object to a transient initial state. - This method performs the following steps: - - Remove all the points from the clusters list. - - Reset the x and y value sequences to empty NumPy arrays. - - Reset dataorder list to empty NumPy arrays. - - Reset the resolution to 0. - - Reset current_idx to 0. - - Reset lastcluster_idx and lastpoint_idx to None. - - Reset status to INIT. - The purpose of this method is to provide a clean state before creating new clustering operations. + The object is updated in-place and no new instance is returned. Returns ------- From 36382530264aa28f3bc55ea81f12b3492f51591f Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Sat, 10 Aug 2024 11:30:59 +0800 Subject: [PATCH 10/13] Make edition to condition on res, refactor for setdata to make behavior of the test passed. --- src/diffpy/srmise/dataclusters.py | 25 +++++++++++++------- src/diffpy/srmise/pdfpeakextraction.py | 2 +- src/diffpy/srmise/tests/test_dataclusters.py | 17 ++----------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 9e05ba7..b89208a 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -69,6 +69,8 @@ def __iter__(self): return self def __eq__(self, other): + if not isinstance(other, DataClusters): + return False return ( np.array_equal(self.x, other.x) and np.array_equal(self.y, other.y) @@ -131,18 +133,23 @@ def setdata(self, x, y, res): if res <= 0: raise ValueError("Resolution res must be greater than 0.") # Test for sorting? - self.x = x self.y = y self.res = res - - self.data_order = self.y.argsort() # Defines order of clustering - self.clusters = np.array([[self.data_order[-1], self.data_order[-1]]]) - self.current_idx = len(self.data_order) - 1 - self.lastcluster_idx = 0 - self.lastpoint_idx = self.data_order[-1] - - self.status = self.READY + # If x sequence size is empty, set the object into Initialized state. + if x.size == 0: + self.data_order = np.array([]) + self.clusters = np.array([[]]) + self.current_idx = 0 + self.lastpoint_idx = None + self.status = self.INIT + else: + self.data_order = self.y.argsort() # Defines order of clustering + self.clusters = np.array([[self.data_order[-1], self.data_order[-1]]]) + self.current_idx = len(self.data_order) - 1 + self.lastpoint_idx = self.data_order[-1] + self.status = self.READY + self.lastcluster_idx = None return def next(self): diff --git a/src/diffpy/srmise/pdfpeakextraction.py b/src/diffpy/srmise/pdfpeakextraction.py index ab5f03d..58b4132 100644 --- a/src/diffpy/srmise/pdfpeakextraction.py +++ b/src/diffpy/srmise/pdfpeakextraction.py @@ -119,7 +119,7 @@ def setvars(self, quiet=False, **kwds): quiet: [False] Log changes quietly. Keywords - cres: The clustering resolution, must be > 0. + cres: The clustering resolution, must be >= 0. effective_dy: The uncertainties actually used during extraction dg: Alias for effective_dy pf: Sequence of PeakFunctionBase subclass instances. diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 28f24fe..62932d9 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -16,13 +16,7 @@ { "x": np.array([]), "y": np.array([]), - "data_order": np.array([]), - "clusters": np.array([[]]), "res": 0, - "current_idx": 0, - "lastcluster_idx": None, - "lastpoint_idx": None, - "status": 0, }, ), ], @@ -30,14 +24,7 @@ def test_clear(inputs, expected): # Initialize DataClusters with input parameters actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) - + expected = DataClusters(x=expected["x"], y=expected["y"], res=expected["res"]) # Perform the clear operation actual.clear() - - # Assert each expected attribute against its actual value after clearing - for attr, expected_value in expected.items(): - assert ( - np.array_equal(getattr(actual, attr), expected_value) - if isinstance(expected_value, np.ndarray) - else getattr(actual, attr) == expected_value - ) + assert actual == expected From ca8a16943d63120410db80407b70a7eb4d58909f Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Sat, 10 Aug 2024 11:41:13 +0800 Subject: [PATCH 11/13] change condition on res --- src/diffpy/srmise/dataclusters.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index b89208a..4cb46be 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -130,14 +130,14 @@ def setdata(self, x, y, res): # 3) r isn't sorted? if len(x) != len(y): raise ValueError("Sequences x and y must have the same length.") - if res <= 0: - raise ValueError("Resolution res must be greater than 0.") + if res < 0: + raise ValueError("Resolution res must be non-negative.") # Test for sorting? self.x = x self.y = y self.res = res # If x sequence size is empty, set the object into Initialized state. - if x.size == 0: + if x.size == 0 and res == 0: self.data_order = np.array([]) self.clusters = np.array([[]]) self.current_idx = 0 From 210547474ae6a2afcf3f36871712e4d4eb979c64 Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Sat, 10 Aug 2024 22:17:28 +0800 Subject: [PATCH 12/13] add condition on x and res are incompatible, update test. --- src/diffpy/srmise/dataclusters.py | 3 +++ src/diffpy/srmise/tests/test_dataclusters.py | 24 +++----------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index 4cb46be..c453a79 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -136,6 +136,9 @@ def setdata(self, x, y, res): self.x = x self.y = y self.res = res + # check x and res value are compatible. + if x.size == 0 and res != 0: + raise ValueError("It produces trivial clustering, please set 'res' to positive values.") # If x sequence size is empty, set the object into Initialized state. if x.size == 0 and res == 0: self.data_order = np.array([]) diff --git a/src/diffpy/srmise/tests/test_dataclusters.py b/src/diffpy/srmise/tests/test_dataclusters.py index 62932d9..ecd243e 100644 --- a/src/diffpy/srmise/tests/test_dataclusters.py +++ b/src/diffpy/srmise/tests/test_dataclusters.py @@ -1,30 +1,12 @@ import numpy as np -import pytest from diffpy.srmise.dataclusters import DataClusters -@pytest.mark.parametrize( - "inputs, expected", - [ - ( - { - "input_x": np.array([1, 2, 3]), - "input_y": np.array([3, 2, 1]), - "input_res": 4, - }, - { - "x": np.array([]), - "y": np.array([]), - "res": 0, - }, - ), - ], -) -def test_clear(inputs, expected): +def test_clear(): # Initialize DataClusters with input parameters - actual = DataClusters(x=inputs["input_x"], y=inputs["input_y"], res=inputs["input_res"]) - expected = DataClusters(x=expected["x"], y=expected["y"], res=expected["res"]) + actual = DataClusters(x=np.array([1, 2, 3]), y=np.array([3, 2, 1]), res=4) + expected = DataClusters(x=np.array([]), y=np.array([]), res=0) # Perform the clear operation actual.clear() assert actual == expected From cdaa3f2cff6079b29bf88ab0918b7e6e13927eae Mon Sep 17 00:00:00 2001 From: stevenhua0320 Date: Sun, 11 Aug 2024 00:14:58 +0800 Subject: [PATCH 13/13] revert change in setdata method. --- src/diffpy/srmise/dataclusters.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/diffpy/srmise/dataclusters.py b/src/diffpy/srmise/dataclusters.py index c453a79..4cb46be 100644 --- a/src/diffpy/srmise/dataclusters.py +++ b/src/diffpy/srmise/dataclusters.py @@ -136,9 +136,6 @@ def setdata(self, x, y, res): self.x = x self.y = y self.res = res - # check x and res value are compatible. - if x.size == 0 and res != 0: - raise ValueError("It produces trivial clustering, please set 'res' to positive values.") # If x sequence size is empty, set the object into Initialized state. if x.size == 0 and res == 0: self.data_order = np.array([])