def get_full_legend(self):
     legend = {}
     offset = 1
     for i in sorted_dict_keys(self.data):
         legend.update(self.data[i].get_legend(offset, i))
         offset += self.data[i].size
     return legend
 def get_full_vector(self):
     self.locked = True # prevent further modifications of vector size
     ret = ''
     offset = 1 # feature indices must be 1-based
     for i in sorted_dict_keys(self.data):
         ret += self.data[i].str_offset(offset)
         offset += self.data[i].size
     return ret
 def get_legend(self, offset = 0, group_name = ''):
     legend = {}
     
     for i in sorted_dict_keys(self.legend):
         if self.size > 1:
             legend[i+offset] = str(group_name) + '[' + str(self.legend[i]) + ']'
         else:
             legend[i+offset] = str(group_name)
     return legend
 def __str__(self):
     ret = 'Feature groups: '
     for i in sorted_dict_keys(self.data):
         ret += "\n - " + str(i) + ":\t" + str(self.data[i])
     return ret
 def str_offset(self, offset):
     ret = ''
     for i in sorted_dict_keys(self.data):
         if self.data[i] > 0:
             ret += str(i+offset) + ':' + str(self.data[i]) + '\t'
     return ret