PEP 646: Add note of alternatives that exist (#1884)
This commit is contained in:
parent
47cb40ea58
commit
701678f4d7
31
pep-0646.rst
31
pep-0646.rst
|
@ -698,6 +698,31 @@ between old unannotated code and new versions of libraries which do use
|
||||||
these type annotations.
|
these type annotations.
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
============
|
||||||
|
|
||||||
|
It should be noted that the approach outlined in this PEP to solve the
|
||||||
|
issue of shape checking in numerical libraries is *not* the only approach
|
||||||
|
possible. Examples of lighter-weight alternatives based on *runtime* checking include
|
||||||
|
ShapeGuard [#shapeguard]_, tsanley [#tsanley]_, and PyContracts [#pycontracts]_.
|
||||||
|
|
||||||
|
While these existing approaches improve significantly on the default
|
||||||
|
situation of shape checking only being possible through lengthy and verbose
|
||||||
|
assert statements, none of them enable *static* analysis of shape correctness.
|
||||||
|
As mentioned in `Motivation`_, this is particularly desirable for
|
||||||
|
machine learning applications where, due to library and infrastructure complexity,
|
||||||
|
even relatively simple programs must suffer long startup times; iterating
|
||||||
|
by running the program until it crashes, as is necessary with these
|
||||||
|
existing runtime-based approaches, can be a tedious and frustrating
|
||||||
|
experience.
|
||||||
|
|
||||||
|
Our hope with this PEP is to begin to codify generic type annotations as
|
||||||
|
an official, language-supported way of dealing with shape correctness.
|
||||||
|
With something of a standard in place, in the long run, this will
|
||||||
|
hopefully enable a thriving ecosystem of tools for analysing and verifying
|
||||||
|
shape properties of numerical computing programs.
|
||||||
|
|
||||||
|
|
||||||
Backwards Compatibility
|
Backwards Compatibility
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
@ -809,6 +834,12 @@ References
|
||||||
.. [#arbitrary_len] Discussion on Python typing-sig mailing list:
|
.. [#arbitrary_len] Discussion on Python typing-sig mailing list:
|
||||||
https://mail.python.org/archives/list/typing-sig@python.org/thread/SQVTQYWIOI4TIO7NNBTFFWFMSMS2TA4J/
|
https://mail.python.org/archives/list/typing-sig@python.org/thread/SQVTQYWIOI4TIO7NNBTFFWFMSMS2TA4J/
|
||||||
|
|
||||||
|
.. [#tsanley] tsanley: https://github.com/ofnote/tsanley
|
||||||
|
|
||||||
|
.. [#pycontracts] PyContracts: https://github.com/AndreaCensi/contracts
|
||||||
|
|
||||||
|
.. [#shapeguard] ShapeGuard: https://github.com/Qwlouse/shapeguard
|
||||||
|
|
||||||
.. _cpython/23527: https://github.com/python/cpython/pull/24527
|
.. _cpython/23527: https://github.com/python/cpython/pull/24527
|
||||||
|
|
||||||
.. _mrahtz/cpython/pep637+646: https://github.com/mrahtz/cpython/tree/pep637%2B646
|
.. _mrahtz/cpython/pep637+646: https://github.com/mrahtz/cpython/tree/pep637%2B646
|
||||||
|
|
Loading…
Reference in New Issue