Exemplo n.º 1
0
def generate_value_with_same_type(value : 'values.Value'):
    if isinstance(value, values.TensorValue):
        ret = values.TensorValue()
        ret.shape = value.shape
        return ret

    if isinstance(value, values.NumberValue):
        ret = values.NumberValue(None)
        return ret

    if isinstance(value, values.StrValue):
        ret = values.StrValue(None)
        return ret

    if isinstance(value, values.BoolValue):
        ret = values.BoolValue(None)
        return ret

    if isinstance(value, values.ListValue):
        ret = values.ListValue(None)
        return ret

    if isinstance(value, values.NoneValue):
        ret = values.NoneValue()
        return ret

    if isinstance(value, values.Value):
        ret = values.Value()
        return ret

    return None
Exemplo n.º 2
0
def generate_copied_value(value : 'values.Value'):
    if isinstance(value, values.NumberValue):
        copied = values.NumberValue(value.internal_value)
        return copied

    if isinstance(value, values.TensorValue):
        copied = values.TensorValue()
        copied.shape = value.shape
        return copied

    if isinstance(value, values.NoneValue):
        copied = values.NoneValue()
        return copied

    if isinstance(value, values.BoolValue):
        copied = values.BoolValue(value.internal_value)
        return copied

    if isinstance(value, values.StrValue):
        copied = values.StrValue(value.internal_value)
        return copied

    if isinstance(value, values.RangeValue):
        copied = values.RangeValue()
        return copied

    if isinstance(value, values.TupleValue):
        copied = values.TupleValue(value.values)
        return copied

    if config.show_warnings:
        print('Unknown type {} is copied'.format(value))

    return values.Value()
Exemplo n.º 3
0
def generate_value_with_same_type(value: 'values.Value'):
    assert (isinstance(value, values.Value))
    ret = None
    if isinstance(value, values.TensorValue):
        ret = values.TensorValue()
        ret.shape = value.shape

    if isinstance(value, values.NumberValue):
        ret = values.NumberValue(None)

    if isinstance(value, values.StrValue):
        ret = values.StrValue(None)

    if isinstance(value, values.BoolValue):
        ret = values.BoolValue(None)

    if isinstance(value, values.ListValue):
        ret = values.ListValue(None)

    if isinstance(value, values.NoneValue):
        ret = values.NoneValue()

    if ret is None and isinstance(value, values.Value):
        ret = values.Value()

    if ret is not None:
        ret.name = value.name + '_st'

    return ret
Exemplo n.º 4
0
    def vcall(self,
              module: 'Field',
              graph: 'Graph',
              inst: 'values.ValueRef',
              args: 'functions.FunctionArgInput',
              line=-1):
        assert (inst is None)

        funcArgs = self.args.merge_inputs(inst, args)
        vargs = funcArgs.get_value().inputs

        dtype_value = vargs[1]
        if dtype_value is not None and not isinstance(dtype_value,
                                                      values.NoneValue):
            # TODO : make better
            dtype = utils.int_2_numpy_type(dtype_value.internal_value)
        else:
            dtype = np.array(vargs[1].internal_value).dtype

        node = nodes.NodeGenerate('zeros', funcArgs, line)
        graph.add_node(node)
        value = values.TensorValue()
        value.dtype = dtype
        value.name = '@F.{}.{}'.format(line, self.name)
        node.set_outputs([value])
        return values.ValueRef(value)
Exemplo n.º 5
0
def generate_value_with_same_type(value: 'values.Value'):
    assert (isinstance(value, values.Value))
    ret = None
    if isinstance(value, values.TensorValue):
        ret = values.TensorValue()
        ret.shape = value.shape

    if isinstance(value, values.NumberValue):
        ret = values.NumberValue(None)
        if value.internal_value is None:
            ret.dtype = value.dtype
        elif isinstance(value.internal_value, int):
            ret.dtype = np.array(value.internal_value).dtype
        elif isinstance(value.internal_value, float):
            ret.dtype = np.array(value.internal_value).dtype

    if isinstance(value, values.StrValue):
        ret = values.StrValue(None)

    if isinstance(value, values.BoolValue):
        ret = values.BoolValue(None)

    if isinstance(value, values.ListValue):
        ret = values.ListValue(None)

    if isinstance(value, values.NoneValue):
        ret = values.NoneValue()

    if ret is None and isinstance(value, values.Value):
        ret = values.Value()

    if ret is not None:
        ret.name = value.name + '_st'

    return ret
Exemplo n.º 6
0
    def vcall(self, module : 'Field', graph : 'Graph', inst : 'values.Object', args = [], line = -1):
        funcArgs = self.parse_args(args)
        vargs = self.get_values(funcArgs)

        node = nodes.NodeCall(self, vargs, line)
        graph.add_node(node)
        #value = functions.generate_value_with_same_type(vargs[0])
        value = values.TensorValue()
        value.name = '@F.{}.{}'.format(line, self.name)
        node.set_outputs([value])
        return values.Object(value)
Exemplo n.º 7
0
def generate_copied_value(value: 'values.Value'):
    assert (isinstance(value, values.Value))

    if isinstance(value, values.NumberValue):
        copied = values.NumberValue(value.internal_value)
        copied.dtype = value.dtype
        return copied

    if isinstance(value, values.TensorValue):
        copied = values.TensorValue()
        copied.value = value.value
        copied.shape = value.shape
        copied.dtype = value.dtype
        return copied

    if isinstance(value, values.ListValue):
        copied = values.ListValue()
        copied.is_any = value.is_any
        if value.internal_value is not None:
            copied.internal_value = value.internal_value.copy()
        return copied

    if isinstance(value, values.NoneValue):
        copied = values.NoneValue()
        return copied

    if isinstance(value, values.BoolValue):
        copied = values.BoolValue(value.internal_value)
        return copied

    if isinstance(value, values.StrValue):
        copied = values.StrValue(value.internal_value)
        return copied

    if isinstance(value, values.RangeValue):
        copied = values.RangeValue()
        return copied

    if isinstance(value, values.TupleValue):
        if value.internal_value is not None:
            copied = values.TupleValue(value.internal_value.copy())
        else:
            copied = values.TupleValue(value.internal_value)
        return copied

    if config.show_warnings:
        print('Unknown type {} is copied'.format(value))

    return values.Value()
Exemplo n.º 8
0
    def vcall(self,
              module: 'values.Field',
              graph: 'Graph',
              inst: 'Object',
              args: 'functions.FunctionArgInput',
              line=-1):
        node = nodes.NodeCall(self, [v.get_value() for v in args.inputs], line)
        graph.add_node(node)
        value = values.TensorValue()

        estimate_shape = chainer_links[type(self.owner.inst)].estimate_shape
        if estimate_shape is not None:
            value.shape = estimate_shape(self.owner.inst, args)

        node.set_outputs([value])
        return values.Object(value)
Exemplo n.º 9
0
def generate_copied_value(value : 'values.Value'):
    if isinstance(value, values.NumberValue):
        copied = values.NumberValue(value.internal_value)
        return copied

    if isinstance(value, values.TensorValue):
        copied = values.TensorValue()
        copied.shape = value.shape
        return copied

    if isinstance(value, values.NoneValue):
        copied = values.NoneValue()
        return copied

    if config.show_warnings:
        print('Warning : Unimplemented copied_value {}'.format(value))

    return values.Value()
Exemplo n.º 10
0
    def vcall(self, module : 'Field', graph : 'Graph', inst : 'values.Object', args = [], line = -1):
        funcArgs = self.parse_args(args)
        vargs = self.get_values(funcArgs)

        dtype_value = vargs[1]
        if dtype_value is not None and not isinstance(dtype_value, values.NoneValue):
            # TODO : make better
            dtype = utils.int_2_numpy_type(dtype_value.internal_value)
        else:
            dtype = None

        node = nodes.NodeGenerate('array', vargs, line)
        graph.add_node(node)
        value = values.TensorValue()
        value.dtype = dtype
        value.name = '@F.{}.{}'.format(line, self.name)
        node.set_outputs([value])
        return values.Object(value)
Exemplo n.º 11
0
    def vcall(self,
              module: 'values.Field',
              graph: 'Graph',
              inst: 'values.ValueRef',
              args: 'functions.FunctionArgInput',
              line=-1):
        vargs = self.args.merge_inputs(inst, args)

        node = nodes.NodeCall(self, vargs, line)
        graph.add_node(node)
        value = values.TensorValue()

        estimate_shape = chainer_links[type(self.owner.inst)].estimate_shape
        if estimate_shape is not None:
            value.shape = estimate_shape(self.owner.inst, vargs)

        node.set_outputs([value])
        return values.ValueRef(value)
Exemplo n.º 12
0
    def vcall(self,
              module: 'values.Field',
              graph: 'Graph',
              inst: 'Object',
              args=[],
              line=-1):
        node = nodes.NodeCall(self, [v.obj.get_value() for v in args], line)
        graph.add_node(node)
        value = values.TensorValue()

        # TODO refactor
        if (isinstance(self.owner.inst, chainer.links.Linear)):
            cn = self.owner.inst  # type: chainer.links.Linear
            if isinstance(args[0].obj.get_value(), values.TensorValue) and len(
                    args[0].obj.get_value().shape) >= 2:
                value.shape = (args[0].obj.get_value().shape[0], cn.out_size)

        if (isinstance(self.owner.inst, chainer.links.Convolution2D)):
            value = functions.generate_tensor_value_with_undefined_shape_size(
                args[0].obj.get_value())

        node.set_outputs([value])
        return values.Object(value)
Exemplo n.º 13
0
def generate_tensor_value_with_undefined_shape_size(value : 'values.TensorValue'):
    assert(isinstance(value, values.TensorValue))
    ret = values.TensorValue()
    ret.shape = tuple([-1 for v in value.shape])
    return ret
Exemplo n.º 14
0
def generate_value_with_same_type(value: 'values.Value',
                                  is_dummy_value=False,
                                  suffix_type=SuffixType.Unknown):
    assert (isinstance(value, values.Value))
    ret = None
    if isinstance(value, values.TensorValue):
        ret = values.TensorValue()
        ret.shape = value.shape
        ret.dtype = value.dtype

    elif isinstance(value, values.NumberValue):
        dtype = None
        if value.internal_value is None:
            dtype = value.dtype
        elif isinstance(value.internal_value, int):
            dtype = np.array(value.internal_value).dtype
        elif isinstance(value.internal_value, float):
            dtype = np.array(value.internal_value).dtype

        ret = values.NumberValue(None)
        ret.dtype = dtype

    elif isinstance(value, values.StrValue):
        ret = values.StrValue(None)

    elif isinstance(value, values.BoolValue):
        ret = values.BoolValue(None)

    elif isinstance(value, values.ListValue):
        ret = values.ListValue(None)

    elif isinstance(value, values.NoneValue):
        ret = values.NoneValue()

    elif isinstance(value, values.TupleValue):
        ret = values.TupleValue()

    elif isinstance(value, values.RangeValue):
        ret = values.RangeValue()

    elif isinstance(value, values.UnknownValue):
        ret = values.UnknownValue()

    elif ret is None and isinstance(value, values.Value):
        ret = values.Value()

    else:
        assert (False)

    assert (ret is not None)

    ret.is_dummy_value = is_dummy_value
    if suffix_type == SuffixType.Unknown:
        ret.name = value.name + '_st'
    elif suffix_type == SuffixType.Unused:
        ret.name = value.name + '_unused'
    elif suffix_type == SuffixType.Dummy:
        ret.name = value.name + '_dummy'
    elif suffix_type == SuffixType.Input:
        ret.name = value.name + '_in'
    else:
        assert (False)

    return ret
Exemplo n.º 15
0
def create_return_value_in_chainer_function():
    return values.TensorValue()
Exemplo n.º 16
0
def generate_value_with_same_type(value: 'values.Value',
                                  has_default=False,
                                  suffix_type=SuffixType.Unknown):
    assert (isinstance(value, values.Value))
    ret = None
    if isinstance(value, values.TensorValue):
        ret = values.TensorValue()
        ret.shape = value.shape
        ret.dtype = value.dtype

    if isinstance(value, values.NumberValue):
        dtype = None
        if value.internal_value is None:
            dtype = value.dtype
        elif isinstance(value.internal_value, int):
            dtype = np.array(value.internal_value).dtype
        elif isinstance(value.internal_value, float):
            dtype = np.array(value.internal_value).dtype

        if has_default:
            if dtype == np.array(0).dtype:
                ret = values.NumberValue(0)
            elif dtype == np.array(0.0).dtype:
                ret = values.NumberValue(0.0)
            else:
                ret = values.NumberValue(None)
        else:
            ret = values.NumberValue(None)
        ret.dtype = dtype

    if isinstance(value, values.StrValue):
        if has_default:
            ret = values.StrValue('')
        else:
            ret = values.StrValue(None)

    if isinstance(value, values.BoolValue):
        if has_default:
            ret = values.BoolValue(False)
        else:
            ret = values.BoolValue(None)

    if isinstance(value, values.ListValue):
        ret = values.ListValue(None)

    if isinstance(value, values.NoneValue):
        ret = values.NoneValue()

    if isinstance(value, values.TupleValue):
        ret = values.TupleValue()

    if isinstance(value, values.UnknownValue):
        ret = values.UnknownValue()
        if has_default:
            ret.internal_value = 0

    if ret is None and isinstance(value, values.Value):
        ret = values.Value()

    if ret is not None:
        if suffix_type == SuffixType.Unknown:
            ret.name = value.name + '_st'
        if suffix_type == SuffixType.Unused:
            ret.name = value.name + '_unused'
    return ret