def generate_defn(sig: CppSignature) -> str: dispatcher_sig = DispatcherSignature.from_schema(f.func) dispatcher_exprs = dispatcher.cpparguments_exprs(sig.argument_packs()) dispatcher_exprs_str = ', '.join(a.expr for a in dispatcher_exprs) return f"""
def go(f: NativeFunction) -> Optional[str]: if Variant.method not in f.variants: return None assert not f.func.is_out_fn() assert len(f.func.arguments) > 0 assert sum(a.name == 'self' for a in f.func.arguments) == 1 name = cpp.name(f.func) cpp_returns_type = cpp.returns_type(f.func.returns) cpp_args = cpp.arguments(f.func, method=True) cpp_args_exclude_this = [a for a in cpp_args if not isinstance(a.argument, ThisArgument)] cpp_args_exclude_this_str = ', '.join(str(a) for a in cpp_args_exclude_this) if target is Target.DECLARATION: return f"{cpp_returns_type} {name}({cpp_args_exclude_this_str}) const;" assert target is Target.DEFINITION dispatcher_exprs = dispatcher.cpparguments_exprs(cpp_args) cpp_args_exclude_this_str_no_default = ', '.join(a.str_no_default() for a in cpp_args_exclude_this) dispatcher_returns_type = dispatcher.returns_type(f.func.returns) dispatcher_types_str = ', '.join(map(lambda a: a.type, dispatcher_exprs)) dispatcher_exprs_str = ', '.join(map(lambda a: a.expr, dispatcher_exprs)) return f"""
def go(f: NativeFunction) -> Optional[str]: if f.manual_kernel_registration: return None if Variant.function not in f.variants: return None name = cpp.name(f.func) cpp_returns_type = cpp.returns_type(f.func.returns) cpp_args = cpp.arguments(f.func) cpp_args_str = ', '.join(map(str, cpp_args)) if target is Target.DECLARATION: return f"CAFFE2_API {cpp_returns_type} {name}({cpp_args_str});" assert target is Target.DEFINITION dispatcher_exprs = dispatcher.cpparguments_exprs(cpp_args) cpp_args_str_no_default = ', '.join( map(lambda a: a.str_no_default(), cpp_args)) dispatcher_returns_type = dispatcher.returns_type(f.func.returns) dispatcher_types_str = ', '.join( map(lambda a: a.type, dispatcher_exprs)) dispatcher_exprs_str = ', '.join( map(lambda a: a.expr, dispatcher_exprs)) return f"""