code: def _push_new_state(self):
          
          try:
              base = self._states[-1]
          except IndexError:
              graph = DirectedGraph()
              graph.add(None)     # Sentinel as root dependencies' parent.
              state = State(mapping={}, graph=graph)
          else:
              state = State(
                  mapping=base.mapping.copy(),
                  graph=base.graph.copy(),
              )
          self._states.append(state)
docs: Push a new state into history.
  
          This new state will be used to hold resolution results of the next
          coming round.