1 from collections
.abc
import Iterable
3 # XXX this already exists in nmigen._utils
4 # see https://bugs.libre-soc.org/show_bug.cgi?id=297
6 if isinstance(v
, Iterable
):
12 # tree reduction function. operates recursively.
13 def treereduce(tree
, op
, attr
="data_o"):
14 #print ("treereduce", tree)
15 if not isinstance(tree
, list):
18 return getattr(tree
[0], attr
)
20 return op(getattr(tree
[0], attr
), getattr(tree
[1], attr
))
21 s
= len(tree
) // 2 # splitpoint
22 return treereduce(op(tree
[:s
], op
, attr
), treereduce(tree
[s
:], op
, attr
))