コード例 #1
0
 def __init__(self):
     super().__init__()
     self.name = 'cumsum'
     self.args.add_arg('a', values.NoneValue())
     self.args.add_arg('axis', values.NoneValue())
     self.args.add_arg('dtype', values.NoneValue())
     self.args.add_arg('out', values.NoneValue())
コード例 #2
0
def veval_ast_aug_assign(astc : 'AstContext', local_field : 'values.Field', graph : 'Graph'):
    assert(isinstance(astc.nast, gast.gast.AugAssign))

    target = veval_ast(astc.c(astc.nast.target), local_field, graph)
    value = veval_ast(astc.c(astc.nast.value), local_field, graph)

    binop = nodes.BinOpType.Unknown
    if isinstance(astc.nast.op, gast.Add):
        binop = nodes.BinOpType.Add
    if isinstance(astc.nast.op, gast.Sub):
        binop = nodes.BinOpType.Sub

    target_value = target.get_value()
    if isinstance(target_value, values.NumberValue):
        node_aug_assign = nodes.NodeValueAugAssign(target_value, value.get_value(), binop, astc.lineno)
        new_value = functions.generate_value_with_same_type(target_value)
        target.revise(new_value)
        node_aug_assign.set_outputs([new_value])
        graph.add_node(node_aug_assign)
        return values.NoneValue()

    else:
        node_aug_assign = nodes.NodeAugAssign(target_value, value.get_value(), binop, astc.lineno)
        target_value.modify(node_aug_assign, None)
        graph.add_node(node_aug_assign)
        return values.NoneValue()
コード例 #3
0
    def __init__(self):
        super().__init__()
        self.name = 'array'

        fa = functions.FunctionArg()
        fa.name = 'object'
        fa.obj = values.Object(values.NoneValue())
        self.funcArgs.append(fa)

        fa = functions.FunctionArg()
        fa.name = 'dtype'
        fa.obj = values.Object(values.NoneValue())
        self.funcArgs.append(fa)

        fa = functions.FunctionArg()
        fa.name = 'copy'
        fa.obj = values.Object(values.BoolValue(True))
        self.funcArgs.append(fa)

        fa = functions.FunctionArg()
        fa.name = 'order'
        fa.obj = values.Object(values.StrValue('K'))
        self.funcArgs.append(fa)

        fa = functions.FunctionArg()
        fa.name = 'subok'
        fa.obj = values.Object(values.BoolValue(False))
        self.funcArgs.append(fa)

        fa = functions.FunctionArg()
        fa.name = 'ndmin'
        fa.obj = values.Object(values.NumberValue(0))
        self.funcArgs.append(fa)
コード例 #4
0
 def __init__(self):
     super().__init__()
     self.name = 'full'
     self.args.add_arg('shape', values.NoneValue())
     self.args.add_arg('fill_value', values.NoneValue())
     self.args.add_arg('dtype', values.NoneValue())
     self.args.add_arg('order', values.StrValue('C'))
コード例 #5
0
    def __init__(self):
        super().__init__()
        self.name = 'array'

        self.args.add_arg('object', values.NoneValue())
        self.args.add_arg('dtype', values.NoneValue())
        self.args.add_arg('copy', values.BoolValue(True))
        self.args.add_arg('order', values.StrValue('K'))
        self.args.add_arg('subok', values.BoolValue(False))
        self.args.add_arg('ndmin', values.NumberValue(0))
コード例 #6
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
コード例 #7
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
コード例 #8
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()
コード例 #9
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
コード例 #10
0
    def __init__(self):
        super().__init__()
        self.name = 'list'

        fa = functions.FunctionArg()
        fa.name = 'value'
        fa.obj = values.Object(values.NoneValue())
        self.funcArgs.append(fa)
コード例 #11
0
    def vcall(self,
              module: 'values.Field',
              graph: 'core.Graph',
              inst: 'values.Value',
              args=[],
              line=-1):
        assert (len(args) == 1)

        node = nodes.NodeCall(self, [v.value for v in args], line)
        inst.modify(node, None)
        graph.add_node(node)
        return values.NoneValue()
コード例 #12
0
    def vcall(self, module : 'Field', graph : 'Graph', inst : 'values.Object', args = [], line = -1):
        assert(len(args) == 1)

        node = nodes.NodeCall(self, [inst.get_value()] + [v.obj.get_value() for v in args], line)

        old_v = inst.get_value()
        new_v = functions.generate_value_with_same_type(old_v)
        inst.revise(new_v)

        new_v.name = '@F.{}.{}'.format(line, self.name)
        node.set_outputs([new_v])

        graph.add_node(node)
        return values.NoneValue()
コード例 #13
0
    def vcall(self, module: 'Field', graph: 'Graph', inst: 'values.ValueRef', args: 'functions.FunctionArgInput', line=-1):
        funcArgs = self.args.merge_inputs(inst, args)

        node = nodes.NodeCall(self, funcArgs, line)

        old_v = inst.get_value()
        new_v = functions.generate_value_with_same_type(old_v)
        inst.revise(new_v)

        new_v.name = '@F.{}.{}'.format(line, self.name)
        node.set_outputs([new_v])

        graph.add_node(node)
        return values.NoneValue()
コード例 #14
0
ファイル: functions.py プロジェクト: disktnk/chainer-compiler
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()
コード例 #15
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()
コード例 #16
0
def veval_ast_name_constant(astc: 'AstContext', local_field: 'values.Field',
                            graph: 'Graph'):
    '''
    Ex. True
    '''
    assert (isinstance(astc.nast, gast.gast.NameConstant))
    lineprop = utils.LineProperty(astc.lineno)
    ret = None
    if astc.nast.value == True:
        ret = values.ValueRef(values.BoolValue(True))
    if astc.nast.value == False:
        ret = values.ValueRef(values.BoolValue(False))
    if astc.nast.value is None:
        ret = values.ValueRef(values.NoneValue())

    name = values.create_ref_value_name_with_constant(ret)
    ret.name = name
    ret.get_value().name = name
    return ret
コード例 #17
0
 def __init__(self):
     super().__init__()
     self.name = 'list'
     self.args.add_arg(functions.FunctionArg('value', values.Object(values.NoneValue())))
コード例 #18
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
コード例 #19
0
 def __init__(self):
     super().__init__()
     self.name = 'list'
     self.args.add_arg('value', values.ValueRef(values.NoneValue()))
コード例 #20
0
ファイル: functions.py プロジェクト: disktnk/chainer-compiler
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
コード例 #21
0
 def __init__(self):
     super().__init__()
     self.name = 'ceil'
     self.args.add_arg('x', values.NoneValue())