890 lines
28 KiB
Python
890 lines
28 KiB
Python
|
import numpy as np
|
||
|
|
||
|
import unittest
|
||
|
from numba import jit, from_dtype
|
||
|
from numba.core import types
|
||
|
from numba.typed import Dict
|
||
|
from numba.tests.support import (TestCase, skip_ppc64le_issue4563)
|
||
|
|
||
|
|
||
|
def getitem(x, i):
|
||
|
return x[i]
|
||
|
|
||
|
|
||
|
def getitem2(x, i, j):
|
||
|
return x[i][j]
|
||
|
|
||
|
|
||
|
def setitem(x, i, v):
|
||
|
x[i] = v
|
||
|
return x
|
||
|
|
||
|
|
||
|
def setitem2(x, i, y, j):
|
||
|
x[i] = y[j]
|
||
|
return x
|
||
|
|
||
|
|
||
|
def setitem_literal(x, i):
|
||
|
x[i] = '123'
|
||
|
return x
|
||
|
|
||
|
|
||
|
def getitem_key(x, y, j):
|
||
|
x[y[j]] = 123
|
||
|
|
||
|
|
||
|
def return_len(x, i):
|
||
|
return len(x[i])
|
||
|
|
||
|
|
||
|
def return_bool(x, i):
|
||
|
return bool(x[i])
|
||
|
|
||
|
|
||
|
def equal_getitem(x, i, j):
|
||
|
return x[i] == x[j]
|
||
|
|
||
|
|
||
|
def notequal_getitem(x, i, j):
|
||
|
return x[i] != x[j]
|
||
|
|
||
|
|
||
|
def lessthan_getitem(x, i, j):
|
||
|
return x[i] < x[j]
|
||
|
|
||
|
|
||
|
def greaterthan_getitem(x, i, j):
|
||
|
return x[i] > x[j]
|
||
|
|
||
|
|
||
|
def lessequal_getitem(x, i, j):
|
||
|
return x[i] <= x[j]
|
||
|
|
||
|
|
||
|
def greaterequal_getitem(x, i, j):
|
||
|
return x[i] >= x[j]
|
||
|
|
||
|
|
||
|
def contains_getitem2(x, i, y, j):
|
||
|
return x[i] in y[j]
|
||
|
|
||
|
|
||
|
def equal_getitem_value(x, i, v):
|
||
|
r1 = x[i] == v
|
||
|
r2 = v == x[i]
|
||
|
if r1 == r2:
|
||
|
return r1
|
||
|
raise ValueError('x[i] == v and v == x[i] are unequal')
|
||
|
|
||
|
|
||
|
def notequal_getitem_value(x, i, v):
|
||
|
r1 = x[i] != v
|
||
|
r2 = v != x[i]
|
||
|
if r1 == r2:
|
||
|
return r1
|
||
|
raise ValueError('x[i] != v and v != x[i] are unequal')
|
||
|
|
||
|
|
||
|
def return_isascii(x, i):
|
||
|
return x[i].isascii()
|
||
|
|
||
|
|
||
|
def return_isupper(x, i):
|
||
|
return x[i].isupper()
|
||
|
|
||
|
|
||
|
def return_upper(x, i):
|
||
|
return x[i].upper()
|
||
|
|
||
|
|
||
|
def return_str(x, i):
|
||
|
return str(x[i])
|
||
|
|
||
|
|
||
|
def return_bytes(x, i):
|
||
|
return bytes(x[i])
|
||
|
|
||
|
|
||
|
def return_hash(x, i):
|
||
|
return hash(x[i])
|
||
|
|
||
|
|
||
|
def return_find(x, i, y, j):
|
||
|
return x[i].find(y[j])
|
||
|
|
||
|
|
||
|
def return_rfind(x, i, y, j):
|
||
|
return x[i].rfind(y[j])
|
||
|
|
||
|
|
||
|
def return_startswith(x, i, y, j):
|
||
|
return x[i].startswith(y[j])
|
||
|
|
||
|
|
||
|
def return_endswith(x, i, y, j):
|
||
|
return x[i].endswith(y[j])
|
||
|
|
||
|
|
||
|
def return_split1(x, i):
|
||
|
return x[i].split()
|
||
|
|
||
|
|
||
|
def return_split2(x, i, y, j):
|
||
|
return x[i].split(y[j])
|
||
|
|
||
|
|
||
|
def return_split3(x, i, y, j, maxsplit):
|
||
|
return x[i].split(sep=y[j], maxsplit=maxsplit)
|
||
|
|
||
|
|
||
|
# NOT IMPLEMENTED: tests for rsplit
|
||
|
|
||
|
|
||
|
def return_center1(x, i, w):
|
||
|
return x[i].center(w)
|
||
|
|
||
|
|
||
|
def return_center2(x, i, w, y, j):
|
||
|
return x[i].center(w, y[j])
|
||
|
|
||
|
|
||
|
def return_ljust1(x, i, w):
|
||
|
return x[i].ljust(w)
|
||
|
|
||
|
|
||
|
def return_ljust2(x, i, w, y, j):
|
||
|
return x[i].ljust(w, y[j])
|
||
|
|
||
|
|
||
|
def return_rjust1(x, i, w):
|
||
|
return x[i].rjust(w)
|
||
|
|
||
|
|
||
|
def return_rjust2(x, i, w, y, j):
|
||
|
return x[i].rjust(w, y[j])
|
||
|
|
||
|
|
||
|
def return_join(x, i, y, j, z, k):
|
||
|
return x[i].join([y[j], z[k]])
|
||
|
|
||
|
|
||
|
def return_zfill(x, i, w):
|
||
|
return x[i].zfill(w)
|
||
|
|
||
|
|
||
|
def return_lstrip1(x, i):
|
||
|
return x[i].lstrip()
|
||
|
|
||
|
|
||
|
def return_lstrip2(x, i, y, j):
|
||
|
return x[i].lstrip(y[j])
|
||
|
|
||
|
|
||
|
def return_rstrip1(x, i):
|
||
|
return x[i].rstrip()
|
||
|
|
||
|
|
||
|
def return_rstrip2(x, i, y, j):
|
||
|
return x[i].rstrip(y[j])
|
||
|
|
||
|
|
||
|
def return_strip1(x, i):
|
||
|
return x[i].strip()
|
||
|
|
||
|
|
||
|
def return_strip2(x, i, y, j):
|
||
|
return x[i].strip(y[j])
|
||
|
|
||
|
|
||
|
def return_add(x, i, y, j):
|
||
|
return x[i] + y[j]
|
||
|
|
||
|
|
||
|
def return_iadd(x, i, y, j):
|
||
|
x[i] += y[j]
|
||
|
return x[i]
|
||
|
|
||
|
|
||
|
def return_mul(x, i, y, j):
|
||
|
return x[i] * y[j] # one of the operants must be integer
|
||
|
|
||
|
|
||
|
def return_not(x, i):
|
||
|
return not x[i]
|
||
|
|
||
|
|
||
|
def join_string_array(str_arr):
|
||
|
return ",".join(str_arr)
|
||
|
|
||
|
|
||
|
@skip_ppc64le_issue4563
|
||
|
class TestUnicodeArray(TestCase):
|
||
|
|
||
|
def _test(self, pyfunc, cfunc, *args, **kwargs):
|
||
|
expected = pyfunc(*args, **kwargs)
|
||
|
self.assertPreciseEqual(cfunc(*args, **kwargs), expected)
|
||
|
|
||
|
def test_getitem2(self):
|
||
|
cgetitem2 = jit(nopython=True)(getitem2)
|
||
|
|
||
|
arr = np.array(b'12')
|
||
|
self.assertPreciseEqual(cgetitem2(arr, (), 0), getitem2(arr, (), 0))
|
||
|
with self.assertRaisesRegex(IndexError, 'index out of range'):
|
||
|
cgetitem2(arr, (), 2)
|
||
|
|
||
|
arr = np.array('12')
|
||
|
self.assertPreciseEqual(cgetitem2(arr, (), 0), getitem2(arr, (), 0))
|
||
|
with self.assertRaisesRegex(IndexError, 'index out of range'):
|
||
|
cgetitem2(arr, (), 2)
|
||
|
|
||
|
arr = np.array([b'12', b'3'])
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 0, 0), getitem2(arr, 0, 0))
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 0, 1), getitem2(arr, 0, 1))
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 1, 0), getitem2(arr, 1, 0))
|
||
|
with self.assertRaisesRegex(IndexError, 'index out of range'):
|
||
|
cgetitem2(arr, 1, 1)
|
||
|
|
||
|
arr = np.array(['12', '3'])
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 0, 0), getitem2(arr, 0, 0))
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 0, 1), getitem2(arr, 0, 1))
|
||
|
self.assertPreciseEqual(cgetitem2(arr, 1, 0), getitem2(arr, 1, 0))
|
||
|
with self.assertRaisesRegex(IndexError, 'index out of range'):
|
||
|
cgetitem2(arr, 1, 1)
|
||
|
|
||
|
def test_getitem(self):
|
||
|
pyfunc = getitem
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, b'12', 1)
|
||
|
self._test(pyfunc, cfunc, np.array(b'12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 1)
|
||
|
|
||
|
self._test(pyfunc, cfunc, '12', 1)
|
||
|
self._test(pyfunc, cfunc, np.array('12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 1)
|
||
|
|
||
|
def test_getitem_key(self):
|
||
|
pyfunc = getitem_key
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
for x, i in [
|
||
|
(np.array('123'), ()),
|
||
|
(np.array(['123']), 0),
|
||
|
(np.array(b'123'), ()),
|
||
|
(np.array([b'123']), 0)
|
||
|
]:
|
||
|
d1 = {}
|
||
|
d2 = Dict.empty(from_dtype(x.dtype), types.int64)
|
||
|
pyfunc(d1, x, i)
|
||
|
cfunc(d2, x, i)
|
||
|
self.assertEqual(d1, d2)
|
||
|
# check for charseq to str conversion:
|
||
|
str(d2)
|
||
|
|
||
|
def test_setitem(self):
|
||
|
pyfunc = setitem
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
x = np.array(12)
|
||
|
self._test(pyfunc, cfunc, x, (), 34)
|
||
|
|
||
|
x1 = np.array(b'123')
|
||
|
x2 = np.array(b'123')
|
||
|
y1 = pyfunc(x1, (), b'34')
|
||
|
y2 = cfunc(x2, (), b'34')
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array(['123'])
|
||
|
x2 = np.array(['123'])
|
||
|
y1 = pyfunc(x1, 0, '34')
|
||
|
y2 = cfunc(x2, 0, '34')
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
def test_setitem2(self):
|
||
|
pyfunc = setitem2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
x1 = np.array(['123', 'ABC'])
|
||
|
x2 = np.array(['123', 'ABC'])
|
||
|
y1 = pyfunc(x1, 0, x1, 1)
|
||
|
y2 = cfunc(x2, 0, x2, 1)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array([b'123', b'ABC'])
|
||
|
x2 = np.array([b'123', b'ABC'])
|
||
|
y1 = pyfunc(x1, 0, x1, 1)
|
||
|
y2 = cfunc(x2, 0, x2, 1)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = np.array('ABC')
|
||
|
z2 = np.array('ABC')
|
||
|
y1 = pyfunc(x1, (), z1, ())
|
||
|
y2 = cfunc(x2, (), z2, ())
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array(123)
|
||
|
x2 = np.array(123)
|
||
|
z1 = 456,
|
||
|
z2 = 456,
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# bytes
|
||
|
x1 = np.array(b'123')
|
||
|
x2 = np.array(b'123')
|
||
|
z1 = b'ABC',
|
||
|
z2 = b'ABC',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# UTF-8
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = 'ABC',
|
||
|
z2 = 'ABC',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# UTF-16
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = 'AB\u01e9',
|
||
|
z2 = 'AB\u01e9',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# UTF-32
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = 'AB\U00108a0e',
|
||
|
z2 = 'AB\U00108a0e',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# UTF-8, assign longer value (truncates as in numpy)
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = 'ABCD',
|
||
|
z2 = 'ABCD',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# UTF-8, assign shorter value
|
||
|
x1 = np.array('123')
|
||
|
x2 = np.array('123')
|
||
|
z1 = 'AB',
|
||
|
z2 = 'AB',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# bytes, assign longer value (truncates as in numpy)
|
||
|
x1 = np.array(b'123')
|
||
|
x2 = np.array(b'123')
|
||
|
z1 = b'ABCD',
|
||
|
z2 = b'ABCD',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
# bytes, assign shorter value
|
||
|
x1 = np.array(b'123')
|
||
|
x2 = np.array(b'123')
|
||
|
z1 = b'AB',
|
||
|
z2 = b'AB',
|
||
|
y1 = pyfunc(x1, (), z1, 0)
|
||
|
y2 = cfunc(x2, (), z2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
def test_setitem_literal(self):
|
||
|
pyfunc = setitem_literal
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
x1 = np.array('ABC')
|
||
|
x2 = np.array('ABC')
|
||
|
y1 = pyfunc(x1, ())
|
||
|
y2 = cfunc(x2, ())
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array(['ABC', '5678'])
|
||
|
x2 = np.array(['ABC', '5678'])
|
||
|
y1 = pyfunc(x1, 0)
|
||
|
y2 = cfunc(x2, 0)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
x1 = np.array(['ABC', '5678'])
|
||
|
x2 = np.array(['ABC', '5678'])
|
||
|
y1 = pyfunc(x1, 1)
|
||
|
y2 = cfunc(x2, 1)
|
||
|
self.assertPreciseEqual(x1, x2)
|
||
|
self.assertPreciseEqual(y1, y2)
|
||
|
|
||
|
def test_return_len(self):
|
||
|
pyfunc = return_len
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array(''), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b''), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 1)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 1)
|
||
|
|
||
|
def test_return_bool(self):
|
||
|
pyfunc = return_bool
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array(''), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b''), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('12'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'']), 1)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '']), 1)
|
||
|
|
||
|
def _test_op_getitem(self, pyfunc):
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array([1, 2]), 0, 1)
|
||
|
self._test(pyfunc, cfunc, '12', 0, 1)
|
||
|
self._test(pyfunc, cfunc, b'12', 0, 1)
|
||
|
self._test(pyfunc, cfunc, np.array(b'12'), (), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), ())
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array([b'1', b'2']), 0, 0)
|
||
|
self._test(pyfunc, cfunc, np.array([b'1', b'2']), 0, 1)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 0, 0)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 1, 1)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 0, 1)
|
||
|
self._test(pyfunc, cfunc, np.array([b'12', b'3']), 1, 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(['1', '2']), 0, 0)
|
||
|
self._test(pyfunc, cfunc, np.array(['1', '2']), 0, 1)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 0, 0)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 1, 1)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 0, 1)
|
||
|
self._test(pyfunc, cfunc, np.array(['12', '3']), 1, 0)
|
||
|
|
||
|
def test_equal_getitem(self):
|
||
|
self._test_op_getitem(equal_getitem)
|
||
|
|
||
|
def test_notequal_getitem(self):
|
||
|
self._test_op_getitem(notequal_getitem)
|
||
|
|
||
|
def test_lessthan_getitem(self):
|
||
|
self._test_op_getitem(lessthan_getitem)
|
||
|
|
||
|
def test_greaterthan_getitem(self):
|
||
|
self._test_op_getitem(greaterthan_getitem)
|
||
|
|
||
|
def test_lessequal_getitem(self):
|
||
|
self._test_op_getitem(lessequal_getitem)
|
||
|
|
||
|
def test_greaterequal_getitem(self):
|
||
|
self._test_op_getitem(greaterequal_getitem)
|
||
|
|
||
|
def _test_op_getitem_value(self, pyfunc):
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array([1, 2]), 0, 1)
|
||
|
self._test(pyfunc, cfunc, '12', 0, '1')
|
||
|
self._test(pyfunc, cfunc, '12', 1, '3')
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), '1234')
|
||
|
self._test(pyfunc, cfunc, np.array(['1234']), 0, '1234')
|
||
|
self._test(pyfunc, cfunc, np.array(['1234']), 0, 'abc')
|
||
|
# fails: No conversion from array(bool, 1d, C) to bool
|
||
|
#self._test(pyfunc, cfunc, b'12', 0, b'1')
|
||
|
self._test(pyfunc, cfunc, np.array(b'12'), (), b'12')
|
||
|
self._test(pyfunc, cfunc, np.array([b'12']), 0, b'12')
|
||
|
self._test(pyfunc, cfunc, np.array([b'12']), 0, b'a')
|
||
|
|
||
|
def test_equal_getitem_value(self):
|
||
|
self._test_op_getitem_value(equal_getitem_value)
|
||
|
|
||
|
def test_notequal_getitem_value(self):
|
||
|
self._test_op_getitem_value(notequal_getitem_value)
|
||
|
|
||
|
def test_contains_getitem2(self):
|
||
|
pyfunc = contains_getitem2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
x = np.array('123')
|
||
|
y = np.array('12345')
|
||
|
self._test(pyfunc, cfunc, x, (), y, ())
|
||
|
self._test(pyfunc, cfunc, y, (), x, ())
|
||
|
|
||
|
x = np.array(b'123')
|
||
|
y = np.array(b'12345')
|
||
|
self._test(pyfunc, cfunc, x, (), y, ())
|
||
|
self._test(pyfunc, cfunc, y, (), x, ())
|
||
|
|
||
|
x = ('123',)
|
||
|
y = np.array('12345')
|
||
|
self._test(pyfunc, cfunc, x, 0, y, ())
|
||
|
self._test(pyfunc, cfunc, y, (), x, 0)
|
||
|
|
||
|
x = (b'123',)
|
||
|
y = np.array(b'12345')
|
||
|
self._test(pyfunc, cfunc, x, 0, y, ())
|
||
|
self._test(pyfunc, cfunc, y, (), x, 0)
|
||
|
|
||
|
def test_return_isascii(self):
|
||
|
pyfunc = return_isascii
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234']), 0)
|
||
|
self._test(pyfunc, cfunc, np.array('1234\u00e9'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234\u00e9']), 0)
|
||
|
|
||
|
def test_return_isupper(self):
|
||
|
pyfunc = return_isupper
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('abc'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['abc']), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b'abc'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'abc']), 0)
|
||
|
|
||
|
def test_return_str(self):
|
||
|
pyfunc = return_str
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234']), 0)
|
||
|
|
||
|
def test_return_bytes(self):
|
||
|
pyfunc = return_bytes
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'1234']), 0)
|
||
|
|
||
|
def test_return_upper(self):
|
||
|
pyfunc = return_upper
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('abc'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['abc']), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b'abc'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'abc']), 0)
|
||
|
|
||
|
def test_hash(self):
|
||
|
pyfunc = return_hash
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
hash1 = pyfunc(np.array('123'), ())
|
||
|
hash2 = hash('123')
|
||
|
hash3 = hash(np.array('123')[()])
|
||
|
self.assertTrue(hash1 == hash2 == hash3)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234']), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1234\u00e9'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234u00e9']), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1234\U00108a0e'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(['1234\U00108a0e']), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), ())
|
||
|
self._test(pyfunc, cfunc, np.array([b'1234']), 0)
|
||
|
|
||
|
def test_return_find(self):
|
||
|
pyfunc = return_find
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), ('23',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1234',), 0, np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), np.array(b'23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), (b'23',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1234',), 0, np.array(b'23'), ())
|
||
|
|
||
|
def test_return_rfind(self):
|
||
|
pyfunc = return_rfind
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), ('23',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1234',), 0, np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), np.array(b'23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), (b'23',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1234',), 0, np.array(b'23'), ())
|
||
|
|
||
|
def test_return_startswith(self):
|
||
|
pyfunc = return_startswith
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), ('23',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1234',), 0, np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), np.array(b'23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), (b'23',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1234',), 0, np.array(b'23'), ())
|
||
|
|
||
|
def test_return_endswith(self):
|
||
|
pyfunc = return_endswith
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1234'), (), ('23',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1234',), 0, np.array('23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), np.array(b'23'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), (), (b'23',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1234',), 0, np.array(b'23'), ())
|
||
|
|
||
|
def test_return_split1(self):
|
||
|
pyfunc = return_split1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('12 34'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1234'), ())
|
||
|
|
||
|
def test_return_split2(self):
|
||
|
pyfunc = return_split2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('12 34'), (), np.array(' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array('12 34'), (), (' ',), 0)
|
||
|
self._test(pyfunc, cfunc, ('12 34',), 0, np.array(' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'12 34'), (), np.array(b' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'12 34'), (), (b' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'12 34',), 0, np.array(b' '), ())
|
||
|
|
||
|
def test_return_split3(self):
|
||
|
pyfunc = return_split3
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (),
|
||
|
np.array(' '), (), 2)
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), (' ',), 0, 2)
|
||
|
self._test(pyfunc, cfunc, ('1 2 3 4',), 0, np.array(' '), (), 2)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (),
|
||
|
np.array(b' '), (), 2)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), (b' ',), 0, 2)
|
||
|
self._test(pyfunc, cfunc, (b'1 2 3 4',), 0, np.array(b' '), (), 2)
|
||
|
|
||
|
def test_return_ljust1(self):
|
||
|
pyfunc = return_ljust1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40)
|
||
|
|
||
|
def test_return_ljust2(self):
|
||
|
pyfunc = return_ljust2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40,
|
||
|
np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40, ('=',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1 2 3 4',), 0, 40, np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40,
|
||
|
np.array(b'='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40, (b'=',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1 2 3 4',), 0, 40, np.array(b'='), ())
|
||
|
|
||
|
def test_return_rjust1(self):
|
||
|
pyfunc = return_rjust1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40)
|
||
|
|
||
|
def test_return_rjust2(self):
|
||
|
pyfunc = return_rjust2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40,
|
||
|
np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40, ('=',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1 2 3 4',), 0, 40, np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40,
|
||
|
np.array(b'='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40, (b'=',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1 2 3 4',), 0, 40, np.array(b'='), ())
|
||
|
|
||
|
def test_return_center1(self):
|
||
|
pyfunc = return_center1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40)
|
||
|
|
||
|
def test_return_center2(self):
|
||
|
pyfunc = return_center2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40,
|
||
|
np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40, ('=',), 0)
|
||
|
self._test(pyfunc, cfunc, ('1 2 3 4',), 0, 40, np.array('='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40,
|
||
|
np.array(b'='), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40, (b'=',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'1 2 3 4',), 0, 40, np.array(b'='), ())
|
||
|
|
||
|
def test_return_join(self):
|
||
|
pyfunc = return_join
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
self._test(pyfunc, cfunc, np.array(','), (), np.array('abc'), (),
|
||
|
np.array('123'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(','), (), np.array('abc'), (),
|
||
|
('123',), 0)
|
||
|
self._test(pyfunc, cfunc, (',',), 0, np.array('abc'), (),
|
||
|
np.array('123'), ())
|
||
|
self._test(pyfunc, cfunc, (',',), 0, np.array('abc'), (),
|
||
|
('123',), 0)
|
||
|
self._test(pyfunc, cfunc, np.array(b','), (), np.array(b'abc'), (),
|
||
|
np.array(b'123'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b','), (), np.array(b'abc'), (),
|
||
|
(b'123',), 0)
|
||
|
self._test(pyfunc, cfunc, (b',',), 0, np.array(b'abc'), (),
|
||
|
np.array(b'123'), ())
|
||
|
self._test(pyfunc, cfunc, (b',',), 0, np.array(b'abc'), (),
|
||
|
(b'123',), 0)
|
||
|
|
||
|
def test_return_zfill(self):
|
||
|
pyfunc = return_zfill
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('1 2 3 4'), (), 40)
|
||
|
self._test(pyfunc, cfunc, np.array(b'1 2 3 4'), (), 40)
|
||
|
|
||
|
def test_return_lstrip1(self):
|
||
|
pyfunc = return_lstrip1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), ())
|
||
|
|
||
|
def test_return_lstrip2(self):
|
||
|
pyfunc = return_lstrip2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), np.array(' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), (' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (' 123 ',), 0, np.array(' '), ())
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), np.array(b' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), (b' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (b' 123 ',), 0, np.array(b' '), ())
|
||
|
|
||
|
def test_return_rstrip1(self):
|
||
|
pyfunc = return_rstrip1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), ())
|
||
|
|
||
|
def test_return_rstrip2(self):
|
||
|
pyfunc = return_rstrip2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), np.array(' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), (' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (' 123 ',), 0, np.array(' '), ())
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), np.array(b' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), (b' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (b' 123 ',), 0, np.array(b' '), ())
|
||
|
|
||
|
def test_return_strip1(self):
|
||
|
pyfunc = return_strip1
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), ())
|
||
|
|
||
|
def test_return_strip2(self):
|
||
|
pyfunc = return_strip2
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), np.array(' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(' 123 '), (), (' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (' 123 ',), 0, np.array(' '), ())
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), np.array(b' '), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b' 123 '), (), (b' ',), 0)
|
||
|
self._test(pyfunc, cfunc, (b' 123 ',), 0, np.array(b' '), ())
|
||
|
|
||
|
def test_return_add(self):
|
||
|
pyfunc = return_add
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), (), np.array('cd'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), (), ('cd',), 0)
|
||
|
self._test(pyfunc, cfunc, ('ab',), 0, np.array('cd'), ())
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), (), np.array(b'cd'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), (), (b'cd',), 0)
|
||
|
self._test(pyfunc, cfunc, (b'ab',), 0, np.array(b'cd'), ())
|
||
|
|
||
|
def test_return_iadd(self):
|
||
|
pyfunc = return_iadd
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), (), np.array('cd'), ())
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), (), ('cd',), 0)
|
||
|
expected = pyfunc(['ab'], 0, np.array('cd'), ())
|
||
|
result = pyfunc(['ab'], 0, np.array('cd'), ())
|
||
|
self.assertPreciseEqual(result, expected)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), (), np.array(b'cd'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), (), (b'cd',), 0)
|
||
|
expected = pyfunc([b'ab'], 0, np.array(b'cd'), ())
|
||
|
result = pyfunc([b'ab'], 0, np.array(b'cd'), ())
|
||
|
self.assertPreciseEqual(result, expected)
|
||
|
|
||
|
def test_return_mul(self):
|
||
|
pyfunc = return_mul
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), (), (5,), 0)
|
||
|
self._test(pyfunc, cfunc, (5,), 0, np.array('ab'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), (), (5,), 0)
|
||
|
self._test(pyfunc, cfunc, (5,), 0, np.array(b'ab'), ())
|
||
|
|
||
|
def test_return_not(self):
|
||
|
pyfunc = return_not
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array('ab'), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b'ab'), ())
|
||
|
self._test(pyfunc, cfunc, (b'ab',), 0)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(''), ())
|
||
|
self._test(pyfunc, cfunc, np.array(b''), ())
|
||
|
self._test(pyfunc, cfunc, (b'',), 0)
|
||
|
|
||
|
def test_join(self):
|
||
|
pyfunc = join_string_array
|
||
|
cfunc = jit(nopython=True)(pyfunc)
|
||
|
|
||
|
self._test(pyfunc, cfunc, np.array(["hi", "there"]))
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|