code: def __init__(
      self,
      test_function,
      *,
      settings=None,
      random=None,
      database_key=None,
      ignore_limits=False,
  ):
      self._test_function = test_function
      self.settings = settings or Settings()
      self.shrinks = 0
      self.finish_shrinking_deadline = None
      self.call_count = 0
      self.valid_examples = 0
      self.random = random or Random(getrandbits(128))
      self.database_key = database_key
      self.ignore_limits = ignore_limits
  
      # Global dict of per-phase statistics, and a list of per-call stats
      # which transfer to the global dict at the end of each phase.
      self.statistics = {}
      self.stats_per_test_case = []
  
      self.interesting_examples = {}
      # We use call_count because there may be few possible valid_examples.
      self.first_bug_found_at = None
      self.last_bug_found_at = None
  
      self.shrunk_examples = set()
  
      self.health_check_state = None
  
      self.tree = DataTree()
  
      self.best_observed_targets = defaultdict(lambda: NO_SCORE)
      self.best_examples_of_observed_targets = {}
  
      # We keep the pareto front in the example database if we have one. This
      # is only marginally useful at present, but speeds up local development
      # because it means that large targets will be quickly surfaced in your
      # testing.
      if (
          self.database_key is not None
          and self.settings.database is not None
      ):
          self.pareto_front = ParetoFront(self.random)
          self.pareto_front.on_evict(self.on_pareto_evict)
      else:
          self.pareto_front = None
  
      # We want to be able to get the ConjectureData object that results
      # from running a buffer without recalculating, especially during
      # shrinking where we need to know about the structure of the
      # executed test case.
      self.__data_cache = LRUReusedCache(CACHE_SIZE)
  
      self.__pending_call_explanation = None
  
imports: import math
  import time
  from collections import defaultdict
  from contextlib import contextmanager
  from datetime import timedelta
  from enum import Enum
  from random import Random, getrandbits
  import attr
  from hypothesis import HealthCheck, Phase, Verbosity, settings
  from hypothesis._settings import local_settings
  from hypothesis.errors import StopTest
  from hypothesis.internal.cache import LRUReusedCache
  from hypothesis.internal.compat import ceil, int_from_bytes
  from hypothesis.internal.conjecture.data import ConjectureData, ConjectureResult, DataObserver, Overrun, Status
  from hypothesis.internal.conjecture.datatree import DataTree, PreviouslyUnseenBehaviour, TreeRecordingObserver
  from hypothesis.internal.conjecture.junkdrawer import clamp, ensure_free_stackframes
  from hypothesis.internal.conjecture.pareto import NO_SCORE, ParetoFront, ParetoOptimiser
  from hypothesis.internal.conjecture.shrinker import Shrinker, sort_key
  from hypothesis.internal.healthcheck import fail_health_check
  from hypothesis.reporting import base_report, report
label_desc: Use image node_id 1 to create a new ConjectureRunner object  with example: obj = ConjectureRunner(test_function)