11

I found the following lines in the scikit-learn package:

if is_sparse:
    problem = csr_set_problem(
            (<np.ndarray[np.float64_t, ndim=1, mode='c']>X.data).data,
            (<np.ndarray[np.int32_t,   ndim=1, mode='c']>X.indices).shape,
            (<np.ndarray[np.int32_t,   ndim=1, mode='c']>X.indices).data,
            (<np.ndarray[np.int32_t,   ndim=1, mode='c']>X.indptr).shape,
            (<np.ndarray[np.int32_t,   ndim=1, mode='c']>X.indptr).data,
            Y.data, (<np.int32_t>X.shape[1]), bias,
            sample_weight.data)
else:
    ...

All my searches for "angle brackets in Python" give answers about documentation or decorator syntax, which I am pretty sure this is neither because it looks like actual logic.

What do the angle brackets in the above Python code do and where can I learn more about them?

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
user1717828
  • 7,122
  • 8
  • 34
  • 59

2 Answers2

11

That is Cython's syntax for type casting/coercion. It is not plain Python. Notice the file extension is .pyx

You can learn more about them in the documentation for Cython.

Here's an example taken from the doc page:

cdef char *p, float *q
p = <char*>q

Using Cython is not uncommon with projects like scikit-learn, where one gains significant optimisations by mixing readable Python with blazing-speed C.

Moses Koledoye
  • 77,341
  • 8
  • 133
  • 139
3

Take a look at Cython documentation, about types.

Additionally you could note that the file extension is .pyx and on the top of the file there are cimport statements.

R Kiselev
  • 1,124
  • 1
  • 9
  • 18