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
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
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