sglang_v0.5.2/pytorch_2.8.0/third_party/python-peachpy/peachpy/util.py

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))