docs: def get_required_args(fn) -> list:
      """
      Returns a list of required arguments for the function fn.
  
      >>> def foo(x, y, z=100): return x + y + z
      >>> get_required_args(foo)
      ['x', 'y']
  
      >>> def bar(x, y=100, *args, **kwargs): return x
      >>> get_required_args(bar)
      ['x']
      """
      sig = inspect.signature(fn)
      return [
          name for name, param in sig.parameters.items()
          if param.default == inspect._empty and param.kind not in VAR_ARGS
      ]