class_docstr: This is the QT Gui that can be used to manipulate
  the meta data in the Embedding Gui
  
  Assumes layout of the meta-data csv has an id followed
  by pairs of label + color columns
  
  id label0 color0 label1 color1 --- labelN colorN
  .  ...    ...    ...    ...    --- ...    ...
  .  ...    ...    ...    ...    --- ...    ...
docstr: A meta data row has been selected in the table. Convert that
  to data indexes and callback to the Analysis Controller
docstr_tok: ["A","meta","data","row","has","been","selected","in","the","table",".","Convert","that","to","data","indexes","and","callback","to","the","Analysis","Controller"]
code: def on_change_select(self):
      """A meta data row has been selected in the table. Convert that
      to data indexes and callback to the Analysis Controller"""
      selection = self.meta_table.selectedIndexes()
      all_indexes = []
      for i in selection:
          group = self.labels[i.row()]
          group_indexes = list(
              self.label_series[self.label_series == group].index
          )
          all_indexes = all_indexes + group_indexes
      self.on_select(all_indexes)
  
file_path: nptsne/demos/ExtendedHSNEDemo/MetaDataViewer.py
imports: import pandas
  from PyQt5.QtWidgets import QWidget, QFormLayout, QVBoxLayout, QComboBox, QLabel, QTableWidget, QTableWidgetItem, QAbstractItemView, QHeaderView
  from PyQt5.QtCore import pyqtSlot
  from PyQt5.QtGui import QColor
label_desc: Use image node_id 5 for calling the MetaDataViewer obj's underlying member method code with example usage: obj.on_change_select() without return types