code: def _find_bad_transition(self, mma, w_string):
          
          conj_out = mma.consume_input(w_string)
          targ_out = self._membership_query(w_string)
          # TODO: handle different length outputs from conjecture and target
          # hypothesis.
          length = min(len(conj_out), len(targ_out))
          diff = [i for i in range(length)
                  if conj_out[i] != targ_out[i]]
          if len(diff) == 0:
              diff_index = len(targ_out)
          else:
              diff_index = diff[0]
  
          low = 0
          high = len(w_string)
          while True:
              i = (low + high) / 2
              length = len(self._membership_query(w_string[:i]))
              if length == diff_index + 1:
                  return w_string[:i]
              elif length < diff_index + 1:
                  low = i + 1
              else:
                  high = i - 1
docs: Checks for bad DFA transitions using the examined string
          Args:
              mma (DFA): The hypothesis automaton
              w_string (str): The examined string to be consumed
          Returns:
              str: The prefix of the examined string that matches