def emit_assignments(o, env): for i, r in enumerate(o['returns']): t = RETURN_MAP[r['type'] if not value_is_tensor_type(r) else 'Tensor'] assignment = CT(t).substitute(env, offset=i, output=get_output(o, i)) check_size_assignment = ASSIGN_CHECK_SIZE_TEMPLATE.substitute( env, offset=i, assignment=assignment) env['assignments'].append(check_size_assignment)
return False return True # template for each potential operator. # each operator has an integer 'key' associated with it, and # a lambda that defines the operator # non-tensor attributes are created in ${initialization} # and then saved as arguments to the lambda # Inputs/Outputs are read inside the lambda OPTION_TEMPLATE = CT("""\ case ${key}: { // ${name} ${initialization} run_op = [=] { ${statements} auto the_result = ${invocation}; ${assignments} return true; }; } break; """) def get_output(o, i): if len(o['returns']) == 1: return 'the_result' else: return 'std::get<{}>(the_result)'.format(i) def attribute_names(o):
filtered = [o for o in decls if supports(o)] # template for each potential operator. # each operator has an integer 'key' associated with it, and # a lambda that defines the operator # non-tensor attributes are created in ${initialization} # and then saved as arguments to the lambda # Inputs/Outputs are read inside the lambda OPTION_TEMPLATE = CT("""\ case ${key}: { // ${name} ${initialization} run_op = [=] { ${statements} auto the_result = ${invocation}; ${assignments} return true; }; } break; """) def get_output(o, i): if len(o['returns']) == 1: return 'the_result' else: return 'std::get<{}>(the_result)'.format(i) def attribute_names(o):
return False return True # template for each potential operator. # each operator has an integer 'key' associated with it, and # a lambda that defines the operator # non-tensor attributes are created in ${initialization} # and then saved as arguments to the lambda # Inputs/Outputs are read inside the lambda OPTION_TEMPLATE = CT("""\ case ${key}: { // ${name} ${initialization} run_op = [=] { ${statements} auto the_result = ${invocation}; ${assignments} return true; }; } break; """) ASSIGN_CHECK_SIZE_TEMPLATE = CT("""\ if(OutputSize() > ${offset}) {${assignment}} """) def get_output(o, i): if len(o['returns']) == 1: return 'the_result' else: