Source code for nndt.space2.print_tree

from typing import Optional

from anytree import RenderTree

from nndt.space2.abstracts import AbstractBBoxNode, AbstractTreeElement
from nndt.space2.filesource import FileSource
from nndt.space2.implicit_representation import ImpRepr
from nndt.space2.method_set import MethodSetNode
from nndt.space2.transformation import AbstractTransformation


def _construct_filter(child_classes, not_parent_classes):
    def filter_(children):
        ret = [
            v
            for v in children
            if isinstance(v, child_classes)
            and not isinstance(v.parent, not_parent_classes)
        ]
        return ret

    return filter_


[docs]class PrintContainer: def __init__(self, text): self.text = text def __repr__(self): return self.text def __str__(self): return self.text
def _pretty_print(node: AbstractTreeElement, mode: Optional[str] = "default"): if mode is None or (mode == "default"): ret = RenderTree( node, childiter=_construct_filter( (AbstractTreeElement,), (MethodSetNode, AbstractTransformation, FileSource, ImpRepr), ), ).__str__() elif mode == "source" or mode == "sources": ret = RenderTree( node, childiter=_construct_filter((AbstractBBoxNode,), ()) ).__str__() elif mode == "full": ret = RenderTree(node).__str__() else: raise NotImplementedError(f"{mode} is not implemented for the explore method. ") return PrintContainer(ret)