예제 #1
0
def test_flatten_struct():

    a = {
        'a': [1, 2, 3],
        'b': {
            'c': 4,
            'd': {'e': 5, 6: [7, 8]},
            },
        'c': 1
        }
    b = dict(flatten_struct(a))
    assert b["['a'][1]"]==2
    assert b["['b']['d'][6][1]"]==8

    class A(object):

        def __init__(self, other_object, b):
            self._a = other_object
            self._b = b

    thing = A(A(3, 'arr'), {'x': np.random.randn(3, 2), 'y': (3, 4, 5)})

    flat_thing = dict(flatten_struct(thing))

    assert flat_thing['._a._b']=='arr'
    assert flat_thing["._b['y'][0]"]==3
def test_flatten_struct():

    a = {
        'a': [1, 2, 3],
        'b': {
            'c': 4,
            'd': {'e': 5, 6: [7, 8]},
            },
        'c': 1
        }
    b = dict(flatten_struct(a))
    assert b["['a'][1]"]==2
    assert b["['b']['d'][6][1]"]==8

    class A(object):

        def __init__(self, other_object, b):
            self._a = other_object
            self._b = b

    thing = A(A(3, 'arr'), {'x': np.random.randn(3, 2), 'y': (3, 4, 5)})

    flat_thing = dict(flatten_struct(thing))

    assert flat_thing['._a._b']=='arr'
    assert flat_thing["._b['y'][0]"]==3
예제 #3
0
def get_record_invalid_arg_string(record, recursive=True, ignore_valid_keys=(), note_version = 'full'):
    """
    Return a string identifying ig the arguments for this experiment are still valid.
    :return:
    """
    assert note_version in ('full', 'short')
    experiment_id = record.get_experiment_id()
    if is_experiment_loadable(experiment_id):
        if record.info.has_field(ExpInfoFields.ARGS):
            last_run_args = OrderedDict([(k,v) for k,v in record.get_args().items() if k not in ignore_valid_keys])
            current_args = OrderedDict([(k,v) for k,v in record.get_experiment().get_args().items() if k not in ignore_valid_keys])
            if recursive:
                last_run_args = OrderedDict(flatten_struct(last_run_args, first_dict_is_namespace=True, primatives = PRIMATIVE_TYPES + (UnPicklableArg, )))
                last_run_args = OrderedDict([(k, v) for k, v in last_run_args.items() if k not in ignore_valid_keys])
                current_args = OrderedDict(flatten_struct(current_args, first_dict_is_namespace=True))
                current_args = OrderedDict([(k, v) for k, v in current_args.items() if k not in ignore_valid_keys])

            validity = record.args_valid(last_run_args=last_run_args, current_args=current_args)
            if validity is False:
                common, (old_args, new_args) = separate_common_items([list(last_run_args.items()), list(current_args.items())])
                if len(old_args)+len(new_args)==0:
                    raise Exception('Error displaying different args.  Bug Peter.')

                all_changed_arg_names = remove_duplicates(list(name for name, _ in old_args)+list(name for name, _ in new_args))
                changestr = ', '.join("{}:{}->{}".format(k, last_run_args[k] if k in last_run_args else '<N/A>', current_args[k] if k in current_args else '<N/A>') for k in all_changed_arg_names)
                notes = ("Change: " if note_version=='full' else "") + changestr
            elif validity is None:
                notes = "Cannot Determine: Unhashable Args" if note_version=='full' else '<Unhashable Args>'
            else:
                notes = "<No Change>"
        else:
            notes = "Cannot Determine: Inconsistent Experiment Record" if note_version == 'full' else '<Inconsistent Record>'
    else:
        notes = "Cannot Determine: Experiment Not Imported" if note_version=='full' else '<Not Imported>'
    return notes
예제 #4
0
def get_record_invalid_arg_string(record, recursive=True):
    """
    Return a string identifying ig the arguments for this experiment are still valid.
    :return:
    """
    experiment_id = record.get_experiment_id()
    if is_experiment_loadable(experiment_id):
        if record.info.has_field(ExpInfoFields.ARGS):
            last_run_args = record.get_args()
            current_args = record.get_experiment().get_args()
            validity = record.args_valid(last_run_args=last_run_args, current_args=current_args)
            if validity is False:
                if recursive:
                    last_run_args = OrderedDict(flatten_struct(last_run_args, first_dict_is_namespace=True))
                    current_args = OrderedDict(flatten_struct(current_args, first_dict_is_namespace=True))
                last_arg_str, this_arg_str = [['{}:{}'.format(k, v) for k, v in argdict.iteritems()] for argdict in (last_run_args, current_args)]
                common, (old_args, new_args) = separate_common_items([last_arg_str, this_arg_str])
                notes = "No: Args changed!: {{{}}}->{{{}}}".format(','.join(old_args), ','.join(new_args))
            elif validity is None:
                notes = "Cannot Determine: Unhashable Args"
            else:
                notes = "Yes"
        else:
            notes = "Cannot Determine: Inconsistent Experiment Record"
    else:
        notes = "Cannot Determine: Experiment Not Imported"
    return notes
예제 #5
0
def get_record_invalid_arg_string(record,
                                  recursive=True,
                                  ignore_valid_keys=(),
                                  note_version='full'):
    """
    Return a string identifying ig the arguments for this experiment are still valid.
    :return:
    """
    assert note_version in ('full', 'short')
    experiment_id = record.get_experiment_id()
    if is_experiment_loadable(experiment_id):
        if record.info.has_field(ExpInfoFields.ARGS):
            last_run_args = OrderedDict([(k, v)
                                         for k, v in record.get_args().items()
                                         if k not in ignore_valid_keys])
            current_args = OrderedDict([
                (k, v) for k, v in record.get_experiment().get_args().items()
                if k not in ignore_valid_keys
            ])
            if recursive:
                last_run_args = OrderedDict(
                    flatten_struct(last_run_args,
                                   first_dict_is_namespace=True))
                last_run_args = OrderedDict([(k, v)
                                             for k, v in last_run_args.items()
                                             if k not in ignore_valid_keys])
                current_args = OrderedDict(
                    flatten_struct(current_args, first_dict_is_namespace=True))
                current_args = OrderedDict([(k, v)
                                            for k, v in current_args.items()
                                            if k not in ignore_valid_keys])

            validity = record.args_valid(last_run_args=last_run_args,
                                         current_args=current_args)
            if validity is False:
                last_arg_str, this_arg_str = [[
                    '{}:{}'.format(k, v) for k, v in argdict.items()
                ] for argdict in (last_run_args, current_args)]
                common, (old_args, new_args) = separate_common_items(
                    [last_arg_str, this_arg_str])
                if len(old_args) + len(new_args) == 0:
                    raise Exception(
                        'Error displaying different args.  Bug Peter.')
                changestr = "{{{}}}->{{{}}}".format(','.join(old_args),
                                                    ','.join(new_args))
                notes = ("Change: "
                         if note_version == 'full' else "") + changestr
            elif validity is None:
                notes = "Cannot Determine: Unhashable Args" if note_version == 'full' else '<Unhashable Args>'
            else:
                notes = "<No Change>"
        else:
            notes = "Cannot Determine: Inconsistent Experiment Record" if note_version == 'full' else '<Inconsistent Record>'
    else:
        notes = "Cannot Determine: Experiment Not Imported" if note_version == 'full' else '<Not Imported>'
    return notes
예제 #6
0
파일: core.py 프로젝트: tokestermw/plato
    def __call__(self, *args, **kwargs):
        self.input_format.check((args, kwargs), self.fcn)

        with StateCatcher(swallow_updates=False) as sc:
            if ENABLE_OMNISCENCE:
                with CaptureLocals() as c:
                    if self.attached_instance is None:
                        symbolic_return = self.fcn(*args, **kwargs)
                    else:
                        symbolic_return = self.fcn(self.attached_instance,
                                                   *args, **kwargs)
                captured_anything = c.get_captured_locals()
                captured_variables = flatten_struct(
                    captured_anything,
                    primatives=(Variable, SharedVariable),
                    break_into_objects=False)
                captured_locals = {
                    k: v
                    for k, v in captured_variables if isinstance(v, Variable)
                }
                self._captured_locals = captured_locals
            else:
                if self.attached_instance is None:
                    symbolic_return = self.fcn(*args, **kwargs)
                else:
                    symbolic_return = self.fcn(self.attached_instance, *args,
                                               **kwargs)
        self.update_format.check(sc.get_updates(), self.fcn)
        self.output_format.check(symbolic_return, self.fcn)
        return symbolic_return
예제 #7
0
def ezplot(anything, plots = None, hang = True, **plot_preference_kwargs):
    """
    Make a plot of anything.  Anything at all.
    :param anything: Anything.
    """
    data_dict = flatten_struct(anything)
    figure, plots = plot_data_dict(data_dict, plots, mode = 'static', hang = hang, **plot_preference_kwargs)
    return figure, plots
예제 #8
0
def ezplot(anything, plots = None, hang = True, **plot_preference_kwargs):
    """
    Make a plot of anything.  Anything at all.
    :param anything: Anything.
    """
    data_dict = flatten_struct(anything)
    figure, plots = plot_data_dict(data_dict, plots, mode = 'static', hang = hang, **plot_preference_kwargs)
    return figure, plots
def test_none_bug():

    a = {'a': 1, 'b': None, 'c': [1, 2, None]}

    fa = flatten_struct(a, first_dict_is_namespace=True)
    assert dict(fa) == {'a': 1, 'b': None, 'c[0]': 1, 'c[1]': 2, 'c[2]': None}
예제 #10
0
    def _get_data_structure(self):
        struct = self._callback()
        assert struct is not None, 'Your plotting-data callback returned None.  Probably you forgot to include a return statememnt.'

        flat_struct = flatten_struct(struct, custom_handlers=self._custom_handlers, detect_duplicates=False)  # list<*tuple<str, data>>
        return OrderedDict(flat_struct)
예제 #11
0
def test_none_bug():

    a = {'a': 1, 'b': None, 'c': [1, 2, None]}

    fa = flatten_struct(a, first_dict_is_namespace=True)
    assert dict(fa) == {'a': 1, 'b': None, 'c[0]': 1, 'c[1]': 2, 'c[2]': None}
예제 #12
0
def get_record_invalid_arg_string(record,
                                  recursive=True,
                                  ignore_valid_keys=(),
                                  note_version='full'):
    """
    Return a string identifying ig the arguments for this experiment are still valid.
    :return:
    """
    assert note_version in ('full', 'short')
    experiment_id = record.get_experiment_id()
    if is_experiment_loadable(experiment_id):
        if record.info.has_field(ExpInfoFields.ARGS):
            last_run_args = OrderedDict([(k, v)
                                         for k, v in record.get_args().items()
                                         if k not in ignore_valid_keys])
            current_args = OrderedDict([
                (k, v) for k, v in record.get_experiment().get_args().items()
                if k not in ignore_valid_keys
            ])
            if recursive:
                last_run_args = OrderedDict(
                    flatten_struct(last_run_args,
                                   first_dict_is_namespace=True,
                                   primatives=PRIMATIVE_TYPES +
                                   (UnPicklableArg, )))
                last_run_args = OrderedDict([(k, v)
                                             for k, v in last_run_args.items()
                                             if k not in ignore_valid_keys])
                current_args = OrderedDict(
                    flatten_struct(current_args, first_dict_is_namespace=True))
                current_args = OrderedDict([(k, v)
                                            for k, v in current_args.items()
                                            if k not in ignore_valid_keys])

            validity = record.args_valid(last_run_args=last_run_args,
                                         current_args=current_args)
            if validity is False:
                common, (old_args, new_args) = separate_common_items(
                    [list(last_run_args.items()),
                     list(current_args.items())])
                if len(old_args) + len(new_args) == 0:
                    raise Exception(
                        'Error displaying different args.  Bug Peter.')

                all_changed_arg_names = remove_duplicates(
                    list(name for name, _ in old_args) +
                    list(name for name, _ in new_args))
                changestr = ', '.join("{}:{}->{}".format(
                    k, last_run_args[k] if k in last_run_args else '<N/A>',
                    current_args[k] if k in current_args else '<N/A>')
                                      for k in all_changed_arg_names)
                notes = ("Change: "
                         if note_version == 'full' else "") + changestr
            elif validity is None:
                notes = "Cannot Determine: Unhashable Args" if note_version == 'full' else '<Unhashable Args>'
            else:
                notes = "<No Change>"
        else:
            notes = "Cannot Determine: Inconsistent Experiment Record" if note_version == 'full' else '<Inconsistent Record>'
    else:
        notes = "Cannot Determine: Experiment Not Imported" if note_version == 'full' else '<Not Imported>'
    return notes
예제 #13
0
    def _get_data_structure(self):
        struct = self._callback()
        assert struct is not None, 'Your plotting-data callback returned None.  Probably you forgot to include a return statememnt.'

        flat_struct = flatten_struct(struct, custom_handlers=self._custom_handlers, detect_duplicates=False)  # list<*tuple<str, data>>
        return OrderedDict(flat_struct)