From daf4de70ecfefc4330b113b8f18b2f9aa4f6168a Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Mon, 15 Jul 2024 17:38:10 +0200 Subject: [PATCH 01/31] rebased --- pynapple/core/time_series.py | 12 +++++++++--- pynapple/io/misc.py | 6 ++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index b7c8c5e2..ffcaf751 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -104,6 +104,8 @@ def __init__(self, t, d, time_units="s", time_support=None, load_array=True): def __setitem__(self, key, value): """setter for time series""" + if isinstance(key, Tsd): + key = key.d try: self.values.__setitem__(key, value) except IndexError: @@ -1237,14 +1239,18 @@ def __repr__(self): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): + if isinstance(key, Tsd): + key = key.d + output = self.values.__getitem__(key) + if isinstance(key, tuple): index = self.index.__getitem__(key[0]) + elif isinstance(index, Number): + index = np.array([index]) else: index = self.index.__getitem__(key) - - if isinstance(index, Number): - index = np.array([index]) + if all(is_array_like(a) for a in [index, output]): if output.shape[0] == index.shape[0]: diff --git a/pynapple/io/misc.py b/pynapple/io/misc.py index a3bab79e..cd08228d 100644 --- a/pynapple/io/misc.py +++ b/pynapple/io/misc.py @@ -22,7 +22,7 @@ from .suite2p import Suite2P -def load_file(path): +def load_file(path, lazy_loading=True): """Load file. Current format supported is (npz,nwb,) .npz -> If the file is compatible with a pynapple format, the function will return a pynapple object. @@ -34,6 +34,8 @@ def load_file(path): ---------- path : str Path to the file + lazy_loading : bool + Lazy loading of the data, used only for NWB files Returns ------- @@ -49,7 +51,7 @@ def load_file(path): if path.endswith(".npz"): return NPZFile(path).load() elif path.endswith(".nwb"): - return NWBFile(path) + return NWBFile(path, lazy_loading=lazy_loading) else: raise RuntimeError("File format not supported") else: From 7747547ec1ddd0d053699249c5081a8751222a05 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Tue, 23 Jul 2024 17:31:32 +0200 Subject: [PATCH 02/31] Update pynapple/core/time_series.py Co-authored-by: Guillaume Viejo --- pynapple/core/time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index ffcaf751..4380e6de 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -104,7 +104,7 @@ def __init__(self, t, d, time_units="s", time_support=None, load_array=True): def __setitem__(self, key, value): """setter for time series""" - if isinstance(key, Tsd): + if isinstance(key, BaseTsd): key = key.d try: self.values.__setitem__(key, value) From a77978a877a76aad7e5d36ad34dcb75c73b47e69 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Tue, 23 Jul 2024 17:37:05 +0200 Subject: [PATCH 03/31] blacked --- pynapple/core/time_series.py | 5 ++--- pynapple/io/misc.py | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 4445a600..2b7bd9d5 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -1207,16 +1207,15 @@ def __repr__(self): def __getitem__(self, key, *args, **kwargs): if isinstance(key, Tsd): key = key.d - + output = self.values.__getitem__(key) - + if isinstance(key, tuple): index = self.index.__getitem__(key[0]) elif isinstance(index, Number): index = np.array([index]) else: index = self.index.__getitem__(key) - if all(is_array_like(a) for a in [index, output]): if output.shape[0] == index.shape[0]: diff --git a/pynapple/io/misc.py b/pynapple/io/misc.py index 75b43471..03128adc 100644 --- a/pynapple/io/misc.py +++ b/pynapple/io/misc.py @@ -23,7 +23,6 @@ from .suite2p import Suite2P - def load_file(path, lazy_loading=None): """Load file. Current format supported is (npz,nwb,) From 19ce7a5d6207fa0a231775bdb1fb450eac2543ee Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 26 Jul 2024 18:00:14 +0200 Subject: [PATCH 04/31] Fixed test error --- pynapple/core/time_series.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 2b7bd9d5..5b374364 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -1212,8 +1212,8 @@ def __getitem__(self, key, *args, **kwargs): if isinstance(key, tuple): index = self.index.__getitem__(key[0]) - elif isinstance(index, Number): - index = np.array([index]) + elif isinstance(key, Number): + index = np.array([key]) else: index = self.index.__getitem__(key) From 869226b56eeee4068eb4338c965f04e542aa98e2 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 26 Jul 2024 18:09:29 +0200 Subject: [PATCH 05/31] TsdBase instead of Tsd --- pynapple/core/time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 5b374364..7d48c081 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -1205,7 +1205,7 @@ def __repr__(self): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): - if isinstance(key, Tsd): + if isinstance(key, BaseTsd): key = key.d output = self.values.__getitem__(key) From 4b33f2391bc41d41dc66b8916fc0aa56d0e9719d Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 1 Aug 2024 23:36:57 +0200 Subject: [PATCH 06/31] added tests --- tests/test_time_series.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index 0942490f..db347482 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -872,6 +872,23 @@ def test_vertical_slicing(self, tsdframe): assert isinstance(tsdframe[0:10].time_support, nap.IntervalSet) np.testing.assert_array_almost_equal(tsdframe[0:10].time_support, tsdframe.time_support) + def test_slice_with_int_tsd(self, tsdframe): + array_slice = np.arange(10, dtype=int) + tsd_index = nap.Tsd(t=tsdframe.index[:len(array_slice)], d=array_slice) + indexed = tsdframe[tsd_index] + assert isinstance(indexed, nap.TsdFrame) + np.testing.assert_array_almost_equal(indexed.values, tsdframe.values[array_slice]) + + def test_slice_with_bool_tsd(self, tsdframe): + thr = 0.5 + tsd_index = (tsdframe > thr).any(axis=1) + raw_values = tsdframe.values + np_indexed_vals = raw_values[tsd_index.values] + indexed = tsdframe[tsd_index] + + assert isinstance(indexed, nap.TsdFrame) + np.testing.assert_array_almost_equal(indexed.values, np_indexed_vals) + def test_str_indexing(self, tsdframe): tsdframe = nap.TsdFrame(t=np.arange(100), d=np.random.rand(100, 3), time_units="s", columns=['a', 'b', 'c']) np.testing.assert_array_almost_equal(tsdframe.values[:,0], tsdframe['a'].values) @@ -883,7 +900,6 @@ def test_str_indexing(self, tsdframe): with pytest.raises(Exception): tsdframe[['d', 'e']] - def test_operators(self, tsdframe): v = tsdframe.values From 81ac53361f6ef61dc0e53f2384721fca236c1098 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 1 Aug 2024 23:39:51 +0200 Subject: [PATCH 07/31] added tests for tsd --- tests/test_time_series.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index db347482..ed30c1e9 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -712,6 +712,23 @@ def test_threshold_time_support(self, tsd): tsd.threshold(0.5, "bla") assert str(e_info.value) == "Method {} for thresholding is not accepted.".format("bla") + def test_slice_with_int_tsd(self, tsd): + array_slice = np.arange(10, dtype=int) + tsd_index = nap.Tsd(t=tsd.index[:len(array_slice)], d=array_slice) + indexed = tsd[tsd_index] + assert isinstance(indexed, nap.Tsd) + np.testing.assert_array_almost_equal(indexed.values, tsd.values[array_slice]) + + def test_slice_with_bool_tsd(self, tsd): + thr = 0.5 + tsd_index = tsd > thr + raw_values = tsd.values + np_indexed_vals = raw_values[tsd_index.values] + indexed = tsd[tsd_index] + + assert isinstance(indexed, nap.Tsd) + np.testing.assert_array_almost_equal(indexed.values, np_indexed_vals) + def test_data(self, tsd): np.testing.assert_array_almost_equal(tsd.values, tsd.data()) From fc043d3667015d736a76ac3ada9b811d600b147d Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 1 Aug 2024 23:45:56 +0200 Subject: [PATCH 08/31] added tests for __setitem__ and fixed bug --- tests/test_time_series.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index ed30c1e9..c4b4f3da 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -713,13 +713,18 @@ def test_threshold_time_support(self, tsd): assert str(e_info.value) == "Method {} for thresholding is not accepted.".format("bla") def test_slice_with_int_tsd(self, tsd): + tsd = tsd.copy() array_slice = np.arange(10, dtype=int) tsd_index = nap.Tsd(t=tsd.index[:len(array_slice)], d=array_slice) indexed = tsd[tsd_index] assert isinstance(indexed, nap.Tsd) np.testing.assert_array_almost_equal(indexed.values, tsd.values[array_slice]) + tsd[tsd_index] = 0 + np.testing.assert_array_almost_equal(tsd.values[array_slice], 0) + def test_slice_with_bool_tsd(self, tsd): + thr = 0.5 tsd_index = tsd > thr raw_values = tsd.values @@ -729,6 +734,10 @@ def test_slice_with_bool_tsd(self, tsd): assert isinstance(indexed, nap.Tsd) np.testing.assert_array_almost_equal(indexed.values, np_indexed_vals) + tsd[tsd_index] = 0 + np.testing.assert_array_almost_equal(tsd.values[tsd_index.values], 0) + + def test_data(self, tsd): np.testing.assert_array_almost_equal(tsd.values, tsd.data()) @@ -896,6 +905,9 @@ def test_slice_with_int_tsd(self, tsdframe): assert isinstance(indexed, nap.TsdFrame) np.testing.assert_array_almost_equal(indexed.values, tsdframe.values[array_slice]) + tsdframe[tsd_index] = 0 + np.testing.assert_array_almost_equal(tsdframe.values[tsd_index.values], 0) + def test_slice_with_bool_tsd(self, tsdframe): thr = 0.5 tsd_index = (tsdframe > thr).any(axis=1) @@ -906,6 +918,9 @@ def test_slice_with_bool_tsd(self, tsdframe): assert isinstance(indexed, nap.TsdFrame) np.testing.assert_array_almost_equal(indexed.values, np_indexed_vals) + tsdframe[tsd_index] = 0 + np.testing.assert_array_almost_equal(tsdframe.values[tsd_index.values], 0) + def test_str_indexing(self, tsdframe): tsdframe = nap.TsdFrame(t=np.arange(100), d=np.random.rand(100, 3), time_units="s", columns=['a', 'b', 'c']) np.testing.assert_array_almost_equal(tsdframe.values[:,0], tsdframe['a'].values) From d0493bb1c0da99878264c0c662287b53d4c748aa Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 1 Aug 2024 23:48:25 +0200 Subject: [PATCH 09/31] fixed commit bug --- pynapple/core/time_series.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 7d48c081..891741c6 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -972,6 +972,9 @@ def round_if_float(x): return tabulate([], headers=headers) + "\n" + bottom def __setitem__(self, key, value): + if isinstance(key, BaseTsd): + key = key.d + try: if isinstance(key, str): new_key = self.columns.get_indexer([key]) @@ -985,6 +988,9 @@ def __setitem__(self, key, value): raise IndexError def __getitem__(self, key, *args, **kwargs): + if isinstance(key, BaseTsd): + key = key.d + if ( isinstance(key, str) or hasattr(key, "__iter__") From 6d07a6390a573c308f8e013716531329ec0b0f4c Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 2 Aug 2024 14:17:24 +0200 Subject: [PATCH 10/31] blacked --- pynapple/core/time_series.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 891741c6..cb0085ad 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -974,7 +974,7 @@ def round_if_float(x): def __setitem__(self, key, value): if isinstance(key, BaseTsd): key = key.d - + try: if isinstance(key, str): new_key = self.columns.get_indexer([key]) @@ -990,7 +990,7 @@ def __setitem__(self, key, value): def __getitem__(self, key, *args, **kwargs): if isinstance(key, BaseTsd): key = key.d - + if ( isinstance(key, str) or hasattr(key, "__iter__") From 03bbc3bc14c5efe23ffe5cee91016cbafc899698 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 27 Sep 2024 23:45:44 +0200 Subject: [PATCH 11/31] TsdTensor tests --- pynapple/core/time_series.py | 26 +++++++++++++++++----- tests/test_time_series.py | 42 +++++++++++++++++++++++++++++++++++ tests/ts.npz | Bin 0 -> 1800 bytes tests/ts2.npz | Bin 0 -> 1800 bytes tests/tsd.npz | Bin 0 -> 2838 bytes tests/tsd2.npz | Bin 0 -> 2838 bytes tests/tsdframe.npz | Bin 0 -> 4728 bytes tests/tsdframe2.npz | Bin 0 -> 4728 bytes tests/tsdtensor.npz | Bin 0 -> 6862 bytes tests/tsdtensor2.npz | Bin 0 -> 6862 bytes ts.npz | Bin 0 -> 1800 bytes ts2.npz | Bin 0 -> 1800 bytes tsd.npz | Bin 0 -> 2838 bytes tsd2.npz | Bin 0 -> 2838 bytes tsdframe.npz | Bin 0 -> 4728 bytes tsdframe2.npz | Bin 0 -> 4728 bytes tsdtensor.npz | Bin 0 -> 6862 bytes tsdtensor2.npz | Bin 0 -> 6862 bytes 18 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 tests/ts.npz create mode 100644 tests/ts2.npz create mode 100644 tests/tsd.npz create mode 100644 tests/tsd2.npz create mode 100644 tests/tsdframe.npz create mode 100644 tests/tsdframe2.npz create mode 100644 tests/tsdtensor.npz create mode 100644 tests/tsdtensor2.npz create mode 100644 ts.npz create mode 100644 ts2.npz create mode 100644 tsd.npz create mode 100644 tsd2.npz create mode 100644 tsdframe.npz create mode 100644 tsdframe2.npz create mode 100644 tsdtensor.npz create mode 100644 tsdtensor2.npz diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index f442440c..3fa751f1 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -774,15 +774,32 @@ def create_str(array): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): - output = self.values.__getitem__(key) - if isinstance(key, tuple): - index = self.index.__getitem__(key[0]) + print("key", key) + if isinstance(key, Tsd): + if not np.issubdtype(key.dtype, np.bool_): + raise ValueError("When indexing with a Tsd, it must contain boolean values") + output = self.values[key.values] + index = self.index[key.values] + elif isinstance(key, tuple): + if isinstance(key[0], Tsd): + if not np.issubdtype(key[0].dtype, np.bool_): + raise ValueError("When indexing with a Tsd, it must contain boolean values") + output = self.values[key[0].values] + index = self.index[key[0].values] + # Apply the rest of the indexing + output = output[:, key[1:]] + output = output.squeeze() + else: + output = self.values.__getitem__(key) + index = self.index.__getitem__(key[0]) else: + output = self.values.__getitem__(key) index = self.index.__getitem__(key) if isinstance(index, Number): index = np.array([index]) + print(output.shape, index.shape) if all(is_array_like(a) for a in [index, output]): if output.shape[0] == index.shape[0]: if output.ndim == 1: @@ -793,9 +810,8 @@ def __getitem__(self, key, *args, **kwargs): ) else: return TsdTensor(t=index, d=output, time_support=self.time_support) - else: - return output + return output else: return output diff --git a/tests/test_time_series.py b/tests/test_time_series.py index f8a246cd..9c9fb808 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1492,6 +1492,48 @@ def test_interpolate_with_ep(self, tsdtensor): tsdframe2 = tsdtensor.interpolate(ts, ep) assert len(tsdframe2) == 0 + def test_indexing_with_boolean_tsd(self, tsdtensor): + # Create a boolean Tsd for indexing + index_tsd = nap.Tsd(t=tsdtensor.t, d=np.random.choice([True, False], size=len(tsdtensor))) + + # Test indexing + result = tsdtensor[index_tsd] + # print(type(result)) + + assert isinstance(result, nap.TsdTensor) + assert len(result) == index_tsd.d.sum() + np.testing.assert_array_equal(result.t, tsdtensor.t[index_tsd.d]) + np.testing.assert_array_equal(result.values, tsdtensor.values[index_tsd.d]) + + def test_indexing_with_boolean_tsd_and_additional_slicing(self, tsdtensor): + # Create a boolean Tsd for indexing + index_tsd = nap.Tsd(t=tsdtensor.t, d=np.random.choice([True, False], size=len(tsdtensor))) + + # Test indexing with additional dimension slicing + result = tsdtensor[index_tsd, 1] + print("!!!!!!!!!!!", type(result)) + + assert isinstance(result, nap.TsdFrame) + assert len(result) == index_tsd.d.sum() + np.testing.assert_array_equal(result.t, tsdtensor.t[index_tsd.d]) + np.testing.assert_array_equal(result.values, tsdtensor.values[index_tsd.d, 1]) + + def test_indexing_with_non_boolean_tsd_raises_error(self, tsdtensor): + # Create a non-boolean Tsd + index_tsd = nap.Tsd(t=np.array([10, 20, 30, 40]), d=np.array([1, 2, 3, 0])) + + # Test indexing with non-boolean Tsd should raise an error + with pytest.raises(ValueError, match="When indexing with a Tsd, it must contain boolean values"): + tsdtensor[index_tsd] + + def test_indexing_with_mismatched_boolean_tsd_raises_error(self, tsdtensor): + # Create a boolean Tsd with mismatched length + index_tsd = nap.Tsd(t=np.arange(len(tsdtensor) + 5), d=np.random.choice([True, False], size=len(tsdtensor) + 5)) + + # Test indexing with mismatched boolean Tsd should raise an error + with pytest.raises(IndexError, match="boolean index did not match indexed array along dimension 0"): + tsdtensor[index_tsd] + @pytest.mark.parametrize("obj", [ nap.Tsd(t=np.arange(10), d=np.random.rand(10), time_units="s"), diff --git a/tests/ts.npz b/tests/ts.npz new file mode 100644 index 0000000000000000000000000000000000000000..aa8519b9c3f847b8434565afd6400fcf1e26d80d GIT binary patch literal 1800 zcmd7TJ#W)M9LMpWNdl!)21_6nB!f_0P*kPmskDWLr}7Y53^Y*0fFk0G0i}_hB1H)4 z#Kg|V#Jga%#A`sTyaWbb0KWL^Dh>;fg^QezfA`NxzMRhvnx(RqYo5Qe8}*}h_xWzr32py+ z`&AsK{qf6oFHG~?LcLx)UGv_0|JINBglZ;v?qi&H=x5=nG zWYk?Us!2xOBcnFRs7*5JJ{c8cxq$`~)C1~hFhM<}js_FdBkE`{L2Xe-g9)ld9StU^ z$JEhaf_g$74JN2<>S!?8ZUlvGy)xtMy_aN9{=7az$dFl8UDgI@S|GiWXT+0%9MCD=;W zAWn~<=^SuNE-NzrddL?_GLAhT-cjR2inreAkZ;fg^QezfA`NxzMRhvnx(RqYo5Qe8}*}h_xWzr32py+ z`&AsK{qf6oFHG~?LcLx)UGv_0|JINBglZ;v?qi&H=x5=nG zWYk?Us!2xOBcnFRs7*5JJ{c8cxq$`~)C1~hFhM<}js_FdBkE`{L2Xe-g9)ld9StU^ z$JEhaf_g$74JN2<>S!?8ZUlvGy)xtMy_aN9{=7az$dFl8UDgI@S|GiWXT+0%9MCD=;W zAWn~<=^SuNE-NzrddL?_GLAhT-cjR2inreAkZ&s0DT4J>V*k1GB)@U^bWo=79##2R8YDY3NEOf^ZHETQ5!Duu2L+HS;e$LVfK&w^T1nQi0DSD0(E zw%+`?_7%N6tJxK1CtKX84e9+SoaPl^*fdGRDFN%DAQJ!bg#%7Nb+|SHV^!9 zev*CvLz}(({%ICmJ2KOo5n+}Oe{XNO`mR!csKZ?_mN}&8I`iX}V_PN^UBAD-+~kUB z`8mn#Ije8%x4*|;xcKXc?`W*v>R+Bam0EO8>1U$;8_koR*t|_PRQ)+tGpYFVubVjg zc=Gf1ogO@JF8c!GPF-AHW&VVnzR`8UecJ@9es%p9`_7zI+E=`keo$K)>o3@`%71t+ ztoT!%&dwVhmlYkqt&1~N&$NpnNqMDsS_gt|zj9(rg;J8av=e)Y=QYP^qN5>-4`Cov zJ0pjXCWhc`RNhVUz-8VN0VKUzzyADzA72z>ld@X+VhZ`Z^4nD^lakDTkHBgEZy!xd zpMq*}ECDfl#O$!Cmg!P-;+>Qdzx<-5(v??9*M(J;*d+c`k*Y-#uliE_N?e%7#3u18 zR&F5u%lm2K*yQz_*ergPEN-?>P4b#aY!p8;iyIZJ6eGesIc%vbBrjF`sl{05M33kn DgIwm) literal 0 HcmV?d00001 diff --git a/tests/tsd2.npz b/tests/tsd2.npz new file mode 100644 index 0000000000000000000000000000000000000000..6e295763677b3458cce36dbc9599cefaa85b59f7 GIT binary patch literal 2838 zcmd6peM}o=9LIkhV{|pq8Y-Hwm=hNYtgDnd#s=Hdi450TR*;Tj2(DX8<}}c?71nH$ zbB=@&s0DT4J>V*k1GB)@U^bWo=79##2R8YDY3NEOf^ZHETQ5!Duu2L+HS;e$LVfK&w^T1nQi0DSD0(E zw%+`?_7%N6tJxK1CtKX84e9+SoaPl^*fdGRDFN%DAQJ!bg#%7Nb+|SHV^!9 zev*CvLz}(({%ICmJ2KOo5n+}Oe{XNO`mR!csKZ?_mN}&8I`iX}V_PN^UBAD-+~kUB z`8mn#Ije8%x4*|;xcKXc?`W*v>R+Bam0EO8>1U$;8_koR*t|_PRQ)+tGpYFVubVjg zc=Gf1ogO@JF8c!GPF-AHW&VVnzR`8UecJ@9es%p9`_7zI+E=`keo$K)>o3@`%71t+ ztoT!%&dwVhmlYkqt&1~N&$NpnNqMDsS_gt|zj9(rg;J8av=e)Y=QYP^qN5>-4`Cov zJ0pjXCWhc`RNhVUz-8VN0VKUzzyADzA72z>ld@X+VhZ`Z^4nD^lakDTkHBgEZy!xd zpMq*}ECDfl#O$!Cmg!P-;+>Qdzx<-5(v??9*M(J;*d+c`k*Y-#uliE_N?e%7#3u18 zR&F5u%lm2K*yQz_*ergPEN-?>P4b#aY!p8;iyIZJ6eGesIc%vbBrjF`sl{05M33kn DgIwm) literal 0 HcmV?d00001 diff --git a/tests/tsdframe.npz b/tests/tsdframe.npz new file mode 100644 index 0000000000000000000000000000000000000000..e9a5414290920fa5c8dadd1b1f456c1bf2974ca0 GIT binary patch literal 4728 zcmeI0e@IhN6vxjr%bBI+{zxpC63uLcKPpYFyME2eA1%{T{3DiISeVMDg=p}oq^PJU z0xO91M__*#;QDHj@~JZO;ep+PEu z25Ad4NH#@VKnavV+6q4?fig&i@PiU4gR~8PPy%I;ir@z&PzI?Oeoz8skha4QN}vqV z4){R{ltC(iACy43#A4I5b$a&aD6gJKm}qN<+SX!143$B*wJ|N2#*R={Gj;6kd~~%T zrIUFMTrNvL-_91sT!`#`(53#(O%-UW0#g<6tAMS$NPlL@W7g8M>u6X1Jr*)EcAzPA zaKih=5+9LtI<|#*PCf1aRN2hl4P_OYz7MjEUkl2-h0oaC`+El87j?6YGqKO}T6)H9 zJrys$6@N+SV~*ZNb9q=lYqnq7l)Sf}c~8V%X)C|R%=-7NdP23<^xq4L*B?D@0j?zHi{3OZ$36as3mN^YU`{lRU36P+*mU8W&Od8-k>ckF^#c~*!cqVL literal 0 HcmV?d00001 diff --git a/tests/tsdframe2.npz b/tests/tsdframe2.npz new file mode 100644 index 0000000000000000000000000000000000000000..e9a5414290920fa5c8dadd1b1f456c1bf2974ca0 GIT binary patch literal 4728 zcmeI0e@IhN6vxjr%bBI+{zxpC63uLcKPpYFyME2eA1%{T{3DiISeVMDg=p}oq^PJU z0xO91M__*#;QDHj@~JZO;ep+PEu z25Ad4NH#@VKnavV+6q4?fig&i@PiU4gR~8PPy%I;ir@z&PzI?Oeoz8skha4QN}vqV z4){R{ltC(iACy43#A4I5b$a&aD6gJKm}qN<+SX!143$B*wJ|N2#*R={Gj;6kd~~%T zrIUFMTrNvL-_91sT!`#`(53#(O%-UW0#g<6tAMS$NPlL@W7g8M>u6X1Jr*)EcAzPA zaKih=5+9LtI<|#*PCf1aRN2hl4P_OYz7MjEUkl2-h0oaC`+El87j?6YGqKO}T6)H9 zJrys$6@N+SV~*ZNb9q=lYqnq7l)Sf}c~8V%X)C|R%=-7NdP23<^xq4L*B?D@0j?zHi{3OZ$36as3mN^YU`{lRU36P+*mU8W&Od8-k>ckF^#c~*!cqVL literal 0 HcmV?d00001 diff --git a/tests/tsdtensor.npz b/tests/tsdtensor.npz new file mode 100644 index 0000000000000000000000000000000000000000..df0849b8b8ccfe91aee840a3b9d6d2f5fdc41e52 GIT binary patch literal 6862 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 ie=qcNkNsz%2BOf9{P8YEKLLK2a) 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 literal 0 HcmV?d00001 diff --git a/tsdframe2.npz b/tsdframe2.npz new file mode 100644 index 0000000000000000000000000000000000000000..480636fe681b905dd2493b2a76f11f5c7516f9c4 GIT binary patch literal 4728 zcmeI0e`r%z6vt0mt!=eiR>G*X%-1p-H*445R%?6HZcDnx+RXl#%IKDvxT^gTlD1Gq ze2B6Ce->l=S8k&xwNqW0`oPnUs=L4!C+IK())t-ji^ z(?Fec(Cl*ic6-g6CG(a&#pW!@yr<3E?sc}l*XDJ(h283G_PM#;*W~oLxxOwpCnxKb zEa{N+uScRf3+*_~@Xew!9yEd`Fa=BlB`^bg8O#LNfv7{t&Rbz4jM z(KL3VI-8|qqzat)#CXg$ag$~I{Zi?t!=vo|pJqNBFSg zRi5;2_pi)fllt`+-wiEzo{rP~w|lRiVHM|RlJO6zg)lT)NzINcQtpV*fNBy?2B-POI5ify|1imfw zwL87@Pkh2ChQ{c&hEYE6Nz(k*P@lr(RO2lzg%vynckBG#R-3rS|3v~1ZOvyb$y0s2 z%tBW31a`MIceJ$nv<R=kEOfZWRpbv?vDDuS&)$TfomfLgIN+?Oh(X zmXWZD;SU}oy-BElyo_?A&!~>i!^g$N#mdFY#mS|Gi<^tXZiq3(n)o*{!e5c7R&kVr zB?-1qc!>V-D>P)BzfK9>u;C&4)(j1~lf>t%HEMX6z8ylthMwc;sLc@`q`w72gS^jE h=nWYjs9)yLK%0@~7u{iB9w&Tp{8P@0l>UOy9spNI#t8rb literal 0 HcmV?d00001 diff --git a/tsdtensor.npz b/tsdtensor.npz new file mode 100644 index 0000000000000000000000000000000000000000..30ecec91d7ac716d8fbcda7d662a9b7c8c12977a GIT binary patch literal 6862 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 aT7ITq?PtAKSY+HM%>Rk<>zX=kT>CE}E}Dn{ literal 0 HcmV?d00001 diff --git a/tsdtensor2.npz b/tsdtensor2.npz new file mode 100644 index 0000000000000000000000000000000000000000..30ecec91d7ac716d8fbcda7d662a9b7c8c12977a GIT binary patch literal 6862 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 aT7ITq?PtAKSY+HM%>Rk<>zX=kT>CE}E}Dn{ literal 0 HcmV?d00001 From 958f773796e395dc82ad9dd84c82f08247b71326 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 27 Sep 2024 23:46:26 +0200 Subject: [PATCH 12/31] TsdTensor tests cleaned --- tests/ts.npz | Bin 1800 -> 0 bytes tests/ts2.npz | Bin 1800 -> 0 bytes tests/tsd.npz | Bin 2838 -> 0 bytes tests/tsd2.npz | Bin 2838 -> 0 bytes tests/tsdframe.npz | Bin 4728 -> 0 bytes tests/tsdframe2.npz | Bin 4728 -> 0 bytes tests/tsdtensor.npz | Bin 6862 -> 0 bytes tests/tsdtensor2.npz | Bin 6862 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/ts.npz delete mode 100644 tests/ts2.npz delete mode 100644 tests/tsd.npz delete mode 100644 tests/tsd2.npz delete mode 100644 tests/tsdframe.npz delete mode 100644 tests/tsdframe2.npz delete mode 100644 tests/tsdtensor.npz delete mode 100644 tests/tsdtensor2.npz diff --git a/tests/ts.npz b/tests/ts.npz deleted file mode 100644 index aa8519b9c3f847b8434565afd6400fcf1e26d80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 zcmd7TJ#W)M9LMpWNdl!)21_6nB!f_0P*kPmskDWLr}7Y53^Y*0fFk0G0i}_hB1H)4 z#Kg|V#Jga%#A`sTyaWbb0KWL^Dh>;fg^QezfA`NxzMRhvnx(RqYo5Qe8}*}h_xWzr32py+ z`&AsK{qf6oFHG~?LcLx)UGv_0|JINBglZ;v?qi&H=x5=nG zWYk?Us!2xOBcnFRs7*5JJ{c8cxq$`~)C1~hFhM<}js_FdBkE`{L2Xe-g9)ld9StU^ z$JEhaf_g$74JN2<>S!?8ZUlvGy)xtMy_aN9{=7az$dFl8UDgI@S|GiWXT+0%9MCD=;W zAWn~<=^SuNE-NzrddL?_GLAhT-cjR2inreAkZ;fg^QezfA`NxzMRhvnx(RqYo5Qe8}*}h_xWzr32py+ z`&AsK{qf6oFHG~?LcLx)UGv_0|JINBglZ;v?qi&H=x5=nG zWYk?Us!2xOBcnFRs7*5JJ{c8cxq$`~)C1~hFhM<}js_FdBkE`{L2Xe-g9)ld9StU^ z$JEhaf_g$74JN2<>S!?8ZUlvGy)xtMy_aN9{=7az$dFl8UDgI@S|GiWXT+0%9MCD=;W zAWn~<=^SuNE-NzrddL?_GLAhT-cjR2inreAkZ&s0DT4J>V*k1GB)@U^bWo=79##2R8YDY3NEOf^ZHETQ5!Duu2L+HS;e$LVfK&w^T1nQi0DSD0(E zw%+`?_7%N6tJxK1CtKX84e9+SoaPl^*fdGRDFN%DAQJ!bg#%7Nb+|SHV^!9 zev*CvLz}(({%ICmJ2KOo5n+}Oe{XNO`mR!csKZ?_mN}&8I`iX}V_PN^UBAD-+~kUB z`8mn#Ije8%x4*|;xcKXc?`W*v>R+Bam0EO8>1U$;8_koR*t|_PRQ)+tGpYFVubVjg zc=Gf1ogO@JF8c!GPF-AHW&VVnzR`8UecJ@9es%p9`_7zI+E=`keo$K)>o3@`%71t+ ztoT!%&dwVhmlYkqt&1~N&$NpnNqMDsS_gt|zj9(rg;J8av=e)Y=QYP^qN5>-4`Cov zJ0pjXCWhc`RNhVUz-8VN0VKUzzyADzA72z>ld@X+VhZ`Z^4nD^lakDTkHBgEZy!xd zpMq*}ECDfl#O$!Cmg!P-;+>Qdzx<-5(v??9*M(J;*d+c`k*Y-#uliE_N?e%7#3u18 zR&F5u%lm2K*yQz_*ergPEN-?>P4b#aY!p8;iyIZJ6eGesIc%vbBrjF`sl{05M33kn DgIwm) diff --git a/tests/tsd2.npz b/tests/tsd2.npz deleted file mode 100644 index 6e295763677b3458cce36dbc9599cefaa85b59f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2838 zcmd6peM}o=9LIkhV{|pq8Y-Hwm=hNYtgDnd#s=Hdi450TR*;Tj2(DX8<}}c?71nH$ zbB=@&s0DT4J>V*k1GB)@U^bWo=79##2R8YDY3NEOf^ZHETQ5!Duu2L+HS;e$LVfK&w^T1nQi0DSD0(E zw%+`?_7%N6tJxK1CtKX84e9+SoaPl^*fdGRDFN%DAQJ!bg#%7Nb+|SHV^!9 zev*CvLz}(({%ICmJ2KOo5n+}Oe{XNO`mR!csKZ?_mN}&8I`iX}V_PN^UBAD-+~kUB z`8mn#Ije8%x4*|;xcKXc?`W*v>R+Bam0EO8>1U$;8_koR*t|_PRQ)+tGpYFVubVjg zc=Gf1ogO@JF8c!GPF-AHW&VVnzR`8UecJ@9es%p9`_7zI+E=`keo$K)>o3@`%71t+ ztoT!%&dwVhmlYkqt&1~N&$NpnNqMDsS_gt|zj9(rg;J8av=e)Y=QYP^qN5>-4`Cov zJ0pjXCWhc`RNhVUz-8VN0VKUzzyADzA72z>ld@X+VhZ`Z^4nD^lakDTkHBgEZy!xd zpMq*}ECDfl#O$!Cmg!P-;+>Qdzx<-5(v??9*M(J;*d+c`k*Y-#uliE_N?e%7#3u18 zR&F5u%lm2K*yQz_*ergPEN-?>P4b#aY!p8;iyIZJ6eGesIc%vbBrjF`sl{05M33kn DgIwm) diff --git a/tests/tsdframe.npz b/tests/tsdframe.npz deleted file mode 100644 index e9a5414290920fa5c8dadd1b1f456c1bf2974ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4728 zcmeI0e@IhN6vxjr%bBI+{zxpC63uLcKPpYFyME2eA1%{T{3DiISeVMDg=p}oq^PJU z0xO91M__*#;QDHj@~JZO;ep+PEu z25Ad4NH#@VKnavV+6q4?fig&i@PiU4gR~8PPy%I;ir@z&PzI?Oeoz8skha4QN}vqV z4){R{ltC(iACy43#A4I5b$a&aD6gJKm}qN<+SX!143$B*wJ|N2#*R={Gj;6kd~~%T zrIUFMTrNvL-_91sT!`#`(53#(O%-UW0#g<6tAMS$NPlL@W7g8M>u6X1Jr*)EcAzPA zaKih=5+9LtI<|#*PCf1aRN2hl4P_OYz7MjEUkl2-h0oaC`+El87j?6YGqKO}T6)H9 zJrys$6@N+SV~*ZNb9q=lYqnq7l)Sf}c~8V%X)C|R%=-7NdP23<^xq4L*B?D@0j?zHi{3OZ$36as3mN^YU`{lRU36P+*mU8W&Od8-k>ckF^#c~*!cqVL diff --git a/tests/tsdframe2.npz b/tests/tsdframe2.npz deleted file mode 100644 index e9a5414290920fa5c8dadd1b1f456c1bf2974ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4728 zcmeI0e@IhN6vxjr%bBI+{zxpC63uLcKPpYFyME2eA1%{T{3DiISeVMDg=p}oq^PJU z0xO91M__*#;QDHj@~JZO;ep+PEu z25Ad4NH#@VKnavV+6q4?fig&i@PiU4gR~8PPy%I;ir@z&PzI?Oeoz8skha4QN}vqV z4){R{ltC(iACy43#A4I5b$a&aD6gJKm}qN<+SX!143$B*wJ|N2#*R={Gj;6kd~~%T zrIUFMTrNvL-_91sT!`#`(53#(O%-UW0#g<6tAMS$NPlL@W7g8M>u6X1Jr*)EcAzPA zaKih=5+9LtI<|#*PCf1aRN2hl4P_OYz7MjEUkl2-h0oaC`+El87j?6YGqKO}T6)H9 zJrys$6@N+SV~*ZNb9q=lYqnq7l)Sf}c~8V%X)C|R%=-7NdP23<^xq4L*B?D@0j?zHi{3OZ$36as3mN^YU`{lRU36P+*mU8W&Od8-k>ckF^#c~*!cqVL diff --git a/tests/tsdtensor.npz b/tests/tsdtensor.npz deleted file mode 100644 index df0849b8b8ccfe91aee840a3b9d6d2f5fdc41e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6862 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 ie=qcNkNsz%2BOf9{P8YEKLLK2a) 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 ie=qcNkNsz%2BOf9{ Date: Fri, 27 Sep 2024 23:47:02 +0200 Subject: [PATCH 13/31] TsdTensor tests cleaned --- ts.npz | Bin 1800 -> 0 bytes ts2.npz | Bin 1800 -> 0 bytes tsd.npz | Bin 2838 -> 0 bytes tsd2.npz | Bin 2838 -> 0 bytes tsdframe.npz | Bin 4728 -> 0 bytes tsdframe2.npz | Bin 4728 -> 0 bytes tsdtensor.npz | Bin 6862 -> 0 bytes tsdtensor2.npz | Bin 6862 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ts.npz delete mode 100644 ts2.npz delete mode 100644 tsd.npz delete mode 100644 tsd2.npz delete mode 100644 tsdframe.npz delete mode 100644 tsdframe2.npz delete mode 100644 tsdtensor.npz delete mode 100644 tsdtensor2.npz diff --git a/ts.npz b/ts.npz deleted file mode 100644 index aa8519b9c3f847b8434565afd6400fcf1e26d80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 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 diff --git a/tsdframe2.npz b/tsdframe2.npz deleted file mode 100644 index 480636fe681b905dd2493b2a76f11f5c7516f9c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4728 zcmeI0e`r%z6vt0mt!=eiR>G*X%-1p-H*445R%?6HZcDnx+RXl#%IKDvxT^gTlD1Gq ze2B6Ce->l=S8k&xwNqW0`oPnUs=L4!C+IK())t-ji^ z(?Fec(Cl*ic6-g6CG(a&#pW!@yr<3E?sc}l*XDJ(h283G_PM#;*W~oLxxOwpCnxKb zEa{N+uScRf3+*_~@Xew!9yEd`Fa=BlB`^bg8O#LNfv7{t&Rbz4jM z(KL3VI-8|qqzat)#CXg$ag$~I{Zi?t!=vo|pJqNBFSg zRi5;2_pi)fllt`+-wiEzo{rP~w|lRiVHM|RlJO6zg)lT)NzINcQtpV*fNBy?2B-POI5ify|1imfw zwL87@Pkh2ChQ{c&hEYE6Nz(k*P@lr(RO2lzg%vynckBG#R-3rS|3v~1ZOvyb$y0s2 z%tBW31a`MIceJ$nv<R=kEOfZWRpbv?vDDuS&)$TfomfLgIN+?Oh(X zmXWZD;SU}oy-BElyo_?A&!~>i!^g$N#mdFY#mS|Gi<^tXZiq3(n)o*{!e5c7R&kVr zB?-1qc!>V-D>P)BzfK9>u;C&4)(j1~lf>t%HEMX6z8ylthMwc;sLc@`q`w72gS^jE h=nWYjs9)yLK%0@~7u{iB9w&Tp{8P@0l>UOy9spNI#t8rb diff --git a/tsdtensor.npz b/tsdtensor.npz deleted file mode 100644 index 30ecec91d7ac716d8fbcda7d662a9b7c8c12977a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6862 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 aT7ITq?PtAKSY+HM%>Rk<>zX=kT>CE}E}Dn{ diff --git a/tsdtensor2.npz b/tsdtensor2.npz deleted file mode 100644 index 30ecec91d7ac716d8fbcda7d662a9b7c8c12977a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6862 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 aT7ITq?PtAKSY+HM%>Rk<>zX=kT>CE}E}Dn{ From a162e1d08228eed7f5bd117854a3ff92de6493ac Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Fri, 27 Sep 2024 23:48:31 +0200 Subject: [PATCH 14/31] gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5e7adc67..7fb82a33 100644 --- a/.gitignore +++ b/.gitignore @@ -151,4 +151,7 @@ tutorials/data/KA28-190405/ old data -your \ No newline at end of file +your + +# Ignore npz files from testing: +tests/*.npz From 4c26b8e6bd23f0fec17b4a0f86c1ac97f2179ecb Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 00:04:59 +0200 Subject: [PATCH 15/31] test setitem --- tests/test_time_series.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index 9c9fb808..cfaa2269 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1533,6 +1533,29 @@ def test_indexing_with_mismatched_boolean_tsd_raises_error(self, tsdtensor): # Test indexing with mismatched boolean Tsd should raise an error with pytest.raises(IndexError, match="boolean index did not match indexed array along dimension 0"): tsdtensor[index_tsd] + + def test_setitem_with_boolean_tsd(self, tsdtensor): + # Create a boolean Tsd for indexing + index_tsd = nap.Tsd( + t=tsdtensor.t, d=np.random.choice([True, False], size=len(tsdtensor)) + ) + + # Create new values to set + new_values = np.random.rand(*tsdtensor.shape[1:]) + + # Set values using boolean indexing + tsdtensor[index_tsd] = new_values + + # Check if values were set correctly + np.testing.assert_array_equal( + tsdtensor.values[index_tsd.d], np.stack([new_values] * sum(index_tsd.d)) + ) + + # Check if other values remained unchanged + np.testing.assert_array_equal( + tsdtensor.values[~index_tsd.d], tsdtensor.values[~index_tsd.d] + ) + @pytest.mark.parametrize("obj", [ From 2a82110f0a46dcc3d1c311b528ecb732f725ac29 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 00:07:37 +0200 Subject: [PATCH 16/31] renamed test classes for readability --- tests/test_time_series.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index cfaa2269..4858754f 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -264,7 +264,7 @@ def __getitem__(self, key): nap.Ts(t=np.arange(100), time_units="s"), ], ) -class Test_Time_Series_1: +class TestTimeSeriesGeneral: def test_as_units(self, tsd): if hasattr(tsd, "as_units"): tmp2 = tsd.index @@ -594,7 +594,7 @@ def test_smooth_raise_error(self, tsd): nap.Tsd(t=np.arange(100), d=np.random.rand(100), time_units="s"), ], ) -class Test_Time_Series_2: +class TestTsd: def test_as_series(self, tsd): assert isinstance(tsd.as_series(), pd.Series) @@ -872,7 +872,7 @@ def test_interpolate_with_ep(self, tsd): nap.TsdFrame(t=np.arange(100), d=np.random.rand(100, 3), time_units="s"), ], ) -class Test_Time_Series_3: +class TestTsdFrame: def test_as_dataframe(self, tsdframe): assert isinstance(tsdframe.as_dataframe(), pd.DataFrame) @@ -1134,7 +1134,7 @@ def test_convolve_keep_columns(self, tsdframe): nap.Ts(t=np.arange(100), time_units="s"), ], ) -class Test_Time_Series_4: +class TestTs: def test_repr_(self, ts): # assert pd.Series(ts).fillna("").__repr__() == ts.__repr__() @@ -1287,7 +1287,7 @@ def test_count_dtype(self, dtype, expectation, ts): nap.TsdTensor(t=np.arange(100), d=np.random.rand(100, 3,2), time_units="s"), ], ) -class Test_Time_Series_5: +class TestTsdTensor: def test_return_ndarray(self, tsdtensor): np.testing.assert_array_equal(tsdtensor[0], tsdtensor.values[0]) @@ -1555,7 +1555,7 @@ def test_setitem_with_boolean_tsd(self, tsdtensor): np.testing.assert_array_equal( tsdtensor.values[~index_tsd.d], tsdtensor.values[~index_tsd.d] ) - + @pytest.mark.parametrize("obj", [ From bba00d62d00c0ad3ace955e7d65fb1803bf38f88 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 00:10:20 +0200 Subject: [PATCH 17/31] blacked --- pynapple/core/time_series.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 3fa751f1..95eae36d 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -777,13 +777,17 @@ def __getitem__(self, key, *args, **kwargs): print("key", key) if isinstance(key, Tsd): if not np.issubdtype(key.dtype, np.bool_): - raise ValueError("When indexing with a Tsd, it must contain boolean values") + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): if isinstance(key[0], Tsd): if not np.issubdtype(key[0].dtype, np.bool_): - raise ValueError("When indexing with a Tsd, it must contain boolean values") + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) output = self.values[key[0].values] index = self.index[key[0].values] # Apply the rest of the indexing @@ -811,7 +815,7 @@ def __getitem__(self, key, *args, **kwargs): else: return TsdTensor(t=index, d=output, time_support=self.time_support) else: - return output + return output else: return output From 240069006c53b5be2d63f187a9ae375bdd52fc56 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 00:17:35 +0200 Subject: [PATCH 18/31] fix test --- tests/test_time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index 4858754f..cf09fb93 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1531,7 +1531,7 @@ def test_indexing_with_mismatched_boolean_tsd_raises_error(self, tsdtensor): index_tsd = nap.Tsd(t=np.arange(len(tsdtensor) + 5), d=np.random.choice([True, False], size=len(tsdtensor) + 5)) # Test indexing with mismatched boolean Tsd should raise an error - with pytest.raises(IndexError, match="boolean index did not match indexed array along dimension 0"): + with pytest.raises(IndexError, match="boolean index did not match"): tsdtensor[index_tsd] def test_setitem_with_boolean_tsd(self, tsdtensor): From ba1d0746d0c725c577828161d2bbbc8abacc2dec Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 10:24:42 +0200 Subject: [PATCH 19/31] removed print --- tests/test_time_series.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index cf09fb93..7b9ae2c0 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1500,7 +1500,7 @@ def test_indexing_with_boolean_tsd(self, tsdtensor): result = tsdtensor[index_tsd] # print(type(result)) - assert isinstance(result, nap.TsdTensor) + assert isinstance(result, nap.TsdTensgor) assert len(result) == index_tsd.d.sum() np.testing.assert_array_equal(result.t, tsdtensor.t[index_tsd.d]) np.testing.assert_array_equal(result.values, tsdtensor.values[index_tsd.d]) @@ -1511,7 +1511,6 @@ def test_indexing_with_boolean_tsd_and_additional_slicing(self, tsdtensor): # Test indexing with additional dimension slicing result = tsdtensor[index_tsd, 1] - print("!!!!!!!!!!!", type(result)) assert isinstance(result, nap.TsdFrame) assert len(result) == index_tsd.d.sum() From 1e342646f2fcf5a6d9c71ac0e7c3bcadd2989bfa Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 10:24:52 +0200 Subject: [PATCH 20/31] removed print --- tests/test_time_series.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index 7b9ae2c0..88966847 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1498,7 +1498,6 @@ def test_indexing_with_boolean_tsd(self, tsdtensor): # Test indexing result = tsdtensor[index_tsd] - # print(type(result)) assert isinstance(result, nap.TsdTensgor) assert len(result) == index_tsd.d.sum() From 3b3a09634262fb5aa6a09e8704ed15ee50cf6562 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Sat, 28 Sep 2024 11:25:28 +0200 Subject: [PATCH 21/31] fixed typo --- tests/test_time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_time_series.py b/tests/test_time_series.py index 88966847..f81663c7 100755 --- a/tests/test_time_series.py +++ b/tests/test_time_series.py @@ -1499,7 +1499,7 @@ def test_indexing_with_boolean_tsd(self, tsdtensor): # Test indexing result = tsdtensor[index_tsd] - assert isinstance(result, nap.TsdTensgor) + assert isinstance(result, nap.TsdTensor) assert len(result) == index_tsd.d.sum() np.testing.assert_array_equal(result.t, tsdtensor.t[index_tsd.d]) np.testing.assert_array_equal(result.values, tsdtensor.values[index_tsd.d]) From 30ff0514bff8cffcbe209a4822566f3e3afa85f0 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 3 Oct 2024 18:10:38 +0200 Subject: [PATCH 22/31] Update pynapple/core/time_series.py Co-authored-by: Guillaume Viejo --- pynapple/core/time_series.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 95eae36d..8a19ca3d 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -774,7 +774,6 @@ def create_str(array): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): - print("key", key) if isinstance(key, Tsd): if not np.issubdtype(key.dtype, np.bool_): raise ValueError( From b4e63e6c390b49260a855656f6b3fb25771786fb Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 3 Oct 2024 18:10:47 +0200 Subject: [PATCH 23/31] Update pynapple/core/time_series.py Co-authored-by: Guillaume Viejo --- pynapple/core/time_series.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 8a19ca3d..d7186e16 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -802,7 +802,6 @@ def __getitem__(self, key, *args, **kwargs): if isinstance(index, Number): index = np.array([index]) - print(output.shape, index.shape) if all(is_array_like(a) for a in [index, output]): if output.shape[0] == index.shape[0]: if output.ndim == 1: From 98b7214758a4b2fdc2c66695297bf611b315eb2e Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Wed, 9 Oct 2024 00:50:54 +0200 Subject: [PATCH 24/31] added some plots to glm --- pynapple/core/time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 95eae36d..6f9d3f56 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -774,7 +774,7 @@ def create_str(array): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): - print("key", key) + if isinstance(key, Tsd): if not np.issubdtype(key.dtype, np.bool_): raise ValueError( From b25651e242f1fd9018d0275a4d036870f42a1fe8 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 17 Oct 2024 11:51:27 +0200 Subject: [PATCH 25/31] Update pynapple/core/time_series.py Co-authored-by: Edoardo Balzani --- pynapple/core/time_series.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index d7186e16..59ffd9ce 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -782,19 +782,13 @@ def __getitem__(self, key, *args, **kwargs): output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): - if isinstance(key[0], Tsd): - if not np.issubdtype(key[0].dtype, np.bool_): - raise ValueError( - "When indexing with a Tsd, it must contain boolean values" - ) - output = self.values[key[0].values] - index = self.index[key[0].values] - # Apply the rest of the indexing - output = output[:, key[1:]] - output = output.squeeze() - else: - output = self.values.__getitem__(key) - index = self.index.__getitem__(key[0]) + if not all(np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True for k in key): + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) + key = tuple(k.values if isinstance(k, Tsd) else k for k in key) + output = self.values.__getitem__(key) + index = self.index.__getitem__(key[0]) else: output = self.values.__getitem__(key) index = self.index.__getitem__(key) From fce007e72ab045106a54a9bac4f628d3d9c1ce37 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 17 Oct 2024 12:08:34 +0200 Subject: [PATCH 26/31] fix --- pynapple/core/time_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 01902808..0470a0de 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -783,7 +783,7 @@ def __getitem__(self, key, *args, **kwargs): output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): - if not all(np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True for k in key): + if not all(np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True for k in key): raise ValueError( "When indexing with a Tsd, it must contain boolean values" ) From 79b4871ea604c894f50595c08183f1594363c073 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 17 Oct 2024 12:12:21 +0200 Subject: [PATCH 27/31] removed args, kwargs --- pynapple/core/time_series.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 0470a0de..1ac7234d 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -773,7 +773,7 @@ def create_str(array): else: return tabulate([], headers=headers) + "\n" + bottom - def __getitem__(self, key, *args, **kwargs): + def __getitem__(self, key): if isinstance(key, Tsd): if not np.issubdtype(key.dtype, np.bool_): @@ -803,7 +803,7 @@ def __getitem__(self, key, *args, **kwargs): return Tsd(t=index, d=output, time_support=self.time_support) elif output.ndim == 2: return TsdFrame( - t=index, d=output, time_support=self.time_support, **kwargs + t=index, d=output, time_support=self.time_support, ) else: return TsdTensor(t=index, d=output, time_support=self.time_support) From 2631af6f3e31f7c8489605ab369adfa7da419d07 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Thu, 17 Oct 2024 14:27:31 +0200 Subject: [PATCH 28/31] blacked --- pynapple/core/time_series.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 1ac7234d..3df6fa08 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -774,7 +774,6 @@ def create_str(array): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key): - if isinstance(key, Tsd): if not np.issubdtype(key.dtype, np.bool_): raise ValueError( @@ -783,7 +782,10 @@ def __getitem__(self, key): output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): - if not all(np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True for k in key): + if not all( + np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True + for k in key + ): raise ValueError( "When indexing with a Tsd, it must contain boolean values" ) @@ -803,7 +805,9 @@ def __getitem__(self, key): return Tsd(t=index, d=output, time_support=self.time_support) elif output.ndim == 2: return TsdFrame( - t=index, d=output, time_support=self.time_support, + t=index, + d=output, + time_support=self.time_support, ) else: return TsdTensor(t=index, d=output, time_support=self.time_support) From a7f6c04aab25ed55f848f1ae9571e927a473b94f Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Tue, 5 Nov 2024 23:30:02 +0100 Subject: [PATCH 29/31] added check on timeseries --- pynapple/core/time_series.py | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 3df6fa08..6f50ee21 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -144,13 +144,6 @@ def __array__(self, dtype=None): return self.values.astype(dtype) def __array_ufunc__(self, ufunc, method, *args, **kwargs): - # print("In __array_ufunc__") - # print(" ufunc = ", ufunc) - # print(" method = ", method) - # print(" args = ", args) - # for inp in args: - # print(type(inp)) - # print(" kwargs = ", kwargs) if method == "__call__": new_args = [] @@ -782,13 +775,8 @@ def __getitem__(self, key): output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): - if not all( - np.issubdtype(k.dtype, np.bool_) if isinstance(k, Tsd) else True - for k in key - ): - raise ValueError( - "When indexing with a Tsd, it must contain boolean values" - ) + if any(isinstance(k, Tsd) and not np.issubdtype(k.dtype, np.bool_) for k in key): + raise ValueError("When indexing with a Tsd, it must contain boolean values") key = tuple(k.values if isinstance(k, Tsd) else k for k in key) output = self.values.__getitem__(key) index = self.index.__getitem__(key[0]) @@ -991,7 +979,8 @@ def round_if_float(x): return tabulate([], headers=headers) + "\n" + bottom def __setitem__(self, key, value): - if isinstance(key, BaseTsd): + if isinstance(key, Tsd): + assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" key = key.d try: @@ -1007,7 +996,8 @@ def __setitem__(self, key, value): raise IndexError def __getitem__(self, key, *args, **kwargs): - if isinstance(key, BaseTsd): + if isinstance(key, Tsd): + assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" key = key.d if ( @@ -1032,8 +1022,7 @@ def __getitem__(self, key, *args, **kwargs): if all(is_array_like(a) for a in [index, output]): if output.shape[0] == index.shape[0]: - # if isinstance(columns, pd.Index): - # if not pd.api.types.is_integer_dtype(columns): + kwargs["columns"] = columns return _get_class(output)( @@ -1230,7 +1219,8 @@ def __repr__(self): return tabulate([], headers=headers) + "\n" + bottom def __getitem__(self, key, *args, **kwargs): - if isinstance(key, BaseTsd): + if isinstance(key, Tsd): + assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" key = key.d output = self.values.__getitem__(key) From 86eceb41fbda7548ac4e2626caf652c0e6e5e667 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Tue, 5 Nov 2024 23:40:01 +0100 Subject: [PATCH 30/31] fixed tests --- pynapple/core/time_series.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index 6f50ee21..a12c4f79 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -775,8 +775,12 @@ def __getitem__(self, key): output = self.values[key.values] index = self.index[key.values] elif isinstance(key, tuple): - if any(isinstance(k, Tsd) and not np.issubdtype(k.dtype, np.bool_) for k in key): - raise ValueError("When indexing with a Tsd, it must contain boolean values") + if any( + isinstance(k, Tsd) and not np.issubdtype(k.dtype, np.bool_) for k in key + ): + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) key = tuple(k.values if isinstance(k, Tsd) else k for k in key) output = self.values.__getitem__(key) index = self.index.__getitem__(key[0]) @@ -980,9 +984,13 @@ def round_if_float(x): def __setitem__(self, key, value): if isinstance(key, Tsd): - assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" + try: + assert np.issubdtype(key.dtype, np.bool_) + except AssertionError: + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) key = key.d - try: if isinstance(key, str): new_key = self.columns.get_indexer([key]) @@ -997,7 +1005,12 @@ def __setitem__(self, key, value): def __getitem__(self, key, *args, **kwargs): if isinstance(key, Tsd): - assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" + try: + assert np.issubdtype(key.dtype, np.bool_) + except AssertionError: + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) key = key.d if ( @@ -1220,7 +1233,12 @@ def __repr__(self): def __getitem__(self, key, *args, **kwargs): if isinstance(key, Tsd): - assert np.issubdtype(key.dtype, np.bool_), "When indexing with a Tsd, it must contain boolean values" + try: + assert np.issubdtype(key.dtype, np.bool_) + except AssertionError: + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) key = key.d output = self.values.__getitem__(key) From 4c912c757b091e93316a6851707b02ecedb301e1 Mon Sep 17 00:00:00 2001 From: Luigi Petrucco Date: Wed, 6 Nov 2024 01:03:56 +0100 Subject: [PATCH 31/31] fixed tests after merging --- pynapple/core/time_series.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pynapple/core/time_series.py b/pynapple/core/time_series.py index d5058bfc..c61b3654 100644 --- a/pynapple/core/time_series.py +++ b/pynapple/core/time_series.py @@ -1351,6 +1351,28 @@ def __repr__(self): else: return tabulate([], headers=headers) + "\n" + bottom + def __setitem__(self, key, value): + if isinstance(key, Tsd): + try: + assert np.issubdtype(key.dtype, np.bool_) + except AssertionError: + raise ValueError( + "When indexing with a Tsd, it must contain boolean values" + ) + key = key.d + + try: + if isinstance(key, str): + new_key = self.columns.get_indexer([key]) + self.values.__setitem__((slice(None, None, None), new_key[0]), value) + elif hasattr(key, "__iter__") and all([isinstance(k, str) for k in key]): + new_key = self.columns.get_indexer(key) + self.values.__setitem__((slice(None, None, None), new_key), value) + else: + self.values.__setitem__(key, value) + except IndexError: + raise IndexError + def __getitem__(self, key, *args, **kwargs): if isinstance(key, Tsd): try: