.. _python-language-reference:

Python Language Reference Coverage
==================================

This is a 1:1 mapping of the features listed in https://docs.python.org/3/reference/ and their
support in TorchScript. The categorizations are as follows:


.. list-table::
   :header-rows: 1

   * - Section
     - Status
     - Note
   * - `1. Introduction <https://docs.python.org/3/reference/introduction.html>`_
     - Not Relevant
     -
   * - `1.1. Alternate Implementations <https://docs.python.org/3/reference/introduction.html#alternate-implementations>`_
     - Not Relevant
     -
   * - `1.2. Notation <https://docs.python.org/3/reference/introduction.html#notation>`_
     - Not Relevant
     -
   * - `2. Lexical analysis <https://docs.python.org/3/reference/lexical_analysis.html#>`_
     - Not Relevant
     -
   * - `2.1. Line structure <https://docs.python.org/3/reference/lexical_analysis.html#line-structure>`_
     - Not Relevant
     -
   * - `2.1.1. Logical lines <https://docs.python.org/3/reference/lexical_analysis.html#logical-lines>`_
     - Not Relevant
     -
   * - `2.1.2. Physical lines <https://docs.python.org/3/reference/lexical_analysis.html#physical-lines>`_
     - Supported
     -
   * - `2.1.3. Comments <https://docs.python.org/3/reference/lexical_analysis.html#comments>`_
     - Supported
     -
   * - `2.1.4. Encoding declarations <https://docs.python.org/3/reference/lexical_analysis.html#encoding-declarations>`_
     - Not Supported
     - TorchScript explicitly don't support unicode
   * - `2.1.5. Explicit line joining <https://docs.python.org/3/reference/lexical_analysis.html#explicit-line-joining>`_
     - Supported
     -
   * - `2.1.6. Implicit line joining <https://docs.python.org/3/reference/lexical_analysis.html#implicit-line-joining>`_
     - Supported
     -
   * - `2.1.7. Blank lines <https://docs.python.org/3/reference/lexical_analysis.html#blank-lines>`_
     - Supported
     -
   * - `2.1.8. Indentation <https://docs.python.org/3/reference/lexical_analysis.html#indentation>`_
     - Supported
     -
   * - `2.1.9. Whitespace between tokens <https://docs.python.org/3/reference/lexical_analysis.html#whitespace-between-tokens>`_
     - Not Relevant
     -
   * - `2.2. Other tokens <https://docs.python.org/3/reference/lexical_analysis.html#other-tokens>`_
     - Not Relevant
     -
   * - `2.3. Identifiers and keywords <https://docs.python.org/3/reference/lexical_analysis.html#identifiers>`_
     - Supported
     -
   * - `2.3.1. Keywords <https://docs.python.org/3/reference/lexical_analysis.html#keywords>`_
     - Supported
     -
   * - `2.3.2. Reserved classes of identifiers <https://docs.python.org/3/reference/lexical_analysis.html#reserved-classes-of-identifiers>`_
     - Supported
     -
   * - `2.4. Literals <https://docs.python.org/3/reference/lexical_analysis.html#literals>`_
     - Not Relevant
     -
   * - `2.4.1. String and Bytes literals <https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals>`_
     - Supported
     -
   * - `2.4.2. String literal concatenation <https://docs.python.org/3/reference/lexical_analysis.html#string-literal-concatenation>`_
     - Supported
     -
   * - `2.4.3. Formatted string literals <https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals>`_
     - Partially Supported
     -
   * - `2.4.4. Numeric literals <https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals>`_
     - Supported
     -
   * - `2.4.5. Integer literals <https://docs.python.org/3/reference/lexical_analysis.html#integer-literals>`_
     - Supported
     -
   * - `2.4.6. Floating point literals <https://docs.python.org/3/reference/lexical_analysis.html#floating-point-literals>`_
     - Supported
     -
   * - `2.4.7. Imaginary literals <https://docs.python.org/3/reference/lexical_analysis.html#imaginary-literals>`_
     - Not Supported
     -
   * - `2.5. Operators <https://docs.python.org/3/reference/lexical_analysis.html#operators>`_
     - Partially Supported
     - Not supported: ``<<``, ``>>``, ``:=``
   * - `2.6. Delimiters <https://docs.python.org/3/reference/lexical_analysis.html#delimiters>`_
     - Partially Supported
     - Not supported: ``**=``, ``<<=``, ``>>=``, ``%=``, ``^=``, ``@=``, ``&=``, ``//=``, ``%`` operator for some types (e.g. ``str``\ )
   * - `3. Data model <https://docs.python.org/3/reference/datamodel.html#>`_
     - Not Relevant
     -
   * - `3.1. Objects, values and types <https://docs.python.org/3/reference/datamodel.html#objects-values-and-types>`_
     - Not Relevant
     -
   * - `3.2. The standard type hierarchy <https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy>`_
     - Partially Supported
     - Not supported: NotImplemented, Ellipsis, numbers.Complex, bytes, byte arrays, sets, frozen sets, generators, coroutines, async generators, modules, I/O objects, internal objects, slice objects ( though slicing is supported), classmethod
   * - `3.3. Special method names <https://docs.python.org/3/reference/datamodel.html#special-method-names>`_
     - Supported
     -
   * - `3.3.1. Basic customization <https://docs.python.org/3/reference/datamodel.html#basic-customization>`_
     - Partially Supported
     - Not supported: ``__new__`` , ``__del__`` , ``__bytes__`` , ``__format__`` , ``__hash__`` ,
   * - `3.3.2. Customizing attribute access <https://docs.python.org/3/reference/datamodel.html#customizing-attribute-access>`_
     - Not Supported
     -
   * - `3.3.2.1. Customizing module attribute access <https://docs.python.org/3/reference/datamodel.html#customizing-module-attribute-access>`_
     - Not Supported
     -
   * - `3.3.2.2. Implementing Descriptors <https://docs.python.org/3/reference/datamodel.html#implementing-descriptors>`_
     - Not Supported
     -
   * - `3.3.2.3. Invoking Descriptors <https://docs.python.org/3/reference/datamodel.html#invoking-descriptors>`_
     - Not Supported
     -
   * - `3.3.2.4. __slots__ <https://docs.python.org/3/reference/datamodel.html#slots>`_
     - Not Supported
     -
   * - `3.3.2.4.1. Notes on using __slots__ <https://docs.python.org/3/reference/datamodel.html#notes-on-using-slots>`_
     - Not Supported
     -
   * - `3.3.3. Customizing class creation <https://docs.python.org/3/reference/datamodel.html#customizing-class-creation>`_
     - Not Supported
     -
   * - `3.3.3.1. Metaclasses <https://docs.python.org/3/reference/datamodel.html#metaclasses>`_
     - Not Supported
     -
   * - `3.3.3.2. Resolving MRO entries <https://docs.python.org/3/reference/datamodel.html#resolving-mro-entries>`_
     - Not Supported
     - ``super()`` is not supported
   * - `3.3.3.3. Determining the appropriate metaclass <https://docs.python.org/3/reference/datamodel.html#determining-the-appropriate-metaclass>`_
     - Not relevant
     -
   * - `3.3.3.4. Preparing the class namespace <https://docs.python.org/3/reference/datamodel.html#preparing-the-class-namespace>`_
     - Not relevant
     -
   * - `3.3.3.5. Executing the class body <https://docs.python.org/3/reference/datamodel.html#executing-the-class-body>`_
     - Not relevant
     -
   * - `3.3.3.6. Creating the class object <https://docs.python.org/3/reference/datamodel.html#creating-the-class-object>`_
     - Not relevant
     -
   * - `3.3.3.7. Uses for metaclasses <https://docs.python.org/3/reference/datamodel.html#uses-for-metaclasses>`_
     - Not relevant
     -
   * - `3.3.4. Customizing instance and subclass checks <https://docs.python.org/3/reference/datamodel.html#customizing-instance-and-subclass-checks>`_
     - Not Supported
     -
   * - `3.3.5. Emulating generic types <https://docs.python.org/3/reference/datamodel.html#emulating-generic-types>`_
     - Not Supported
     -
   * - `3.3.6. Emulating callable objects <https://docs.python.org/3/reference/datamodel.html#emulating-callable-objects>`_
     - Supported
     -
   * - `3.3.7. Emulating container types <https://docs.python.org/3/reference/datamodel.html#emulating-container-types>`_
     - Partially Supported
     - Some magic methods not supported (e.g. ``__iter__`` )
   * - `3.3.8. Emulating numeric types <https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types>`_
     - Partially Supported
     - Magic methods with swapped operands not supported (``__r*__``)
   * - `3.3.9. With Statement Context Managers <https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers>`_
     - Not Supported
     -
   * - `3.3.10. Special method lookup <https://docs.python.org/3/reference/datamodel.html#special-method-lookup>`_
     - Not relevant
     -
   * - `3.4. Coroutines <https://docs.python.org/3/reference/datamodel.html#coroutines>`_
     - Not Supported
     -
   * - `3.4.1. Awaitable Objects <https://docs.python.org/3/reference/datamodel.html#awaitable-objects>`_
     - Not Supported
     -
   * - `3.4.2. Coroutine Objects <https://docs.python.org/3/reference/datamodel.html#coroutine-objects>`_
     - Not Supported
     -
   * - `3.4.3. Asynchronous Iterators <https://docs.python.org/3/reference/datamodel.html#asynchronous-iterators>`_
     - Not Supported
     -
   * - `3.4.4. Asynchronous Context Managers <https://docs.python.org/3/reference/datamodel.html#asynchronous-context-managers>`_
     - Not Supported
     -
   * - `4. Execution model <https://docs.python.org/3/reference/executionmodel.html#>`_
     - Not Relevant
     -
   * - `4.1. Structure of a program <https://docs.python.org/3/reference/executionmodel.html#structure-of-a-program>`_
     - Not Relevant
     -
   * - `4.2. Naming and binding <https://docs.python.org/3/reference/executionmodel.html#naming-and-binding>`_
     - Not Relevant
     - Names are bound at compile time in TorchScript
   * - `4.2.1. Binding of names <https://docs.python.org/3/reference/executionmodel.html#binding-of-names>`_
     - Not Relevant
     - See ``global`` and ``nonlocal`` statements section
   * - `4.2.2. Resolution of names <https://docs.python.org/3/reference/executionmodel.html#resolution-of-names>`_
     - Not Relevant
     - See ``global`` and ``nonlocal`` statements section
   * - `4.2.3. Builtins and restricted execution <https://docs.python.org/3/reference/executionmodel.html#builtins-and-restricted-execution>`_
     - Not Relevant
     -
   * - `4.2.4. Interaction with dynamic features <https://docs.python.org/3/reference/executionmodel.html#interaction-with-dynamic-features>`_
     - Not Supported
     - Python values cannot be captured
   * - `4.3. Exceptions <https://docs.python.org/3/reference/executionmodel.html#exceptions>`_
     - Partially Supported
     - See ``try`` and ``raise`` statement section
   * - `5. The import system <https://docs.python.org/3/reference/import.html>`_
     - Not Relevant
     -
   * - `6. Expressions <https://docs.python.org/3/reference/expressions.html#>`_
     - Not Relevant
     - See expressions section
   * - `6.1. Arithmetic conversions <https://docs.python.org/3/reference/expressions.html#arithmetic-conversions>`_
     - Supported
     -
   * - `6.2. Atoms <https://docs.python.org/3/reference/expressions.html#atoms>`_
     - Not Relevant
     -
   * - `6.2.1. Identifiers (Names) <https://docs.python.org/3/reference/expressions.html#atom-identifiers>`_
     - Supported
     -
   * - `6.2.2. Literals <https://docs.python.org/3/reference/expressions.html#literals>`_
     - Partially Supported
     - ``bytesliteral``\ , ``imagnumber`` not supported
   * - `6.2.3. Parenthesized forms <https://docs.python.org/3/reference/expressions.html#parenthesized-forms>`_
     - Supported
     -
   * - `6.2.4. Displays for lists, sets and dictionaries <https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries>`_
     - Partially Supported
     - Not supported: comprehension ifs, async iterators
   * - `6.2.5. List displays <https://docs.python.org/3/reference/expressions.html#list-displays>`_
     - Supported
     -
   * - `6.2.6. Set displays <https://docs.python.org/3/reference/expressions.html#set-displays>`_
     - Not Supported
     -
   * - `6.2.7. Dictionary displays <https://docs.python.org/3/reference/expressions.html#dictionary-displays>`_
     - Supported
     - dict() constructor with kwargs doesn't work, dict comprehensions, dictionary unpacking
   * - `6.2.8. Generator expressions <https://docs.python.org/3/reference/expressions.html#generator-expressions>`_
     - Not Supported
     -
   * - `6.2.9. Yield expressions <https://docs.python.org/3/reference/expressions.html#yield-expressions>`_
     - Not Supported
     -
   * - `6.2.9.1. Generator-iterator methods <https://docs.python.org/3/reference/expressions.html#generator-iterator-methods>`_
     - Not Supported
     -
   * - `6.2.9.2. Examples <https://docs.python.org/3/reference/expressions.html#examples>`_
     - Not Supported
     -
   * - `6.2.9.3. Asynchronous generator functions <https://docs.python.org/3/reference/expressions.html#asynchronous-generator-functions>`_
     - Not Supported
     -
   * - `6.2.9.4. Asynchronous generator-iterator methods <https://docs.python.org/3/reference/expressions.html#asynchronous-generator-iterator-methods>`_
     - Not Supported
     -
   * - `6.3. Primaries <https://docs.python.org/3/reference/expressions.html#primaries>`_
     - Supported
     -
   * - `6.3.1. Attribute references <https://docs.python.org/3/reference/expressions.html#attribute-references>`_
     - Supported
     -
   * - `6.3.2. Subscriptions <https://docs.python.org/3/reference/expressions.html#subscriptions>`_
     - Supported
     -
   * - `6.3.3. Slicings <https://docs.python.org/3/reference/expressions.html#slicings>`_
     - Partially Supported
     - Tuple slicing with stride is not supported
   * - `6.3.4. Calls <https://docs.python.org/3/reference/expressions.html#calls>`_
     - Partially Supported
     - Args unpack / kwargs unpack is not supported
   * - `6.4. Await expression <https://docs.python.org/3/reference/expressions.html#await-expression>`_
     - Not Supported
     -
   * - `6.5. The power operator <https://docs.python.org/3/reference/expressions.html#the-power-operator>`_
     - Supported
     -
   * - `6.6. Unary arithmetic and bitwise operations <https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations>`_
     - Partially Supported
     - Some bitwise operators are not implemented for primitive types (e.g. ``~x`` where ``x`` is an ``int`` is not currently supported)
   * - `6.7. Binary arithmetic operations <https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations>`_
     - Partially Supported
     - See delimiters section
   * - `6.8. Shifting operations <https://docs.python.org/3/reference/expressions.html#shifting-operations>`_
     - Not Supported
     -
   * - `6.9. Binary bitwise operations <https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations>`_
     - Supported
     -
   * - `6.10. Comparisons <https://docs.python.org/3/reference/expressions.html#comparisons>`_
     - Supported
     -
   * - `6.10.1. Value comparisons <https://docs.python.org/3/reference/expressions.html#value-comparisons>`_
     - Partially Supported
     - Dictionary equality checks are not currently supported
   * - `6.10.2. Membership test operations <https://docs.python.org/3/reference/expressions.html#membership-test-operations>`_
     - Partially Supported
     - Not supported for TorchScript classes
   * - `6.10.3. Identity comparisons <https://docs.python.org/3/reference/expressions.html#is-not>`_
     - Supported
     -
   * - `6.11. Boolean operations <https://docs.python.org/3/reference/expressions.html#boolean-operations>`_
     - Supported
     -
   * - `6.12. Conditional expressions <https://docs.python.org/3/reference/expressions.html#conditional-expressions>`_
     - Supported
     -
   * - `6.13. Lambdas <https://docs.python.org/3/reference/expressions.html#lambda>`_
     - Not Supported
     -
   * - `6.14. Expression lists <https://docs.python.org/3/reference/expressions.html#expression-lists>`_
     - Partially Supported
     - Iterable unpacking not supported
   * - `6.15. Evaluation order <https://docs.python.org/3/reference/expressions.html#evaluation-order>`_
     - Supported
     -
   * - `6.16. Operator precedence <https://docs.python.org/3/reference/expressions.html#operator-precedence>`_
     - Supported
     -
   * - `7. Simple statements <https://docs.python.org/3/reference/simple_stmts.html#>`_
     - Supported
     -
   * - `7.1. Expression statements <https://docs.python.org/3/reference/simple_stmts.html#expression-statements>`_
     - Supported
     -
   * - `7.2. Assignment statements <https://docs.python.org/3/reference/simple_stmts.html#assignment-statements>`_
     - Supported
     -
   * - `7.2.1. Augmented assignment statements <https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements>`_
     - Partially Supported
     - See delimiters section
   * - `7.2.2. Annotated assignment statements <https://docs.python.org/3/reference/simple_stmts.html#annotated-assignment-statements>`_
     - Supported
     -
   * - `7.3. The assert statement <https://docs.python.org/3/reference/simple_stmts.html#the-assert-statement>`_
     - Partially Supported
     - Exception message is not customizable
   * - `7.4. The pass statement <https://docs.python.org/3/reference/simple_stmts.html#the-pass-statement>`_
     - Supported
     -
   * - `7.5. The del statement <https://docs.python.org/3/reference/simple_stmts.html#the-del-statement>`_
     - Not Supported
     -
   * - `7.6. The return statement <https://docs.python.org/3/reference/simple_stmts.html#the-return-statement>`_
     - Supported
     - Some other features of returning (e.g. behavior with try..finally) are unsupported
   * - `7.7. The yield statement <https://docs.python.org/3/reference/simple_stmts.html#the-yield-statement>`_
     - Not Supported
     -
   * - `7.8. The raise statement <https://docs.python.org/3/reference/simple_stmts.html#the-raise-statement>`_
     - Partially Supported
     - Exception message is not customizable
   * - `7.9. The break statement <https://docs.python.org/3/reference/simple_stmts.html#the-break-statement>`_
     - Supported
     - Some other features of returning (e.g. behavior with try..finally) are unsupported
   * - `7.10. The continue statement <https://docs.python.org/3/reference/simple_stmts.html#the-continue-statement>`_
     - Supported
     - Some other features of returning (e.g. behavior with try..finally) are unsupported
   * - `7.11. The import statement <https://docs.python.org/3/reference/simple_stmts.html#the-import-statement>`_
     - Not Supported
     -
   * - `7.11.1. Future statements <https://docs.python.org/3/reference/simple_stmts.html#future-statements>`_
     - Not Supported
     -
   * - `7.12. The global statement <https://docs.python.org/3/reference/simple_stmts.html#the-global-statement>`_
     - Not Supported
     -
   * - `7.13. The nonlocal statement <https://docs.python.org/3/reference/simple_stmts.html#the-nonlocal-statement>`_
     - Not Supported
     -
   * - `8. Compound statements <https://docs.python.org/3/reference/compound_stmts.html#>`_
     - Irrelevant
     -
   * - `8.1. The if statement <https://docs.python.org/3/reference/compound_stmts.html#the-if-statement>`_
     - Supported
     -
   * - `8.2. The while statement <https://docs.python.org/3/reference/compound_stmts.html#the-while-statement>`_
     - Partially Supported
     - while..else is not supported
   * - `8.3. The for statement <https://docs.python.org/3/reference/compound_stmts.html#the-for-statement>`_
     - Partially Supported
     - for..else is not supported
   * - `8.4. The try statement <https://docs.python.org/3/reference/compound_stmts.html#the-try-statement>`_
     - Not Supported
     -
   * - `8.5. The with statement <https://docs.python.org/3/reference/compound_stmts.html#the-with-statement>`_
     - Partially Supported
     - ``__exit__`` is always called with ``exc_type``, ``exc_value``, and ``traceback`` set to None, even if an exception was raised, and ``__exit__``'s return value is ignored.
   * - `8.6. Function definitions <https://docs.python.org/3/reference/compound_stmts.html#function-definitions>`_
     - Not Supported
     -
   * - `8.7. Class definitions <https://docs.python.org/3/reference/compound_stmts.html#class-definitions>`_
     - Not Supported
     -
   * - `8.8. Coroutines <https://docs.python.org/3/reference/compound_stmts.html#coroutines>`_
     - Not Supported
     -
   * - `8.8.1. Coroutine function definition <https://docs.python.org/3/reference/compound_stmts.html#coroutine-function-definition>`_
     - Not Supported
     -
   * - `8.8.2. The async for statement <https://docs.python.org/3/reference/compound_stmts.html#the-async-for-statement>`_
     - Not Supported
     -
   * - `8.8.3. The async with statement <https://docs.python.org/3/reference/compound_stmts.html#the-async-with-statement>`_
     - Not Supported
     -
   * - `9. Top-level components <https://docs.python.org/3/reference/toplevel_components.html#>`_
     - Not Relevant
     -
   * - `9.1. Complete Python programs <https://docs.python.org/3/reference/toplevel_components.html#complete-python-programs>`_
     - Not Relevant
     -
   * - `9.2. File input <https://docs.python.org/3/reference/toplevel_components.html#file-input>`_
     - Not Relevant
     -
   * - `9.3. Interactive input <https://docs.python.org/3/reference/toplevel_components.html#interactive-input>`_
     - Not Relevant
     -
   * - `9.4. Expression input <https://docs.python.org/3/reference/toplevel_components.html#expression-input>`_
     - Not Relevant
     -
