Cython functions now use the PEP-590_ vectorcall protocol in Py3.7+.
Patch by Jeroen Demeyer. (Github issue :issue:2263)
π Unicode identifiers are supported in Cython code (PEP-3131_).
Patch by David Woods. (Github issue :issue:2601)
π Unicode module names and imports are supported.
Patch by David Woods. (Github issue :issue:3119)
π Annotations are no longer parsed, keeping them as strings following PEP-563_.
Patch by David Woods. (Github issue :issue:3285)
Preliminary support for the CPython's Py_LIMITED_API (stable ABI) is
available by setting the CYTHON_LIMITED_API C macro. Note that the
support is currently in an early stage and many features do not yet work.
You currently still have to define Py_LIMITED_API externally in order
to restrict the API usage. This will change when the feature stabilises.
Patches by Eddie Elizondo and David Woods. (Github issues :issue:3223,
:issue:3311, :issue:3501)
The dispatch to fused functions is now linear in the number of arguments,
which makes it much faster, often 2x or more, and several times faster for
larger fused types with many specialisations.
Patch by will-ca. (Github issue :issue:1385)
with gil/nogil statements can be conditional based on compile-time
constants, e.g. fused type checks.
Patch by Noam Hershtig. (Github issue :issue:2579)
const can be used together with fused types.
Patch by Thomas Vincent. (Github issue :issue:1772)
Reimports of already imported modules are substantially faster.
(Github issue :issue:2854)
π Positional-only arguments are supported in Python functions (PEP-570_).
Patch by Josh Tobin. (Github issue :issue:2915)
π The volatile C modifier is supported in Cython code.
Patch by Jeroen Demeyer. (Github issue :issue:1667)
@cython.trashcan(True) can be used on an extension type to enable the
CPython :ref:trashcan. This allows deallocating deeply recursive objects
without overflowing the stack. Patch by Jeroen Demeyer. (Github issue :issue:2842)
Inlined properties can be defined for external extension types.
Patch by Matti Picus. (Github issue :issue:2640, redone later in :issue:3571)
The str() builtin now calls PyObject_Str() instead of going
through a Python call.
Patch by William Ayd. (Github issue :issue:3279)
String concatenation can now happen in place if possible, by extending the
existing string rather than always creating a new one.
Patch by David Woods. (Github issue :issue:3453)
Multiplication of Python numbers with small constant integers is faster.
(Github issue :issue:2808)
Some list copying is avoided internally when a new list needs to be created
but we already have a fresh one.
(Github issue :issue:3494)
Extension types that do not need their own tp_new implementation (because
they have no object attributes etc.) directly inherit the implementation of
their parent type if possible.
(Github issue :issue:1555)
The attributes gen.gi_frame and coro.cr_frame of Cython compiled
generators and coroutines now return an actual frame object for introspection.
(Github issue :issue:2306)
Several declarations in cpython.*, libc.* and libcpp.* were added.
Patches by Jeroen Demeyer, Matthew Edwards, Chris Gyurgyik, Jerome Kieffer
and Zackery Spytz.
(Github issues :issue:3468, :issue:3332, :issue:3202, :issue:3188,
:issue:3179, :issue:2891, :issue:2826, :issue:2713)
π Deprecated NumPy API usages were removed from numpy.pxd.
Patch by Matti Picus. (Github issue :issue:3365)
cython.inline() now sets the NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
C macro automatically when numpy is imported in the code, to avoid C compiler
warnings about deprecated NumPy C-API usage.
The builtin abs() function can now be used on C numbers in nogil code.
Patch by Elliott Sales de Andrade. (Github issue :issue:2748)
PEP-479_ (generator_stop) is now enabled by default with language level 3.
(Github issue :issue:2580)
π The cython.view.array type supports inheritance.
Patch by David Woods. (Github issue :issue:3413)
Code annotation accepts a new debugging argument --annotate-fullc that
will include the complete syntax highlighted C file in the HTML output.
(Github issue :issue:2855)
β
--no-capture added to runtests.py to prevent stdout/stderr capturing
during srctree tests.
Patch by Matti Picus. (Github issue :issue:2701)
π --no-docstrings option added to cythonize script.
Original patch by mo-han. (Github issue :issue:2889)
π cygdb gives better error messages when it fails to initialise the
Python runtime support in gdb.
Patch by Volker Weissmann. (Github issue :issue:3489)
π The Pythran shape attribute is supported.
Patch by Serge Guelton. (Github issue :issue:3307)
The unicode methods .upper(), .lower() and .title() were
incorrectly optimised for single character input values and only returned
the first character if multiple characters should have been returned.
They now use the original Python methods again.
Fused argument types were not correctly handled in type annotations and
cython.locals().
Patch by David Woods. (Github issues :issue:3391, :issue:3142)
Diverging from the usual behaviour, len(memoryview), len(char*)
and len(Py_UNICODE*) returned an unsigned size_t value. They now
return a signed Py_ssize_t, like other usages of len().
Nested dict literals in function call kwargs could incorrectly raise an
error about duplicate keyword arguments, which are allowed when passing
them from dict literals.
(Github issue :issue:2963)
Item access (subscripting) with integer indices/keys always tried the
Sequence protocol before the Mapping protocol, which diverged from Python
semantics. It now passes through the Mapping protocol first when supported.
(Github issue :issue:1807)
Name lookups in class bodies no longer go through an attribute lookup.
Patch by Jeroen Demeyer. (Github issue :issue:3100)
Broadcast assignments to a multi-dimensional memory view slice could end
up in the wrong places when the underlying memory view is known to be
contiguous but the slice is not.
(Github issue :issue:2941)
Pickling unbound methods of Python classes failed.
Patch by Pierre Glaser. (Github issue :issue:2972)
The Py_hash_t type failed to accept arbitrary "index" values.
(Github issue :issue:2752)
The first function line number of functions with decorators pointed to the
signature line and not the first decorator line, as in Python.
Patch by Felix KohlgrΓΌber. (Github issue :issue:2536)
Constant integer expressions that used a negative exponent were evaluated
as integer 0 instead of the expected float value.
Patch by KryΕ‘tof PilnΓ‘Δek. (Github issue :issue:2133)
The cython.declare() and cython.cast() functions could fail in pure mode.
Patch by Dmitry Shesterkin. (Github issue :issue:3244)
__doc__ was not available inside of the class body during class creation.
(Github issue :issue:1635)
Setting language_level=2 in a file did not work if language_level=3
was enabled globally before.
Patch by Jeroen Demeyer. (Github issue :issue:2791)
__init__.pyx files were not always considered as package indicators.
(Github issue :issue:2665)
Compiling package __init__ files could fail under Windows due to an
undefined export symbol. (Github issue :issue:2968)
β A C compiler cast warning was resolved.
Patch by Michael Buesch. (Github issue :issue:2775)
Binding staticmethods of Cython functions were not behaving like Python methods.
Patch by Jeroen Demeyer. (Github issue :issue:3106, :issue:3102)
Memoryviews failed to compile when the cache_builtins feature was disabled.
Patch by David Woods. (Github issue :issue:3406)
0οΈβ£ The default language level was changed to 3str, i.e. Python 3 semantics,
but with str literals (also in Python 2.7). This is a backwards incompatible
change from the previous default of Python 2 semantics. The previous behaviour
is available through the directive language_level=2.
(Github issue :issue:2565)
Cython no longer generates __qualname__ attributes for classes in Python
2.x since they are problematic there and not correctly maintained for subclasses.
Patch by Jeroen Demeyer. (Github issue :issue:2772)
π¨ Source file fingerprinting now uses SHA-1 instead of MD5 since the latter
tends to be slower and less widely supported these days.
(Github issue :issue:2790)
π The long deprecated include files python_*, stdio, stdlib and
stl in Cython/Includes/Deprecated/ were removed. Use the libc.*
and cpython.* pxd modules instead.
Patch by Jeroen Demeyer. (Github issue :issue:2904)
The search order for include files was changed. Previously it was
include_directories, Cython/Includes, sys.path. Now it is
include_directories, sys.path, Cython/Includes. This was done to
allow third-party *.pxd files to override the ones in Cython.
Patch by Matti Picus. (Github issue :issue:2905)
π The command line parser was rewritten and modernised using argparse.
Patch by Egor Dranischnikow. (Github issue :issue:2952, :issue:3001)
π Dotted filenames for qualified module names (pkg.mod.pyx) are deprecated.
Use the normal Python package directory layout instead.
(Github issue :issue:2686)
π§ Binary Linux wheels now follow the manylinux2010 standard.
Patch by Alexey Stepanov. (Github issue :issue:3355)
π Support for Python 2.6 was removed.
.. _PEP-560: https://www.python.org/dev/peps/pep-0560
.. _PEP-570: https://www.python.org/dev/peps/pep-0570
.. _PEP-487: https://www.python.org/dev/peps/pep-0487
.. _PEP-590: https://www.python.org/dev/peps/pep-0590
.. _PEP-3131: https://www.python.org/dev/peps/pep-3131
.. _PEP-563: https://www.python.org/dev/peps/pep-0563
.. _PEP-479: https://www.python.org/dev/peps/pep-0479
.. _0.29.24:
Temporary internal variables in nested prange loops could leak into other
threads. Patch by Frank Schlimbach. (Github issue :issue:3348)
0οΈβ£ Default arguments on fused functions could crash.
Patch by David Woods. (Github issue :issue:3370)
C-tuples declared in .pxd files could generate incomplete C code.
Patch by Kirk Meyer. (Github issue :issue:1427)
Fused functions were not always detected and optimised as Cython
implemented functions.
Patch by David Woods. (Github issue :issue:3384)
Valid Python object concatenation of (iterable) strings to non-strings
could fail with an exception.
Patch by David Woods. (Github issue :issue:3433)
Using C functions as temporary values lead to invalid C code.
Original patch by David Woods. (Github issue :issue:3418)
π Fix an unhandled C++ exception in comparisons.
Patch by David Woods. (Github issue :issue:3361)
π Fix deprecated import of "imp" module.
Patch by Matti Picus. (Github issue :issue:3350)
π Fix compatibility with Pythran 0.9.6 and later.
Patch by Serge Guelton. (Github issue :issue:3308)
The _Py_PyAtExit() function in cpython.pylifecycle was misdeclared.
Patch by Zackery Spytz. (Github issue :issue:3382)
Several missing declarations in cpython.* were added.
Patches by Zackery Spytz. (Github issue :issue:3452, :issue:3421, :issue:3411, :issue:3402)
A declaration for libc.math.fpclassify() was added.
Patch by Zackery Spytz. (Github issue :issue:2514)
β Avoid "undeclared" warning about automatically generated pickle methods.
Patch by David Woods. (Github issue :issue:3353)
β Avoid C compiler warning about unreachable code in prange().
β Some C compiler warnings in PyPy were resolved.
Patch by Matti Picus. (Github issue :issue:3437)
.. _0.29.15: