docs: def get_args_kwargs(foo):
      """
      callable->[],[]
      function that determines which argumnents have a default value
      :return: tuple of lists of names [args],[args_with_def]
      """
      spec = inspect.signature(foo)
      params = spec.parameters
      args,args_with_def=[],[]
      for n,p in params.items():
          if p.default is p.empty:
              args.append(n)
          else:
              args_with_def.append(n)
      return args,args_with_def