This is a follow-up to this question.
(Why / When) Is it preferable to use Py_ssize_t
for indexing? In the docs I just found
# Purists could use "Py_ssize_t" which is the proper Python type for # array indices.
-> Does that mean always when indexing NumPy/Cython - array(s)/-views one should use Py_ssize_t
?
-> Is Py_ssize_t
e. g. an unsigned int
so that I can't used @cython.boundscheck(False)
Py_ssize_t
is signed. See PEP 353, where it says "A new type Py_ssize_t is introduced, which has the same size as the compiler's size_t type, but is signed. It will be a typedef for ssize_t where available."
You should use Py_ssize_t
for indexing. I didn't find a definitive statement of this in the Cython docs, but Stefan Behnel, a Cython developer, said as much in an email (https://groups.google.com/forum/#!topic/cython-users/brENF_M9zxM):
As a general remark, you are using ints as indices. You should use the Py_ssize_t type instead (or size_t, if you prefer an unsigned type) to properly accommodate for 64 bit architectures.
Py_ssize_t
is a typedef used internally in the implementation of CPython (the C implementation of Python - I'm not talking about Cython there, I'm talking about CPython). It's used everywhere Python C API functions accept or return a C-level integer that can be used for indexing Python sequences. That's why it's "the correct" type to use for an index.
Py_ssize_t
in turn resolves to whatever the platform spelling is for the signed variant of the platform C's unsigned size_t
type. So it's some signed integer type, but its width (number of bits) depends on the platform you're using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With