diff --git a/.gitignore b/.gitignore index 7266dfdf..ddf94e8d 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,7 @@ feature_dynamics_interpretation.pdf feature_dynamics_interpretation.md # dask dask-worker-space -dask-worker-space/ \ No newline at end of file +dask-worker-space/ + +tests/*/__pycache__/ +tests/*/*/__pycache__/ \ No newline at end of file diff --git a/tests/fixtures.py b/tests/fixtures.py index 6cd35ffb..7fe306f3 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1271,4 +1271,4 @@ def create_split_up_test_data_expected_tuples_wide(self): ), ), ] - return (wide_test_data_expected_chunked_up_tuples, window_length) + return (wide_test_data_expected_chunked_up_tuples, window_length) \ No newline at end of file diff --git a/tests/units/feature_dynamics_extraction/test_feature_dynamics_data.py b/tests/units/feature_dynamics_extraction/test_feature_dynamics_data.py index 9f3ec357..fc31a60d 100644 --- a/tests/units/feature_dynamics_extraction/test_feature_dynamics_data.py +++ b/tests/units/feature_dynamics_extraction/test_feature_dynamics_data.py @@ -235,4 +235,4 @@ def test_zero_split_size_dask(self): pass def test_fractional_split_size_dask(self): - pass + pass \ No newline at end of file diff --git a/tests/units/feature_dynamics_extraction/test_feature_dynamics_extraction.py b/tests/units/feature_dynamics_extraction/test_feature_dynamics_extraction.py index d0cb807c..de9cf536 100644 --- a/tests/units/feature_dynamics_extraction/test_feature_dynamics_extraction.py +++ b/tests/units/feature_dynamics_extraction/test_feature_dynamics_extraction.py @@ -515,6 +515,87 @@ def test_extract_feature_dynamics_alphabetically_sorted(self): self.assertEqual(col_name_chunks, list(sorted(col_name_chunks))) + def test_extract_feature_dynamics_wide(self): + ts_wide_df,_,_ = self.create_simple_test_data_sample_wide() + + fc_test_params = {"minimum": None} + window_length = 3 + + extracted_feature_dynamics = extract_feature_dynamics( + timeseries_container=ts_wide_df, + column_id="id", + column_sort="sort", + column_kind=None, #"kind", None since wide format + column_value=None, #"val", + n_jobs= 1,#self.n_jobs, + feature_timeseries_fc_parameters={window_length: fc_test_params}, + feature_dynamics_fc_parameters={window_length: fc_test_params}, + ) + + expected_ans = pd.DataFrame( + data={ + 'y1||minimum@window_3__minimum': {1: 1.0, 2: -34.0}, + 'y2||minimum@window_3__minimum': {1: -10.0, 2: 3.0}, + 'y3||minimum@window_3__minimum': {1: 4.0, 2: 1.0} + } + ) + + pd.testing.assert_frame_equal(extracted_feature_dynamics, expected_ans) + + def test_extract_feature_dynamics_long(self): + + ts_long_df,_,_ = self.create_simple_test_data_sample_stacked() + + fc_test_params = {"minimum": None} + window_length = 3 + + extracted_feature_dynamics = extract_feature_dynamics( + timeseries_container=ts_long_df, + column_id="id", + column_sort="sort", + column_kind="kind", #None since wide format + column_value="val", + n_jobs= 1,#self.n_jobs, + feature_timeseries_fc_parameters={window_length: fc_test_params}, + feature_dynamics_fc_parameters={window_length: fc_test_params}, + ) + + expected_ans = pd.DataFrame( + data={ + 'y1||minimum@window_3__minimum': {1: 1.0, 2: -34.0}, + 'y2||minimum@window_3__minimum': {1: -10.0, 2: 3.0}, + 'y3||minimum@window_3__minimum': {1: 4.0, 2: 1.0} + } + ) + + pd.testing.assert_frame_equal(extracted_feature_dynamics, expected_ans) + + def test_extract_feature_dynamics_dict(self): + + ts_list_of_dicts = self.create_simple_test_data_sample_dict() + fc_test_params = {"minimum": None} + window_length = 3 + + extracted_feature_dynamics = extract_feature_dynamics( + timeseries_container=ts_list_of_dicts, + column_id="id", + column_sort="sort", + column_kind=None, #None since wide format + column_value="val", + n_jobs= 1,#self.n_jobs, + feature_timeseries_fc_parameters={window_length: fc_test_params}, + feature_dynamics_fc_parameters={window_length: fc_test_params}, + ) + + expected_ans = pd.DataFrame( + data={ + 'y1||minimum@window_3__minimum': {1: 1.0, 2: -34.0}, + 'y2||minimum@window_3__minimum': {1: -10.0, 2: 3.0}, + 'y3||minimum@window_3__minimum': {1: 4.0, 2: 1.0} + } + ) + + pd.testing.assert_frame_equal(extracted_feature_dynamics, expected_ans) class ParallelDynamicsExtractionTestCase(DataTestCase): def setUp(self): diff --git a/tsfresh/feature_dynamics_extraction/feature_dynamics_utils.py b/tsfresh/feature_dynamics_extraction/feature_dynamics_utils.py index 78e4e088..0f781b22 100644 --- a/tsfresh/feature_dynamics_extraction/feature_dynamics_utils.py +++ b/tsfresh/feature_dynamics_extraction/feature_dynamics_utils.py @@ -4,7 +4,7 @@ import pandas as pd from pandas.api.types import is_numeric_dtype from typing import List -from md2pdf.core import md2pdf +#from md2pdf.core import md2pdf from tsfresh.feature_extraction import feature_calculators from tsfresh.utilities.string_manipulation import get_config_from_string from tsfresh.feature_extraction.data import (