code: def _arg_names(
      fn,
      args,
      kwargs,
      static_argnums,
      static_argnames,
  ) -> tuple[str, ...] | None:
      static = object()
      static_argnums_ = _ensure_inbounds(
          True, len(args), static_argnums
      )
      static_argnames_ = set(static_argnames)
      args_ = [
          static if i in static_argnums_ else x
          for i, x in enumerate(args)
      ]
      kwargs = {
          k: static if k in static_argnames_ else x
          for k, x in kwargs.items()
      }
      try:
          ba = inspect.signature(fn).bind(*args_, **kwargs)
      except (ValueError, TypeError):
          return None
      return tuple(
          f"{name}{keystr(path)}"
          for name, x in ba.arguments.items()
          for path, l in generate_key_paths(x)
          if l is not static
      )
  
imports: from __future__ import annotations
  from collections.abc import Iterable, Sequence
  import inspect
  import operator
  from functools import partial
  from typing import Any, Callable
  import warnings
  import numpy
  from jax._src import core
  from jax._src import dtypes
  from jax._src.abstract_arrays import numpy_scalar_types
  from jax._src.core import ShapedArray
  from jax._src.tree_util import PyTreeDef, tree_flatten, tree_unflatten, tree_map, tree_structure, treedef_children, generate_key_paths, keystr, broadcast_prefix, prefix_errors
  from jax._src.tree_util import _replace_nones
  from jax._src import linear_util
  from jax._src.linear_util import TracingDebugInfo
  from jax._src.util import safe_map, WrapKwArgs, Hashable, HashableFunction, Unhashable
  from jax._src import traceback_util
label_desc: Use image node_id 38 for calling a global function with example usage: _arg_names(fn, args, kwargs, static_argnums, static_argnames) and returns: tuple, None