|
Packit |
562c7a |
|
|
Packit |
562c7a |
cimport cython
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef unicode _ustring = u'azerty123456'
|
|
Packit |
562c7a |
ustring = _ustring
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index(unicode ustring, Py_ssize_t i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index(ustring, 0) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, 2) == 'e'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, -1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, -len(ustring)) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> index(ustring, len(ustring))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_pyindex(unicode ustring, i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index(ustring, 0) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, 2) == 'e'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, -1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index(ustring, -len(ustring)) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> index(ustring, len(ustring))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_literal(Py_ssize_t i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_literal(0) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal(2) == 'e'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal(-1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal(-len('azerty123456')) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> index_literal(len(ustring))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return u'azerty123456'[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_literal_pyunicode_cast(int i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_cast(0) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_cast(-5) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_cast(2) == '3'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_cast(4) == '5'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(6)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return <Py_UNICODE>(u"12345"[i])
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//IndexNode",
|
|
Packit |
562c7a |
"//SingleAssignmentNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//SingleAssignmentNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_literal_pyunicode_coerce(int i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(0) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(-5) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(2) == '3'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(4) == '5'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce(6)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef Py_UNICODE result = u"12345"[i]
|
|
Packit |
562c7a |
return result
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//SingleAssignmentNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//SingleAssignmentNode//CoerceFromPyTypeNode")
|
|
Packit |
562c7a |
@cython.boundscheck(False)
|
|
Packit |
562c7a |
def index_literal_pyunicode_coerce_no_check(int i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce_no_check(0) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce_no_check(-5) == '1'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce_no_check(2) == '3'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_literal_pyunicode_coerce_no_check(4) == '5'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef Py_UNICODE result = u"12345"[i]
|
|
Packit |
562c7a |
return result
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
@cython.boundscheck(False)
|
|
Packit |
562c7a |
def index_no_boundscheck(unicode ustring, Py_ssize_t i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_no_boundscheck(ustring, 0) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_no_boundscheck(ustring, 2) == 'e'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_no_boundscheck(ustring, -1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_no_boundscheck(ustring, len(ustring)-1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_no_boundscheck(ustring, -len(ustring)) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
@cython.boundscheck(False)
|
|
Packit |
562c7a |
def unsigned_index_no_boundscheck(unicode ustring, unsigned int i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unsigned_index_no_boundscheck(ustring, 0) == 'a'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> unsigned_index_no_boundscheck(ustring, 2) == 'e'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> unsigned_index_no_boundscheck(ustring, len(ustring)-1) == '6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//PrimaryCmpNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_compare(unicode ustring, Py_ssize_t i):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_compare(ustring, 0)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_compare(ustring, 1)
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> index_compare(ustring, -1)
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> index_compare(ustring, -len(ustring))
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> index_compare(ustring, len(ustring))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i] == u'a'
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//PrimaryCmpNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_compare_string(unicode ustring, Py_ssize_t i, unicode other):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, 0, ustring[0])
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, 0, ustring[:4])
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, 1, ustring[0])
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, 1, ustring[1])
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, -1, ustring[0])
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, -1, ustring[-1])
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, -len(ustring), ustring[-len(ustring)])
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> index_compare_string(ustring, len(ustring), ustring)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
IndexError: string index out of range
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i] == other
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//MulNode",
|
|
Packit |
562c7a |
"//MulNode/CoerceToPyTypeNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_multiply(unicode ustring, Py_ssize_t i, int mul):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> ustring[0] * 5 == 'aaaaa'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_multiply(ustring, 0, 5) == 'aaaaa'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i] * mul
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//AddNode",
|
|
Packit |
562c7a |
"//AddNode/CoerceToPyTypeNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_add(unicode ustring, Py_ssize_t i, Py_ssize_t j):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> ustring[0] + ustring[-1] == 'a6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> index_add(ustring, 0, -1) == 'a6'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return ustring[i] + ustring[j]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//CoerceToPyTypeNode//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_concat_loop(unicode ustring):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_concat_loop(ustring) == ustring
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef int i
|
|
Packit |
562c7a |
cdef unicode s = u''
|
|
Packit |
562c7a |
for i in range(len(ustring)):
|
|
Packit |
562c7a |
s += ustring[i]
|
|
Packit |
562c7a |
return s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_assert_path_exists("//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//IndexNode",
|
|
Packit |
562c7a |
"//CoerceToPyTypeNode//IndexNode")
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists("//IndexNode//CoerceToPyTypeNode")
|
|
Packit |
562c7a |
def index_join_loop(unicode ustring):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> index_join_loop(ustring) == ustring
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef int i
|
|
Packit |
562c7a |
return u''.join([ ustring[i] for i in range(len(ustring)) ])
|