def is_stop_here(self, frame, event, arg):
<EOL>lineno = frame.f_lineno<EOL>filename = frame.f_code.co_filename<EOL>if self.different_line and event == '<STR_LIT>':<EOL><INDENT>if self.last_lineno == lineno and self.last_filename == filename:<EOL><INDENT>return False<EOL><DEDENT>pass<EOL><DEDENT>self.last_lineno   = lineno<EOL>self.last_filename = filename<EOL>if self.stop_level is not None:<EOL><INDENT>if frame != self.last_frame:<EOL><INDENT>self.last_level = Mstack.count_frames(frame)<EOL>self.last_frame = frame<EOL>pass<EOL><DEDENT>if self.last_level > self.stop_level:<EOL><INDENT>return False<EOL><DEDENT>elif self.last_level == self.stop_level andself.stop_on_finish and event in ['<STR_LIT>', '<STR_LIT>']:<EOL><INDENT>self.stop_level = None<EOL>self.stop_reason = "<STR_LIT>"<EOL>return True<EOL><DEDENT>pass<EOL><DEDENT>if self._is_step_next_stop(event):<EOL><INDENT>self.stop_reason = '<STR_LIT>'<EOL>return True<EOL><DEDENT>return False<EOL>
Does the magic to determine if we stop here and run a
        command processor or not. If so, return True and set
        self.stop_reason; if not, return False.

        Determining factors can be whether a breakpoint was
        encountered, whether we are stepping, next'ing, finish'ing,
        and, if so, whether there is an ignore counter.