118 lines
2.4 KiB
Python
118 lines
2.4 KiB
Python
# This file is part of PeachPy package and is licensed under the Simplified BSD license.
|
|
# See license.rst for the full text of the license.
|
|
|
|
import six
|
|
|
|
|
|
def int_size(n):
|
|
assert is_int64(n)
|
|
if is_int8(n):
|
|
return 1
|
|
elif is_int16(n):
|
|
return 2
|
|
elif is_int32(n):
|
|
return 4
|
|
else:
|
|
return 8
|
|
|
|
|
|
def is_int(n):
|
|
return isinstance(n, six.integer_types)
|
|
|
|
|
|
def is_int64(n):
|
|
return isinstance(n, six.integer_types) and -9223372036854775808 <= n <= 18446744073709551615
|
|
|
|
|
|
def is_sint64(n):
|
|
return isinstance(n, six.integer_types) and -9223372036854775808 <= n <= 9223372036854775807
|
|
|
|
|
|
def is_uint64(n):
|
|
return isinstance(n, six.integer_types) and 0 <= n <= 18446744073709551615
|
|
|
|
|
|
def is_int32(n):
|
|
return isinstance(n, six.integer_types) and -2147483648 <= n <= 4294967295
|
|
|
|
|
|
def is_sint32(n):
|
|
return isinstance(n, six.integer_types) and -2147483648 <= n <= 2147483647
|
|
|
|
|
|
def is_uint32(n):
|
|
return isinstance(n, six.integer_types) and 0 <= n <= 4294967295
|
|
|
|
|
|
def is_int16(n):
|
|
return isinstance(n, six.integer_types) and -32768 <= n <= 65535
|
|
|
|
|
|
def is_sint16(n):
|
|
return isinstance(n, six.integer_types) and -32768 <= n <= 32767
|
|
|
|
|
|
def is_uint16(n):
|
|
return isinstance(n, six.integer_types) and 0 <= n <= 65535
|
|
|
|
|
|
def is_int8(n):
|
|
return isinstance(n, six.integer_types) and -128 <= n <= 255
|
|
|
|
|
|
def is_uint8(n):
|
|
return isinstance(n, six.integer_types) and 0 <= n <= 255
|
|
|
|
|
|
def is_sint8(n):
|
|
return isinstance(n, six.integer_types) and -128 <= n <= 127
|
|
|
|
|
|
def roundup(n, q):
|
|
import math
|
|
return int(math.ceil(float(n) / float(q)) * q)
|
|
|
|
|
|
def ilog2(n):
|
|
if n & (n - 1) != 0:
|
|
raise ValueError("%u is not an power of 2" % n)
|
|
if n == 0:
|
|
return 0
|
|
else:
|
|
l = 0
|
|
while n != 1:
|
|
l += 1
|
|
n >>= 1
|
|
return l
|
|
|
|
|
|
def unique(seq):
|
|
seq_values = set()
|
|
unique_seq = []
|
|
for value in seq:
|
|
if value not in seq_values:
|
|
seq_values.add(value)
|
|
unique_seq.append(value)
|
|
return unique_seq
|
|
|
|
|
|
def append_unique(value, sequence=None):
|
|
if sequence is None:
|
|
return [value]
|
|
else:
|
|
if value not in sequence:
|
|
sequence.append(value)
|
|
return sequence
|
|
|
|
|
|
def pairwise(iterable):
|
|
import itertools
|
|
a, b = itertools.tee(iterable)
|
|
next(b, None)
|
|
return itertools.izip(a, b)
|
|
|
|
|
|
def diff(sequence):
|
|
import operator
|
|
return map(operator.__sub__, pairwise(sequence))
|