diff --git a/lib/wekafiles/packages/new_package_check.txt b/lib/wekafiles/packages/new_package_check.txt index 67c4213c..b290bd57 100644 --- a/lib/wekafiles/packages/new_package_check.txt +++ b/lib/wekafiles/packages/new_package_check.txt @@ -1 +1 @@ -1598950809434 +1599209053791 diff --git a/lib/wekafiles/packages/packages/installedPackageCache.ser b/lib/wekafiles/packages/packages/installedPackageCache.ser new file mode 100644 index 00000000..ef4f4ddc Binary files /dev/null and b/lib/wekafiles/packages/packages/installedPackageCache.ser differ diff --git a/test/test_selenium.py b/test/test_selenium.py index 5e754bde..bcfd02f3 100644 --- a/test/test_selenium.py +++ b/test/test_selenium.py @@ -109,22 +109,22 @@ def test_31DatasetLoad(self): self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() assert self.driver.find_element(By.CSS_SELECTOR, ".jumbotron > .text-center").text == "Configure experiment" - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - assert self.driver.find_element(By.CSS_SELECTOR, "th:nth-child(3)").text == "Cl.thickness" - self.driver.execute_script("$('#data').val('iris.csv');") - self.driver.execute_script("$('#data').change();") + assert self.driver.find_element(By.CSS_SELECTOR, "#dataset_parameters_0 > div > table > thead > tr > th:nth-child(3)").text == "Cl.thickness" + self.driver.execute_script("$('#data_0').val('iris.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - assert self.driver.find_element(By.CSS_SELECTOR, "th:nth-child(2)").text == "sepal length (cm)" - self.driver.execute_script("$('#data').val('music.csv');") - self.driver.execute_script("$('#data').change();") + assert self.driver.find_element(By.CSS_SELECTOR, "#dataset_parameters_0 > div > table > thead > tr > th:nth-child(2)").text == "sepal length (cm)" + self.driver.execute_script("$('#data_0').val('music.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - assert self.driver.find_element(By.CSS_SELECTOR, "th:nth-child(2)").text == "amazed-suprised" - self.driver.execute_script("$('#data').val('weatherHistory.csv');") - self.driver.execute_script("$('#data').change();") + assert self.driver.find_element(By.CSS_SELECTOR, "#dataset_parameters_0 > div > table > thead > tr > th:nth-child(2)").text == "amazed-suprised" + self.driver.execute_script("$('#data_0').val('weatherHistory.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - assert self.driver.find_element(By.CSS_SELECTOR, "th:nth-child(2)").text == "Temperature (C)" + assert self.driver.find_element(By.CSS_SELECTOR, "#dataset_parameters_0 > div > table > thead > tr > th:nth-child(2)").text == "Temperature (C)" self.logout() def test_321DatasetUseNormal(self): @@ -140,13 +140,13 @@ def test_321DatasetUseNormal(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.execute_script("$('#col0_use_label').click();") - self.driver.find_element(By.ID, "reduced_tab_link").click() - WebDriverWait(self.driver, 30000).until(expected_conditions.visibility_of_element_located((By.ID, "0_opt"))) - element = self.driver.find_element(By.ID, "0_opt") + self.driver.execute_script("$('#col0_use_label_0').click();") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + WebDriverWait(self.driver, 30000).until(expected_conditions.visibility_of_element_located((By.ID, "0_opt_0"))) + element = self.driver.find_element(By.ID, "0_opt_0") assert "list-group-item-secondary" in element.get_attribute('class').split(" ") self.logout() @@ -165,14 +165,14 @@ def test_322DatasetUseReduced(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script('$("#sel option[value=\'Id\']").prop("selected",true)') - self.driver.execute_script('$("#nuse").click()') - self.driver.find_element(By.ID, "normal_tab_link").click() - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col0_use:checked") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script('$("#sel_0 option[value=\'Id\']").prop("selected",true)') + self.driver.execute_script('$("#nuse_0").click()') + self.driver.find_element(By.ID, "normal_tab_link_0").click() + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col0_use_0:checked") assert len(elements) == 0 self.logout() @@ -190,13 +190,13 @@ def test_331DatasetNotUseNormal(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.execute_script("$('#col0_use_label').click();") - self.driver.execute_script("$('#col0_use_label').click();") - self.driver.find_element(By.ID, "reduced_tab_link").click() - element = self.driver.find_element(By.ID, "0_opt") + self.driver.execute_script("$('#col0_use_label_0').click();") + self.driver.execute_script("$('#col0_use_label_0').click();") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + element = self.driver.find_element(By.ID, "0_opt_0") assert "list-group-item-primary" in element.get_attribute('class').split(" ") self.logout() @@ -215,16 +215,16 @@ def test_332DatasetNotUseReduced(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script('$("#sel option[value=\'Id\']").prop("selected",true)') - self.driver.execute_script('$("#nuse").click()') - self.driver.execute_script('$("#sel option[value=\'Id\']").prop("selected",true)') - self.driver.execute_script('$("#use").click()') - self.driver.find_element(By.ID, "normal_tab_link").click() - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col0_use:checked") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script('$("#sel_0 option[value=\'Id\']").prop("selected",true)') + self.driver.execute_script('$("#nuse_0").click()') + self.driver.execute_script('$("#sel_0 option[value=\'Id\']").prop("selected",true)') + self.driver.execute_script('$("#use_0").click()') + self.driver.find_element(By.ID, "normal_tab_link_0").click() + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col0_use_0:checked") assert len(elements) > 0 self.logout() @@ -243,16 +243,16 @@ def test_341DatasetNoTargetNormal(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.execute_script("$('#col10_target_label').click();") - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.execute_script("$('#col10_target_label_0').click();") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target_0:checked") assert len(elements) == 0 - self.driver.find_element(By.ID, "reduced_tab_link").click() - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-secondary" in element.get_attribute('class').split(" ") self.logout() @@ -272,16 +272,16 @@ def test_342DatasetNoTargetReduced(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script('$("#sel option[value=\'Class\']").prop("selected",true)') - self.driver.execute_script('$("#nuse").click()') - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script('$("#sel_0 option[value=\'Class\']").prop("selected",true)') + self.driver.execute_script('$("#nuse_0").click()') + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-secondary" in element.get_attribute('class').split(" ") - self.driver.find_element(By.ID, "normal_tab_link").click() - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.find_element(By.ID, "normal_tab_link_0").click() + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) == 0 self.logout() @@ -300,16 +300,16 @@ def test_351DatasetNoTargetUseNormal(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.execute_script("$('#col10_use_label').click();") - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.execute_script("$('#col10_use_label_0').click();") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) > 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target_0:checked") assert len(elements) == 0 - self.driver.find_element(By.ID, "reduced_tab_link").click() - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-primary" in element.get_attribute('class').split(" ") self.logout() @@ -328,18 +328,18 @@ def test_352DatasetNoTargetUseReduced(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script('$("#sel option[value=\'Class\']").prop("selected",true)') - self.driver.execute_script('$("#use").click()') - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script('$("#sel_0 option[value=\'Class\']").prop("selected",true)') + self.driver.execute_script('$("#use_0").click()') + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-primary" in element.get_attribute('class').split(" ") - self.driver.find_element(By.ID, "normal_tab_link").click() - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.find_element(By.ID, "normal_tab_link_0").click() + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) > 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target_0:checked") assert len(elements) == 0 self.logout() @@ -358,22 +358,22 @@ def test_361DatasetChangeTargetNormal(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.execute_script("$('#col9_target_label').click();") - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.execute_script("$('#col9_target_label_0').click();") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_use:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_target_0:checked") assert len(elements) > 0 - self.driver.find_element(By.ID, "reduced_tab_link").click() - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-secondary" in element.get_attribute('class').split(" ") - element = self.driver.find_element(By.ID, "9_opt") + element = self.driver.find_element(By.ID, "9_opt_0") assert "list-group-item-success" in element.get_attribute('class').split(" ") self.logout() @@ -393,24 +393,24 @@ def test_362DatasetChangeTargetReduced(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script("$('#sel option[value=\"Mitoses\"]').prop('selected',true);") - self.driver.execute_script("$('#target').click();") - element = self.driver.find_element(By.ID, "10_opt") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script("$('#sel_0 option[value=\"Mitoses\"]').prop('selected',true);") + self.driver.execute_script("$('#target_0').click();") + element = self.driver.find_element(By.ID, "10_opt_0") assert "list-group-item-secondary" in element.get_attribute('class').split(" ") - element = self.driver.find_element(By.ID, "9_opt") + element = self.driver.find_element(By.ID, "9_opt_0") assert "list-group-item-success" in element.get_attribute('class').split(" ") - self.driver.find_element(By.ID, "normal_tab_link").click() - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use:checked") + self.driver.find_element(By.ID, "normal_tab_link_0").click() + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col10_target_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_use:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col9_target_0:checked") assert len(elements) > 0 self.logout() @@ -428,15 +428,15 @@ def test_37DatasetNoMultiLabelTarget(self): """ self.login("ubumlaas@gmail.com") self.driver.find_element(By.LINK_TEXT, "New Experiment").click() - self.driver.execute_script("$('#data').val('breastCancer.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('breastCancer.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script("$('#sel option[value=\"Cell.shape\"]').prop('selected',true);") - self.driver.execute_script("$('#sel option[value=\"Marg.adhesion\"]').prop('selected',true);") - self.driver.execute_script("$('#sel option[value=\"Epith.c.size\"]').prop('selected',true);") - self.driver.execute_script("$('#sel option[value=\"Bare.nuclei\"]').prop('selected',true);") - self.driver.execute_script('$("#target").click()') + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script("$('#sel_0 option[value=\"Cell.shape\"]').prop('selected',true);") + self.driver.execute_script("$('#sel_0 option[value=\"Marg.adhesion\"]').prop('selected',true);") + self.driver.execute_script("$('#sel_0 option[value=\"Epith.c.size\"]').prop('selected',true);") + self.driver.execute_script("$('#sel_0 option[value=\"Bare.nuclei\"]').prop('selected',true);") + self.driver.execute_script('$("#target_0").click()') time.sleep(self.wait*2) assert self.driver.find_element(By.CSS_SELECTOR, "#alert_modal_body > p:nth-child(1)").text == "You can't select more than 1 target in no multilabel algorithms." time.sleep(self.wait) @@ -462,25 +462,25 @@ def test_381DatasetMultiLabelTargetNormal(self): self.driver.find_element(By.LINK_TEXT, "New Experiment").click() self.driver.execute_script("$('#alg_typ').val(\"MultiClassification\")") self.driver.execute_script("$('#alg_typ').change();") - self.driver.execute_script("$('#data').val('music.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('music.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) elm = list(range(6)) for e in elm: - self.driver.execute_script("$('#col"+str(e)+"_target_label').click();") - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use:checked") + self.driver.execute_script("$('#col"+str(e)+"_target_label_0').click();") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target_0:checked") assert len(elements) > 0 - self.driver.execute_script("$('#col76_use_label').click();") + self.driver.execute_script("$('#col76_use_label_0').click();") - self.driver.find_element(By.ID, "reduced_tab_link").click() + self.driver.find_element(By.ID, "reduced_tab_link_0").click() - element = self.driver.find_element(By.ID, "76_opt") + element = self.driver.find_element(By.ID, "76_opt_0") assert "list-group-item-primary" in element.get_attribute("class").split(" ") for e in elm: - element = self.driver.find_element(By.ID, str(e)+"_opt") + element = self.driver.find_element(By.ID, str(e)+"_opt_0") assert "list-group-item-success" in element.get_attribute("class").split(" ") self.logout() @@ -504,27 +504,27 @@ def test_382DatasetMultiLabelTargetReduced(self): self.driver.execute_script("$('#alg_typ').val(\"MultiClassification\")") self.driver.execute_script("$('#alg_typ').change();") - self.driver.execute_script("$('#data').val('music.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('music.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script("$('#sel option[value=\"BHSUM3\"]').prop('selected', true);") - self.driver.execute_script("$('#use').click();") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script("$('#sel_0 option[value=\"BHSUM3\"]').prop('selected', true);") + self.driver.execute_script("$('#use_0').click();") - assert "list-group-item-primary" in self.driver.find_element(By.ID, "76_opt").get_attribute("class").split(" ") + assert "list-group-item-primary" in self.driver.find_element(By.ID, "76_opt_0").get_attribute("class").split(" ") elm = ['amazed-suprised', 'happy-pleased', 'relaxing-clam', 'quiet-still', 'sad-lonely', 'angry-aggresive'] for e in elm: - self.driver.execute_script("$('#sel option[value=\""+e+"\"]').prop('selected', true);") - self.driver.execute_script("$('#target').click();") + self.driver.execute_script("$('#sel_0 option[value=\""+e+"\"]').prop('selected', true);") + self.driver.execute_script("$('#target_0').click();") for e in range(6): - assert "list-group-item-success" in self.driver.find_element(By.ID, str(e)+"_opt").get_attribute("class").split(" ") + assert "list-group-item-success" in self.driver.find_element(By.ID, str(e)+"_opt_0").get_attribute("class").split(" ") - self.driver.find_element(By.ID, "normal_tab_link").click() + self.driver.find_element(By.ID, "normal_tab_link_0").click() for e in range(6): - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target_0:checked") assert len(elements) > 0 self.logout() @@ -550,35 +550,35 @@ def test_39DatasetFromMultiLabelToMonoLabel(self): self.driver.execute_script("$('#alg_typ').val(\"MultiClassification\")") self.driver.execute_script("$('#alg_typ').change();") - self.driver.execute_script("$('#data').val('music.csv');") - self.driver.execute_script("$('#data').change();") + self.driver.execute_script("$('#data_0').val('music.csv');") + self.driver.execute_script("$('#data_0').change();") time.sleep(self.wait) - self.driver.find_element(By.ID, "reduced_tab_link").click() - self.driver.execute_script("$('#sel option[value=\"BHSUM3\"]').prop('selected', true);") - self.driver.execute_script("$('#use').click();") + self.driver.find_element(By.ID, "reduced_tab_link_0").click() + self.driver.execute_script("$('#sel_0 option[value=\"BHSUM3\"]').prop('selected', true);") + self.driver.execute_script("$('#use_0').click();") elm = ['amazed-suprised', 'happy-pleased', 'relaxing-clam', 'quiet-still', 'sad-lonely', 'angry-aggresive'] for e in elm: - self.driver.execute_script("$('#sel option[value=\""+e+"\"]').prop('selected', true);") - self.driver.execute_script("$('#target').click();") + self.driver.execute_script("$('#sel_0 option[value=\""+e+"\"]').prop('selected', true);") + self.driver.execute_script("$('#target_0').click();") self.driver.execute_script("$('#alg_typ').val(\"Classification\")") self.driver.execute_script("$('#alg_typ').change();") time.sleep(self.wait) - assert "list-group-item-success" in self.driver.find_element(By.ID, "76_opt").get_attribute("class").split(" ") + assert "list-group-item-success" in self.driver.find_element(By.ID, "76_opt_0").get_attribute("class").split(" ") for e in range(6): - assert "list-group-item-primary" in self.driver.find_element(By.ID, str(e)+"_opt").get_attribute("class").split(" ") + assert "list-group-item-primary" in self.driver.find_element(By.ID, str(e)+"_opt_0").get_attribute("class").split(" ") - self.driver.find_element(By.ID, "normal_tab_link").click() + self.driver.find_element(By.ID, "normal_tab_link_0").click() for e in range(6): - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_use_0:checked") assert len(elements) > 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col"+str(e)+"_target_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col76_use:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col76_use_0:checked") assert len(elements) == 0 - elements = self.driver.find_elements(By.CSS_SELECTOR, "#col76_target:checked") + elements = self.driver.find_elements(By.CSS_SELECTOR, "#col76_target_0:checked") assert len(elements) > 0 self.logout() diff --git a/ubumlaas/experiments/algorithm/__init__.py b/ubumlaas/experiments/algorithm/__init__.py index f3e5f069..688a754e 100644 --- a/ubumlaas/experiments/algorithm/__init__.py +++ b/ubumlaas/experiments/algorithm/__init__.py @@ -22,6 +22,9 @@ from time import time import json import os +from ubumlaas.util import string_is_array + +from copy import deepcopy import weka.core.jvm as jvm from ubumlaas.util import get_dataframe_from_file @@ -49,55 +52,88 @@ def task_skeleton(experiment, current_user): # Diference sklearn executor and weka executor # Get algorithm type data = experiment["data"] + data = string_is_array(data) + if not isinstance(data,list): + data = [data] + v.app.logger.debug("%d - %d - Data list know is a list - %s", current_user['id'], experiment['id'], data) + # From here data will be a list if exp_manager.is_multi: rep = exp[0]["exp_config"]["repetition"] else: rep = exp["exp_config"]["repetition"] - res_global = [] - state_global=[] - for i in range(rep): - if exp_manager.is_multi: - res=[] - state=[] - #Seed for no seed experiments, multi experiments should execute with the same data - rand = random.randint(1,1000000000) - for i in range(len(exp)): - r,s = execute_model(exp[i]["alg"]["lib"],data,exp[i],current_user,rand) - if s == 1: - res.append(json.loads(r)) + v.app.logger.debug("%d - %d - Repetitions: %d", current_user['id'], experiment['id'], rep) + res_global_data = [] + state_global_data=[] + for j in range(len(data)): + res_global = [] + state_global=[] + for _i in range(rep): + if exp_manager.is_multi: + res=[] + state=[] + #Seed for no seed experiments, multi experiments should execute with the same data + rand = random.randint(1,1000000000) + for i in range(len(exp)): + aux_exp = deepcopy(exp[i]) + if len(data)>1: + aux_exp["exp_config"]["target"]=aux_exp["exp_config"]["target"][j] + aux_exp["exp_config"]["columns"]=aux_exp["exp_config"]["columns"][j] + r,s = execute_model(exp[i]["alg"]["lib"],data[j],aux_exp,current_user,rand) + if s == 1: + res.append(json.loads(r)) + else: + res.append(r) + state.append(s) + if 2 in state: + state = 2 else: - res.append(r) - state.append(s) - if 2 in state: - state = 2 + state = 1 + res_global.append(res) else: - state = 1 - res_global.append(res) + aux_exp = deepcopy(exp) + if len(data)>1: + aux_exp["exp_config"]["target"]=aux_exp["exp_config"]["target"][j] + aux_exp["exp_config"]["columns"]=aux_exp["exp_config"]["columns"][j] + res,state=execute_model(exp["alg"]["lib"],data[j],aux_exp,current_user) + if state == 1: + res_global.append(json.loads(res)) + else: + res_global.append(res) + + state_global.append(state) + if 2 in state_global: + state_global = 2 else: - res,state=execute_model(exp["alg"]["lib"],data,exp,current_user) - res_global.append(json.loads(res)) - - state_global.append(state) - if rep == 1: - res_global = res_global[0] + state_global = 1 + if rep == 1: + res_global = res_global[0] + + res_global_data.append(res_global) + state_global_data.append(state_global) #Calculate result means - res = res_global - if rep>1 and 2 not in state_global: - state=1 - if exp_manager.is_multi: - res_mean = [] - for i in range(len(res[0])): - res_aux = [] - for j in range(len(res)): - res_aux.append(res[j][i]) - r_mean = calc_res_mean(res_aux, rep) - res_mean.append(r_mean) + res = res_global_data + res_data=[] + for k in range(len(data)): + if rep>1 and 2 not in state_global_data: + state=1 + if exp_manager.is_multi: + res_mean = [] + for i in range(len(res[k][0])): + res_aux = [] + for j in range(len(res[k])): + res_aux.append(res[k][j][i]) + r_mean = calc_res_mean(res_aux, rep) + res_mean.append(r_mean) + else: + res_mean=calc_res_mean(res[k], rep) else: - res_mean=calc_res_mean(res, rep) - - res=res_mean - elif 2 not in state_global: + res_mean=res[k] + res_data.append(res_mean) + res=res_data + if len(data)==1: + res = res[0] + elif 2 not in state_global_data: state = 1 else: state = 2 @@ -121,18 +157,21 @@ def calc_res_mean(res, rep): Returns: dict: Results mean """ + print(res) res_mean={} for i in res[0].keys(): - aux=[] - for j in range(rep): - aux.append(res[j][i]) - if isinstance(res[0][i],list): - res_mean[i]= np.array(aux).mean(0).tolist() - else: - res_mean[i]=np.array(aux).mean().tolist() + if i != "ROC": # ROC array incorrect over mean, represent points in space, not value. Use AUC to know the mean. + aux=[] + for j in range(rep): + aux.append(res[j][i][0]) + if isinstance(res[0][i],list): + res_mean[i]= np.array(aux).mean(0).tolist() + else: + res_mean[i] = np.array(aux).mean().tolist() + res_mean[i] = [res_mean[i]] return res_mean -def execute_model(alg_lib,data, exp, current_user,seed_multi=None): +def execute_model(alg_lib, data, exp, current_user,seed_multi=None): type_app = alg_lib execution_lib = None try: @@ -161,7 +200,13 @@ def execute_model(alg_lib,data, exp, current_user,seed_multi=None): y_score_list = [] y_test_list = [] X_test_list = [] - if exp_config.get("mode") == "split" and exp_config["train_partition"] < 100: + + if execution_lib.algorithm_type == "Clustering": + y_pred, y_score = execution_lib.predict(model, X) + y_pred_list.append(y_pred) + y_score_list.append(y_score) + + elif exp_config.get("mode") == "split" and exp_config["train_partition"] < 100: X_train, X_test, y_train, y_test = execution_lib\ .generate_train_test_split(X, y, exp_config["train_partition"],random_state=seed_multi) model = execution_lib.create_model() @@ -185,10 +230,7 @@ def execute_model(alg_lib,data, exp, current_user,seed_multi=None): y_test_list.append(y_test) X_test_list.append(X_test) - elif execution_lib.algorithm_type == "Clustering": - y_pred, y_score = execution_lib.predict(model, X) - y_pred_list.append(y_pred) - y_score_list.append(y_score) + score = {} if exp_config["mode"] == "cross" or exp_config["train_partition"] < 100 or execution_lib.algorithm_type == "Clustering": diff --git a/ubumlaas/experiments/forms.py b/ubumlaas/experiments/forms.py index 78cdad45..2c2bae05 100644 --- a/ubumlaas/experiments/forms.py +++ b/ubumlaas/experiments/forms.py @@ -34,11 +34,13 @@ class ExperimentForm(FlaskForm): filter_name = SelectField("Select Filter", choices=[("", "---")]) - def __init__(self, id=None): + def __init__(self, id=None, iddata=None): super(ExperimentForm, self).__init__() if id is not None: self.alg_name.id="alg_name_"+str(id) self.filter_name.id="filter_name_"+str(id) + if iddata is not None: + self.data.id="data_"+str(iddata) def alg_list(self, alg_typ): """Generate a list of supported algorithms by type. diff --git a/ubumlaas/experiments/views/dataset.py b/ubumlaas/experiments/views/dataset.py index 95310441..7c4548f3 100644 --- a/ubumlaas/experiments/views/dataset.py +++ b/ubumlaas/experiments/views/dataset.py @@ -1,5 +1,5 @@ from flask import \ - (render_template) + (render_template, request) from ubumlaas.experiments.forms import \ (ExperimentForm, DatasetForm) from flask_login import (current_user, login_required) @@ -24,6 +24,16 @@ def update_dataset_list(): form_e.dataset_list() #log inside dataset_list return render_template("blocks/select_dataset.html", form_e=form_e) +@login_required +@views.experiments.route("/new_dataset_maker", methods=["POST"]) +def new_dataset_maker(): + + iddex = request.form.get("idex", 0) + form_e = ExperimentForm(0, iddex) + form_e.dataset_list() + form_d = DatasetForm() + return render_template("blocks/dataset_maker.html", form_e=form_e, iddex=iddex, form_d=form_d); + @login_required @views.experiments.route("/new_experiment/new_dataset", methods=["POST"]) diff --git a/ubumlaas/experiments/views/experiment.py b/ubumlaas/experiments/views/experiment.py index c651e479..7d2d5c62 100644 --- a/ubumlaas/experiments/views/experiment.py +++ b/ubumlaas/experiments/views/experiment.py @@ -29,7 +29,7 @@ def new_experiment(): str -- HTTP response with rendered page. """ - form_e = ExperimentForm(0) + form_e = ExperimentForm(0, 0) form_e.dataset_list() form_d = DatasetForm() @@ -45,7 +45,7 @@ def new_experiment(): return render_template("experiment_form.html", form_e=form_e, form_d=form_d, form_p=form_p, - title="New experiment", experiment=experiment, idex=0) + title="New experiment", experiment=experiment, idex=0, iddex=0) @login_required @@ -74,12 +74,15 @@ def launch_experiment(): if filter_name is not None: filter_name = "["+filter_name+"]" filter_config = "["+filter_config+"]" + data = request.form.get("data") + if "," in data: + data = "["+data+"]" exp = Experiment(user.id, alg_name, unquote(alg_config), json.dumps(exp_config), filter_name, filter_config, - request.form.get("data"), + data, None, time.time(), None, 0) v.app.logger.info("%d - Create experiment", current_user.id) v.db.session.add(exp) @@ -144,13 +147,14 @@ def change_column_list(): Returns: str -- HTTP response with JSON """ - form_e = ExperimentForm() + iddex = request.form.get("iddex",0) + form_e = ExperimentForm(iddex) filename = form_e.data.data upload_folder = "ubumlaas/datasets/"+current_user.username+"/" df, target_columns = get_dataframe_from_file(upload_folder, filename, target_column=True) - to_return = {"html": render_template("blocks/show_columns.html", data=df), + to_return = {"html": render_template("blocks/show_columns.html", data=df, iddex=iddex), "html2": render_template("blocks/show_columns_reduced.html", - data=df.columns), + data=df.columns, iddex=iddex), "df": generate_df_html(df), "config": target_columns} v.app.logger.info("%d - Get dataset information - %s%s%s", current_user.id, upload_folder,"/",filename) diff --git a/ubumlaas/static/css/bootstrap-append.css b/ubumlaas/static/css/bootstrap-append.css index 742c4b7e..781df5c7 100644 --- a/ubumlaas/static/css/bootstrap-append.css +++ b/ubumlaas/static/css/bootstrap-append.css @@ -208,4 +208,14 @@ footer .main-footer { -ms-transition: all 250ms ease-in-out 0s; -o-transition: all 250ms ease-in-out 0s; transition: all 250ms ease-in-out 0s; - } \ No newline at end of file + } + +.custom-select[multiple], +.custom-select[size]:not([size="1"]) +{ + height: auto; + -webkit-appearance: menulist-textfield; + background-image: none; + /* Fix for excess right padding */ + padding-right: 0.75rem; +} \ No newline at end of file diff --git a/ubumlaas/static/css/custom.css b/ubumlaas/static/css/custom.css index b69b54aa..d040fdeb 100644 --- a/ubumlaas/static/css/custom.css +++ b/ubumlaas/static/css/custom.css @@ -106,17 +106,17 @@ option.list-group-item{ padding: 0.25rem 1rem !important; } -#sel[multiple] option.list-group-item-success:checked{ +.sel[multiple] option.list-group-item-success:checked{ background-color: var(--success) !important; color: #ffffff !important; } -#sel[multiple] option.list-group-item-primary:checked{ +.sel[multiple] option.list-group-item-primary:checked{ background-color: var(--primary) !important; color: #ffffff !important; } -#sel[multiple] option.list-group-item-secondary:checked{ +.sel[multiple] option.list-group-item-secondary:checked{ background-color: var(--secondary) !important; color: #ffffff !important; } @@ -125,14 +125,13 @@ tr.align-middle td{ vertical-align: middle !important; } -#makers{ +#makers, #data-makers{ position: relative !important; display: flex; align-items: stretch; - } -.maker{ +.maker, .data-maker{ position: static; height: 100%; width: 100%; diff --git a/ubumlaas/static/js/config_dataset.js b/ubumlaas/static/js/config_dataset.js index 662f7b81..c3234652 100644 --- a/ubumlaas/static/js/config_dataset.js +++ b/ubumlaas/static/js/config_dataset.js @@ -4,17 +4,19 @@ const MULTITARGET = ["MultiClassification"]; /** - * Possible values of Non-Supervised algorithmsç + * Possible values of Non-Supervised algorithms */ const UNSUPERVISED = ["Clustering"] + /** * It guarantees only one target if algorithms is not MULTITARGET * And not target allowed in UNSUPERVISED * - * @param {string} target identifier of target selected + * @param {string} target identifier of target selected + * @param {int} External identifier for dataset */ -function only_one_target(target){ +function only_one_target(target, iddex){ let typ = $("#alg_typ").val(); if(UNSUPERVISED.includes(typ)){ $("#"+target).prop("checked", true); @@ -22,11 +24,11 @@ function only_one_target(target){ "Algorithms of the type "+typ+" are unsupervised, therefore, they not allow targets"); } else if (!MULTITARGET.includes(typ)){ - let target_candidates = $(".col_target"); + let target_candidates = $(".col_target[id$='"+iddex+"']"); target_candidates.each(function(){ if($(this).attr("id")!=target){ $(this).prop("checked",false); - let ido = $("#"+$(this).attr("id").split("_")[0].split("col")[1] + "_opt"); + let ido = $("#"+$(this).attr("id").split("_")[0].split("col")[1] + "_opt_"+iddex); if(ido.hasClass("list-group-item-success")){ ido.removeClass("list-group-item list-group-item-success"); ido.addClass("list-group-item list-group-item-secondary"); @@ -41,21 +43,22 @@ function only_one_target(target){ * * @param {string} identifier of column * @param {string} mode value between target or use + * @param {int} identifier for the dataset in external form */ -function target_or_use(identifier, mode){ +function target_or_use(identifier, mode, iddex){ let typ = $("#alg_typ").val(); if(!UNSUPERVISED.includes(typ) || mode == "use"){ let id = identifier.split("col")[1]; - let use = $("#"+identifier+"_use"); - let target = $("#"+identifier+"_target"); - let v = $("#"+id+"_opt"); + let use = $("#"+identifier+"_use_"+iddex); + let target = $("#"+identifier+"_target_"+iddex); + let v = $("#"+id+"_opt_"+iddex); v.removeClass("list-group-item-primary list-group-item-secondary list-group-item-success"); if (mode == "target"){ if(use.is(":checked")){ use.prop("checked", false); } if(!target.is(":checked")){ - v.addClass("list-group-item-success"); + v.addClass("list-group-item-success") }else{ v.addClass("list-group-item-secondary"); } @@ -89,24 +92,31 @@ function get_dataset_config(){ dataset_config.train_partition = parseInt($("#train_slider").val()); break; } - let selected_columns = []; - let columns = $(".column-dataset"); - + + dataset_config.columns = []; dataset_config.target = []; - - for(var i=0; i 1 && idb==="target" && !MULTITARGET.includes(typ)){ + launch_warning_modal("Only one target", "You can't select more than 1 target in no multilabel algorithms.") + }else{ + lis.each(function(e){ + let v = $(lis[e]); + let ids = "col" + v.attr("id").split("_")[0] + switch(idb){ + case "use": + if(!v.hasClass("list-group-item-primary")){ + $("#"+ids+"_use_label_"+iddex).click(); + } + break; + case "nuse": + if(v.hasClass("list-group-item-success")){ + $("#"+ids+"_target_label_"+iddex).click(); + //v.removeClass("list-group-item-success"); + v.addClass("list-group-item-secondary"); + }else if(v.hasClass("list-group-item-primary")){ + $("#"+ids+"_use_label_"+iddex).click(); + } + break; + case "target": + if(!v.hasClass("list-group-item-success")){ + $("#"+ids+"_target_label_"+iddex).click(); + } + break; + } + v.removeAttr('selected'); + v.prop("selected", false); + }); + } +} + /** * Reset the multiexperiment. */ -function me_reset(){ + function me_reset(){ let makers = $("#makers"); let block = $("
").addClass("maker").attr("data-idex", 0); @@ -48,23 +90,44 @@ $(document).ready(function(){ * Create a new algorithm for a multiexperiment. * Render a new algorithms */ - function me_new_alg(){ + function me_new_alg(algs=true){ + let nidex, block, url, on; + if (algs){ + nidex = me_idexs[me_idexs.length-1]+1; + block = $("
").addClass("maker").attr("data-idex", nidex).css("display","none"); + url = "/new_algorithm_maker" + on = "makers" + }else{ + nidex = med_idexs[med_idexs.length-1]+1; + url = "/new_dataset_maker"; + on = "data-makers" + } // First create a new block - let nidex = me_idexs[me_idexs.length-1]+1; - let block = $("
").addClass("maker").attr("data-idex", nidex).css("display","none"); + $.ajax({ - url: "/new_algorithm_maker", + url: url, type: 'POST', contentType: 'application/x-www-form-urlencoded', data: "alg_type=" + $("#alg_typ").val() + "&idex="+nidex, success: function (result) { - block.html(result); - $("#makers").append(block); - me_idexs.push(nidex); - me_move(); + if(algs){ + block.html(result); + }else{ + block = $(result); + block.css("display","none"); + } + + $("#"+on).append(block); + if(algs){ + me_idexs.push(nidex); + me_sub_clasifiers_count.push(0); + me_sub_filter_count.push(0); + }else{ + med_idexs.push(nidex); + dataset_columns.push([]); + } - me_sub_clasifiers_count.push(0); - me_sub_filter_count.push(0); + me_move(true, false, algs); } }) } @@ -72,28 +135,57 @@ $(document).ready(function(){ /** * Delete the algorithm for the current index */ - function me_delete_alg(){ - if(me_idexs.length == 1){ - sp_ANIMATION = false; - launch_danger_modal("Delete error","You can't delete an algorithm if only have one"); + function me_delete_alg(algs=true){ + let deletion; + if(algs){ + deletion = "algorithm"; }else{ - let index = me_index; - if(me_index == me_idexs.length-1){ - me_move(false, true); + deletion = "dataset"; + } + let idexs, index; + if (algs){ + idexs = me_idexs; + index = me_index; + }else{ + idexs = med_idexs; + index = med_index; + } + + if(idexs.length == 1){ + //sp_ANIMATION = false; + launch_danger_modal("Delete error","You can't delete an "+deletion+" if only have one"); + }else{ + if(index == idexs.length-1){ + me_move(false, true, algs); }else{ - me_move(true, true); + me_move(true, true, algs); } setTimeout(function(){ - $("div[data-idex=\""+me_idexs[index]+"\"]").remove(); - me_idexs = removeItemOnce(me_idexs, me_idexs[index]); - me_sub_clasifiers_count.splice(index,1); - me_sub_filter_count.splice(index,1); + $("div[data-idex=\""+idexs[index]+"\"]").remove(); + idexs = removeItemOnce(idexs, idexs[index]); + if(algs){ + me_sub_clasifiers_count.splice(index,1); + me_sub_filter_count.splice(index,1); + }else{ + dataset_columns = removeItemOnce(dataset_columns, dataset_columns[index]); + } + // If remove the last algorithm - if(me_index == me_idexs.length){ - me_index--; + if(index == idexs.length){ + if(algs){ + me_index--; + }else{ + med_index--; + } + } - if(me_idexs.length == 1){ - $("#delete_alg").addClass("disabled"); + if(idexs.length == 1){ + if(algs){ + $("#delete_alg").addClass("disabled"); + }else{ + $("#delete_data").addClass("disabled"); + } + } }, 1000); } @@ -103,21 +195,33 @@ $(document).ready(function(){ * Change the current algorithm displayed. By default move to right. * @param {boolean} right Direction for the movement * @param {boolean} deleted If current index will be removed + * @param {boolean} if algorithms of datasets */ - function me_move(right=true, deleted=false){ - let from = me_idexs[me_index]; - let to; - if (right){ - to = me_idexs[me_index+1]; + function me_move(right=true, deleted=false, algs = true) { + let from, to, from_block, to_block; + if (algs) { + from = me_idexs[me_index]; + if (right) { + to = me_idexs[me_index + 1]; + } else { + to = me_idexs[me_index - 1]; + } + + from_block = $("div[data-idex=\"" + from + "\"]"); + to_block = $("div[data-idex=\"" + to + "\"]"); }else{ - to = me_idexs[me_index-1]; + from = med_idexs[med_index]; + if (right) { + to = med_idexs[med_index + 1]; + } else { + to = med_idexs[med_index - 1]; + } + from_block = $("div[data-iddex=\"" + from + "\"]"); + to_block = $("div[data-iddex=\"" + to + "\"]"); } - - let from_block = $("div[data-idex=\""+from+"\"]"); - let to_block = $("div[data-idex=\""+to+"\"]"); - let anim; - + let animIn, animOut; + if (right){ animIn = "right"; animOut = "left"; @@ -131,26 +235,35 @@ $(document).ready(function(){ from_block.toggle("slide", {direction: animOut}, "slow"); from_block.promise().done(function(){ - sp_ANIMATION=false; + //sp_ANIMATION=false; }); - to_block.toggle("slide", {direction: animIn}, "slow"); + to_block.toggle("slide", {direction: animIn}, "slow"); to_block.promise().done(function(){ - sp_ANIMATION=false; + //sp_ANIMATION=false; }); if(!deleted){ - if(right){ - me_index++; + if(algs){ + if(right){ + me_index++; + }else{ + me_index--; + } }else{ - me_index--; + if(right){ + med_index++; + }else{ + med_index--; + } } + } } $("#delete_alg").click(function(){ if(!sp_ANIMATION){ - sp_ANIMATION=true; + //sp_ANIMATION=true; me_delete_alg(); if(me_idexs.length == 1){ $(this).addClass("disabled"); @@ -158,9 +271,19 @@ $(document).ready(function(){ } }); + $("#delete_data").click(function(){ + if(!sp_ANIMATION){ + //sp_ANIMATION=true; + me_delete_alg(false); + if(med_idexs.length == 1){ + $(this).addClass("disabled"); + } + } + }); + $("#before_button").click(function(){ if(!sp_ANIMATION){ - sp_ANIMATION=true; + //sp_ANIMATION=true; if(me_index != 0){ me_move(false); } @@ -176,16 +299,34 @@ $(document).ready(function(){ } }); + $("#before_d_button").click(function(){ + if(!sp_ANIMATION){ + //sp_ANIMATION=true; + if(med_index != 0){ + me_move(false, false, false); + } + if(med_index == 0){ + $(this).addClass("disabled"); + } + if(med_idexs.length > 1){ + $("#delete_data").removeClass("disabled"); + } + if(med_index < med_idexs.length-1){ + $("#after_d_button").children(":first").text("arrow_forward_ios"); + } + } + }); + $("#after_button").click(function(){ if(!sp_ANIMATION){ - sp_ANIMATION=true; + //sp_ANIMATION=true; if(me_index == me_idexs.length-1){ if($("#alg_typ").val()!=""){ me_new_alg(); $("#delete_alg").removeClass("disabled"); }else{ launch_warning_modal("Add a new algorithm is not allowed","Select a algorithm type before add a new algorithm"); - sp_ANIMATION=false; + //sp_ANIMATION=false; } }else{ me_move(); @@ -198,4 +339,22 @@ $(document).ready(function(){ $("#before_button").removeClass("disabled"); } }); + + $("#after_d_button").click(function(){ + if(!sp_ANIMATION){ + //sp_ANIMATION=true; + if(med_index == med_idexs.length-1){ + me_new_alg(false); + $("#delete_data").removeClass("disabled"); + }else{ + me_move(true, false, false); + } + if(med_index < med_idexs.length-1){ + $(this).children(":first").text("arrow_forward_ios"); + }else{ + $(this).children(":first").text("add"); + } + $("#before_d_button").removeClass("disabled"); + } + }); }); \ No newline at end of file diff --git a/ubumlaas/static/js/validations.js b/ubumlaas/static/js/validations.js index 6360b7de..ae86337a 100644 --- a/ubumlaas/static/js/validations.js +++ b/ubumlaas/static/js/validations.js @@ -5,7 +5,7 @@ $("document").ready(function(){ function load_verify_elements(){ //Blocks - select_dataset = $("#data"); + select_dataset = $("#data_0"); train_slider = $("#train_slider"); alg_typ = $("#alg_typ"); alg_name = $("#alg_name_0"); @@ -31,7 +31,7 @@ function verify_all(element=null){ let validate = []; let show = []; let hide = []; - select_dataset = $("#data"); //Is necesary reload it + select_dataset = $("#data_0"); //Is necesary reload it let elements = [select_dataset, train_slider, alg_typ, alg_name]; let elements_feedback = [select_dataset_feedback, train_slider_feedback, alg_typ_feedback, alg_name_feedback]; for(let i=0; i +
+
+ {% include "blocks/generic_data_uploaded.html" %} +
+
+
+
+
+ {% include 'blocks/select_dataset.html' %} +
+
+
+
+
+
+
+ +
+
+
+
+
+
+ {% include 'blocks/show_columns.html' %} +
+
+ {% include 'blocks/show_dataset.html' %} +
+
+
+
+
+
+
+
+
+
+ {% include 'blocks/show_columns_reduced.html' %} +
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/ubumlaas/templates/blocks/experiment_form_js.html b/ubumlaas/templates/blocks/experiment_form_js.html index 960ba996..7fa07661 100644 --- a/ubumlaas/templates/blocks/experiment_form_js.html +++ b/ubumlaas/templates/blocks/experiment_form_js.html @@ -4,6 +4,9 @@ + \ No newline at end of file diff --git a/ubumlaas/templates/blocks/show_columns_reduced.html b/ubumlaas/templates/blocks/show_columns_reduced.html index 5a0274f1..38b6d828 100644 --- a/ubumlaas/templates/blocks/show_columns_reduced.html +++ b/ubumlaas/templates/blocks/show_columns_reduced.html @@ -2,65 +2,35 @@ {% if data|length >= 1 %}
- 15 %}size="15" {% else %}size="{{ data|length }}"{% endif %} multiple> {% for g in data %} - + {% endfor %}
- - - {% endif %} - - \ No newline at end of file + + {% endif %} + \ No newline at end of file diff --git a/ubumlaas/templates/experiment_form.html b/ubumlaas/templates/experiment_form.html index 892ef513..13940b2b 100644 --- a/ubumlaas/templates/experiment_form.html +++ b/ubumlaas/templates/experiment_form.html @@ -16,86 +16,26 @@

Configure experiment

-
-
-
- - {{ form_d.hidden_tag() }} -
-
- {{ form_d.dataset(class="custom-file-input") }} - {{ form_d.dataset.label(class="custom-file-label",id="datasetLabel") }} -
- -
-
- -
- -
-
-
-
-
-
- {% include 'blocks/select_dataset.html' %} -
-
-
+
+
+
-
-
-
- -
-
-
-
-
-
- {% include 'blocks/show_columns.html' %} -
-
- {% include 'blocks/show_dataset.html' %} -
-
-
-
-
-
-
-
-
-
- {% include 'blocks/show_columns_reduced.html' %} -
- -
-
-
-
+
+
+
+ {% include "blocks/dataset_maker.html" %} +
+
+ +
@@ -152,6 +92,7 @@

Configure experiment

+
diff --git a/ubumlaas/templates/result.html b/ubumlaas/templates/result.html index c4011e97..a58bec23 100644 --- a/ubumlaas/templates/result.html +++ b/ubumlaas/templates/result.html @@ -551,7 +551,7 @@

Finished

let result_val = result[i][z]; switch(i){ case "ROC": - let label = "AUC="+(1-result["AUC"][z]); + let label = "AUC="+(result["AUC"][z]); var canvas = $("", {id:i+"_canvas", width: "100%"}); var ctx = canvas.get(0).getContext('2d'); @@ -619,7 +619,7 @@

Finished

div.append(canvas); break; case "AUC": - result_val = 1-result_val; + result_val = result_val; default: let k = $("

", {class: "col-md-5 font-weight-bold"}); let v = $("

", {class: "col-md-7"}); diff --git a/ubumlaas/util.py b/ubumlaas/util.py index 417addfc..ebf81926 100644 --- a/ubumlaas/util.py +++ b/ubumlaas/util.py @@ -144,7 +144,10 @@ def value_to_bool(y_test, y_pred): [pandas,pandas] -- test output boolean, model output boolean """ un = y_test.unique() - d = {un[0]: True, un[1]: False} + try: + d = {un[0]: True, un[1]: False} + except: + d = {un[0]: True} return y_test.map(d), pd.Series(y_pred).map(d)