import migen in litex/gen
[litex.git] / litex / gen / migen / util / misc.py
1 from fractions import gcd
2 import collections
3
4
5 def flat_iteration(l):
6 for element in l:
7 if isinstance(element, collections.Iterable):
8 for element2 in flat_iteration(element):
9 yield element2
10 else:
11 yield element
12
13
14 def xdir(obj, return_values=False):
15 for attr in dir(obj):
16 if attr[:2] != "__" and attr[-2:] != "__":
17 if return_values:
18 yield attr, getattr(obj, attr)
19 else:
20 yield attr
21
22
23 def gcd_multiple(numbers):
24 l = len(numbers)
25 if l == 1:
26 return numbers[0]
27 else:
28 s = l//2
29 return gcd(gcd_multiple(numbers[:s]), gcd_multiple(numbers[s:]))