|
1 | 1 | <%page args="f, config, method_template"/>\ |
2 | | -## numpy_read and numpy_write are identical for gRPC -- both return a NotImplementedError |
3 | | -<%include file="/_grpc_stub_interpreter.py/numpy_read_method.py.mako" args="f=f, config=config, method_template=method_template" />\ |
| 2 | +<% |
| 3 | + '''Renders a GrpcStubInterpreter method corresponding to the passed-in function metadata.''' |
| 4 | + import build.helper as helper |
| 5 | + parameters = f['parameters'] |
| 6 | + full_func_name = f['interpreter_name'] + method_template['method_python_name_suffix'] |
| 7 | + method_decl_params = helper.get_params_snippet(f, helper.ParameterUsageOptions.INTERPRETER_METHOD_DECLARATION) |
| 8 | + grpc_name = f.get('grpc_name', f['name']) |
| 9 | + grpc_request_args = helper.get_params_snippet(f, helper.ParameterUsageOptions.GRPC_REQUEST_PARAMETERS) |
| 10 | + return_statement = helper.get_grpc_interpreter_method_return_snippet(f['parameters'], config) |
| 11 | + if return_statement == 'return': |
| 12 | + return_statement = None |
| 13 | + capture_response = 'response = ' if return_statement else '' |
| 14 | + included_in_proto = f.get('included_in_proto', True) |
| 15 | + numpy_complex_params = [ |
| 16 | + p for p in helper.filter_parameters(parameters, helper.ParameterUsageOptions.NUMPY_PARAMETERS) |
| 17 | + if p['complex_type'] is not None and p.get('original_type') in ('NIComplexNumber[]', 'NIComplexNumberF32[]', 'NIComplexI16[]') |
| 18 | + ] |
| 19 | +
|
| 20 | + # For numpy complex inputs, create NIComplex message lists and map them in the request args |
| 21 | + for p in numpy_complex_params: |
| 22 | + # Replace occurrences like "field=python_name" with "field=python_name_list" |
| 23 | + grpc_request_args = grpc_request_args.replace( |
| 24 | + p['grpc_name'] + '=' + p['python_name'], |
| 25 | + p['grpc_name'] + '=' + p['python_name'] + '_list' |
| 26 | + ) |
| 27 | +
|
| 28 | +%>\ |
| 29 | + |
| 30 | + def ${full_func_name}(${method_decl_params}): # noqa: N802 |
| 31 | +% if included_in_proto: |
| 32 | +% for p in numpy_complex_params: |
| 33 | +% if p['original_type'] == 'NIComplexNumber[]': |
| 34 | + ${p['python_name']}_list = [ |
| 35 | + grpc_types.NIComplexNumber(real=val.real, imaginary=val.imag) |
| 36 | + for val in ${p['python_name']}.ravel() |
| 37 | + ] |
| 38 | +% elif p['original_type'] == 'NIComplexNumberF32[]': |
| 39 | + ${p['python_name']}_list = [ |
| 40 | + grpc_types.NIComplexNumberF32(real=val.real, imaginary=val.imag) |
| 41 | + for val in ${p['python_name']}.ravel() |
| 42 | + ] |
| 43 | +% elif p['original_type'] == 'NIComplexI16[]': |
| 44 | + ${p['python_name']}_list = [ |
| 45 | + grpc_types.NIComplexI16(real=int(val['real']), imaginary=int(val['imag'])) |
| 46 | + for val in ${p['python_name']}.ravel() |
| 47 | + ] |
| 48 | +% endif |
| 49 | +% endfor |
| 50 | + ${capture_response}self._invoke( |
| 51 | + self._client.${grpc_name}, |
| 52 | + grpc_types.${grpc_name}Request(${grpc_request_args}), |
| 53 | + ) |
| 54 | +% if return_statement: |
| 55 | + ${return_statement} |
| 56 | +% endif |
| 57 | +% else: |
| 58 | + raise NotImplementedError('${full_func_name} is not supported over gRPC') |
| 59 | +% endif |
0 commit comments