Example #1
0
def parse_instance(default_module,
                   name,
                   instance,
                   self_instance=None,
                   parse_shape=False) -> "Object":
    from elichika.parser import values_builtin

    if values_builtin.is_builtin_chainer_link(instance):
        return Object(
            values_builtin.ChainerLinkInstance(default_module, instance))

    # need to check whether is value bool before check whether is value int
    if isinstance(instance, bool):
        return Object(BoolValue(instance))

    if isinstance(instance, int):
        return Object(NumberValue(instance))

    if isinstance(instance, np.int32):
        return Object(NumberValue(instance))

    if isinstance(instance, np.int64):
        return Object(NumberValue(instance))

    if isinstance(instance, float):
        return Object(NumberValue(instance))

    if isinstance(instance, np.float32):
        return Object(NumberValue(instance))

    if isinstance(instance, np.float64):
        return Object(NumberValue(instance))

    if isinstance(instance, str):
        return Object(StrValue(instance))

    if isinstance(instance, list):
        if parse_shape:
            return Object(ListValue())
        else:
            print('List is not supported now!!!')
            return Object(NumberValue(0.0))

    if instance is inspect._empty:
        return None

    if inspect.isfunction(instance):
        func = UserDefinedFunction(instance)
        return Object(FuncValue(func, self_instance))

    if inspect.ismethod(instance):
        func = UserDefinedFunction(instance)
        return Object(FuncValue(func, self_instance))

    if inspect.isclass(instance):
        func = functions.UserDefinedClassConstructorFunction(instance)
        return Object(FuncValue(func, None))

    if isinstance(instance, tuple) and 'Undefined' in instance:
        shape = list(instance)
        shape = -1 if shape == 'Undefined' else shape
        tensorValue = TensorValue()
        tensorValue.shape = tuple(shape)
        return Object(tensorValue)

    if isinstance(instance, np.ndarray):
        tensorValue = TensorValue()
        tensorValue.value = instance
        tensorValue.shape = instance.shape
        return Object(tensorValue)

    if instance == inspect._empty:
        return Object(NoneValue())

    if instance is None:
        return Object(NoneValue())

    model_inst = UserDefinedInstance(default_module, instance, None,
                                     isinstance(instance, chainer.Link))
    return Object(model_inst)
Example #2
0
def parse_instance(default_module, name, instance, self_instance=None):
    from elichika.parser import values_builtin

    if values_builtin.is_builtin_chainer_link(instance):
        return values_builtin.ChainerLinkInstance(default_module, instance)

    # need to check whether is value bool before check whether is value int
    if isinstance(instance, bool):
        return BoolValue(instance)

    if isinstance(instance, int) or isinstance(instance, float):
        return NumberValue(instance)

    if isinstance(instance, str):
        return StrValue(instance)

    if isinstance(instance, list):
        ret = ListValue()
        ind = 0
        for e in instance:
            element_value = parse_instance(default_module, '', e)
            ret.get_field().get_attribute(str(ind)).revise(element_value)
            ind += 1
        return ret

    if instance is inspect._empty:
        return None

    if inspect.isfunction(instance):
        func = UserDefinedFunction(instance)
        return FuncValue(func, self_instance)

    if inspect.ismethod(instance):
        func = UserDefinedFunction(instance)
        return FuncValue(func, self_instance)

    if inspect.isclass(instance):
        func = functions.UserDefinedClassConstructorFunction(instance)
        return FuncValue(func, None)

    if isinstance(instance, tuple) and 'Undefined' in instance:
        shape = list(instance)
        shape = -1 if shape == 'Undefined' else shape
        tensorValue = TensorValue()
        tensorValue.shape = tuple(shape)
        return tensorValue

    if isinstance(instance, np.ndarray):
        tensorValue = TensorValue()
        tensorValue.value = instance
        tensorValue.shape = instance.shape
        return tensorValue

    if instance == inspect._empty:
        return NoneValue()

    if instance is None:
        return NoneValue()

    model_inst = UserDefinedInstance(default_module, instance, None,
                                     isinstance(instance, chainer.Link))
    return model_inst