Exemplo n.º 1
0
def generate_function_suite(fn):
    blocks = []
    if '1argscalar' in fn.interface_types:
        blocks.append(generate_code('1arg_scalar',
                                    type1=rptypes.RPE_VAR, function=fn))
    if '1argelemental' in fn.interface_types:
        blocks.append(generate_code('1arg_elemental',
                                    type1=rptypes.RPE_VAR, function=fn))
    if '2argelemental' in fn.interface_types:
        blocks.append(generate_code('2arg_elemental',
                                    type1=rptypes.RPE_VAR,
                                    type2=rptypes.RPE_VAR, function=fn))
        blocks.append(generate_code('2arg_elemental',
                                    type1=rptypes.RPE_VAR, type2=rptypes.REAL,
                                    function=fn))
        blocks.append(generate_code('2arg_elemental',
                                    type1=rptypes.REAL, type2=rptypes.RPE_VAR,
                                    function=fn))
    if '1arrayarg' in fn.interface_types:
        blocks += [generate_code('arrayarg', type1=rptypes.RPE_VAR,
                                 function=fn, ndim=n)
                   for n in DIMENSIONS]
    if 'multiarg' in fn.interface_types:
        blocks += [generate_code('multiarg', types=[rptypes.RPE_VAR] * n,
                                 function=fn)
                   for n in ARGNUMS]
    names = [b[0] for b in blocks]
    code = [b[1] for b in blocks]
    interface = generate_interface(fn.name, names)
    return interface, code
Exemplo n.º 2
0
def generate_operator_suite(op):
    """Generate code and an interface for an operator."""
    blocks = []
    if 'unary' in op.operator_categories:
        blocks.append(generate_code('unaryop', type1=rptypes.RPE_VAR,
                                    operator=op))
    if 'binary' in op.operator_categories:
        blocks.append(generate_code('binaryop', type1=rptypes.RPE_VAR,
                                    type2=rptypes.RPE_VAR, operator=op))
        blocks += [generate_code('binaryop', type1=rptypes.RPE_VAR,
                                 type2=datatype, operator=op)
                   for datatype in BINARY_TYPES]
        blocks += [generate_code('binaryop', type1=datatype,
                                 type2=rptypes.RPE_VAR, operator=op)
                   for datatype in BINARY_TYPES]
    names = [b[0] for b in blocks]
    code = [b[1] for b in blocks]
    interface = generate_interface('OPERATOR({})'.format(op.operator), names)
    return interface, code
Exemplo n.º 3
0
def generate_function_suite(fn):
    blocks = []
    if '1argscalar' in fn.interface_types:
        blocks.append(
            generate_code('1arg_scalar', type1=rptypes.RPE_VAR, function=fn))
    if '1argelemental' in fn.interface_types:
        blocks.append(
            generate_code('1arg_elemental', type1=rptypes.RPE_VAR,
                          function=fn))
    if '2argelemental' in fn.interface_types:
        blocks.append(
            generate_code('2arg_elemental',
                          type1=rptypes.RPE_VAR,
                          type2=rptypes.RPE_VAR,
                          function=fn))
        blocks.append(
            generate_code('2arg_elemental',
                          type1=rptypes.RPE_VAR,
                          type2=rptypes.REAL,
                          function=fn))
        blocks.append(
            generate_code('2arg_elemental',
                          type1=rptypes.REAL,
                          type2=rptypes.RPE_VAR,
                          function=fn))
    if '1arrayarg' in fn.interface_types:
        blocks += [
            generate_code('arrayarg',
                          type1=rptypes.RPE_VAR,
                          function=fn,
                          ndim=n) for n in DIMENSIONS
        ]
    if 'multiarg' in fn.interface_types:
        blocks += [
            generate_code('multiarg', types=[rptypes.RPE_VAR] * n, function=fn)
            for n in ARGNUMS
        ]
    names = [b[0] for b in blocks]
    code = [b[1] for b in blocks]
    interface = generate_interface(fn.name, names)
    return interface, code