From a0f8bf15d6eaa922034559c1878c9dab37753b99 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 27 Jul 2021 10:45:11 -0500 Subject: [PATCH] Handle completely empty veclists --- miplearn/features/sample.py | 6 +++--- tests/features/test_sample.py | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/miplearn/features/sample.py b/miplearn/features/sample.py index bf07fc7..6407275 100644 --- a/miplearn/features/sample.py +++ b/miplearn/features/sample.py @@ -238,7 +238,8 @@ class Hdf5Sample(Sample): else: data = np.array(padded) break - assert data is not None + if data is None: + data = np.array(padded) ds = self._put(key, data) ds.attrs["lengths"] = lens @@ -254,7 +255,7 @@ def _pad(veclist: VectorList) -> Tuple[VectorList, List[int]]: maxlen = max(lens) # Find appropriate constant to pad the vectors - constant: Union[int, float, str, None] = None + constant: Union[int, float, str] = 0 for v in veclist: if v is None or len(v) == 0: continue @@ -266,7 +267,6 @@ def _pad(veclist: VectorList) -> Tuple[VectorList, List[int]]: constant = "" else: assert False, f"Unsupported data type: {v[0]}" - assert constant is not None, "veclist must not be completely empty" # Pad vectors for (i, vi) in enumerate(veclist): diff --git a/tests/features/test_sample.py b/tests/features/test_sample.py index 7e4bee7..0b57ef9 100644 --- a/tests/features/test_sample.py +++ b/tests/features/test_sample.py @@ -34,6 +34,7 @@ def _test_sample(sample: Sample) -> None: _assert_roundtrip_vector_list(sample, [[True], [False, False], None]) _assert_roundtrip_vector_list(sample, [[1], None, [2, 2], [3, 3, 3]]) _assert_roundtrip_vector_list(sample, [[1.0], None, [2.0, 2.0], [3.0, 3.0, 3.0]]) + _assert_roundtrip_vector_list(sample, [None, None]) # Bytes _assert_roundtrip_bytes(sample, b"\x00\x01\x02\x03\x04\x05") @@ -68,7 +69,8 @@ def _assert_roundtrip_vector_list(sample: Sample, expected: Any) -> None: actual = sample.get_vector_list("key") assert actual == expected assert actual is not None - _assert_same_type(actual[0][0], expected[0][0]) + if actual[0] is not None: + _assert_same_type(actual[0][0], expected[0][0]) def _assert_same_type(actual: Any, expected: Any) -> None: