import numpy as np
from PyQt5 import QtWidgets
from gui.ui.SplitDataset import Ui_Form
from gui.util.Modules import Modules
from libpyhat.spectral_data import SpectralData
[docs]
class SplitDataset(Ui_Form, Modules):
[docs]
    def setupUi(self, Form):
        super().setupUi(Form)
        Modules.setupUi(self, Form) 
[docs]
    def update_split_choices(self):
        choices = self.get_choices()
        if choices is not None:
            self.setComboBox(self.splitOnUniqueValuesOfComboBox, self.get_choices()) 
[docs]
    def update_datakeys(self, setup=False):
        datakey = self.chooseDataComboBox.currentText()
        spect_label = self.data[datakey].spect_label
        colname = self.splitOnUniqueValuesOfComboBox.currentText()
        vars_level0 = self.data[datakey].df.columns.get_level_values(0)
        vars_level1 = self.data[datakey].df.columns.get_level_values(1)
        vars_level1 = list(vars_level1[vars_level0 != spect_label])
        vars_level0 = list(vars_level0[vars_level0 != spect_label])
        colname = (vars_level0[vars_level1.index(colname)], colname)
        coldata = np.array([str(i) for i in self.data[datakey].df[colname]])
        unique_values = np.unique(coldata)
        for i in unique_values:
            new_datakey = datakey + " - " + str(i)
            if new_datakey not in self.datakeys:
                Modules.data_count += 1
                self.list_amend(self.datakeys, Modules.data_count, new_datakey)
                if setup is False:
                    self.data[new_datakey] = SpectralData(
                        self.data[datakey].df.iloc[coldata == i], name=new_datakey
                    ) 
[docs]
    def run(self):
        self.update_datakeys(setup=False) 
[docs]
    def get_choices(self):
        try:
            self.vars_level0 = self.data[
                self.chooseDataComboBox.currentText()
            ].df.columns.get_level_values(0)
            self.vars_level1 = self.data[
                self.chooseDataComboBox.currentText()
            ].df.columns.get_level_values(1)
            self.vars_level1 = list(
                self.vars_level1[
                    (self.vars_level0 != "wvl") & (self.vars_level0 != "masked")
                ]
            )
            self.vars_level0 = list(
                self.vars_level0[
                    (self.vars_level0 != "wvl") & (self.vars_level0 != "masked")
                ]
            )
            colnamechoices = self.vars_level1
            return colnamechoices
        except:
            try:
                colnamechoices = self.data[
                    self.chooseDataComboBox.currentText()
                ].columns.values
                colnamechoices = [
                    i for i in colnamechoices if "Unnamed" not in i
                ]  # remove unnamed
                # columns from choices
                return colnamechoices
            except:
                pass 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = SplitDataset()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())