code: def coulombf(ctx, l, eta, z, w=1, chop=True, **kwargs):
      # Regular Coulomb wave function
      # Note: w can be either 1 or -1; the other may be better in some cases
      # TODO: check that chop=True chops when and only when it should
      # ctx.prec += 10
      def h(l, eta):
          try:
              jw = ctx.j * w
              jwz = ctx.fmul(jw, z, exact=True)
              jwz2 = ctx.fmul(jwz, -2, exact=True)
              C = ctx.coulombc(l, eta)
              T1 = (
                  [C, z, ctx.exp(jwz)],
                  [1, l + 1, 1],
                  [],
                  [],
                  [1 + l + jw * eta],
                  [2 * l + 2],
                  jwz2,
              )
          except ValueError:
              T1 = [0], [-1], [], [], [], [], 0
          return (T1,)
  
      v = ctx.hypercomb(h, [l, eta], **kwargs)
      if (
          chop
          and (not ctx.im(l))
          and (not ctx.im(eta))
          and (not ctx.im(z))
          and (ctx.re(z) >= 0)
      ):
          v = ctx.re(v)
      return v
  
imports: from .functions import defun, defun_wrapped
label_desc: Use image node_id 39 for calling a global function with example usage: coulombf(ctx, l, eta, z, w, chop) and returns: v, T1