class_docstr: A shrink pass bundles together a large number of local changes to
  the current shrink target.
  
  Each shrink pass is defined by some function and some arguments to that
  function. The ``generate_arguments`` function returns all arguments that
  might be useful to run on the current shrink target.
  
  The guarantee made by methods defined this way is that after they are
  called then *either* the shrink target has changed *or* each of
  ``fn(*args)`` has been called for every ``args`` in ``generate_arguments(self)``.
  No guarantee is made that all of these will be called if the shrink target
  changes.
class_docstr_tok: ["A","shrink","pass","bundles","together","a","large","number","of","local","changes","to","the","current","shrink","target",".","Each","shrink","pass","is","defined","by","some","function","and","some","arguments","to","that","function",".","The","``","generate_arguments","``","function","returns","all","arguments","that","might","be","useful","to","run","on","the","current","shrink","target",".","The","guarantee","made","by","methods","defined","this","way","is","that","after","they","are","called","then","*","either","*","the","shrink","target","has","changed","*","or","*","each","of","``","fn","(","*","args",")","``","has","been","called","for","every","``","args","``","in","``","generate_arguments","(","self",")","``",".","No","guarantee","is","made","that","all","of","these","will","be","called","if","the","shrink","target","changes","."]
code: def __attrs_post_init__(self):
      assert self.name not in SHRINK_PASS_DEFINITIONS, self.name
      SHRINK_PASS_DEFINITIONS[self.name] = self
  
imports: from collections import defaultdict
  from typing import TYPE_CHECKING, Callable, Dict, Optional
  import attr
  from hypothesis.internal.compat import int_from_bytes, int_to_bytes
  from hypothesis.internal.conjecture.choicetree import ChoiceTree, prefix_selection_order, random_selection_order
  from hypothesis.internal.conjecture.data import DRAW_FLOAT_LABEL, ConjectureData, ConjectureResult, Status
  from hypothesis.internal.conjecture.dfa import ConcreteDFA
  from hypothesis.internal.conjecture.floats import float_to_lex, lex_to_float
  from hypothesis.internal.conjecture.junkdrawer import binary_search, find_integer, replace_all
  from hypothesis.internal.conjecture.shrinking import Float, Integer, Lexical, Ordering
  from hypothesis.internal.conjecture.shrinking.learned_dfas import SHRINKING_DFAS
label_desc: Use image node_id 2 for calling the ShrinkPassDefinition obj's underlying member method code with example usage: obj.__attrs_post_init__() without return types