code: def do_draw(self, data):
      count = 0
      while True:
          try:
              with self.limited_base.capped(self.max_leaves):
                  return data.draw(self.strategy)
          except LimitReached:
              if count == 0:
                  msg = f"Draw for {self!r} exceeded max_leaves and had to be retried"
                  data.events[msg] = ""
              count += 1
  
imports: import threading
  from contextlib import contextmanager
  from hypothesis.errors import InvalidArgument
  from hypothesis.internal.reflection import get_pretty_function_description
  from hypothesis.internal.validation import check_type
  from hypothesis.strategies._internal.strategies import OneOfStrategy, SearchStrategy, check_strategy
label_desc: Use image node_id 4 for calling the RecursiveStrategy obj's underlying member method code with example usage: obj.do_draw(data) and returns: data