code: def test_abstract():
      f_num_traces = 0
      g_num_traces = 0
      call_num_traces = 0
  
      def abstract(_, x, y):
          return jnp.broadcast_arrays(x, y)[0]
  
      def f(x, y):
          nonlocal f_num_traces
          f_num_traces += 1
          return x + y
  
      def g(x, y):
          nonlocal g_num_traces
          g_num_traces += 1
          return x * y
  
      f = eqx.internal.noinline(f, abstract)
      g = eqx.internal.noinline(g, abstract)
  
      @jax.jit
      def call(fn, x, y):
          nonlocal call_num_traces
          call_num_traces += 1
          return fn(x, y)
  
      assert tree_allclose(call(f, 2, 3), jnp.array(5))
      assert tree_allclose(call(g, 2, 3), jnp.array(6))
      assert f_num_traces == 1
      assert g_num_traces == 1
      assert call_num_traces == 1
  
file_path: equinox/tests/test_noinline.py
imports: import equinox
  import jax
  import jax.numpy
  import jax.random
  from .helpers import tree_allclose
label_desc: Use image node_id 8 for calling a global function with example usage: test_abstract() and returns: jnp, unknown, unknown, fn