CHANGES.rst 129 KB
Newer Older
Stefan Behnel's avatar
Stefan Behnel committed
1 2 3 4
================
Cython Changelog
================

5
3.0.0 alpha 6 (2020-07-31)
6 7
==========================

Stefan Behnel's avatar
Stefan Behnel committed
8 9 10
Features added
--------------

11 12 13
* Special methods for binary operators now follow Python semantics.
  Rather than e.g. a single ``__add__`` method for cdef classes, where
  "self" can be either the first or second argument, one can now define
14
  both ``__add__`` and ``__radd__`` as for standard Python classes.
15
  This behavior can be disabled with the ``c_api_binop_methods`` directive
16 17 18 19
  to return to the previous semantics in Cython code (available from Cython
  0.29.20), or the reversed method (``__radd__``) can be implemented in
  addition to an existing two-sided operator method (``__add__``) to get a
  backwards compatible implementation.
Stefan Behnel's avatar
Stefan Behnel committed
20 21
  (Github issue #2056)

Stefan Behnel's avatar
Stefan Behnel committed
22 23 24 25 26 27
* No/single argument functions now accept keyword arguments by default in order
  to comply with Python semantics.  The marginally faster calling conventions
  ``METH_NOARGS`` and ``METH_O`` that reject keyword arguments are still available
  with the directive ``@cython.always_allow_keywords(False)``.
  (Github issue #3090)

Stefan Behnel's avatar
Stefan Behnel committed
28 29 30
* For-in-loop iteration over ``bytearray`` and memory views is optimised.
  Patch by David Woods.  (Github issue #2227)

Stefan Behnel's avatar
Stefan Behnel committed
31 32 33
* Type inference now works for memory views and slices.
  Patch by David Woods.  (Github issue #2227)

Stefan Behnel's avatar
Stefan Behnel committed
34 35
* The ``@returns()`` decorator propagates exceptions by default for suitable C
  return types when no ``@exceptval()`` is defined.
Stefan Behnel's avatar
Stefan Behnel committed
36
  (Github issues #3625, #3664)
Stefan Behnel's avatar
Stefan Behnel committed
37

Stefan Behnel's avatar
Stefan Behnel committed
38 39 40 41 42 43 44
* A low-level inline function ``total_seconds(timedelta)`` was added to
  ``cpython.datetime`` to bypass the Python method call.  Note that this function
  is not guaranteed to give exactly the same results for very large time intervals.
  Patch by Brock Mendel.  (Github issue #3616)

* Type inference now understands that ``a, *b = x`` assigns a list to ``b``.

Stefan Behnel's avatar
Stefan Behnel committed
45 46 47 48 49 50
* Limited API support was improved.
  Patches by Matthias Braun.  (Github issues #3693, #3707)

* The Cython ``CodeWriter`` can now handle more syntax constructs.
  Patch by Tao He.  (Github issue #3514)

51 52 53
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
54 55 56 57 58 59
* The construct ``for x in cpp_function_call()`` failed to compile.
  Patch by David Woods.  (Github issue #3663)

* C++ references failed to compile when used as Python object indexes.
  Patch by David Woods.  (Github issue #3754)

Stefan Behnel's avatar
Stefan Behnel committed
60 61 62
* The C++ ``typeid()`` function was allowed in C mode.
  Patch by Celelibi.  (Github issue #3637)

Stefan Behnel's avatar
Stefan Behnel committed
63 64 65 66
* ``repr()`` was assumed to return ``str`` instead of ``unicode`` with ``language_level=3``.
  (Github issue #3736)

* Includes all bug-fixes from the 0.29.21 release.
Stefan Behnel's avatar
Stefan Behnel committed
67 68 69 70 71 72 73 74 75 76 77 78 79

Other changes
-------------

* The ``numpy`` declarations were updated.
  Patch by Brock Mendel.  (Github issue #3630)

* The names of Cython's internal types (functions, generator, coroutine, etc.)
  are now qualified with the module name of the internal Cython module that is
  used for sharing them across Cython implemented modules, for example
  ``_cython_3_0a5.coroutine``.  This was done to avoid making them look like
  homeless builtins, to help with debugging, and in order to avoid a CPython
  warning according to https://bugs.python.org/issue20204
80 81


82
3.0.0 alpha 5 (2020-05-19)
Stefan Behnel's avatar
Stefan Behnel committed
83 84 85 86 87 88 89 90 91 92 93 94
==========================

Features added
--------------

* ``.pxd`` files can now be versioned by adding an extension like "``.cython-30.pxd``"
  to prevent older Cython versions (than 3.0 in this case) from picking them up.
  (Github issue #3577)

* Several macros/functions declared in the NumPy API are now usable without
  holding the GIL.

Stefan Behnel's avatar
Stefan Behnel committed
95 96 97
* ``libc.math`` was extended to include all C99 function declarations.
  Patch by Dean Scarff.  (Github issue #3570)

Stefan Behnel's avatar
Stefan Behnel committed
98 99 100
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
101 102 103 104
* Several issues with arithmetic overflow handling were resolved, including
  undefined behaviour in C.
  Patch by Sam Sneddon.  (Github issue #3588)

Stefan Behnel's avatar
Stefan Behnel committed
105 106 107 108
* The improved GIL handling in ``nogil`` functions introduced in 3.0a3
  could fail to acquire the GIL in some cases on function exit.
  (Github issue #3590 etc.)

109 110 111 112
* A reference leak when processing keyword arguments in Py2 was resolved,
  that appeared in 3.0a1.
  (Github issue #3578)

Stefan Behnel's avatar
Stefan Behnel committed
113 114 115 116
* The outdated getbuffer/releasebuffer implementations in the NumPy
  declarations were removed so that buffers declared as ``ndarray``
  now use the normal implementation in NumPy.

Stefan Behnel's avatar
Stefan Behnel committed
117
* Includes all bug-fixes from the 0.29.18 release.
Stefan Behnel's avatar
Stefan Behnel committed
118

Stefan Behnel's avatar
Stefan Behnel committed
119

120
3.0.0 alpha 4 (2020-05-05)
Stefan Behnel's avatar
Stefan Behnel committed
121 122 123 124 125 126 127 128
==========================

Features added
--------------

* The ``print`` statement (not the ``print()`` function) is allowed in
  ``nogil`` code without an explicit ``with gil`` section.

Stefan Behnel's avatar
Stefan Behnel committed
129
* The ``assert`` statement is allowed in ``nogil`` sections.  Here, the GIL is
Stefan Behnel's avatar
Stefan Behnel committed
130 131
  only acquired if the ``AssertionError`` is really raised, which means that the
  evaluation of the asserted condition only allows C expressions.
Stefan Behnel's avatar
Stefan Behnel committed
132 133

* Cython generates C compiler branch hints for unlikely user defined if-clauses
Stefan Behnel's avatar
Stefan Behnel committed
134 135 136 137
  in more cases, when they end up raising exceptions unconditionally. This now
  includes exceptions being raised in ``nogil``/``with gil`` sections.

* Some internal memoryview functions were tuned to reduce object overhead.
Stefan Behnel's avatar
Stefan Behnel committed
138 139 140 141

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
142 143 144
* Exception position reporting could run into race conditions on threaded code.
  It now uses function-local variables again.

Stefan Behnel's avatar
Stefan Behnel committed
145 146
* Error handling early in the module init code could lead to a crash.

Stefan Behnel's avatar
Stefan Behnel committed
147 148 149 150 151 152 153 154 155 156
* Error handling in ``cython.array`` creation was improved to avoid calling
  C-API functions with an error held.

* Complex buffer item types of structs of arrays could fail to validate.
  Patch by Leo and smutch.  (Github issue #1407)

* When importing the old Cython ``build_ext`` integration with distutils, the
  additional command line arguments leaked into the regular command.
  Patch by Kamekameha.  (Github issue #2209)

Stefan Behnel's avatar
Stefan Behnel committed
157
* The improved GIL handling in ``nogil`` functions introduced in 3.0a3
Stefan Behnel's avatar
Stefan Behnel committed
158 159 160
  could generate invalid C code.
  (Github issue #3558)

Stefan Behnel's avatar
Stefan Behnel committed
161 162 163 164 165 166 167 168 169 170
* ``PyEval_InitThreads()`` is no longer used in Py3.7+ where it is a no-op.

* Parallel builds of Cython itself (``setup.py build_ext -j N``) failed on Windows.

Other changes
-------------

* The C property feature has been rewritten and now requires C property methods
  to be declared ``inline``.

Stefan Behnel's avatar
Stefan Behnel committed
171

172
3.0.0 alpha 3 (2020-04-27)
Stefan Behnel's avatar
Stefan Behnel committed
173 174 175 176 177 178 179 180 181 182 183
==========================

Features added
--------------

* ``nogil`` functions now avoid acquiring the GIL on function exit if possible
  even if they contain ``with gil`` blocks.
  (Github issue #3554)

* Python private name mangling now falls back to unmangled names for non-Python
  globals, since double-underscore names are not uncommon in C.  Unmangled Python
184
  names are also still found as a legacy fallback but produce a warning.
Stefan Behnel's avatar
Stefan Behnel committed
185 186 187 188 189 190 191 192
  Patch by David Woods.  (Github issue #3548)

Bugs fixed
----------

* Includes all bug-fixes from the 0.29.17 release.


193 194
3.0.0 alpha 2 (2020-04-23)
==========================
Stefan Behnel's avatar
Stefan Behnel committed
195

Stefan Behnel's avatar
Stefan Behnel committed
196 197 198
Features added
--------------

199 200 201 202 203 204
* ``std::move()`` is now used in C++ mode for internal temp variables to
  make them work without copying values.
  Patch by David Woods.  (Github issues #3253, 1612)

* ``__class_getitem__`` is supported for types on item access (PEP-560).
  Patch by msg555.  (Github issue #2753)
Stefan Behnel's avatar
Stefan Behnel committed
205

206 207 208
* The simplified Py3.6 customisation of class creation is implemented (PEP-487).
  (Github issue #2781)

209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
* Conditional blocks in Python code that depend on ``cython.compiled`` are
  eliminated at an earlier stage, which gives more freedom in writing
  replacement Python code.
  Patch by David Woods.  (Github issue #3507)

* ``numpy.import_array()`` is automatically called if ``numpy`` has been cimported
  and it has not been called in the module code.  This is intended as a hidden
  fail-safe so user code should continue to call ``numpy.import_array``.
  Patch by David Woods.  (Github issue #3524)

* The Cython AST code serialiser class ``CodeWriter`` in ``Cython.CodeWriter``
  supports more syntax nodes.

* The fastcall/vectorcall protocols are used for several internal Python calls.
  (Github issue #3540)

Bugs fixed
----------

* With ``language_level=3/3str``, Python classes without explicit base class
  are now new-style (type) classes also in Py2.  Previously, they were created
  as old-style (non-type) classes.
  (Github issue #3530)

* C++ ``typeid()`` failed for fused types.
  Patch by David Woods.  (Github issue #3203)

* ``__arg`` argument names in methods were not mangled with the class name.
  Patch by David Woods.  (Github issue #1382)

* Creating an empty unicode slice with large bounds could crash.
  Patch by Sam Sneddon.  (Github issue #3531)

* Decoding an empty bytes/char* slice with large bounds could crash.
  Patch by Sam Sneddon.  (Github issue #3534)

* Temporary buffer indexing variables were not released and could show up in
  C compiler warnings, e.g. in generators.
  Patch by David Woods.  (Github issues #3430, #3522)

* Several C compiler warnings were fixed.


3.0.0 alpha 1 (2020-04-12)
==========================

Features added
--------------

* Cython functions now use the PEP-590 vectorcall protocol in Py3.7+.
  Patch by Jeroen Demeyer.  (Github issue #2263)

Stefan Behnel's avatar
Stefan Behnel committed
261
* Unicode identifiers are supported in Cython code (PEP 3131).
Stefan Behnel's avatar
Stefan Behnel committed
262 263 264 265 266 267 268 269
  Patch by David Woods.  (Github issue #2601)

* Unicode module names and imports are supported.
  Patch by David Woods.  (Github issue #3119)

* Annotations are no longer parsed, keeping them as strings following PEP-563.
  Patch by David Woods.  (Github issue #3285)

Stefan Behnel's avatar
Stefan Behnel committed
270 271 272
* 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.
273
  Patches by Eddie Elizondo and David Woods.  (Github issues #3223, #3311, #3501)
Stefan Behnel's avatar
Stefan Behnel committed
274

Stefan Behnel's avatar
Stefan Behnel committed
275
* The dispatch to fused functions is now linear in the number of arguments,
Stefan Behnel's avatar
Stefan Behnel committed
276 277
  which makes it much faster, often 2x or more, and several times faster for
  larger fused types with many specialisations.
Stefan Behnel's avatar
Stefan Behnel committed
278 279
  Patch by will-ca.  (Github issue #1385)

Stefan Behnel's avatar
Stefan Behnel committed
280 281 282 283
* ``with gil/nogil`` statements can be conditional based on compile-time
  constants, e.g. fused type checks.
  Patch by Noam Hershtig.  (Github issue #2579)

Stefan Behnel's avatar
Stefan Behnel committed
284 285 286
* ``const`` can be used together with fused types.
  Patch by Thomas Vincent.  (Github issue #1772)

Stefan Behnel's avatar
Stefan Behnel committed
287 288 289
* Reimports of already imported modules are substantially faster.
  (Github issue #2854)

Stefan Behnel's avatar
Stefan Behnel committed
290
* Positional-only arguments are supported in Python functions.
Stefan Behnel's avatar
Stefan Behnel committed
291
  Patch by Josh Tobin.  (Github issue #2915)
Stefan Behnel's avatar
Stefan Behnel committed
292

Stefan Behnel's avatar
Stefan Behnel committed
293 294 295
* The ``volatile`` C modifier is supported in Cython code.
  Patch by Jeroen Demeyer.  (Github issue #1667)

Stefan Behnel's avatar
Stefan Behnel committed
296 297 298 299
* ``@cython.trashcan(True)`` can be used on an extension type to enable the
  CPython trashcan. This allows deallocating deeply recursive objects without
  overflowing the stack.  Patch by Jeroen Demeyer.  (Github issue #2842)

Stefan Behnel's avatar
Stefan Behnel committed
300
* Inlined properties can be defined for external extension types.
Stefan Behnel's avatar
Stefan Behnel committed
301 302
  Patch by Matti Picus.  (Github issue #2640)

Stefan Behnel's avatar
Stefan Behnel committed
303 304 305 306 307 308
* The ``str()`` builtin now calls ``PyObject_Str()`` instead of going
  through a Python call.
  Patch by William Ayd.  (Github issue #3279)

* String concatenation can now happen in place if possible, by extending the
  existing string rather than always creating a new one.
Stefan Behnel's avatar
Stefan Behnel committed
309
  Patch by David Woods.  (Github issue #3453)
Stefan Behnel's avatar
Stefan Behnel committed
310

311
* Multiplication of Python numbers with small constant integers is faster.
Stefan Behnel's avatar
Stefan Behnel committed
312
  (Github issue #2808)
313

Stefan Behnel's avatar
Stefan Behnel committed
314 315 316 317
* Some list copying is avoided internally when a new list needs to be created
  but we already have a fresh one.
  (Github issue #3494)

Stefan Behnel's avatar
Stefan Behnel committed
318 319 320 321 322
* 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 #1555)

323 324 325 326
* 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 #2306)

Stefan Behnel's avatar
Stefan Behnel committed
327
* Several declarations in ``cpython.*``, ``libc.*`` and ``libcpp.*`` were added.
Stefan Behnel's avatar
Stefan Behnel committed
328 329
  Patches by Jeroen Demeyer, Matthew Edwards, Chris Gyurgyik, Jerome Kieffer
  and Zackery Spytz.
Stefan Behnel's avatar
Stefan Behnel committed
330
  (Github issues #3468, #3332, #3202, #3188, #3179, #2891, #2826, #2713)
Stefan Behnel's avatar
Stefan Behnel committed
331 332 333

* Deprecated NumPy API usages were removed from ``numpy.pxd``.
  Patch by Matti Picus.  (Github issue #3365)
Stefan Behnel's avatar
Stefan Behnel committed
334

Stefan Behnel's avatar
Stefan Behnel committed
335 336 337 338
* ``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.

Stefan Behnel's avatar
Stefan Behnel committed
339 340 341
* The builtin ``abs()`` function can now be used on C numbers in nogil code.
  Patch by Elliott Sales de Andrade.  (Github issue #2748)

Stefan Behnel's avatar
Stefan Behnel committed
342 343 344
* PEP-479 (``generator_stop``) is now enabled by default with language level 3.
  (Github issue #2580)

Stefan Behnel's avatar
Stefan Behnel committed
345 346 347
* The ``cython.view.array`` type supports inheritance.
  Patch by David Woods.  (Github issue #3413)

348
* Code annotation accepts a new debugging argument ``--annotate-fullc`` that
Stefan Behnel's avatar
Stefan Behnel committed
349 350 351
  will include the complete syntax highlighted C file in the HTML output.
  (Github issue #2855)

Stefan Behnel's avatar
Stefan Behnel committed
352
* ``--no-capture`` added to ``runtests.py`` to prevent stdout/stderr capturing
Stefan Behnel's avatar
Stefan Behnel committed
353 354
  during srctree tests.
  Patch by Matti Picus.  (Github issue #2701)
Stefan Behnel's avatar
Stefan Behnel committed
355

Stefan Behnel's avatar
Stefan Behnel committed
356 357
* ``--no-docstrings`` option added to ``cythonize`` script.
  Original patch by mo-han.  (Github issue #2889)
Jeroen Demeyer's avatar
Jeroen Demeyer committed
358

Stefan Behnel's avatar
Stefan Behnel committed
359 360 361 362
* ``cygdb`` gives better error messages when it fails to initialise the
  Python runtime support in gdb.
  Patch by Volker Weissmann.  (Github issue #3489)

Stefan Behnel's avatar
Stefan Behnel committed
363 364 365
* The Pythran ``shape`` attribute is supported.
  Patch by Serge Guelton.  (Github issue #3307)

Stefan Behnel's avatar
Stefan Behnel committed
366 367 368
Bugs fixed
----------

369 370 371 372 373
* 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.

Stefan Behnel's avatar
Stefan Behnel committed
374 375
* Fused argument types were not correctly handled in type annotations and
  ``cython.locals()``.
Stefan Behnel's avatar
Stefan Behnel committed
376
  Patch by David Woods.  (Github issues #3391, #3142)
Stefan Behnel's avatar
Stefan Behnel committed
377

Stefan Behnel's avatar
Stefan Behnel committed
378 379 380 381
* 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()``.

382 383 384 385 386
* 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 #2963)

Stefan Behnel's avatar
Stefan Behnel committed
387 388 389 390 391
* 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 #1807)

Stefan Behnel's avatar
Stefan Behnel committed
392 393 394
* Name lookups in class bodies no longer go through an attribute lookup.
  Patch by Jeroen Demeyer.  (Github issue #3100)

Stefan Behnel's avatar
Stefan Behnel committed
395 396 397 398 399
* 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 #2941)

Stefan Behnel's avatar
Stefan Behnel committed
400 401 402
* Pickling unbound methods of Python classes failed.
  Patch by Pierre Glaser.  (Github issue #2972)

Stefan Behnel's avatar
Stefan Behnel committed
403 404 405
* The ``Py_hash_t`` type failed to accept arbitrary "index" values.
  (Github issue #2752)

Stefan Behnel's avatar
Stefan Behnel committed
406 407 408 409
* 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 #2536)

Stefan Behnel's avatar
Stefan Behnel committed
410
* Constant integer expressions that used a negative exponent were evaluated
Stefan Behnel's avatar
Stefan Behnel committed
411 412 413
  as integer 0 instead of the expected float value.
  Patch by Kryštof Pilnáček.  (Github issue #2133)

Stefan Behnel's avatar
Stefan Behnel committed
414 415 416
* The ``cython.declare()`` and ``cython.cast()`` functions could fail in pure mode.
  Patch by Dmitry Shesterkin.  (Github issue #3244)

417 418 419
* ``__doc__`` was not available inside of the class body during class creation.
  (Github issue #1635)

Stefan Behnel's avatar
Stefan Behnel committed
420 421 422 423 424 425 426
* Setting ``language_level=2`` in a file did not work if ``language_level=3``
  was enabled globally before.
  Patch by Jeroen Demeyer.  (Github issue #2791)

* ``__init__.pyx`` files were not always considered as package indicators.
  (Github issue #2665)

Stefan Behnel's avatar
Stefan Behnel committed
427
* Compiling package ``__init__`` files could fail under Windows due to an
Stefan Behnel's avatar
Stefan Behnel committed
428
  undefined export symbol.  (Github issue #2968)
Stefan Behnel's avatar
Stefan Behnel committed
429

Stefan Behnel's avatar
Stefan Behnel committed
430 431 432
* A C compiler cast warning was resolved.
  Patch by Michael Buesch.  (Github issue #2775)

Stefan Behnel's avatar
Stefan Behnel committed
433
* Binding staticmethods of Cython functions were not behaving like Python methods.
Stefan Behnel's avatar
Stefan Behnel committed
434
  Patch by Jeroen Demeyer.  (Github issue #3106, #3102)
Stefan Behnel's avatar
Stefan Behnel committed
435

Stefan Behnel's avatar
Stefan Behnel committed
436 437 438
* Memoryviews failed to compile when the ``cache_builtins`` feature was disabled.
  Patch by David Woods.  (Github issue #3406)

Stefan Behnel's avatar
Stefan Behnel committed
439 440 441
Other changes
-------------

Stefan Behnel's avatar
Stefan Behnel committed
442 443
* 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
Stefan Behnel's avatar
Stefan Behnel committed
444
  change from the previous default of Python 2 semantics.  The previous behaviour
Stefan Behnel's avatar
Stefan Behnel committed
445
  is available through the directive ``language_level=2``.
Stefan Behnel's avatar
Stefan Behnel committed
446
  (Github issue #2565)
Stefan Behnel's avatar
Stefan Behnel committed
447

Stefan Behnel's avatar
Stefan Behnel committed
448 449 450 451
* 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 #2772)

452 453 454 455
* 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 #2790)

Stefan Behnel's avatar
Stefan Behnel committed
456 457 458 459 460
* 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 #2904)

mattip's avatar
mattip committed
461 462
* The search order for include files was changed. Previously it was
  ``include_directories``, ``Cython/Includes``, ``sys.path``. Now it is
mattip's avatar
mattip committed
463 464
  ``include_directories``, ``sys.path``, ``Cython/Includes``. This was done to
  allow third-party ``*.pxd`` files to override the ones in Cython.
Stefan Behnel's avatar
Stefan Behnel committed
465 466
  Patch by Matti Picus.  (Github issue #2905)

Stefan Behnel's avatar
Stefan Behnel committed
467
* The command line parser was rewritten and modernised using ``argparse``.
Stefan Behnel's avatar
Stefan Behnel committed
468
  Patch by Egor Dranischnikow.  (Github issue #2952, #3001)
Stefan Behnel's avatar
Stefan Behnel committed
469

470 471 472 473
* Dotted filenames for qualified module names (``pkg.mod.pyx``) are deprecated.
  Use the normal Python package directory layout instead.
  (Github issue #2686)

Stefan Behnel's avatar
Stefan Behnel committed
474 475 476
* Binary Linux wheels now follow the manylinux2010 standard.
  Patch by Alexey Stepanov.  (Github issue #3355)

Stefan Behnel's avatar
Stefan Behnel committed
477
* Support for Python 2.6 was removed.
Stefan Behnel's avatar
Stefan Behnel committed
478 479


480 481 482 483 484 485 486 487 488 489
0.29.22 (2020-??-??)
====================

Bugs fixed
----------

* ``repr()`` was assumed to return ``str`` instead of ``unicode`` with ``language_level=3``.
  (Github issue #3736)


Stefan Behnel's avatar
Stefan Behnel committed
490
0.29.21 (2020-07-09)
Stefan Behnel's avatar
Stefan Behnel committed
491 492 493 494 495
====================

Bugs fixed
----------

496 497 498
* Fix a regression in 0.29.20 where ``__div__`` failed to be found in extension types.
  (Github issue #3688)

Stefan Behnel's avatar
Stefan Behnel committed
499 500 501
* Fix a regression in 0.29.20 where a call inside of a finally clause could fail to compile.
  Patch by David Woods.  (Github issue #3712)

Stefan Behnel's avatar
Stefan Behnel committed
502 503 504
* Zero-sized buffers could fail to validate as C/Fortran-contiguous.
  Patch by Clemens Hofreither.  (Github issue #2093)

505 506 507 508
* ``exec()`` did not allow recent Python syntax features in Py3.8+ due to
  https://bugs.python.org/issue35975.
  (Github issue #3695)

Stefan Behnel's avatar
Stefan Behnel committed
509 510 511
* Binding staticmethods of Cython functions were not behaving like Python methods in Py3.
  Patch by Jeroen Demeyer and Michał Górny.  (Github issue #3106)

Stefan Behnel's avatar
Stefan Behnel committed
512 513 514 515 516
* Pythran calls to NumPy methods no longer generate useless method lookup code.

* The ``PyUnicode_GET_LENGTH()`` macro was missing from the ``cpython.*`` declarations.
  Patch by Thomas Caswell.  (Github issue #3692)

Stefan Behnel's avatar
Stefan Behnel committed
517 518 519 520 521
* The deprecated ``PyUnicode_*()`` C-API functions are no longer used, except for Unicode
  strings that contain lone surrogates.  Unicode strings that contain non-BMP characters
  or surrogate pairs now generate different C code on 16-bit Python 2.x Unicode deployments
  (such as MS-Windows).  Generating the C code on Python 3.x is recommended in this case.
  Original patches by Inada Naoki and Victor Stinner.  (Github issues #3677, #3721, #3697)
Stefan Behnel's avatar
Stefan Behnel committed
522

Stefan Behnel's avatar
Stefan Behnel committed
523 524 525
* Some template parameters were missing from the C++ ``std::unordered_map`` declaration.
  Patch by will.  (Github issue #3685)

Stefan Behnel's avatar
Stefan Behnel committed
526 527
* Several internal code generation issues regarding temporary variables were resolved.
  (Github issue #3708)
Stefan Behnel's avatar
Stefan Behnel committed
528 529


530
0.29.20 (2020-06-10)
Stefan Behnel's avatar
Stefan Behnel committed
531 532 533 534 535
====================

Bugs fixed
----------

536 537 538 539
* Nested try-except statements with multiple ``return`` statements could crash
  due to incorrect deletion of the ``except as`` target variable.
  (Github issue #3666)

Stefan Behnel's avatar
Stefan Behnel committed
540 541 542 543 544 545
* The ``@classmethod`` decorator no longer rejects unknown input from other decorators.
  Patch by David Woods.  (Github issue #3660)

* Fused types could leak into unrelated usages.
  Patch by David Woods.  (Github issue #3642)

Stefan Behnel's avatar
Stefan Behnel committed
546 547 548 549
* Now uses ``Py_SET_SIZE()`` and ``Py_SET_REFCNT()`` in Py3.9+ to avoid low-level
  write access to these object fields.
  Patch by Victor Stinner.  (Github issue #3639)

Stefan Behnel's avatar
Stefan Behnel committed
550 551 552 553
* The built-in ``abs()`` function could lead to undefined behaviour when used on
  the negative-most value of a signed C integer type.
  Patch by Serge Guelton.  (Github issue #1911)

Stefan Behnel's avatar
Stefan Behnel committed
554 555 556 557
* Usages of ``sizeof()`` and ``typeid()`` on uninitialised variables no longer
  produce a warning.
  Patch by Celelibi.  (Github issue #3575)

Stefan Behnel's avatar
Stefan Behnel committed
558 559 560
* The C++ ``typeid()`` function was allowed in C mode.
  Patch by Celelibi.  (Github issue #3637)

561 562 563
* The error position reported for errors found in f-strings was misleading.
  (Github issue #3674)

Stefan Behnel's avatar
Stefan Behnel committed
564 565 566
* The new ``c_api_binop_methods`` directive was added for forward compatibility, but can
  only be set to True (the current default value).  It can be disabled in Cython 3.0.

Stefan Behnel's avatar
Stefan Behnel committed
567

Stefan Behnel's avatar
Stefan Behnel committed
568 569 570 571 572 573 574 575 576 577 578 579 580
0.29.19 (2020-05-20)
====================

Bugs fixed
----------

* A typo in Windows specific code in 0.29.18 was fixed that broke "libc.math".
  (Github issue #3622)

* A platform specific test failure in 0.29.18 was fixed.
  Patch by smutch.  (Github issue #3620)


581
0.29.18 (2020-05-18)
Stefan Behnel's avatar
Stefan Behnel committed
582 583 584 585 586 587 588 589
====================

Bugs fixed
----------

* Exception position reporting could run into race conditions on threaded code.
  It now uses function-local variables again.

Stefan Behnel's avatar
Stefan Behnel committed
590 591
* Error handling early in the module init code could lead to a crash.

592
* Error handling in ``cython.array`` creation was improved to avoid calling
Stefan Behnel's avatar
Stefan Behnel committed
593
  C-API functions with an error held.
594

Stefan Behnel's avatar
Stefan Behnel committed
595 596 597 598
* A memory corruption was fixed when garbage collection was triggered during calls
  to ``PyType_Ready()`` of extension type subclasses.
  (Github issue #3603)

Stefan Behnel's avatar
Stefan Behnel committed
599
* Memory view slicing generated unused error handling code which could negatively
Stefan Behnel's avatar
Stefan Behnel committed
600 601
  impact the C compiler optimisations for parallel OpenMP code etc.  Also, it is
  now helped by static branch hints.
Stefan Behnel's avatar
Stefan Behnel committed
602 603
  (Github issue #2987)

Stefan Behnel's avatar
Stefan Behnel committed
604 605 606
* Cython's built-in OpenMP functions were not translated inside of call arguments.
  Original patch by Celelibi and David Woods.  (Github issue #3594)

Stefan Behnel's avatar
Stefan Behnel committed
607 608 609
* Complex buffer item types of structs of arrays could fail to validate.
  Patch by Leo and smutch.  (Github issue #1407)

610 611 612
* Decorators were not allowed on nested `async def` functions.
  (Github issue #1462)

Stefan Behnel's avatar
Stefan Behnel committed
613 614 615
* C-tuples could use invalid C struct casting.
  Patch by MegaIng.  (Github issue #3038)

Stefan Behnel's avatar
Stefan Behnel committed
616 617 618 619 620 621
* Optimised ``%d`` string formatting into f-strings failed on float values.
  (Github issue #3092)

* Optimised aligned string formatting (``%05s``, ``%-5s``) failed.
  (Github issue #3476)

Stefan Behnel's avatar
Stefan Behnel committed
622 623 624 625
* When importing the old Cython ``build_ext`` integration with distutils, the
  additional command line arguments leaked into the regular command.
  Patch by Kamekameha.  (Github issue #2209)

626 627 628 629
* When using the ``CYTHON_NO_PYINIT_EXPORT`` option in C++, the module init function
  was not declared as ``extern "C"``.
  (Github issue #3414)

630 631
* Three missing timedelta access macros were added in ``cpython.datetime``.

Stefan Behnel's avatar
Stefan Behnel committed
632 633 634
* The signature of the NumPy C-API function ``PyArray_SearchSorted()`` was fixed.
  Patch by Brock Mendel.  (Github issue #3606)

Stefan Behnel's avatar
Stefan Behnel committed
635

636
0.29.17 (2020-04-26)
Stefan Behnel's avatar
Stefan Behnel committed
637 638
====================

Stefan Behnel's avatar
Stefan Behnel committed
639 640 641 642 643 644
Features added
--------------

* ``std::move()`` is now available from ``libcpp.utility``.
  Patch by Omer Ozarslan.  (Github issue #2169)

645
* The ``@cython.binding`` decorator is available in Python code.
Stefan Behnel's avatar
Stefan Behnel committed
646
  (Github issue #3505)
647

Stefan Behnel's avatar
Stefan Behnel committed
648 649 650
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
651 652 653
* Creating an empty unicode slice with large bounds could crash.
  Patch by Sam Sneddon.  (Github issue #3531)

Stefan Behnel's avatar
Stefan Behnel committed
654 655 656
* Decoding an empty bytes/char* slice with large bounds could crash.
  Patch by Sam Sneddon.  (Github issue #3534)

Stefan Behnel's avatar
Stefan Behnel committed
657 658 659 660
* Re-importing a Cython extension no longer raises the error
  "``__reduce_cython__ not found``".
  (Github issue #3545)

Stefan Behnel's avatar
Stefan Behnel committed
661 662 663
* Unused C-tuples could generate incorrect code in 0.29.16.
  Patch by Kirk Meyer.  (Github issue #3543)

664 665 666 667
* Creating a fused function attached it to the garbage collector before it
  was fully initialised, thus risking crashes in rare failure cases.
  Original patch by achernomorov.  (Github issue #3215)

Stefan Behnel's avatar
Stefan Behnel committed
668 669 670 671
* Temporary buffer indexing variables were not released and could show up in
  C compiler warnings, e.g. in generators.
  Patch by David Woods.  (Github issues #3430, #3522)

Stefan Behnel's avatar
Stefan Behnel committed
672 673 674 675 676 677 678
* The compilation cache in ``cython.inline("…")`` failed to take the language
  level into account.
  Patch by will-ca.  (Github issue #3419)

* The deprecated ``PyUnicode_GET_SIZE()`` function is no longer used in Py3.


Stefan Behnel's avatar
Stefan Behnel committed
679
0.29.16 (2020-03-24)
Stefan Behnel's avatar
Stefan Behnel committed
680 681
====================

Stefan Behnel's avatar
Stefan Behnel committed
682 683 684
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
685 686 687
* Temporary internal variables in nested prange loops could leak into other
  threads.  Patch by Frank Schlimbach.  (Github issue #3348)

Stefan Behnel's avatar
Stefan Behnel committed
688 689 690
* Default arguments on fused functions could crash.
  Patch by David Woods.  (Github issue #3370)

Stefan Behnel's avatar
Stefan Behnel committed
691 692 693
* C-tuples declared in ``.pxd`` files could generate incomplete C code.
  Patch by Kirk Meyer.  (Github issue #1427)

Stefan Behnel's avatar
Stefan Behnel committed
694 695 696 697
* Fused functions were not always detected and optimised as Cython
  implemented functions.
  Patch by David Woods.  (Github issue #3384)

Stefan Behnel's avatar
Stefan Behnel committed
698 699 700 701
* Valid Python object concatenation of (iterable) strings to non-strings
  could fail with an exception.
  Patch by David Woods.  (Github issue #3433)

702 703 704
* Using C functions as temporary values lead to invalid C code.
  Original patch by David Woods.  (Github issue #3418)

Stefan Behnel's avatar
Stefan Behnel committed
705 706
* Fix an unhandled C++ exception in comparisons.
  Patch by David Woods.  (Github issue #3361)
Stefan Behnel's avatar
Stefan Behnel committed
707 708 709 710

* Fix deprecated import of "imp" module.
  Patch by Matti Picus.  (Github issue #3350)

Stefan Behnel's avatar
Stefan Behnel committed
711 712 713
* Fix compatibility with Pythran 0.9.6 and later.
  Patch by Serge Guelton.  (Github issue #3308)

Stefan Behnel's avatar
Stefan Behnel committed
714 715 716
* The ``_Py_PyAtExit()`` function in ``cpython.pylifecycle`` was misdeclared.
  Patch by Zackery Spytz.  (Github issue #3382)

Stefan Behnel's avatar
Stefan Behnel committed
717
* Several missing declarations in ``cpython.*`` were added.
Stefan Behnel's avatar
Stefan Behnel committed
718
  Patches by Zackery Spytz.  (Github issue #3452, #3421, #3411, #3402)
Stefan Behnel's avatar
Stefan Behnel committed
719 720 721

* A declaration for ``libc.math.fpclassify()`` was added.
  Patch by Zackery Spytz.  (Github issue #2514)
Stefan Behnel's avatar
Stefan Behnel committed
722

Stefan Behnel's avatar
Stefan Behnel committed
723 724 725
* Avoid "undeclared" warning about automatically generated pickle methods.
  Patch by David Woods.  (Github issue #3353)

Stefan Behnel's avatar
Stefan Behnel committed
726 727
* Avoid C compiler warning about unreachable code in ``prange()``.

Stefan Behnel's avatar
Stefan Behnel committed
728 729 730
* Some C compiler warnings in PyPy were resolved.
  Patch by Matti Picus.  (Github issue #3437)

Stefan Behnel's avatar
Stefan Behnel committed
731

732
0.29.15 (2020-02-06)
Stefan Behnel's avatar
Stefan Behnel committed
733 734
====================

Stefan Behnel's avatar
Stefan Behnel committed
735 736 737
Bugs fixed
----------

738 739 740
* Crash when returning a temporary Python object from an async-def function.
  (Github issue #3337)

Stefan Behnel's avatar
Stefan Behnel committed
741 742 743
* Crash when using ``**kwargs`` in generators.
  Patch by David Woods.  (Github issue #3265)

Stefan Behnel's avatar
Stefan Behnel committed
744 745 746
* Double reference free in ``__class__`` cell handling for ``super()`` calls.
  (Github issue #3246)

747 748 749
* Compile error when using ``*args`` as Python class bases.
  (Github issue #3338)

Stefan Behnel's avatar
Stefan Behnel committed
750 751 752 753 754 755
* Import failure in IPython 7.11.
  (Github issue #3297)

* Fixed C name collision in the auto-pickle code.
  Patch by ThePrez.  (Github issue #3238)

Stefan Behnel's avatar
Stefan Behnel committed
756 757
* Deprecated import failed in Python 3.9.
  (Github issue #3266)
mattip's avatar
mattip committed
758

Stefan Behnel's avatar
Stefan Behnel committed
759

Stefan Behnel's avatar
Stefan Behnel committed
760
0.29.14 (2019-11-01)
Stefan Behnel's avatar
Stefan Behnel committed
761 762 763 764 765
====================

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
766
* The generated code failed to initialise the ``tp_print`` slot in CPython 3.8.
Stefan Behnel's avatar
Stefan Behnel committed
767
  Patches by Pablo Galindo and Orivej Desh.  (Github issues #3171, #3201)
Stefan Behnel's avatar
Stefan Behnel committed
768

Stefan Behnel's avatar
Stefan Behnel committed
769 770 771 772
* ``?`` for ``bool`` was missing from the supported NumPy dtypes.
  Patch by Max Klein.  (Github issue #2675)

* ``await`` was not allowed inside of f-strings.
Stefan Behnel's avatar
Stefan Behnel committed
773 774
  Patch by Dmitro Getz.  (Github issue #2877)

Stefan Behnel's avatar
Stefan Behnel committed
775 776 777 778
* Coverage analysis failed for projects where the code resides in separate
  source sub-directories.
  Patch by Antonio Valentino.  (Github issue #1985)

Stefan Behnel's avatar
Stefan Behnel committed
779 780 781
* An incorrect compiler warning was fixed in automatic C++ string conversions.
  Patch by Gerion Entrup.  (Github issue #3108)

Stefan Behnel's avatar
Stefan Behnel committed
782 783 784 785 786 787 788 789 790 791
* Error reports in the Jupyter notebook showed unhelpful stack traces.
  Patch by Matthew Edwards (Github issue #3196).

* ``Python.h`` is now also included explicitly from ``public`` header files.
  (Github issue #3133).

* Distutils builds with ``--parallel`` did not work when using Cython's
  deprecated ``build_ext`` command.
  Patch by Alphadelta14 (Github issue #3187).

Stefan Behnel's avatar
Stefan Behnel committed
792 793 794 795 796 797 798
Other changes
-------------

* The ``PyMemoryView_*()`` C-API is available in ``cpython.memoryview``.
  Patch by Nathan Manville.  (Github issue #2541)


799
0.29.13 (2019-07-26)
Stefan Behnel's avatar
Stefan Behnel committed
800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817
====================

Bugs fixed
----------

* A reference leak for ``None`` was fixed when converting a memoryview
  to a Python object.  (Github issue #3023)

* The declaration of ``PyGILState_STATE`` in ``cpython.pystate`` was unusable.
  Patch by Kirill Smelkov.  (Github issue #2997)

Other changes
-------------

* The declarations in ``posix.mman`` were extended.
  Patches by Kirill Smelkov.  (Github issues #2893, #2894, #3012)


818
0.29.12 (2019-07-07)
Stefan Behnel's avatar
Stefan Behnel committed
819 820 821 822 823 824 825 826 827 828 829 830 831 832
====================

Bugs fixed
----------

* Fix compile error in CPython 3.8b2 regarding the ``PyCode_New()`` signature.
  (Github issue #3031)

* Fix a C compiler warning about a missing ``int`` downcast.
  (Github issue #3028)

* Fix reported error positions of undefined builtins and constants.
  Patch by Orivej Desh.  (Github issue #3030)

833 834 835
* A 32 bit issue in the Pythran support was resolved.
  Patch by Serge Guelton.  (Github issue #3032)

Stefan Behnel's avatar
Stefan Behnel committed
836

837
0.29.11 (2019-06-30)
Stefan Behnel's avatar
Stefan Behnel committed
838 839 840 841 842
====================

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
843
* Fix compile error in CPython 3.8b2 regarding the ``PyCode_New()`` signature.
Stefan Behnel's avatar
Stefan Behnel committed
844 845
  Patch by Nick Coghlan. (Github issue #3009)

Stefan Behnel's avatar
Stefan Behnel committed
846 847 848 849
* Invalid C code generated for lambda functions in cdef methods.
  Patch by Josh Tobin.  (Github issue #2967)

* Support slice handling in newer Pythran versions.
Stefan Behnel's avatar
Stefan Behnel committed
850 851 852 853
  Patch by Serge Guelton.  (Github issue #2989)

* A reference leak in power-of-2 calculation was fixed.
  Patch by Sebastian Berg.  (Github issue #3022)
Stefan Behnel's avatar
Stefan Behnel committed
854

855 856 857 858
* 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.
Stefan Behnel's avatar
Stefan Behnel committed
859
  Original patch by Matti Picus.  (Github issue #2905)
860

Stefan Behnel's avatar
Stefan Behnel committed
861 862 863 864
* Setting ``language_level=2`` in a file did not work if ``language_level=3``
  was enabled globally before.
  Patch by Jeroen Demeyer.  (Github issue #2791)

Stefan Behnel's avatar
Stefan Behnel committed
865

866
0.29.10 (2019-06-02)
867 868 869 870 871 872 873 874 875
====================

Bugs fixed
----------

* Fix compile errors in CPython 3.8b1 due to the new "tp_vectorcall" slots.
  (Github issue #2976)


876 877 878 879 880 881 882 883
0.29.9 (2019-05-29)
===================

Bugs fixed
----------

* Fix a crash regression in 0.29.8 when creating code objects fails.

Stefan Behnel's avatar
Stefan Behnel committed
884 885 886
* Remove an incorrect cast when using true-division in C++ operations.
  (Github issue #1950)

887

888
0.29.8 (2019-05-28)
Stefan Behnel's avatar
Stefan Behnel committed
889 890 891 892 893
===================

Bugs fixed
----------

894 895 896
* C compile errors with CPython 3.8 were resolved.
  Patch by Marcel Plch.  (Github issue #2938)

Stefan Behnel's avatar
Stefan Behnel committed
897
* Python tuple constants that compare equal but have different item
Stefan Behnel's avatar
Stefan Behnel committed
898
  types could incorrectly be merged into a single constant.
Stefan Behnel's avatar
Stefan Behnel committed
899
  (Github issue #2919)
Stefan Behnel's avatar
Stefan Behnel committed
900 901 902 903

* Non-ASCII characters in unprefixed strings could crash the compiler when
  used with language level ``3str``.

Stefan Behnel's avatar
Stefan Behnel committed
904 905 906
* Starred expressions in %-formatting tuples could fail to compile for
  unicode strings.  (Github issue #2939)

907 908 909
* Passing Python class references through ``cython.inline()`` was broken.
  (Github issue #2936)

Stefan Behnel's avatar
Stefan Behnel committed
910

911
0.29.7 (2019-04-14)
912 913 914 915 916
===================

Bugs fixed
----------

917 918 919 920 921 922 923
* Crash when the shared Cython config module gets unloaded and another Cython
  module reports an exceptions.  Cython now makes sure it keeps an owned reference
  to the module.
  (Github issue #2885)

* Resolved a C89 compilation problem when enabling the fast-gil sharing feature.

924 925 926
* Coverage reporting did not include the signature line of ``cdef`` functions.
  (Github issue #1461)

927 928 929
* Casting a GIL-requiring function into a nogil function now issues a warning.
  (Github issue #2879)

930 931 932
* Generators and coroutines were missing their return type annotation.
  (Github issue #2884)

933

934
0.29.6 (2019-02-27)
Stefan Behnel's avatar
Stefan Behnel committed
935 936 937 938 939
===================

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
940 941 942 943 944 945
* Fix a crash when accessing the ``__kwdefaults__`` special attribute of
  fused functions.  (Github issue #1470)

* Fix the parsing of buffer format strings that contain numeric sizes, which
  could lead to incorrect input rejections.  (Github issue #2845)

Stefan Behnel's avatar
Stefan Behnel committed
946 947 948
* Avoid a C #pragma in old gcc versions that was only added in GCC 4.6.
  Patch by Michael Anselmi.  (Github issue #2838)

Stefan Behnel's avatar
Stefan Behnel committed
949 950 951 952
* Auto-encoding of Unicode strings to UTF-8 C/C++ strings failed in Python 3,
  even though the default encoding there is UTF-8.
  (Github issue #2819)

Stefan Behnel's avatar
Stefan Behnel committed
953

954
0.29.5 (2019-02-09)
Stefan Behnel's avatar
Stefan Behnel committed
955 956
===================

957 958 959
Bugs fixed
----------

960 961 962
* Crash when defining a Python subclass of an extension type and repeatedly calling
  a cpdef method on it.  (Github issue #2823)

Stefan Behnel's avatar
Stefan Behnel committed
963
* Compiler crash when ``prange()`` loops appear inside of with-statements.
Stefan Behnel's avatar
Stefan Behnel committed
964 965
  (Github issue #2780)

Stefan Behnel's avatar
Stefan Behnel committed
966 967 968
* Some C compiler warnings were resolved.
  Patches by Christoph Gohlke.  (Github issues #2815, #2816, #2817, #2822)

Stefan Behnel's avatar
Stefan Behnel committed
969 970 971
* Python conversion of C++ enums failed in 0.29.
  Patch by Orivej Desh.  (Github issue #2767)

Stefan Behnel's avatar
Stefan Behnel committed
972

Stefan Behnel's avatar
Stefan Behnel committed
973 974 975
0.29.4 (2019-02-01)
===================

976 977 978 979 980 981 982
Bugs fixed
----------

* Division of numeric constants by a runtime value of 0 could fail to raise a
  ``ZeroDivisionError``.  (Github issue #2820)


983
0.29.3 (2019-01-19)
Stefan Behnel's avatar
Stefan Behnel committed
984 985 986 987 988 989 990 991 992
===================

Bugs fixed
----------

* Some C code for memoryviews was generated in a non-deterministic order.
  Patch by Martijn van Steenbergen.  (Github issue #2779)

* C89 compatibility was accidentally lost since 0.28.
Stefan Behnel's avatar
Stefan Behnel committed
993
  Patches by gastineau and true-pasky.  (Github issues #2778, #2801)
Stefan Behnel's avatar
Stefan Behnel committed
994 995 996 997

* A C compiler cast warning was resolved.
  Patch by Michael Buesch.  (Github issue #2774)

Stefan Behnel's avatar
Stefan Behnel committed
998 999 1000 1001 1002 1003
* An compilation failure with complex numbers under MSVC++ was resolved.
  (Github issue #2797)

* Coverage reporting could fail when modules were moved around after the build.
  Patch by Wenjun Si.  (Github issue #2776)

Stefan Behnel's avatar
Stefan Behnel committed
1004

1005
0.29.2 (2018-12-14)
Stefan Behnel's avatar
Stefan Behnel committed
1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023
===================

Bugs fixed
----------

* The code generated for deduplicated constants leaked some references.
  (Github issue #2750)

* The declaration of ``sigismember()`` in ``libc.signal`` was corrected.
  (Github issue #2756)

* Crashes in compiler and test runner were fixed.
  (Github issue #2736, #2755)

* A C compiler warning about an invalid safety check was resolved.
  (Github issue #2731)


1024
0.29.1 (2018-11-24)
Stefan Behnel's avatar
Stefan Behnel committed
1025 1026 1027 1028 1029
===================

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
1030 1031 1032 1033
* Extensions compiled with MinGW-64 under Windows could misinterpret integer
  objects larger than 15 bit and return incorrect results.
  (Github issue #2670)

Stefan Behnel's avatar
Stefan Behnel committed
1034 1035 1036 1037
* Cython no longer requires the source to be writable when copying its data
  into a memory view slice.
  Patch by Andrey Paramonov.  (Github issue #2644)

Stefan Behnel's avatar
Stefan Behnel committed
1038 1039 1040
* Line tracing of ``try``-statements generated invalid C code.
  (Github issue #2274)

Stefan Behnel's avatar
Stefan Behnel committed
1041 1042 1043 1044
* When using the ``warn.undeclared`` directive, Cython's own code generated
  warnings that are now fixed.
  Patch by Nicolas Pauss.  (Github issue #2685)

Stefan Behnel's avatar
Stefan Behnel committed
1045 1046 1047 1048
* Cython's memoryviews no longer require strides for setting the shape field
  but only the ``PyBUF_ND`` flag to be set.
  Patch by John Kirkham.  (Github issue #2716)

Stefan Behnel's avatar
Stefan Behnel committed
1049 1050 1051
* Some C compiler warnings about unused memoryview code were fixed.
  Patch by Ho Cheuk Ting.  (Github issue #2588)

Stefan Behnel's avatar
Stefan Behnel committed
1052 1053 1054 1055 1056 1057
* A C compiler warning about implicit signed/unsigned conversion was fixed.
  (Github issue #2729)

* Assignments to C++ references returned by ``operator[]`` could fail to compile.
  (Github issue #2671)

Stefan Behnel's avatar
Stefan Behnel committed
1058 1059
* The power operator and the support for NumPy math functions were fixed
  in Pythran expressions.
Stefan Behnel's avatar
Stefan Behnel committed
1060
  Patch by Serge Guelton.  (Github issues #2702, #2709)
Stefan Behnel's avatar
Stefan Behnel committed
1061

Stefan Behnel's avatar
Stefan Behnel committed
1062 1063 1064 1065
* Signatures with memory view arguments now show the expected type
  when embedded in docstrings.
  Patch by Matthew Chan and Benjamin Weigel.  (Github issue #2634)

Stefan Behnel's avatar
Stefan Behnel committed
1066 1067 1068 1069 1070
* Some ``from ... cimport ...`` constructs were not correctly considered
  when searching modified dependencies in ``cythonize()`` to decide
  whether to recompile a module.
  Patch by Kryštof Pilnáček.  (Github issue #2638)

Stefan Behnel's avatar
Stefan Behnel committed
1071
* A struct field type in the ``cpython.array`` declarations was corrected.
Stefan Behnel's avatar
Stefan Behnel committed
1072
  Patch by John Kirkham.  (Github issue #2712)
Stefan Behnel's avatar
Stefan Behnel committed
1073

Stefan Behnel's avatar
Stefan Behnel committed
1074

Stefan Behnel's avatar
Stefan Behnel committed
1075
0.29 (2018-10-14)
Stefan Behnel's avatar
Stefan Behnel committed
1076 1077 1078 1079 1080
=================

Features added
--------------

1081
* PEP-489 multi-phase module initialisation has been enabled again.  Module
Stefan Behnel's avatar
Stefan Behnel committed
1082 1083
  reloads in other subinterpreters raise an exception to prevent corruption
  of the static module state.
1084

Stefan Behnel's avatar
Stefan Behnel committed
1085 1086 1087 1088 1089 1090
* A set of ``mypy`` compatible PEP-484 declarations were added for Cython's C data
  types to integrate with static analysers in typed Python code.  They are available
  in the ``Cython/Shadow.pyi`` module and describe the types in the special ``cython``
  module that can be used for typing in Python code.
  Original patch by Julian Gethmann. (Github issue #1965)

Stefan Behnel's avatar
Stefan Behnel committed
1091
* Memoryviews are supported in PEP-484/526 style type declarations.
1092 1093
  (Github issue #2529)

Stefan Behnel's avatar
Stefan Behnel committed
1094 1095 1096
* ``@cython.nogil`` is supported as a C-function decorator in Python code.
  (Github issue #2557)

1097 1098 1099
* Raising exceptions from nogil code will automatically acquire the GIL, instead
  of requiring an explicit ``with gil`` block.

Stefan Behnel's avatar
Stefan Behnel committed
1100 1101 1102
* C++ functions can now be declared as potentially raising both C++ and Python
  exceptions, so that Cython can handle both correctly.
  (Github issue #2615)
1103

1104 1105 1106
* ``cython.inline()`` supports a direct ``language_level`` keyword argument that
  was previously only available via a directive.

1107 1108 1109 1110 1111 1112
* A new language level name ``3str`` was added that mostly corresponds to language
  level 3, but keeps unprefixed string literals as type 'str' in both Py2 and Py3,
  and the builtin 'str' type unchanged.  This will become the default in the next
  Cython release and is meant to help user code a) transition more easily to this
  new default and b) migrate to Python 3 source code semantics without making support
  for Python 2.x difficult.
1113

Stefan Behnel's avatar
Stefan Behnel committed
1114
* In CPython 3.6 and later, looking up globals in the module dict is almost
Stefan Behnel's avatar
Stefan Behnel committed
1115
  as fast as looking up C globals.
1116 1117 1118 1119 1120
  (Github issue #2313)

* For a Python subclass of an extension type, repeated method calls to non-overridden
  cpdef methods can avoid the attribute lookup in Py3.6+, which makes them 4x faster.
  (Github issue #2313)
Stefan Behnel's avatar
Stefan Behnel committed
1121

Stefan Behnel's avatar
Stefan Behnel committed
1122
* (In-)equality comparisons of objects to integer literals are faster.
Stefan Behnel's avatar
Stefan Behnel committed
1123 1124 1125 1126
  (Github issue #2188)

* Some internal and 1-argument method calls are faster.

1127 1128 1129
* Modules that cimport many external extension types from other Cython modules
  execute less import requests during module initialisation.

Stefan Behnel's avatar
Stefan Behnel committed
1130 1131 1132
* Constant tuples and slices are deduplicated and only created once per module.
  (Github issue #2292)

1133 1134 1135
* The coverage plugin considers more C file extensions such as ``.cc`` and ``.cxx``.
  (Github issue #2266)

Stefan Behnel's avatar
Stefan Behnel committed
1136 1137
* The ``cythonize`` command accepts compile time variable values (as set by ``DEF``)
  through the new ``-E`` option.
Stefan Behnel's avatar
Stefan Behnel committed
1138 1139
  Patch by Jerome Kieffer.  (Github issue #2315)

Stefan Behnel's avatar
Stefan Behnel committed
1140 1141 1142
* ``pyximport`` can import from namespace packages.
  Patch by Prakhar Goel.  (Github issue #2294)

Stefan Behnel's avatar
Stefan Behnel committed
1143 1144 1145
* Some missing numpy and CPython C-API declarations were added.
  Patch by John Kirkham. (Github issues #2523, #2520, #2537)

Stefan Behnel's avatar
Stefan Behnel committed
1146 1147 1148
* Declarations for the ``pylifecycle`` C-API functions were added in a new .pxd file
  ``cpython.pylifecycle``.

Stefan Behnel's avatar
Stefan Behnel committed
1149 1150 1151
* The Pythran support was updated to work with the latest Pythran 0.8.7.
  Original patch by Adrien Guinet.  (Github issue #2600)

1152 1153 1154
* ``%a`` is included in the string formatting types that are optimised into f-strings.
  In this case, it is also automatically mapped to ``%r`` in Python 2.x.

Stefan Behnel's avatar
Stefan Behnel committed
1155
* New C macro ``CYTHON_HEX_VERSION`` to access Cython's version in the same style as
1156
  ``PY_VERSION_HEX``.
Stefan Behnel's avatar
Stefan Behnel committed
1157

1158 1159
* Constants in ``libc.math`` are now declared as ``const`` to simplify their handling.

1160 1161
* An additional ``check_size`` clause was added to the ``ctypedef class`` name
  specification to allow suppressing warnings when importing modules with
1162 1163
  backwards-compatible ``PyTypeObject`` size changes.
  Patch by Matti Picus.  (Github issue #2627)
1164

Stefan Behnel's avatar
Stefan Behnel committed
1165 1166 1167
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
1168 1169 1170
* The exception handling in generators and coroutines under CPython 3.7 was adapted
  to the newly introduced exception stack.  Users of Cython 0.28 who want to support
  Python 3.7 are encouraged to upgrade to 0.29 to avoid potentially incorrect error
Stefan Behnel's avatar
Stefan Behnel committed
1171
  reporting and tracebacks.  (Github issue #1958)
Stefan Behnel's avatar
Stefan Behnel committed
1172

Stefan Behnel's avatar
Stefan Behnel committed
1173 1174 1175
* Crash when importing a module under Stackless Python that was built for CPython.
  Patch by Anselm Kruis.  (Github issue #2534)

Stefan Behnel's avatar
Stefan Behnel committed
1176 1177 1178
* 2-value slicing of typed sequences failed if the start or stop index was None.
  Patch by Christian Gibson.  (Github issue #2508)

1179 1180 1181
* Multiplied string literals lost their factor when they are part of another
  constant expression (e.g. 'x' * 10 + 'y' => 'xy').

1182 1183 1184 1185
* String formatting with the '%' operator didn't call the special ``__rmod__()``
  method if the right side is a string subclass that implements it.
  (Python issue 28598)

1186 1187 1188
* The directive ``language_level=3`` did not apply to the first token in the
  source file.  (Github issue #2230)

1189 1190 1191 1192
* Overriding cpdef methods did not work in Python subclasses with slots.
  Note that this can have a performance impact on calls from Cython code.
  (Github issue #1771)

1193 1194 1195
* Fix declarations of builtin or C types using strings in pure python mode.
  (Github issue #2046)

1196 1197 1198
* Generator expressions and lambdas failed to compile in ``@cfunc`` functions.
  (Github issue #459)

1199 1200 1201 1202
* Global names with ``const`` types were not excluded from star-import assignments
  which could lead to invalid C code.
  (Github issue #2621)

1203
* Several internal function signatures were fixed that lead to warnings in gcc-8.
Stefan Behnel's avatar
Stefan Behnel committed
1204
  (Github issue #2363)
1205

Stefan Behnel's avatar
Stefan Behnel committed
1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
* The numpy helper functions ``set_array_base()`` and ``get_array_base()``
  were adapted to the current numpy C-API recommendations.
  Patch by Matti Picus. (Github issue #2528)

* Some NumPy related code was updated to avoid deprecated API usage.
  Original patch by jbrockmendel.  (Github issue #2559)

* Several C++ STL declarations were extended and corrected.
  Patch by Valentin Valls. (Github issue #2207)

Stefan Behnel's avatar
Stefan Behnel committed
1216 1217 1218 1219
* C lines of the module init function were unconditionally not reported in
  exception stack traces.
  Patch by Jeroen Demeyer.  (Github issue #2492)

1220 1221 1222 1223
* When PEP-489 support is enabled, reloading the module overwrote any static
  module state. It now raises an exception instead, given that reloading is
  not actually supported.

Robert Bradshaw's avatar
Robert Bradshaw committed
1224 1225 1226 1227
* Object-returning, C++ exception throwing functions were not checking that
  the return value was non-null.
  Original patch by Matt Wozniski (Github Issue #2603)

1228 1229 1230 1231
* The source file encoding detection could get confused if the
  ``c_string_encoding`` directive appeared within the first two lines.
  (Github issue #2632)

1232 1233 1234 1235
* Cython generated modules no longer emit a warning during import when the
  size of the NumPy array type is larger than what was found at compile time.
  Instead, this is assumed to be a backwards compatible change on NumPy side.

Stefan Behnel's avatar
Stefan Behnel committed
1236 1237 1238
Other changes
-------------

1239 1240 1241 1242 1243 1244 1245 1246 1247 1248
* Cython now emits a warning when no ``language_level`` (2, 3 or '3str') is set
  explicitly, neither as a ``cythonize()`` option nor as a compiler directive.
  This is meant to prepare the transition of the default language level from
  currently Py2 to Py3, since that is what most new users will expect these days.
  The future default will, however, not enforce unicode literals, because this
  has proven a major obstacle in the support for both Python 2.x and 3.x.  The
  next major release is intended to make this change, so that it will parse all
  code that does not request a specific language level as Python 3 code, but with
  ``str`` literals.  The language level 2 will continue to be supported for an
  indefinite time.
Stefan Behnel's avatar
Stefan Behnel committed
1249

Stefan Behnel's avatar
Stefan Behnel committed
1250
* The documentation was restructured, cleaned up and examples are now tested.
Stefan Behnel's avatar
Stefan Behnel committed
1251
  The NumPy tutorial was also rewritten to simplify the running example.
Stefan Behnel's avatar
Stefan Behnel committed
1252 1253
  Contributed by Gabriel de Marmiesse.  (Github issue #2245)

Stefan Behnel's avatar
Stefan Behnel committed
1254 1255 1256 1257
* Cython compiles less of its own modules at build time to reduce the installed
  package size to about half of its previous size.  This makes the compiler
  slightly slower, by about 5-7%.

Stefan Behnel's avatar
Stefan Behnel committed
1258

1259
0.28.6 (2018-11-01)
1260 1261 1262 1263 1264
===================

Bugs fixed
----------

1265 1266 1267 1268
* Extensions compiled with MinGW-64 under Windows could misinterpret integer
  objects larger than 15 bit and return incorrect results.
  (Github issue #2670)

1269 1270 1271 1272
* Multiplied string literals lost their factor when they are part of another
  constant expression (e.g. 'x' * 10 + 'y' => 'xy').


Stefan Behnel's avatar
Stefan Behnel committed
1273 1274 1275
0.28.5 (2018-08-03)
===================

1276 1277 1278 1279 1280 1281 1282 1283 1284 1285
Bugs fixed
----------

* The discouraged usage of GCC's attribute ``optimize("Os")`` was replaced by the
  similar attribute ``cold`` to reduce the code impact of the module init functions.
  (Github issue #2494)

* A reference leak in Py2.x was fixed when comparing str to unicode for equality.


1286
0.28.4 (2018-07-08)
1287 1288 1289 1290 1291 1292 1293 1294 1295
===================

Bugs fixed
----------

* Reallowing ``tp_clear()`` in a subtype of an ``@no_gc_clear`` extension type
  generated an invalid C function call to the (non-existent) base type implementation.
  (Github issue #2309)

1296 1297 1298
* Exception catching based on a non-literal (runtime) tuple could fail to match the
  exception.  (Github issue #2425)

1299 1300
* Compile fix for CPython 3.7.0a2.  (Github issue #2477)

1301

1302
0.28.3 (2018-05-27)
1303 1304 1305 1306 1307 1308 1309
===================

Bugs fixed
----------

* Set iteration was broken in non-CPython since 0.28.

1310
* ``UnicodeEncodeError`` in Py2 when ``%s`` formatting is optimised for
Stefan Behnel's avatar
Stefan Behnel committed
1311
  unicode strings.  (Github issue #2276)
1312

1313 1314 1315
* Work around a crash bug in g++ 4.4.x by disabling the size reduction setting
  of the module init function in this version.  (Github issue #2235)

1316 1317 1318
* Crash when exceptions occur early during module initialisation.
  (Github issue #2199)

1319

1320
0.28.2 (2018-04-13)
1321 1322
===================

1323 1324 1325 1326 1327
Features added
--------------

* ``abs()`` is faster for Python long objects.

Stefan Behnel's avatar
Stefan Behnel committed
1328 1329 1330
* The C++11 methods ``front()`` and ``end()`` were added to the declaration of
  ``libcpp.string``.  Patch by Alex Huszagh.  (Github issue #2123)

1331
* The C++11 methods ``reserve()`` and ``bucket_count()`` are declared for
Stefan Behnel's avatar
Stefan Behnel committed
1332
  ``libcpp.unordered_map``.  Patch by Valentin Valls.  (Github issue #2168)
1333

1334 1335 1336
Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
1337 1338 1339 1340 1341 1342 1343
* The copy of a read-only memoryview was considered read-only as well, whereas
  a common reason to copy a read-only view is to make it writable.  The result
  of the copying is now a writable buffer by default.
  (Github issue #2134)

* The ``switch`` statement generation failed to apply recursively to the body of
  converted if-statements.
Stefan Behnel's avatar
Stefan Behnel committed
1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357

* ``NULL`` was sometimes rejected as exception return value when the returned
  type is a fused pointer type.
  Patch by Callie LeFave.  (Github issue #2177)

* Fixed compatibility with PyPy 5.11.
  Patch by Matti Picus.  (Github issue #2165)

Other changes
-------------

* The NumPy tutorial was rewritten to use memoryviews instead of the older
  buffer declaration syntax.
  Contributed by Gabriel de Marmiesse.  (Github issue #2162)
1358 1359


1360
0.28.1 (2018-03-18)
1361 1362 1363 1364 1365
===================

Bugs fixed
----------

Stefan Behnel's avatar
Stefan Behnel committed
1366
* ``PyFrozenSet_New()`` was accidentally used in PyPy where it is missing
1367 1368
  from the C-API.

1369 1370 1371 1372
* Assignment between some C++ templated types were incorrectly rejected
  when the templates mix ``const`` with ``ctypedef``.
  (Github issue #2148)

Stefan Behnel's avatar
Stefan Behnel committed
1373 1374 1375 1376
* Undeclared C++ no-args constructors in subclasses could make the compilation
  fail if the base class constructor was declared without ``nogil``.
  (Github issue #2157)

1377 1378 1379 1380
* Bytes %-formatting inferred ``basestring`` (bytes or unicode) as result type
  in some cases where ``bytes`` would have been safe to infer.
  (Github issue #2153)

1381 1382 1383
* ``None`` was accidentally disallowed as typed return value of ``dict.pop()``.
  (Github issue #2152)

1384

Stefan Behnel's avatar
Stefan Behnel committed
1385
0.28 (2018-03-13)
Stefan Behnel's avatar
Stefan Behnel committed
1386
=================
Robert Bradshaw's avatar
Robert Bradshaw committed
1387 1388 1389 1390 1391 1392 1393 1394

Features added
--------------

* Cdef classes can now multiply inherit from ordinary Python classes.
  (The primary base must still be a c class, possibly ``object``, and
  the other bases must *not* be cdef classes.)

Stefan Behnel's avatar
Stefan Behnel committed
1395 1396 1397
* Type inference is now supported for Pythran compiled NumPy expressions.
  Patch by Nils Braun.  (Github issue #1954)

1398 1399
* The ``const`` modifier can be applied to memoryview declarations to allow
  read-only buffers as input.  (Github issues #1605, #1869)
1400

Stefan Behnel's avatar
Stefan Behnel committed
1401 1402 1403 1404
* C code in the docstring of a ``cdef extern`` block is copied verbatimly
  into the generated file.
  Patch by Jeroen Demeyer.  (Github issue #1915)

1405 1406
* When compiling with gcc, the module init function is now tuned for small
  code size instead of whatever compile flags were provided externally.
1407 1408
  Cython now also disables some code intensive optimisations in that function
  to further reduce the code size.  (Github issue #2102)
1409

1410 1411 1412 1413
* Decorating an async coroutine with ``@cython.iterable_coroutine`` changes its
  type at compile time to make it iterable.  While this is not strictly in line
  with PEP-492, it improves the interoperability with old-style coroutines that
  use ``yield from`` instead of ``await``.
Stefan Behnel's avatar
Stefan Behnel committed
1414

Stefan Behnel's avatar
Stefan Behnel committed
1415 1416 1417
* The IPython magic has preliminary support for JupyterLab.
  (Github issue #1775)

Stefan Behnel's avatar
Stefan Behnel committed
1418 1419
* The new TSS C-API in CPython 3.7 is supported and has been backported.
  Patch by Naotoshi Seo.  (Github issue #1932)
1420

1421 1422 1423 1424
* Cython knows the new ``Py_tss_t`` type defined in PEP-539 and automatically
  initialises variables declared with that type to ``Py_tss_NEEDS_INIT``,
  a value which cannot be used outside of static assignments.

Stefan Behnel's avatar
Stefan Behnel committed
1425 1426 1427 1428 1429 1430
* The set methods ``.remove()`` and ``.discard()`` are optimised.
  Patch by Antoine Pitrou.  (Github issue #2042)

* ``dict.pop()`` is optimised.
  Original patch by Antoine Pitrou.  (Github issue #2047)

1431 1432 1433
* Iteration over sets and frozensets is optimised.
  (Github issue #2048)

Stefan Behnel's avatar
Stefan Behnel committed
1434 1435
* Safe integer loops (< range(2^30)) are automatically optimised into C loops.

1436 1437 1438
* ``alist.extend([a,b,c])`` is optimised into sequential ``list.append()`` calls
  for short literal sequences.

1439 1440
* Calls to builtin methods that are not specifically optimised into C-API calls
  now use a cache that avoids repeated lookups of the underlying C function.
Stefan Behnel's avatar
Stefan Behnel committed
1441
  (Github issue #2054)
1442

1443 1444
* Single argument function calls can avoid the argument tuple creation in some cases.

1445 1446
* Some redundant extension type checks are avoided.

Stefan Behnel's avatar
Stefan Behnel committed
1447 1448
* Formatting C enum values in f-strings is faster, as well as some other special cases.

1449 1450
* String formatting with the '%' operator is optimised into f-strings in simple cases.

1451
* Subscripting (item access) is faster in some cases.
Stefan Behnel's avatar
Stefan Behnel committed
1452

Stefan Behnel's avatar
Stefan Behnel committed
1453 1454
* Some ``bytearray`` operations have been optimised similar to ``bytes``.

1455 1456 1457
* Some PEP-484/526 container type declarations are now considered for
  loop optimisations.