code: def create_HierarchicalStructure(self):
      # lGroups = {};
      # lGroups["State"] = ["NSW","VIC","QLD","SA","WA","NT","ACT","TAS"];
      # lGroups["Gender"] = ["female","male"];
      # lHierarchy['GroupOrder']= ["State" , "Gender"];
  
      lGroups = self.mHierarchy["Groups"]
      self.mLevels = lGroups.keys()
      self.mLabels2Tuples = {}
      self.mStructure = {}
      array1 = [
          sorted(lGroups[k]) for k in self.mHierarchy["GroupOrder"]
      ]
      prod = itertools.product(*array1)
      # print(prod);
      # prod = itertools.product(['a' , 'b'] , ['1' , '2'] , ['cc' , 'dd']);
      level = 0
      self.mStructure[level] = {}
      for k in prod:
          # print("PRODUCT_DETAIL", k);
          lGroupLabel = self.tuple_to_string(k)
          # Grouping genrates all possible group combinations.
          # Not all columns are mandatory.
          if lGroupLabel in self.mTrainingDataset.columns:
              self.mLabels2Tuples[lGroupLabel] = k
              self.mStructure[level][lGroupLabel] = set()
      # print("STRUCTURE_LEVEL" , level, self.mStructure[level]);
      while len(self.mStructure[level]) > 1:
          self.add_level(level)
          level = level + 1
  
      # print("STRUCTURE", self.mStructure);
      pass
  
file_path: atspy/atspy/TS/Signal_Grouping.py
imports: import pandas
  import numpy
  import itertools
  from .None import SignalHierarchy
label_desc: Use image node_id 4 for calling the cSignalGrouping obj's underlying member method code with example usage: obj.create_HierarchicalStructure() without return types