public function isAcyclic() { // The DepthFirstToposortVisitor throws an exception on cycles. try { DepthFirst::traverse($this, new DepthFirstToposortVisitor()); return TRUE; } catch (RuntimeException $e) { return FALSE; } }