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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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')
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
        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
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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())
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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))
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
    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