2424from MLC .Population .Population import Population
2525from PyQt5 .QtCore import pyqtSignal
2626from PyQt5 .QtCore import QFileSystemWatcher
27- # from PyQt5.QtCore import QHeaderView
2827from PyQt5 .QtCore import Qt
2928from PyQt5 .QtCore import QUrl
3029from PyQt5 .QtGui import QDesktopServices
@@ -417,6 +416,83 @@ def on_first_remove_indiv_button_clicked(self):
417416 .format (self ._experiment_name ))
418417 self ._first_indivs_manager .remove_individual ()
419418
419+ def on_gen_cut_button_clicked (self ):
420+ logger .debug ('[EXPERIMENT {0}] [GEN_CUT_BUTTON] - '
421+ 'Executing on_gen_cut_button_clicked function'
422+ .format (self ._experiment_name ))
423+ experiment_info = self ._mlc_local .get_experiment_info (self ._experiment_name )
424+ number_of_gens = experiment_info ["generations" ]
425+
426+ amount_of_gen_losts = number_of_gens - self ._current_gen + 1
427+ response = QMessageBox .warning (self , "Cut Generations" ,
428+ "{0} generations will be lost with this operation. "
429+ "Do you really want to continue?"
430+ .format (amount_of_gen_losts ),
431+ QMessageBox .Yes | QMessageBox .No ,
432+ QMessageBox .No )
433+
434+ if response == QMessageBox .Yes :
435+ logger .info ("[GEN_CUT_BUTTON] Proceed to remove {0} generations (From Generation N°{1} onwards)"
436+ .format (amount_of_gen_losts , self ._current_gen ))
437+ self ._mlc_local .remove_generations_from (self ._experiment_name ,
438+ self ._current_gen )
439+ last_gen_removed = self ._current_gen
440+ # Recalculate the amount of generations in the project
441+ experiment_info = self ._mlc_local .get_experiment_info (self ._experiment_name )
442+ self ._current_gen = experiment_info ["generations" ]
443+ self ._update_individuals_per_generation_list ()
444+ self ._update_experiment_info ()
445+ self ._update_individuals_figure ()
446+ self ._update_scatter_chart ()
447+
448+ QMessageBox .information (self , "Cut Generations" ,
449+ "{0} Generations were succesfully removed (From N°{1} onwards)"
450+ .format (amount_of_gen_losts , last_gen_removed ))
451+
452+ def on_gen_start_over_button_clicked (self ):
453+ logger .debug ('[EXPERIMENT {0}] [GEN_START_OVER_BUTTON] - '
454+ 'Executing on_gen_start_over_button_clicked function'
455+ .format (self ._experiment_name ))
456+
457+ response = QMessageBox .warning (self , "Start Over" ,
458+ "Except for Generation N°{0}, all generations will be removed. "
459+ "Do you really want to continue?"
460+ .format (self ._current_gen ),
461+ QMessageBox .Yes | QMessageBox .No ,
462+ QMessageBox .No )
463+
464+ if response == QMessageBox .Yes :
465+ chosen_generation = self ._current_gen
466+ logger .info ("[GEN_START_OVER] Removing all the experiment generations "
467+ "except for generation N°{0}" .format (self ._current_gen ))
468+
469+ experiment_info = self ._mlc_local .get_experiment_info (self ._experiment_name )
470+ number_of_gens = experiment_info ["generations" ]
471+
472+ if self ._current_gen != number_of_gens :
473+ self ._mlc_local .remove_generations_from (self ._experiment_name ,
474+ self ._current_gen + 1 )
475+
476+ if self ._current_gen != 1 :
477+ self ._mlc_local .remove_generations_to (self ._experiment_name ,
478+ self ._current_gen - 1 )
479+
480+ # Recalculate the amount of generations in the project
481+ experiment_info = self ._mlc_local .get_experiment_info (self ._experiment_name )
482+ self ._current_gen = experiment_info ["generations" ]
483+ self ._update_individuals_per_generation_list ()
484+ self ._update_experiment_info ()
485+ self ._update_individuals_figure ()
486+ self ._update_scatter_chart ()
487+
488+ QMessageBox .information (self , "Star Over Generations" ,
489+ "Experiment was succesfully pruned. Past Generation "
490+ "N°{0} is the only generation of the experiment"
491+ .format (chosen_generation ))
492+
493+
494+ ################################### VIEW AND MODEL METHODS #########################################
495+
420496 def _config_table_edited (self , left , right ):
421497 config_table = self ._autogenerated_object .config_table
422498 table_model = config_table .model ()
@@ -626,18 +702,12 @@ def _update_experiment_info(self):
626702 else :
627703 self ._current_gen = 0
628704 gen_count_group .setTitle ("Generation: 0/0" )
705+ db_view = self ._autogenerated_object .db_view
706+ db_view .setModel (None )
629707
630708 def _update_individuals_figure (self ):
709+ chart_layout = self ._autogenerated_object .chart_layout
631710 if self ._current_gen != 0 :
632- chart_layout = self ._autogenerated_object .chart_layout
633-
634- # Matplotlib graphs
635- # indiv_canvas = CostPerIndividualCanvas(indiv_graph_frame, width=5, height=4, dpi=85)
636- # indiv_canvas.set_costs(current_generation.get_costs())
637- # indiv_canvas.set_xlabel('Individuals')
638- # indiv_canvas.set_ylabel('Costs')
639- # indiv_canvas.set_title('Cost Per Individual')
640- # indiv_canvas.compute_initial_figure(self._autogenerated_object.log_check.isChecked())
641711
642712 # Draw current generation
643713 current_generation = self ._mlc_local .get_generation (self ._experiment_name , self ._current_gen )
@@ -664,13 +734,18 @@ def _update_individuals_figure(self):
664734 costs = gen .get_costs ()
665735 indiv_chart .add_data (samples , costs , color = Qt .blue , line_width = 1 )
666736
667- indiv_canvas = indiv_chart .get_widget ()
668-
669737 # Remove all previous widgets before rendering again
670738 for i in reversed (range (chart_layout .count ())):
671739 chart_layout .itemAt (i ).widget ().setParent (None )
740+
672741 # Add the Indiv Canvas
742+ indiv_canvas = indiv_chart .get_widget ()
673743 chart_layout .addWidget (indiv_canvas )
744+ else :
745+ # Remove all previous widgets before rendering again
746+ for i in reversed (range (chart_layout .count ())):
747+ chart_layout .itemAt (i ).widget ().setParent (None )
748+ chart_layout .addWidget (self ._autogenerated_object .textEdit_2 )
674749
675750 def _reload_experiment_config (self , some_string ):
676751 logger .debug ('[EXPERIMENT {0}] [EXPERIMENT_CONF_FILE_CHANGED] - '
0 commit comments