code: def register_ir_function(
      self,
      name,
      type_parameters,
      argument_names,
      argument_types,
      return_type,
      body,
  ):
      r = CSERenderer()
      assert not body._ir.uses_randomness
      code = r(body._ir)
      jbody = self._parse_value_ir(
          code, ref_map=dict(zip(argument_names, argument_types))
      )
      self._registered_ir_function_names.add(name)
  
      self.hail_package().expr.ir.functions.IRFunctionRegistry.pyRegisterIR(
          name,
          [ta._parsable_string() for ta in type_parameters],
          argument_names,
          [pt._parsable_string() for pt in argument_types],
          return_type._parsable_string(),
          jbody,
      )
  
imports: import sys
  import os
  import pyspark
  import pyspark.sql
  import orjson
  from typing import Optional
  from hail.expr.table_type import ttable
  from hail.fs.hadoop_fs import HadoopFS
  from hail.ir.renderer import CSERenderer
  from hail.table import Table
  from hailtop.aiotools.router_fs import RouterAsyncFS
  from hailtop.aiotools.validators import validate_file
  from .py4j_backend import Py4JBackend
  from .backend import local_jar_information
label_desc: Use image node_id 7 for calling the SparkBackend obj's underlying member method code with example usage: obj.register_ir_function(name, type_parameters, argument_names, argument_types, return_type, body) without return types