class_docstr: Fix positional arguments for newly keyword-only parameters, e.g.::
  
      st.fractions(0, 1, 9) -> st.fractions(0, 1, max_denominator=9)
  
  Applies to a majority of our public API, since keyword-only parameters are
  great but we couldn't use them until after we dropped support for Python 2.
docstr: Convert positional to keyword arguments.
docstr_tok: ["Convert","positional","to","keyword","arguments","."]
code: def leave_Call(self, original_node, updated_node):
      """Convert positional to keyword arguments."""
      metadata = self.get_metadata(
          cst.metadata.QualifiedNameProvider, original_node
      )
      qualnames = {qn.name for qn in metadata}
  
      # If this isn't one of our known functions, or it has no posargs, stop there.
      if (
          len(qualnames) != 1
          or not qualnames.intersection(self.kwonly_functions)
          or not m.matches(
              updated_node,
              m.Call(
                  func=m.DoesNotMatch(m.Call()),
                  args=[m.Arg(keyword=None), m.ZeroOrMore()],
              ),
          )
      ):
          return updated_node
  
      # Get the actual function object so that we can inspect the signature.
      # This does e.g. incur a dependency on Numpy to fix Numpy-dependent code,
      # but having a single source of truth about the signatures is worth it.
      try:
          params = signature(get_fn(*qualnames)).parameters.values()
      except ModuleNotFoundError:
          return updated_node
  
      # st.floats() has a new allow_subnormal kwonly argument not at the end,
      # so we do a bit more of a dance here.
      if qualnames == {"hypothesis.strategies.floats"}:
          params = [p for p in params if p.name != "allow_subnormal"]
  
      if len(updated_node.args) > len(params):
          return updated_node
  
      # Create new arg nodes with the newly required keywords
      assign_nospace = cst.AssignEqual(
          whitespace_before=cst.SimpleWhitespace(""),
          whitespace_after=cst.SimpleWhitespace(""),
      )
      newargs = [
          arg
          if arg.keyword
          or arg.star
          or p.kind is not Parameter.KEYWORD_ONLY
          else arg.with_changes(
              keyword=cst.Name(p.name), equal=assign_nospace
          )
          for p, arg in zip(params, updated_node.args)
      ]
      return updated_node.with_changes(args=newargs)
  
imports: import functools
  import importlib
  from inspect import Parameter, signature
  from typing import ClassVar, List
  import libcst
  import libcst.matchers
  from libcst.codemod import VisitorBasedCodemodCommand
label_desc: Use image node_id 1 for calling the HypothesisFixPositionalKeywonlyArgs obj's underlying member method code with example usage: obj.leave_Call(original_node, updated_node) and returns: updated_node, updated_node, updated_node, updated_node