It would be nice if the library detected cycles and printed out what the cycle is - I first found this library when trying to debug view cycle error:
Too many nested views/persistent user-defined functions or possible circular reference of views/persistent user-defined functions referenced in query. Only 16 levels of nested views/persistent user-defined functions are allowed.
Cycles could be detected by passing a list of ancestors to _build_tree and checking children against that list.