def __init__(self, window_provider):
        title = "Create Synthetic Datafile"
        super().__init__(title, window_provider)

        def window_provider(title):
            return self.window.internal_renderer

        self.form = FormController(window_provider)

        def dist_options_provider():
            from datafiles.distribution import all_distributions
            distributions = {}

            for d in all_distributions:
                distributions[d] = d

            return distributions

        dist_select = Select(True, dist_options_provider)
        dist_section = Section("Distribution", dist_select)

        self.form.add_element('dist', dist_section)
        self.form.add_element('samples', Section("Samples", Input(True, int, 1500)))
        self.form.add_element('break1', SectionBreak())

        all_params = {}

        for dist, params in param_map.items():
            for p in params:
                if p not in all_params.keys():
                    inp = Input(True, myfloat, 1)
                    self.form.add_element(p, Section(p, inp))
                    all_params[p] = inp

        self.form.add_element('break2', SectionBreak())
        self.form.add_element('loc', Section("Mean", Input(True, myfloat, 0)))
        self.form.add_element('scale', Section("Standard deviation", Input(True, nfloat, 2)))

        def on_dist_change(old_value, new_value, is_valid=True):
            for inp in all_params.values():
                    inp.disappear()

            if new_value is not None:
                for p in param_map[new_value]:
                    all_params[p].changed()
                    all_params[p].show()

        dist_select.on_change(on_dist_change)
        on_dist_change(None, None)

        self.submitted = False

        cancel = self.form.get_button('cancel', "Cancel", self.remove)
        submit = self.form.get_button('submit', "Submit", self.submit)

        self.form.set_action_button('cancel', cancel)
        self.form.set_action_button('submit', submit)
        self.form.add_element('buttons', DoubleSection(submit, cancel))
        self.form.start()
Ejemplo n.º 2
0
def get_all_inputs(datafile_select):
    parameters = {}
    parameters['population_method'] = Select(True, {
        'auto': "Auto",
        'manual': "Manual"
    }, 0)
    parameters['bins_method'] = Select(
        True, {
            'auto': "Auto",
            'fd': "Freedman Diacosis",
            'doane': "Doane",
            'scott': "Scott",
            'stone': "Stone",
            'rice': "Rice",
            'sturges': "Sturges",
            'sqrt': "Square root",
            'manual': "Manual"
        }, 0)
    parameters['neighbors_method'] = Select(True, {
        'auto': "Auto",
        'manual': "Manual"
    }, 0)
    parameters['bins'] = Input(False, nint, 9)
    parameters['bin_population'] = Input(False, nfloat, 9)
    parameters['neighbors'] = Input(False, nfloat, 9)
    parameters['kernel'] = Select(True, {'gaussian': "Gaussian"})
    parameters['bandwidth'] = Input(True, pfloat, "1.0")

    def on_bins_method_change(old_value, new_value, is_valid):
        if new_value == "manual":
            parameters['bins'].reset()
        else:
            parameters['bins'].disable()
            parameters['bins'].set_value("Disabled")

    def on_population_method_change(old_value, new_value, is_valid):
        if new_value == "manual":
            parameters['bin_population'].reset()
        else:
            parameters['bin_population'].disable()
            parameters['bin_population'].set_value("Disabled")

    def on_neighbors_method_change(old_value, new_value, is_valid):
        if new_value == "manual":
            parameters['neighbors'].reset()
        else:
            parameters['neighbors'].disable()
            parameters['neighbors'].set_value("Disabled")

    parameters['bins_method'].on_change(on_bins_method_change)
    parameters['population_method'].on_change(on_population_method_change)
    parameters['neighbors_method'].on_change(on_neighbors_method_change)

    return parameters
Ejemplo n.º 3
0
    def __init__(self, window_provider, data_controller):
        title = "Plot data"
        super().__init__(title, window_provider)

        self.data_controller = data_controller

        def window_provider(title):
            return self.window.internal_renderer

        self.form = FormController(window_provider)

        def datafile_options_provider():
            datafiles = self.s.get('datafiles')
            datafile_options = {}

            for d in datafiles:
                datafile_options[d] = d

            return datafile_options

        x_axis = Section("X Axis",
                         Select(True, data_controller.get_x_axis_options()))
        self.form.add_element('x', x_axis)

        y_axis = Section("Y Axis",
                         Select(True, data_controller.get_y_axis_options()))
        self.form.add_element('y', y_axis)

        style = Section(
            "Style",
            Select(True, {
                'lines': 'Lines',
                'dots': "Dots",
                'bars': "Bars"
            }))
        self.form.add_element('style', style)

        cancel = self.form.get_button('cancel', "Cancel", self.remove)
        submit = self.form.get_button('submit', "Plot", self.submit)

        self.form.set_action_button('cancel', cancel)
        self.form.set_action_button('submit', submit)
        self.form.add_element('buttons', DoubleSection(submit, cancel))
        self.form.start()
Ejemplo n.º 4
0
    def __init__(self, window_provider, document_provider, window_options={}):
        super().__init__(None, window_provider)
        self.window_options = window_options
        self.document_provider = document_provider

        def back_window_provider(title):
            return self.window.internal_renderer.popup(3, 4 + len("Back"),
                                                       'top', title)

        back = Button("Back", back_window_provider, self.on_back)

        def viewer_window_provider(title):
            return Window(None, -3, -1, 3, 0, self.window.internal_renderer)

        self.document_viewer = DocumentViewer(viewer_window_provider)
        self.prepare_document()

        extra_elements = {'back': back}
        starting_cursor_pos = 'back'

        if 'plot' in window_options.keys():

            def plot_window_provider(title):
                return Window(title, 3, 4 + len("Plot"), 0, 5 + len("Back"),
                              self.window.internal_renderer)

            plot = Button("Plot", plot_window_provider,
                          self.on_plot(window_options['plot']))
            extra_elements['plot'] = plot
            starting_cursor_pos = 'plot'

        if 'sort_by' in window_options.keys():
            sort_option_keys = window_options['sort_by']
            sort_option_names = Estimators.get_all_input_names()
            sort_options = {k: sort_option_names[k] for k in sort_option_keys}
            select = Select(False, sort_options, 0)
            section = Section("Sort by: ", select)

            def on_select_change(old_value, new_value, is_valid):
                parameters = {} if not is_valid else {'sort_by': new_value}
                self.prepare_document(parameters)

            select.on_change(on_select_change)
            select.changed()

            extra_elements['sort'] = section
            starting_cursor_pos = 'sort'

        if len(list(extra_elements.keys())) > 1:
            self.cursor = VListCursor({
                'buttons': HListCursor(extra_elements),
                'document_viewer': self.document_viewer
            })
            self.cursor.current().go_to(starting_cursor_pos)
        else:
            self.cursor = CycleCursor({
                'document_viewer': self.document_viewer,
                'back': back
            })
Ejemplo n.º 5
0
    def __init__(self, window_provider):
        title = "Run repeated experiment"
        super().__init__(title, window_provider)

        def window_provider(title):
            return self.window.internal_renderer

        self.form = FormController(window_provider)

        iterations_input = Section("Iterations", Input(True, pint, 100))
        self.form.add_element('iterations', iterations_input)
        self.form.add_element('break1', SectionBreak())

        def dist_options_provider():
            from datafiles.distribution import all_distributions
            distributions = {}

            for d in all_distributions:
                distributions[d] = d

            return distributions

        dist_select = Select(True, dist_options_provider)
        dist_section = Section("Distribution", dist_select)

        self.form.add_element('dist', dist_section)
        self.form.add_element('samples',
                              Section("Samples", Input(True, int, 1500)))
        self.form.add_element('break1', SectionBreak())

        all_params = {}

        for dist, params in param_map.items():
            for p in params:
                if p not in all_params.keys():
                    inp = Input(True, myfloat, 1)
                    self.form.add_element(p, Section(p, inp))
                    all_params[p] = inp

        self.form.add_element('break2', SectionBreak())
        self.form.add_element('loc', Section("Mean", Input(True, myfloat, 0)))
        self.form.add_element(
            'scale', Section("Standard deviation", Input(True, nfloat, 2)))

        def on_dist_change(old_value, new_value, is_valid=True):
            for inp in all_params.values():
                inp.disappear()

            if new_value is not None:
                for p in param_map[new_value]:
                    all_params[p].changed()
                    all_params[p].show()

        dist_select.on_change(on_dist_change)
        on_dist_change(None, None)

        def get_estimator_options():
            keys = Estimators.get_all()
            options = {}
            for key in keys:
                options[key] = key.get_name()

            options['all'] = "All"

            return options

        estimator_select = Section("Estimator",
                                   Select(True, get_estimator_options))
        self.form.add_element('estimator', estimator_select)
        self.form.add_element('break3', SectionBreak())

        min_parameters = Estimators.get_all_inputs(None)
        max_parameters = Estimators.get_all_inputs(None)
        names = Estimators.get_all_input_names()

        simple_parameters = ['bins_method', 'kernel']
        range_parameters = ['neighbors', 'bins', 'bin_population', 'bandwidth']
        for p in simple_parameters:
            self.form.add_element(p, Section(names[p], min_parameters[p]))

        for p in range_parameters:
            self.form.add_element(
                p, RangeSection(names[p], min_parameters[p],
                                max_parameters[p]))

        def on_estimator_change(old_value, new_value, is_valid=True):
            for inp in min_parameters.values():
                inp.disappear()
            for inp in max_parameters.values():
                inp.disappear()

            if new_value is not None and type(new_value) != str:
                for p in new_value.get_parameters():
                    min_parameters[p].show()
                    min_parameters[p].reset()
                    min_parameters[p].changed()
                    max_parameters[p].show()
                    max_parameters[p].reset()
                    cur_value = max_parameters[p].get_value()

                    if type(cur_value) != str and cur_value is not None:
                        max_parameters[p].set_value(cur_value * 100)
                    max_parameters[p].changed()

        estimator_select.inp.on_change(on_estimator_change)
        on_estimator_change(None, None)

        cancel = self.form.get_button('cancel', "Cancel", self.remove)
        submit = self.form.get_button('submit', "Submit", self.submit)

        self.form.set_action_button('cancel', cancel)
        self.form.set_action_button('submit', submit)
        self.form.add_element('buttons', DoubleSection(submit, cancel))
        self.form.start()
Ejemplo n.º 6
0
    def __init__(self, window_provider):
        title = "Run experiment"
        super().__init__(title, window_provider)

        def window_provider(title):
            return self.window.internal_renderer

        self.form = FormController(window_provider)

        def datafile_options_provider():
            datafiles = self.s.get('datafiles')
            datafile_options = {}

            for d in datafiles:
                datafile_options[d] = d

            return datafile_options

        datafile_select = Section("Datafile",
                                  Select(True, datafile_options_provider))

        self.form.add_element('datafile', datafile_select)

        def get_estimator_options():
            keys = Estimators.get_all()
            options = {}
            for key in keys:
                options[key] = key.get_name()

            options['all'] = "All"

            return options

        estimator_select = Section("Estimator",
                                   Select(True, get_estimator_options))
        self.form.add_element('estimator', estimator_select)
        self.form.add_element('break1', SectionBreak())

        min_parameters = Estimators.get_all_inputs(datafile_select)
        max_parameters = Estimators.get_all_inputs(datafile_select)
        names = Estimators.get_all_input_names()

        simple_parameters = ['bins_method', 'kernel']
        range_parameters = ['neighbors', 'bins', 'bin_population', 'bandwidth']
        for p in simple_parameters:
            self.form.add_element(p, Section(names[p], min_parameters[p]))

        for p in range_parameters:
            self.form.add_element(
                p, RangeSection(names[p], min_parameters[p],
                                max_parameters[p]))

        def on_estimator_change(old_value, new_value, is_valid=True):
            for inp in min_parameters.values():
                inp.disappear()
            for inp in max_parameters.values():
                inp.disappear()

            if new_value is not None and type(new_value) != str:
                for p in new_value.get_parameters():
                    min_parameters[p].show()
                    min_parameters[p].reset()
                    min_parameters[p].changed()
                    max_parameters[p].show()
                    max_parameters[p].reset()
                    cur_value = max_parameters[p].get_value()

                    if type(cur_value) != str and cur_value is not None:
                        max_parameters[p].set_value(cur_value * 100)
                    max_parameters[p].changed()

        estimator_select.inp.on_change(on_estimator_change)
        on_estimator_change(None, None)

        cancel = self.form.get_button('cancel', "Cancel", self.remove)
        submit = self.form.get_button('submit', "Submit", self.submit)

        self.form.set_action_button('cancel', cancel)
        self.form.set_action_button('submit', submit)
        self.form.add_element('buttons', DoubleSection(submit, cancel))
        self.form.start()
Ejemplo n.º 7
0
    def __init__(self, window_provider):
        title = "Run estimator"
        super().__init__(title, window_provider)

        def window_provider(title):
            return self.window.internal_renderer

        self.form = FormController(window_provider)

        def datafile_options_provider():
            datafiles = self.s.get('datafiles')
            datafile_options = {}

            for d in datafiles:
                datafile_options[d] = d

            return datafile_options

        datafile_select = Section("Datafile", Select(True, datafile_options_provider))

        self.form.add_element('datafile', datafile_select)

        def get_estimator_options():
            keys = estimators.get_all()
            options = {}
            for key in keys:
                options[key] = key.get_name()

            return options


        estimator_select = Select(True, get_estimator_options)
        estimator_section = Section("Estimator", estimator_select)
        self.form.add_element('estimator', estimator_section)
        self.form.add_element('break1', SectionBreak())

        parameters = estimators.get_all_inputs(datafile_select)
        names = estimators.get_all_input_names()

        for p in parameters.keys():
            self.form.add_element(p, Section(names[p], parameters[p]))

        def on_estimator_change(old_value, new_value, is_valid=True):
            for inp in parameters.values():
                    inp.disappear()

            if new_value is not None:
                for p in new_value.get_parameters():
                    parameters[p].changed()
                    parameters[p].show()

        estimator_select.on_change(on_estimator_change)
        on_estimator_change(None, None)

        cancel = self.form.get_button('cancel', "Cancel", self.remove)
        submit = self.form.get_button('submit', "Submit", self.submit)

        self.form.set_action_button('cancel', cancel)
        self.form.set_action_button('submit', submit)
        self.form.add_element('buttons', DoubleSection(submit, cancel))

        self.form.start()