class_docstr: Fix deprecated white/blacklist arguments to characters::
  
      st.characters(whitelist_categories=...) -> st.characters(categories=...)
      st.characters(blacklist_categories=...) -> st.characters(exclude_categories=...)
      st.characters(whitelist_characters=...) -> st.characters(include_characters=...)
      st.characters(blacklist_characters=...) -> st.characters(exclude_characters=...)
  
  Additionally, we drop `exclude_categories=` if `categories=` is present,
  because this argument is always redundant (or an error).
code: def fn(self, original_node, updated_node):
      # Update to the new names
      newargs = []
      for arg in updated_node.args:
          kw = self._replacements.get(
              arg.keyword.value, arg.keyword.value
          )
          newargs.append(arg.with_changes(keyword=cst.Name(kw)))
      # Drop redundant exclude_categories, which is now an error
      if any(
          m.matches(arg, m.Arg(keyword=m.Name("categories")))
          for arg in newargs
      ):
          ex = m.Arg(keyword=m.Name("exclude_categories"))
          newargs = [a for a in newargs if m.matches(a, ~ex)]
      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 HypothesisFixCharactersArguments obj's underlying member method code with example usage: obj.fn(original_node, updated_node) and returns: updated_node