33import os
44import numpy as np
55import sys
6+ import time
67sys .path .append (os .path .abspath ("." ) + "/../.." )
78
89from MLC .Log .log import get_gui_logger
@@ -104,10 +105,6 @@ def on_prev_gen_button_clicked(self):
104105
105106 if self ._current_gen > 1 :
106107 self ._current_gen -= 1
107-
108- # Change combo box currentIndex
109- gen_count_combo = self ._autogenerated_object .gen_count_combo
110-
111108 self ._update_experiment_info ()
112109 self ._update_individuals_figure ()
113110
@@ -118,10 +115,6 @@ def on_next_gen_button_clicked(self):
118115
119116 if self ._current_gen < number_of_gens :
120117 self ._current_gen += 1
121-
122- # Change combo box currentIndex
123- gen_count_combo = self ._autogenerated_object .gen_count_combo
124-
125118 self ._update_experiment_info ()
126119 self ._update_individuals_figure ()
127120
@@ -140,7 +133,7 @@ def on_test_button_clicked(self):
140133 # Calculate individual cost
141134 try :
142135
143- individual = Individual .generate (config = Config .get_instance (),
136+ individual = Individual .generate (config = Config .get_instance (),
144137 rhs_value = test_indiv_edit .text ())
145138 callback = EvaluatorFactory .get_callback ()
146139 cost = callback .cost (individual )
@@ -265,8 +258,47 @@ def _config_table_edited(self, left, right):
265258 self ._autogenerated_object .save_config_button .setDisabled (False )
266259
267260 def _db_view_edited (self , left , right ):
268- # TODO
269- pass
261+ db_view = self ._autogenerated_object .db_view
262+ table_model = db_view .model ()
263+
264+ response = QMessageBox .information (self , "Editing Experiment DB" ,
265+ "Do you really want to change value?" ,
266+ QMessageBox .No | QMessageBox .Yes ,
267+ QMessageBox .No )
268+
269+ indiv_id = int (table_model .get_data (left .row (), 1 ))
270+ if response == QMessageBox .No :
271+ # Get the value stored in the database
272+ indiv_data = self ._mlc_local .get_individual (self ._experiment_name , indiv_id )
273+
274+ if left .column () == 4 :
275+ # Cost modified
276+ old_value = indiv_data .get_cost_history ()[self ._current_gen ][0 ][0 ]
277+ logger .info ('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
278+ 'Edition was canceled. Cell({1}, {2}) - Old value: {3}'
279+ .format (self ._experiment_name , left .row (),
280+ left .column (), old_value ))
281+ table_model .set_data (left .row (), left .column (), str (old_value ))
282+ elif left .column () == 5 :
283+ # Value modified
284+ # TODO:
285+ pass
286+ else :
287+ value = table_model .get_data (left .row (), left .column ())
288+
289+ if left .column () == 4 :
290+ logger .info ('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
291+ 'Updating database. Cell ({1}, {2}) - Value: {3}'
292+ .format (self ._experiment_name , left .row (),
293+ left .column (), value ))
294+ self ._mlc_local .update_individual_cost (experiment_name = self ._experiment_name ,
295+ indiv_id = indiv_id ,
296+ new_cost = float (value ),
297+ new_ev_time = time .time (),
298+ generation = self ._current_gen )
299+ elif left .column () == 5 :
300+ # TODO
301+ pass
270302
271303 def _update_individuals_per_generation_list (self ):
272304 # Clean up ye olde list
@@ -297,12 +329,12 @@ def _update_individuals_per_generation_list(self):
297329
298330 for pop_index in xrange (1 , indivs_per_gen + 1 ):
299331 indiv_index = pop_individuals [pop_index - 1 ]
300- indiv_cost = costs [pop_index - 1 ]
332+ indiv_cost = str ( costs [pop_index - 1 ])
301333 indiv_value = individuals [indiv_index ].get_value ()
302334 indiv_appearences = individuals [indiv_index ].get_appearances ()
303335
304336 indiv_gen_method = Population .gen_method_description (gen_methods [pop_index - 1 ])
305- gens_list .append ([pop_index , indiv_index + 1 , indiv_gen_method ,
337+ gens_list .append ([pop_index , indiv_index , indiv_gen_method ,
306338 indiv_appearences , indiv_cost , indiv_value ])
307339
308340 self ._individuals_per_generation .append (gens_list )
@@ -358,6 +390,7 @@ def _update_experiment_info(self):
358390 db_view .resizeColumnsToContents ()
359391 db_view .setSortingEnabled (True )
360392 table_model .set_editable_columns (editable_columns )
393+ table_model .set_data_changed_callback (self ._db_view_edited )
361394 table_model .sort_by_col (0 )
362395
363396 # Refresh the gen_count_label
0 commit comments