Sugar 🍬
For pedagogical reason, field
has been used throught the documentation to reinforce the concepts. However, Treeo has a couple of shortcuts to make it easier and more understandable to define Tree
s.
normal | shortcut |
---|---|
to.field(node=True) |
to.node() |
to.field(node=False) |
to.static() |
to.field(node=True, kind=Kind) |
Kind.node() |
to.field(node=False, kind=Kind) |
Kind.static() |
Based on this, you can take the following code
class Parameter:
pass
class Child(to.Tree):
a: float = to.field(node=True)
b: str = to.field(node=False)
c: float = to.field(node=True, kind=Parameter)
d: float = to.field(node=False, kind=Parameter)
class Parent(to.Tree):
child1: Child = to.field(node=True)
child2: Child = to.field(node=False)
rest: List[Child] = to.field(node=True)
and simplify it to:
class Parameter(to.KindMixin): pass
class Child(to.Tree):
a: float = to.node()
b: str # = to.static(), inferred
c: float = Parameter.node()
d: float = Parameter.static()
class Parent(to.Tree):
child1: Child # = to.node(), inferred
child2: Child = to.static()
rest: List[Child] # = to.node(), inferred
The to.KindMixin
provides the .field()
, .node()
, and .static()
methods to subtypes, in this case the Parameter
class.