.. _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 -