code: def print_custom_call(name, arg_avals, result_avals, **kw):
      print(f"TEST: {name}")
      ctx = mlir.make_ir_context()
      loc = ir.Location.unknown(context=ctx)
      with ctx, loc:
          module = ir.Module.create(loc=ir.Location.unknown())
          ip = ir.InsertionPoint(module.body)
          arg_types = [mlir.aval_to_ir_type(aval) for aval in arg_avals]
          result_types = [
              mlir.aval_to_ir_type(aval) for aval in result_avals
          ]
          ftype = ir.FunctionType.get(arg_types, result_types)
          func = func_dialect.FuncOp("func", ftype, ip=ip)
          entry_block = func.add_entry_block()
          with ir.InsertionPoint(entry_block):
              outs = mlir.custom_call(
                  name,
                  result_types=result_types,
                  operands=entry_block.arguments,
                  **kw,
              )
              func_dialect.ReturnOp(outs)
      module.operation.verify()
      print(str(module))
  
file_path: jax/tests/filecheck/custom_call.filecheck.py
imports: from absl import app
  import jax
  from jax.interpreters import mlir
  from jax._src.lib.mlir import ir
  from jax._src.lib.mlir.dialects import func
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: print_custom_call(name, arg_avals, result_avals) without return types