def test_flatten_hed_column_names(self):
     sr = SidecarMap()
     # One categorical column
     sidecar1 = {"a1_col": {"HED": {"b1": "Label/B1", "c1": "Label/C1"}},
                 "a2_col": {"HED": {"b2": "Label/B2", "c2": "Label/C2"}},
                 "a3_col": {"HED": {"b3": "Label/B2", "c3": "Label/C2"}}}
     df1 = sr.flatten_hed(sidecar1)
     self.assertEqual(len(df1), 9, "When all columns are used should have all entries")
     df2 = sr.flatten_hed(sidecar1, ["a1_col", "a3_col"])
     self.assertEqual(len(df2), 6, "When some columns are used should have appropriate entries")
     self.assertEqual(len(df1.columns), 2, "flatten_hed dataframe should have 2 columns")
     self.assertEqual(df1.iloc[1]['column'], 'b1', "flatten_hed dataframe should have right value in key")
     df2 = sr.flatten_hed(sidecar1, ["a1_col", "a3_col"])
     self.assertEqual(len(df2), 6,
                      "flatten_hed dataframe should have 1 more entry than HED entries for dictionary")
     self.assertEqual(len(df2.columns), 2, "flatten_hed dataframe should have 2 columns")
     self.assertEqual(df2.iloc[1]['column'], 'b1', "flatten_hed dataframe should have right value in key")
    def test_unflatten_hed(self):
        sr = SidecarMap()
        sidecar1 = {"a_col": {"HED": {"b": "Label/B", "c": "Label/C"}}}
        df1 = sr.flatten_hed(sidecar1)
        undf1 = sr.unflatten_hed(df1)
        self.assertEqual(len(undf1.keys()), 1, "unflatten_hed dictionary should unpack correctly")
        self.assertTrue("a_col" in undf1.keys(), "The correct key is recovered")

        # One value column
        sidecar2 = {"a_col": {"HED": "Label/#"}}
        df2 = sr.flatten_hed(sidecar2)
        undf2 = sr.unflatten_hed(df2)
        self.assertEqual(len(undf2.keys()), 1, "unflatten_hed dictionary should unpack correctly")
        self.assertTrue("a_col" in undf2.keys(), "The correct key is recovered")

        # A combination with other columns
        sidecar3 = {"a_col": {"HED": {"b": "Label/B", "c": "Label/C"}, "d": {"a1": "b1"}},
                    "b_col": {"HED": "Label/#"}, "c_col": {"levels": "e"}}
        df3 = sr.flatten_hed(sidecar3)
        undf3 = sr.unflatten_hed(df3)
        self.assertEqual(len(undf3.keys()), 2, "unflatten_hed dictionary should unpack correctly")
    def test_flatten_hed(self):
        sr = SidecarMap()
        # One categorical column
        sidecar1 = {"a_col": {"HED": {"b": "Label/B", "c": "Label/C"}}}
        df1 = sr.flatten_hed(sidecar1)
        self.assertEqual(len(df1), 3, "flatten_hed dataframe should have 1 more entry than HED entries for dictionary")
        self.assertEqual(len(df1.columns), 2, "flatten_hed dataframe should have 2 columns")
        self.assertEqual(df1.iloc[1]['column'], 'b', "flatten_hed dataframe should have right value in key")

        # One value column
        sidecar2 = {"a_col": {"HED": "Label/#"}}
        df2 = sr.flatten_hed(sidecar2)
        self.assertEqual(len(df2), 1, "flatten_hed dataframe should have same number of entries as dictionary")
        self.assertEqual(len(df2.columns), 2, "flatten_hed dataframe should have 2 columns")
        self.assertEqual(df2.iloc[0]['column'], '_*_a_col_*_', "flatten_hed dataframe should have right value in key")

        # A combination with other columns
        sidecar3 = {"a_col": {"HED": {"b": "Label/B", "c": "Label/C"}, "d": {"a1": "b1"}}, "b_col": {"HED": "Label/#"}}
        df3 = sr.flatten_hed(sidecar3)
        self.assertEqual(len(df3), 4,
                         "flatten_hed dataframe should have 1 more entries than HED entries for dictionary")
        self.assertEqual(len(df3.columns), 2, "flatten_hed dataframe should have 2 columns")
        self.assertEqual(df3.iloc[0]['column'], '_*_a_col_*_', "flatten_hed dataframe should have right value in key")
        self.assertEqual(df3.iloc[3]['column'], '_*_b_col_*_', "flatten_hed dataframe should have right value in key")