from PyQt5 import QtWidgets
from gui.ui.StratifiedFolds import Ui_Form
from gui.util.Modules import Modules
from libpyhat.spectral_data import SpectralData
from libpyhat.utils.utils import rows_match
[docs]
class StratifiedFolds(Ui_Form, Modules):
[docs]
    def setupUi(self, Form):
        super().setupUi(Form)
        Modules.setupUi(self, Form) 
[docs]
    def run(self):
        Modules.data_count += 1
        self.train_ind = Modules.data_count
        Modules.data_count += 1
        self.test_ind = Modules.data_count
        datakey = self.chooseDataToStratifyComboBox.currentText()
        nfolds = self.nFoldsSpinBox.value()
        try:
            testfold = int(self.testFoldsSpinBox.value())
        except:
            testfold = 1
        comp_label = self.data[datakey].comp_label
        meta_label = self.data[datakey].meta_label
        colname = (comp_label, self.chooseVarComboBox.currentText())
        tiebreaker_col = self.tiebreaker_comboBox.currentText()
        if tiebreaker_col == 'None':
            tiebreaker_col = None
        else:
            tiebreaker_col = (comp_label, tiebreaker_col)
        self.data[datakey].stratified_folds(nfolds, colname, tiebreaker_col)
        self.data[datakey + '-Train'] = SpectralData(
            rows_match(
                self.data[datakey].df, (meta_label, 'Folds'),
                [testfold], invert=True
            ), name=datakey + '-Train'
        )
        self.data[datakey + '-Test'] = SpectralData(
            rows_match(
                self.data[datakey].df, (meta_label, 'Folds'),
                [testfold]
            ), name=datakey + '-Test'
        )
        self.list_amend(self.datakeys, self.train_ind, datakey + '-Train')
        self.list_amend(self.datakeys, self.test_ind, datakey + '-Test')
        print(self.datakeys)
        print(
            'Test set: ' + str(self.data[datakey + '-Test'].df.index.shape[0])
        )
        print(
            'Training set: ' + str(
                self.data[datakey + '-Train'].df.index.shape[0]
            )
        ) 
[docs]
    def strat_fold_change_vars(self):
        self.chooseVarComboBox.clear()
        try:
            comp_label = self.data[
                self.chooseDataToStratifyComboBox.currentText()].comp_label
            choices = \
                
self.data[self.chooseDataToStratifyComboBox.currentText()].df[
                    comp_label].columns.values
        except:
            choices = ['No composition columns!']
        self.chooseVarComboBox.addItems(choices)
        choices = ['None'] + list(choices)
        self.tiebreaker_comboBox.addItems(choices) 
[docs]
    def strat_fold_change_testfolds(self):
        self.testFoldsSpinBox.setMaximum(self.nFoldsSpinBox.value()) 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = StratifiedFolds()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())