docs: def _detect_loops(self, loop_callback=None):
          """
          Loop detection.
  
          :param func loop_callback: A callback function for each detected loop backedge.
          :return: None
          """
  
          loop_finder = self.project.analyses.LoopFinder(kb=self.kb, normalize=False, fail_fast=self._fail_fast)
  
          if loop_callback is not None:
              graph_copy = networkx.DiGraph(self._graph)
  
              for loop in loop_finder.loops:  # type: angr.analyses.loopfinder.Loop
                  loop_callback(graph_copy, loop)
  
              self.model.graph = graph_copy
  
          # Update loop backedges and graph
          self._loop_back_edges = list(itertools.chain.from_iterable(loop.continue_edges for loop in loop_finder.loops))