def evolutionary_algorithm(pop, max_gen, fitness, operators, mate_sel, *, map_fn= map, log= 1, term_condition= 1): global evolution_name # best individual(string representation) for each generation out_bi_gen = [] # best objective for each generation out_fit_gen = [] # pre-processed fitness f = fitness(ind = pop[0]) global Adaptive_fit Adaptive_fit = f # INIT TIME global start_eva global init_time start_eva = time.time() init_time = start_eva - start_time count = 0 for G in Bar('Evolution').iter(range(max_gen)): offspring = mate(pop[0], operators) pop[0] = mate_sel(pop= offspring, parent= pop[0]) bi = pop[0] fit_value = fitness(ind=bi) gen = str(G).zfill(NUMBER_FORMAT) out_fit_gen.append(gen + ' : ' + str(fit_value)) if G % log == 0 or G == max_gen-1: count += 1 out_bi_gen.append(gen + '\n' + bi.ToString()) if count == 1000: logger.log_data(data= out_fit_gen, file_name= file_fits) logger.log_data(data= out_bi_gen, file_name= file_generations) # best individual(string representation) for each generation out_bi_gen = [] # best objective for each generation out_fit_gen = [] count = 0 if fit_value >= 1: # add last Best ind out_bi_gen.append(gen + '\n' + bi.ToString()) break return pop, out_bi_gen, out_fit_gen
def get_process(self): if self.process: logger.log_data('Get process', 'Returning process with id %i.' % self.process.pid) return self.process else: logger.log_data('Get process', 'Process does not exists, return None.') return None
def validate_project_directory_page(): is_page_complete = (bool(model.project_directory.strip())) # # Set fields sensitive/insensitive or editable/non-editable based on results. # display.set_sensitive('next_button', is_page_complete) logger.log_data( 'Is project directory page, original section, valid?', is_page_complete)
def show_page(old_page_name, new_page_name): # Hide the current page. logger.log_data('Hiding old page', old_page_name) grid = model.builder.get_object(old_page_name) GLib.idle_add(Gtk.Grid.set_visible, grid, False) # Show the next page logger.log_data('Showing new page', new_page_name) grid = model.builder.get_object(new_page_name) GLib.idle_add(Gtk.Grid.set_visible, grid, True) # Set the current page name. model.set_page_name(new_page_name) # Allow the window to refresh, and avoid race conditions. time.sleep(0.25)
def __init__(self, page_name, new_page_name, previous_thread=None): if previous_thread: logger.log_step('Created new thread') logger.log_data('Current page', page_name) logger.log_data('New page', new_page_name) logger.log_data('Previous thread id', previous_thread.ident) else: logger.log_step('Created new thread') logger.log_data('Current page', page_name) logger.log_data('New page', new_page_name) # Set instance variables self.page_name = page_name self.new_page_name = new_page_name self.previous_thread = previous_thread self.process = None Thread.__init__(self)
def interrupt_previous_thread(self): # logger.log_note('Interrupt previous thread') sys.stdout.flush() if self.previous_thread and self.previous_thread.is_alive(): display.show_spinner() display.reset_buttons() time.sleep(0.125) if self.previous_thread and self.previous_thread.is_alive(): previous_thread_id = self.previous_thread.ident logger.log_data('Interrupting previous thread with id', previous_thread_id) ctypes.pythonapi.PyThreadState_SetAsyncExc( ctypes.c_long(previous_thread_id), ctypes.py_object(InterruptException)) self.terminate_process(self.previous_thread) self.previous_thread.join() # time.sleep(0.50) logger.log_data('Done interrupting previous thread with id', previous_thread_id) display.hide_spinner() else: logger.log_data('Interrupting previous thread with id', 'No previous thread to interrupt')
def empty_listbox(listbox_name): listbox = model.builder.get_object(listbox_name) for listbox_row in listbox.get_children(): child = listbox_row.get_children()[0] if isinstance(child, Gtk.Label): logger.log_data('Removing label', child.get_text()) elif isinstance(child, Gtk.Button): logger.log_data('Removing button', child.get_label()) else: logger.log_data('Removing unknown type', child) GLib.idle_add(Gtk.ListBox.remove, listbox, listbox_row) GLib.idle_add(Gtk.Widget.destroy, listbox_row)
def replace_text_in_stack_buffer(stack_name, *search_replace_tuples): stack = model.builder.get_object(stack_name) # TODO: Remove this line when 14.04 is no longer supported. # Bypass this functionality for Ubuntu 14.04. # Thsis is necessary because Gtk 3.10 in Ubuntu 14.04 does not support # Gtk.Stack or Gtk.StackSidebar. if not stack: return logger.log_data('Searh and replace in stack', stack_name) # Prepate search settings. search_settings = GtkSource.SearchSettings() search_settings.set_regex_enabled(True) search_settings.set_wrap_around(True) scrolled_windows = stack.get_children() for scrolled_window in scrolled_windows: source_view = scrolled_window.get_child() source_buffer = source_view.get_buffer() total_replacement_count = 0 for search_replace_tuple in search_replace_tuples: search_text, replacement_text = search_replace_tuple logger.log_data('Search and replace', '%s ⊳ %s' % (search_text, replacement_text)) search_settings.set_search_text(search_text) search_context = GtkSource.SearchContext.new( source_buffer, search_settings) replacement_count = search_context.replace_all( replacement_text, -1) logger.log_data('Number of matches', replacement_count) total_replacement_count += replacement_count return total_replacement_count
def set_process(self, new_process): self.process = new_process # logger.log_data('Set the new process for thread with id %s ' % self.ident, 'The new process id is %s' % self.process.pid) logger.log_data('Set a new process for thread id', self.ident) logger.log_data('The new process id is', self.process.pid)
d_loss = (real_loss + fake_loss) / 2 d_loss.backward() optimizer_D.step() batches_done = epoch * len(dataloader) + i logger.log_debug( '[Epoch %d/%d] [Batch %d/%d] [D loss: %f] [G loss: %f]' % (epoch, opt.n_epochs, i, len(dataloader), d_loss.item(), g_loss.item())) # Log data to CSV file logger.log_data(iteration=batches_done, dloss=d_loss.item(), gloss=g_loss.item(), epoch=epoch, batch=i) # Every sampling interval, we save an image of our progress so far if batches_done % opt.sample_interval == 0: fixed_imgs = generator(fixed_noise) save_image(fixed_imgs.data[:25], opt.experiment_name + "/images/seq%d.png" % intervals_done, nrow=5, normalize=True) intervals_done += 1 # Every epoch, save the weights and optimizer state # https://discuss.pytorch.org/t/loading-a-saved-model-for-continue-training/17244/2
def set_entry_editable(widget_name, is_editable): # logger.log_data('Set name property to editable is "%s" for entry' % is_editable, widget_name) entry = model.builder.get_object(widget_name) name = entry.get_name() # logger.log_data('The current name for the entry is', name) if is_editable: # logger.log_data('Set "editable" for entry', widget_name) if name == 'normal': pass elif name == 'error': pass elif name == 'non-editable': entry.set_name('normal') # GLib.idle_add(Gtk.Entry.set_name, entry,'normal') elif name == 'non-editable-error': entry.set_name('error') # GLib.idle_add(Gtk.Entry.set_name, entry,'error') elif name == 'automatic': pass elif name == 'automatic-error': pass elif name == 'automatic-non-editable': entry.set_name('automatic') # GLib.idle_add(Gtk.Entry.set_name, entry,'automatic') elif name == 'automatic-non-editable-error': entry.set_name('automatic-error') # GLib.idle_add(Gtk.Entry.set_name, entry,'automatic-error') else: entry.set_name('normal') logger.log_data( 'Unable to set name property to indicate editable is "%s" for entry' % is_editable, widget_name) logger.log_data('The previous name for the entry was', name) logger.log_data('The new name for the entry is', entry.get_name()) else: # logger.log_data('Set "non-editable" for entry', widget_name) if name == 'normal': entry.set_name('non-editable') # GLib.idle_add(Gtk.Entry.set_name, entry,'non-editable') elif name == 'error': entry.set_name('non-editable-error') # GLib.idle_add(Gtk.Entry.set_name, entry,'non-editable-error') elif name == 'non-editable': pass elif name == 'non-editable-error': pass elif name == 'automatic': entry.set_name('automatic-non-editable') # GLib.idle_add(Gtk.Entry.set_name, entry,'automatic-non-editable') elif name == 'automatic-error': entry.set_name('automatic-non-editable-error') # GLib.idle_add(Gtk.Entry.set_name, entry,'automatic-non-editable-error') elif name == 'automatic-non-editable': pass elif name == 'automatic-non-editable-error': pass else: entry.set_name('non-editable') logger.log_data( 'Unable to set name property to indicate editable is "%s" for entry' % is_editable, widget_name) logger.log_data('The previous name for the entry was', name) logger.log_data('The new name for the entry is', entry.get_name()) entry.set_editable(is_editable)
def set_label_error(widget_name, is_error): # logger.log_data('Set name property to error is "%s" for label' % is_error, widget_name) label = model.builder.get_object(widget_name) name = label.get_name() # logger.log_data('The current name for the label is', name) if is_error: if name == 'normal': label.set_name('error') # GLib.idle_add(Gtk.Label.set_name, label, 'error') elif name == 'error': pass elif name == 'non-editable': label.set_name('non-editable-error') # GLib.idle_add(Gtk.Label.set_name, label, 'non-editable-error') elif name == 'non-editable-error': pass elif name == 'automatic': label.set_name('automatic-error') # GLib.idle_add(Gtk.Label.set_name, label, 'automatic-error') elif name == 'automatic-error': pass elif name == 'automatic-non-editable': label.set_name('automatic-non-editable-error') # GLib.idle_add(Gtk.Label.set_name, label, 'automatic-non-editable-error') elif name == 'automatic-non-editable-error': pass else: label.set_name('error') logger.log_data( 'Unable to set name property to indicate error is "%s" for label' % is_error, widget_name) logger.log_data('The previous name for the label was', name) logger.log_data('The new name for the label is', label.get_name()) else: if name == 'normal': pass elif name == 'error': label.set_name('normal') # GLib.idle_add(Gtk.Label.set_name, label, 'normal') elif name == 'non-editable': pass elif name == 'non-editable-error': label.set_name('non-editable') # GLib.idle_add(Gtk.Label.set_name, label, 'non-editable') elif name == 'automatic': pass elif name == 'automatic-error': label.set_name('automatic') # GLib.idle_add(Gtk.Label.set_name, label, 'automatic') elif name == 'automatic-non-editable': pass elif name == 'automatic-non-editable-error': label.set_name('automatic-non-editable') # GLib.idle_add(Gtk.Label.set_name, label, 'automatic-non-editable') else: label.set_name('normal') logger.log_data( 'Unable to set name property to indicate error is "%s" for label' % is_error, widget_name) logger.log_data('The previous name for the label was', name) logger.log_data('The new name for the label is', label.get_name())
def validate_existing_project_page_for_delete(): is_page_complete = True # # Validate existing project page, original section. # # Original Iso Image Filename is_field_complete = ( bool(model.original_iso_image_filename.strip()) and utilities.is_mounted( model.original_iso_image_filepath, model.original_iso_image_mount_point)) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__original_iso_image_filename_label', not is_field_complete) display.set_entry_error( 'existing_project_page__original_iso_image_filename_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__original_iso_image_filename', status) # Original Iso Image Directory is_field_complete = bool(model.original_iso_image_directory.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__original_iso_image_directory_label', not is_field_complete) display.set_entry_error( 'existing_project_page__original_iso_image_directory_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__original_iso_image_directory', status) # Original Iso Image Volume Id is_field_complete = bool(model.original_iso_image_volume_id.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__original_iso_image_volume_id_label', not is_field_complete) display.set_entry_error( 'existing_project_page__original_iso_image_volume_id_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__original_iso_image_volume_id', status) # Original Iso Image Release Name is_field_complete = bool(model.original_iso_image_release_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__original_iso_image_release_name_label', not is_field_complete) display.set_entry_error( 'existing_project_page__original_iso_image_release_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__original_iso_image_release_name', status) # Original Iso Image Disk Name is_field_complete = bool(model.original_iso_image_disk_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__original_iso_image_disk_name_label', not is_field_complete) display.set_entry_error( 'existing_project_page__original_iso_image_disk_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__original_iso_image_disk_name', status) # # Set fields sensitive/insensitive or editable/non-editable based on results. # display.set_entry_editable( 'existing_project_page__custom_iso_image_version_number_entry', False) display.set_entry_editable( 'existing_project_page__custom_iso_image_filename_entry', False) # display.set_entry_editable( # 'existing_project_page__custom_iso_image_directory_entry', # False) display.set_sensitive( 'existing_project_page__custom_iso_image_directory_filechooser__open_button', False) display.set_entry_editable( 'existing_project_page__custom_iso_image_volume_id_entry', False) display.set_entry_editable( 'existing_project_page__custom_iso_image_release_name_entry', False) display.set_entry_editable( 'existing_project_page__custom_iso_image_disk_name_entry', False) logger.log_data( 'Is existing project page, original section, for delete valid?', is_page_complete) # # Validate existing project page, custom section. # # Custom Iso Image Version Number (Optional) is_field_complete = bool(model.custom_iso_image_version_number.strip()) # is_page_complete = is_page_complete and is_field_complete # display.set_label_error( # 'existing_project_page__custom_iso_image_version_number_label', # not is_field_complete) # display.set_entry_error( # 'existing_project_page__custom_iso_image_version_number_entry', # not is_field_complete) status = display.OK if is_field_complete else display.OPTIONAL display.update_status( 'existing_project_page__custom_iso_image_version_number', status) # Custom Iso Image Filename is_field_complete = bool( model.custom_iso_image_filename.strip() and model.custom_iso_image_filename.strip()[0] != '.') is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__custom_iso_image_filename_label', not is_field_complete) display.set_entry_error( 'existing_project_page__custom_iso_image_filename_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__custom_iso_image_filename', status) # Custom Iso Image Directory is_field_complete = bool(model.custom_iso_image_directory.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__custom_iso_image_directory_label', not is_field_complete) display.set_entry_error( 'existing_project_page__custom_iso_image_directory_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__custom_iso_image_directory', status) # Custom Iso Image Volume Id is_field_complete = bool(model.custom_iso_image_volume_id.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__custom_iso_image_volume_id_label', not is_field_complete) display.set_entry_error( 'existing_project_page__custom_iso_image_volume_id_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__custom_iso_image_volume_id', status) # Custom Iso Image Release Name (Optional) is_field_complete = bool(model.custom_iso_image_release_name.strip()) # is_page_complete = is_page_complete and is_field_complete # display.set_label_error( # 'existing_project_page__custom_iso_image_release_name_label', # not is_field_complete) # display.set_entry_error( # 'existing_project_page__custom_iso_image_release_name_entry', # not is_field_complete) status = display.OK if is_field_complete else display.OPTIONAL display.update_status( 'existing_project_page__custom_iso_image_release_name', status) # Custom Iso Image Disk Name is_field_complete = bool(model.custom_iso_image_disk_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'existing_project_page__custom_iso_image_disk_name_label', not is_field_complete) display.set_entry_error( 'existing_project_page__custom_iso_image_disk_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'existing_project_page__custom_iso_image_disk_name', status) # # Set fields sensitive/insensitive or editable/non-editable based on results. # display.set_sensitive('next_button', True) logger.log_data( 'Is existing project page, custom section, for delete valid?', is_page_complete)
def validate_new_project_page_original(): is_page_complete = True # Original Iso Image Filename is_field_complete = ( bool(model.original_iso_image_filename.strip()) and utilities.is_mounted( model.original_iso_image_filepath, model.original_iso_image_mount_point)) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__original_iso_image_filename_label', not is_field_complete) display.set_entry_error( 'new_project_page__original_iso_image_filename_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__original_iso_image_filename', status) # Original Iso Image Directory is_field_complete = bool(model.original_iso_image_directory.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__original_iso_image_directory_label', not is_field_complete) display.set_entry_error( 'new_project_page__original_iso_image_directory_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__original_iso_image_directory', status) # Original Iso Image Volume Id is_field_complete = bool(model.original_iso_image_volume_id.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__original_iso_image_volume_id_label', not is_field_complete) display.set_entry_error( 'new_project_page__original_iso_image_volume_id_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__original_iso_image_volume_id', status) # Original Iso Image Release Name is_field_complete = bool(model.original_iso_image_release_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__original_iso_image_release_name_label', not is_field_complete) display.set_entry_error( 'new_project_page__original_iso_image_release_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__original_iso_image_release_name', status) # Original Iso Image Disk Name is_field_complete = bool(model.original_iso_image_disk_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__original_iso_image_disk_name_label', not is_field_complete) display.set_entry_error( 'new_project_page__original_iso_image_disk_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__original_iso_image_disk_name', status) # # Set fields sensitive/insensitive or editable/non-editable based on results. # display.set_entry_editable( 'new_project_page__custom_iso_image_version_number_entry', is_page_complete) display.set_entry_editable( 'new_project_page__custom_iso_image_filename_entry', is_page_complete) # display.set_entry_editable( # 'new_project_page__custom_iso_image_directory_entry', # is_page_complete) display.set_sensitive( 'new_project_page__custom_iso_image_directory_filechooser__open_button', is_page_complete) display.set_entry_editable( 'new_project_page__custom_iso_image_volume_id_entry', is_page_complete) display.set_entry_editable( 'new_project_page__custom_iso_image_release_name_entry', is_page_complete) display.set_entry_editable( 'new_project_page__custom_iso_image_disk_name_entry', is_page_complete) logger.log_data( 'Is new project page, original section, valid?', is_page_complete)
def validate_new_project_page_custom(): is_page_complete = True # Custom Iso Image Version Number (Optional) is_field_complete = bool(model.custom_iso_image_version_number.strip()) # is_page_complete = is_page_complete and is_field_complete # display.set_label_error( # 'new_project_page__custom_iso_image_version_number_label', # not is_field_complete) # display.set_entry_error( # 'new_project_page__custom_iso_image_version_number_entry', # not is_field_complete) status = display.OK if is_field_complete else display.OPTIONAL display.update_status( 'new_project_page__custom_iso_image_version_number', status) # Custom Iso Image Filename is_field_complete = bool( model.custom_iso_image_filename.strip() and model.custom_iso_image_filename.strip()[0] != '.') is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__custom_iso_image_filename_label', not is_field_complete) display.set_entry_error( 'new_project_page__custom_iso_image_filename_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__custom_iso_image_filename', status) # Custom Iso Image Directory is_field_complete = bool(model.custom_iso_image_directory.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__custom_iso_image_directory_label', not is_field_complete) display.set_entry_error( 'new_project_page__custom_iso_image_directory_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__custom_iso_image_directory', status) # Custom Iso Image Volume Id is_field_complete = bool(model.custom_iso_image_volume_id.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__custom_iso_image_volume_id_label', not is_field_complete) display.set_entry_error( 'new_project_page__custom_iso_image_volume_id_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__custom_iso_image_volume_id', status) # Custom Iso Image Release Name (Optional) is_field_complete = bool(model.custom_iso_image_release_name.strip()) # is_page_complete = is_page_complete and is_field_complete # display.set_label_error( # 'new_project_page__custom_iso_image_release_name_label', # not is_field_complete) # display.set_entry_error( # 'new_project_page__custom_iso_image_release_name_entry', # not is_field_complete) status = display.OK if is_field_complete else display.OPTIONAL display.update_status( 'new_project_page__custom_iso_image_release_name', status) # Custom Iso Image Disk Name is_field_complete = bool(model.custom_iso_image_disk_name.strip()) is_page_complete = is_page_complete and is_field_complete display.set_label_error( 'new_project_page__custom_iso_image_disk_name_label', not is_field_complete) display.set_entry_error( 'new_project_page__custom_iso_image_disk_name_entry', not is_field_complete) status = display.OK if is_field_complete else display.ERROR display.update_status( 'new_project_page__custom_iso_image_disk_name', status) # # Set fields sensitive/insensitive or editable/non-editable based on results. # display.set_sensitive('next_button', is_page_complete) logger.log_data( 'Is new project page, custom section, valid?', is_page_complete)
def terminate_process(self, previous_thread): # TODO: Handle errors # - Raise ExceptionPexpect('Could not terminate the child.') # - Cannot wait for dead child process process = previous_thread.process if process: logger.log_data('Is there a process running?', True) process_id = previous_thread.get_process_id() logger.log_data('Terminating process with id', process_id) is_alive = process.isalive() logger.log_data('Is process with id %s alive?' % process_id, is_alive) is_terminated = False if is_alive: try: logger.log_data('Trying to terminate process with id', process_id) is_terminated = process.terminate(True) except Exception as exception: logger.log_data('Exception encountered in thread', self.ident) logger.log_data( 'Exception encountered terminating process with id', process_id) # logger.log_data('The exception is', exception) logger.log_data('The tracekback is', traceback.format_exc()) try: logger.log_data('Trying to wait for process with id', process_id) # If the process is no longer alive, consider it terminated. process.wait() is_terminated = not process.isalive() except Exception as exception: logger.log_data('Exception encountered in thread', self.ident) logger.log_data( 'Exception encountered waiting for process with id', process_id) # logger.log_data('The exception is', exception) logger.log_data('The tracekback is', traceback.format_exc()) else: logger.log_data( 'Finished trying to wait for process with id', process_id) else: logger.log_data( 'Finished trying to terminate process with id', process_id) else: is_terminated = True logger.log_data('Process %s terminated?' % process_id, is_terminated) else: logger.log_data('Is there a process running?', False)
def action(self): # Project Directory Page # New Project Page # Existing Project Page # Delete Project Page # Unsquashfs Page # Terminal Page # Copy Files Page # Options Page # Repackage ISO Page # Finish Page logger.log_step('Performing requested transition action') logger.log_data('Transition from', self.page_name) logger.log_data('Transition to', self.new_page_name) # TODO: After making the to 'TODO' changes below, move this section after the "elif self.page_name == 'project_directory_page'" section below. if self.page_name == 'project_directory_page__project_directory_filechooser': if self.new_page_name == 'project_directory_page': transitions.transition__from__project_directory_page__project_directory_filechooser__to__project_directory_page( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'original_iso_image_filepath_filechooser': # TODO: Notice the page name below is 'original_iso_image_filepath_filechooser'. # For consistency, consider using separate transitions for # - new_project_page_original_iso_image_filepath_filechooser # - existing_project_page_original_iso_image_filepath_filechooser # Place new code after "New Project" and after "Existing Project Page" sections below. if self.new_page_name == 'new_project_page': transitions.transition__from__original_iso_image_filepath_filechooser__to__new_project_page( self) elif self.new_page_name == 'existing_project_page': transitions.transition__from__original_iso_image_filepath_filechooser__to__existing_project_page( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'custom_iso_image_directory_filechooser': # TODO: Notice the page name below is 'custom_iso_image_directory_filechooser'. # For consistency, consider using separate transitions for # - new_project_page_custom_iso_image_directory_filechooser # - existing_project_page_custom_iso_image_directory_filechooser # Place new code after "New Project" and after "Existing Project Page" sections below. if self.new_page_name == 'new_project_page': transitions.transition__from__custom_iso_image_directory_filechooser__to__new_project_page( self) elif self.new_page_name == 'existing_project_page': transitions.transition__from__custom_iso_image_directory_filechooser__to__existing_project_page( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'project_directory_page': if self.new_page_name == 'new_project_page': # New Project transitions.transition__from__project_directory_page__to__new_project_page( self) elif self.new_page_name == 'existing_project_page': # Existing Project transitions.transition__from__project_directory_page__to__existing_project_page( self) elif self.new_page_name == 'exit': transitions.transition__from__project_directory_page__to__exit( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'new_project_page': # TODO: Add a transition to # - new_project_page_original_iso_image_filepath_filechooser # - new_project_page_custom_iso_image_directory_filechooser # Instead of using # - handlers.on_clicked__new_project_page__original_iso_image_filepath_filechooser__open_button() # - handlers.on_clicked__new_project_page__custom_iso_image_directory_filechooser__open_button() if self.new_page_name == 'terminal_page': transitions.transition__from__new_project_page__to__terminal_page( self) elif self.new_page_name == 'project_directory_page': transitions.transition__from__new_project_page__to__project_directory_page( self) elif self.new_page_name == 'exit': transitions.transition__from__new_project_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'existing_project_page': # TODO: Add a transition to... # - existing_project_page_original_iso_image_filepath_filechooser # - existing_project_page_custom_iso_image_directory_filechooser # Instead of using... # - handlers.on_clicked__existing_project_page__original_iso_image_filepath_filechooser__open_button() # - handlers.on_clicked__existing_project_page__custom_iso_image_directory_filechooser__open_button() if self.new_page_name == 'existing_project_page': transitions.transition__from__existing_project_page__to__existing_project_page( self) elif self.new_page_name == 'options_page': transitions.transition__from__existing_project_page__to__options_page( self) elif self.new_page_name == 'terminal_page': transitions.transition__from__existing_project_page__to__terminal_page( self) elif self.new_page_name == 'delete_project_page': transitions.transition__from__existing_project_page__to__delete_project_page( self) elif self.new_page_name == 'project_directory_page': transitions.transition__from__existing_project_page__to__project_directory_page( self) elif self.new_page_name == 'exit': transitions.transition__from__existing_project_page__to__exit( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'delete_project_page': if self.new_page_name == 'new_project_page': transitions.transition__from__delete_project_page__to__new_project_page( self) elif self.new_page_name == 'existing_project_page': transitions.transition__from__delete_project_page__to__existing_project_page( self) elif self.new_page_name == 'exit': transitions.transition__from__delete_project_page__to__exit( self) elif self.page_name == 'unsquashfs_page': # TODO: This transition is automatic, so this section is not used. # if self.new_page_name == 'terminal_page': # transitions.transition__from__unsquashfs_page__to__terminal_page(self) if self.new_page_name == 'existing_project_page': transitions.transition__from__unsquashfs_page__to__existing_project_page( self) elif self.new_page_name == 'exit': transitions.transition__from__unsquashfs_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'terminal_page': if self.new_page_name == 'options_page': transitions.transition__from__terminal_page__to__options_page( self) elif self.new_page_name == 'copy_files_page': transitions.transition__from__terminal_page__to__copy_files_page( self) elif self.new_page_name == 'existing_project_page': transitions.transition__from__terminal_page__to__existing_project_page( self) elif self.new_page_name == 'terminal_page': transitions.transition__from__terminal_page__to__terminal_page( self) elif self.new_page_name == 'exit': transitions.transition__from__terminal_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'copy_files_page': if self.new_page_name == 'terminal_page_copy_files': # TODO: Consider converting to (page, function) instead of (page, page) transitions.transition__from__copy_files_page__to__terminal_page_copy_files( self) elif self.new_page_name == 'terminal_page_cancel_copy_files': transitions.transition__from__copy_files_page__to__terminal_page_cancel_copy_files( self) elif self.new_page_name == 'exit': transitions.transition__from__copy_files_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'options_page': if self.new_page_name == 'existing_project_page': transitions.transition__from__options_page__to__existing_project_page( self) elif self.new_page_name == 'repackage_iso_page': transitions.transition__from__options_page__to__repackage_iso_page( self) elif self.new_page_name == 'terminal_page': transitions.transition__from__options_page__to__terminal_page( self) elif self.new_page_name == 'exit': transitions.transition__from__options_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'repackage_iso_page': if self.new_page_name == 'finish_page': transitions.transition__from__repackage_iso_page__to__finish_page( self) elif self.new_page_name == 'options_page': transitions.transition__from__repackage_iso_page__to__options_page( self) elif self.new_page_name == 'exit': transitions.transition__from__repackage_iso_page__to__exit( self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) elif self.page_name == 'finish_page': if self.new_page_name == 'exit': transitions.transition__from__finish_page__to__exit(self) else: # Error logger.log_data('Error. No action defined for transition to', self.new_page_name) else: # Error logger.log_data( 'Error. No action defined for transition', 'From %s to %s' % (self.page_name, self.new_page_name))
def _add_to_stack(stack_name, filepaths, *search_replace_tuples): stack = model.builder.get_object(stack_name) # TODO: Remove this line when 14.04 is no longer supported. # Bypass this functionality for Ubuntu 14.04. # Thsis is necessary because Gtk 3.10 in Ubuntu 14.04 does not support # Gtk.Stack or Gtk.StackSidebar. if not stack: return # Remove all items from the stack. logger.log_data('Remove all items from the stack', stack_name) scrolled_windows = stack.get_children() for scrolled_window in scrolled_windows: stack.remove(scrolled_window) # Prepate search settings. search_settings = GtkSource.SearchSettings() search_settings.set_regex_enabled(True) search_settings.set_wrap_around(True) # Add new items to the stack. logger.log_data('Add new items to stack', stack_name) for filepath in filepaths: title = '/%s' % os.path.relpath(filepath, model.custom_live_iso_directory) if os.path.exists(filepath): logger.log_data('Add %s from filepath' % title, filepath) # Create a new scrolled window. builder_temp = Gtk.Builder.new_from_file(timbrel_cfg.path + '/ui/scrolled_window.ui') scrolled_window = builder_temp.get_object('scrolled_window') # Get the source buffer. source_view = scrolled_window.get_child() source_buffer = source_view.get_buffer() # Read the file, and add it to the source buffer. with open(filepath, 'r') as file: data = file.read() source_buffer.set_text(data) # Add the new scrolled window to the stack. stack.add_titled(scrolled_window, filepath, title) # Optionally replace text. for search_replace_tuple in search_replace_tuples: search_text, replacement_text = search_replace_tuple logger.log_data('Search and replace', '%s ⊳ %s' % (search_text, replacement_text)) search_settings.set_search_text(search_text) search_context = GtkSource.SearchContext.new( source_buffer, search_settings) replacement_count = search_context.replace_all( replacement_text, -1) logger.log_data('Number of matches', replacement_count) else: logger.log_data( 'Skip adding %s because the file does not exist' % title, filepath)
def run(self): thread_id = self.ident logger.log_data('Running thread with id', thread_id) self.interrupt_previous_thread() # The "action" function invokes the "transition__from..." functions. # The "transition__from..." functions should not catch any exceptions. # Instead, any exceptions should propogate , w they will be # ignored. The old thread and associated process(es) will be stopped. # It is the responsibility of the new canceling thread to clean up after # the old canceled thread. try: self.action() except InterruptException as exception: logger.log_data('InterruptException encountered in thread', self.ident) logger.log_data('Ignore exception?', 'Yes') # logger.log_data('The exception is', exception) # logger.log_data('The tracekback is', traceback.format_exc()) except Exception as exception: logger.log_data('Exception encountered in thread', self.ident) logger.log_data('Ignore exception?', 'No') # logger.log_data('The exception is', exception) logger.log_data('The tracekback is', traceback.format_exc()) logger.log_data('Finished running thread with id', thread_id)
def run(target, height, width, ind_size, max_gen, log, pop, pop_size= 1, adaptive_mut= False, new_ind= 20, mut_ind_prob= 1, eva_name= '', px = 1): # START TIME global start_time start_time = time.time() global Adaptive_shift Adaptive_shift = 100 global NUMBER_FORMAT NUMBER_FORMAT = len(str(max_gen)) global evolution_name evolution_name = eva_name MUT_COUNT = 1 if adaptive_mut: MUT_COUNT = ind_size // 500 if MUT_COUNT < 1: MUT_COUNT = 1 logger.create_file(file_name= file_fits) logger.create_file(file_name= file_final) logger.create_file(file_name= file_generations, data= [str((max_gen // log) + 1 if max_gen % log == 0 else 2)]) import multiprocessing # parallel = multiprocessing.Pool() # we can use multiprocessing to evaluate fitness in parallel pool = multiprocessing.Pool() # use `functool.partial` to create fix some arguments of the functions # and create functions with required signatures # Individual initialozation func. cr_ind = functools.partial(create_ind, ind_len= ind_size, height= height, width= width) # fitness func. fit = functools.partial(fitness, targetInd= target) # mutation function mut_ind = functools.partial(mutate, number_of_mutations = MUT_COUNT, fit = fit) mut = functools.partial(mutation, mut_prob= mut_ind_prob, mutate= mut_ind, new_ind= new_ind, map_fn = pool.map) sel = functools.partial(selection, fitFunc= fit) # create population if pop == None: pop = create_pop(pop_size, cr_ind) else: pop = pop for p in pop: p.obj = None const_term = 1 term_cond = 1/(const_term*(px*px + px*px)*4*ind_size) # run evolution - notice we use the pool.map as the map_fn # remember the best individual from last generation, save it to file final_ind, generations, objs = evolutionary_algorithm(pop, max_gen, fit, [mut], sel, map_fn= pool.map, log= log, term_condition= term_cond) # EVOLUTION TIME global start_eva start_log = time.time() eva_time = start_log - start_eva # log last bi final_str = [f.ToString() for f in final_ind] logger.log_data(data= final_str, file_name= file_final) # log all generations logger.log_data(data= generations, file_name= file_generations) # Log objective function logger.log_data(data= objs, file_name= file_fits) #LOG TIME log_time = time.time() - start_log all_time = time.time() - start_time global init_time # log BENCHMARK logger.log_benchmark(ind_size= ind_size, pop_size= pop_size, new_ind= new_ind, max_gen= max_gen, init_time= init_time, eva_time= eva_time, log_time= log_time, all_time= all_time) return final_ind