code: def _make_methods(functions, modname):
      """Turns the name, signature, code in functions into complete functions
      and lists them in a methods_table. Then turns the methods_table into a
      ``PyMethodDef`` structure and returns the resulting code fragment ready
      for compilation
      """
      methods_table = []
      codes = []
      for funcname, flags, code in functions:
          cfuncname = "%s_%s" % (modname, funcname)
          if "METH_KEYWORDS" in flags:
              signature = (
                  "(PyObject *self, PyObject *args, PyObject *kwargs)"
              )
          else:
              signature = "(PyObject *self, PyObject *args)"
          methods_table.append(
              '{"%s", (PyCFunction)%s, %s},'
              % (funcname, cfuncname, flags)
          )
          func_code = """
          static PyObject* {cfuncname}{signature}
          {{
          {code}
          }}
          """.format(
              cfuncname=cfuncname, signature=signature, code=code
          )
          codes.append(func_code)
  
      body = (
          "\n".join(codes)
          + """
      static PyMethodDef methods[] = {
      %(methods)s
      { NULL }
      };
      static struct PyModuleDef moduledef = {
          PyModuleDef_HEAD_INIT,
          "%(modname)s",  /* m_name */
          NULL,           /* m_doc */
          -1,             /* m_size */
          methods,        /* m_methods */
      };
      """
          % dict(methods="\n".join(methods_table), modname=modname)
      )
      return body
  
file_path: numpy/numpy/testing/_private/extbuild.py
imports: import os
  import pathlib
  import subprocess
  import sys
  import sysconfig
  import textwrap
label_desc: Use image node_id 4 for calling a global function with example usage: _make_methods(functions, modname) and returns: body