1 from collections
.abc
import Iterable
6 __all__
= ["flatten", "union", "log2_int", "bits_for", "deprecated"]
11 if isinstance(e
, Iterable
):
17 def union(i
, start
=None):
27 def log2_int(n
, need_pow2
=True):
30 r
= (n
- 1).bit_length()
31 if need_pow2
and (1 << r
) != n
:
32 raise ValueError("{} is not a power of 2".format(n
))
36 def bits_for(n
, require_sign_bit
=False):
38 r
= log2_int(n
+ 1, False)
40 require_sign_bit
= True
41 r
= log2_int(-n
, False)
47 def deprecated(message
, stacklevel
=2):
50 def wrapper(*args
, **kwargs
):
51 warnings
.warn(message
, DeprecationWarning, stacklevel
=stacklevel
)
52 return f(*args
, **kwargs
)
59 if isinstance(f
, property):
60 name
= f
.fget
.__name
__