aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-04-09 23:55:56 -0400
committerBenjamin Peterson <benjamin@python.org>2014-04-09 23:55:56 -0400
commitd51374ed78a3e3145911a16cdf3b9b84b3ba7d15 (patch)
tree31f9086f20f5b8923604f41f1a4d139fa809aaed
parentAdd algorithmic notes for nsmallest() and nlargest(). (diff)
downloadcpython-d51374ed78a3e3145911a16cdf3b9b84b3ba7d15.tar.gz
cpython-d51374ed78a3e3145911a16cdf3b9b84b3ba7d15.tar.bz2
cpython-d51374ed78a3e3145911a16cdf3b9b84b3ba7d15.zip
PEP 465: a dedicated infix operator for matrix multiplication (closes #21176)
-rw-r--r--Doc/c-api/number.rst17
-rw-r--r--Doc/c-api/typeobj.rst3
-rw-r--r--Doc/library/dis.rst10
-rw-r--r--Doc/library/operator.rst18
-rw-r--r--Doc/library/token.rst1
-rw-r--r--Doc/reference/datamodel.rst60
-rw-r--r--Doc/reference/expressions.rst17
-rw-r--r--Doc/reference/simple_stmts.rst2
-rw-r--r--Grammar/Grammar4
-rw-r--r--Include/Python-ast.h6
-rw-r--r--Include/abstract.h12
-rw-r--r--Include/object.h3
-rw-r--r--Include/opcode.h3
-rw-r--r--Include/token.h13
-rw-r--r--Include/typeslots.h2
-rw-r--r--Lib/importlib/_bootstrap.py3
-rw-r--r--Lib/opcode.py3
-rw-r--r--Lib/operator.py11
-rw-r--r--Lib/test/test_augassign.py15
-rw-r--r--Lib/test/test_capi.py17
-rw-r--r--Lib/test/test_descr.py1
-rw-r--r--Lib/test/test_grammar.py14
-rw-r--r--Lib/test/test_operator.py11
-rw-r--r--Lib/test/test_sys.py2
-rw-r--r--Lib/test/test_tokenize.py5
-rw-r--r--Lib/token.py11
-rw-r--r--Lib/tokenize.py5
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/_operator.c4
-rw-r--r--Modules/_testcapimodule.c107
-rw-r--r--Objects/abstract.c14
-rw-r--r--Objects/typeobject.c10
-rw-r--r--Objects/typeslots.inc2
-rw-r--r--Parser/Python.asdl2
-rw-r--r--Parser/tokenizer.c8
-rw-r--r--Python/Python-ast.c24
-rw-r--r--Python/ast.c8
-rw-r--r--Python/ceval.c24
-rw-r--r--Python/compile.c6
-rw-r--r--Python/graminit.c435
-rw-r--r--Python/importlib.h320
-rw-r--r--Python/opcode_targets.h4
42 files changed, 800 insertions, 439 deletions
diff --git a/Doc/c-api/number.rst b/Doc/c-api/number.rst
index 21951c38c0d..9bcb649c9d5 100644
--- a/Doc/c-api/number.rst
+++ b/Doc/c-api/number.rst
@@ -30,6 +30,14 @@ Number Protocol
the equivalent of the Python expression ``o1 * o2``.
+.. c:function:: PyObject* PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
+
+ Returns the result of matrix multiplication on *o1* and *o2*, or *NULL* on
+ failure. This is the equivalent of the Python expression ``o1 @ o2``.
+
+ .. versionadded:: 3.5
+
+
.. c:function:: PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
Return the floor of *o1* divided by *o2*, or *NULL* on failure. This is
@@ -146,6 +154,15 @@ Number Protocol
the Python statement ``o1 *= o2``.
+.. c:function:: PyObject* PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
+
+ Returns the result of matrix multiplication on *o1* and *o2*, or *NULL* on
+ failure. The operation is done *in-place* when *o1* supports it. This is
+ the equivalent of the Python statement ``o1 @= o2``.
+
+ .. versionadded:: 3.5
+
+
.. c:function:: PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
Returns the mathematical floor of dividing *o1* by *o2*, or *NULL* on failure.
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index 666de64fade..5d523155668 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -1121,6 +1121,9 @@ Number Object Structures
binaryfunc nb_inplace_true_divide;
unaryfunc nb_index;
+
+ binaryfunc nb_matrix_multiply;
+ binaryfunc nb_inplace_matrix_multiply;
} PyNumberMethods;
.. note::
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index d86550f182c..fbabe357724 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -364,6 +364,11 @@ result back on the stack.
Implements ``TOS = TOS1 * TOS``.
+.. opcode:: BINARY_MATRIX_MULTIPLY
+
+ Implements ``TOS = TOS1 @ TOS``.
+
+
.. opcode:: BINARY_FLOOR_DIVIDE
Implements ``TOS = TOS1 // TOS``.
@@ -436,6 +441,11 @@ the original TOS1.
Implements in-place ``TOS = TOS1 * TOS``.
+.. opcode:: INPLACE_MATRIX_MULTIPLY
+
+ Implements in-place ``TOS = TOS1 @ TOS``.
+
+
.. opcode:: INPLACE_FLOOR_DIVIDE
Implements in-place ``TOS = TOS1 // TOS``.
diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst
index 3bcbaa4b86e..3654d133a8d 100644
--- a/Doc/library/operator.rst
+++ b/Doc/library/operator.rst
@@ -138,6 +138,14 @@ The mathematical and bitwise operations are the most numerous:
Return ``a * b``, for *a* and *b* numbers.
+.. function:: matmul(a, b)
+ __matmul__(a, b)
+
+ Return ``a @ b``.
+
+ .. versionadded:: 3.5
+
+
.. function:: neg(obj)
__neg__(obj)
@@ -400,6 +408,8 @@ Python syntax and the functions in the :mod:`operator` module.
+-----------------------+-------------------------+---------------------------------------+
| Multiplication | ``a * b`` | ``mul(a, b)`` |
+-----------------------+-------------------------+---------------------------------------+
+| Matrix Multiplication | ``a @ b`` | ``matmul(a, b)`` |
++-----------------------+-------------------------+---------------------------------------+
| Negation (Arithmetic) | ``- a`` | ``neg(a)`` |
+-----------------------+-------------------------+---------------------------------------+
| Negation (Logical) | ``not a`` | ``not_(a)`` |
@@ -508,6 +518,14 @@ will perform the update, so no subsequent assignment is necessary:
``a = imul(a, b)`` is equivalent to ``a *= b``.
+.. function:: imatmul(a, b)
+ __imatmul__(a, b)
+
+ ``a = imatmul(a, b)`` is equivalent to ``a @= b``.
+
+ .. versionadded:: 3.5
+
+
.. function:: ior(a, b)
__ior__(a, b)
diff --git a/Doc/library/token.rst b/Doc/library/token.rst
index 4cd709814c3..88fb38bc1dd 100644
--- a/Doc/library/token.rst
+++ b/Doc/library/token.rst
@@ -93,6 +93,7 @@ The token constants are:
DOUBLESLASH
DOUBLESLASHEQUAL
AT
+ ATEQUAL
RARROW
ELLIPSIS
OP
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index ccaa4f785ae..825580abadd 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1970,6 +1970,7 @@ left undefined.
.. method:: object.__add__(self, other)
object.__sub__(self, other)
object.__mul__(self, other)
+ object.__matmul__(self, other)
object.__truediv__(self, other)
object.__floordiv__(self, other)
object.__mod__(self, other)
@@ -1986,15 +1987,16 @@ left undefined.
builtin: pow
builtin: pow
- These methods are called to implement the binary arithmetic operations (``+``,
- ``-``, ``*``, ``/``, ``//``, ``%``, :func:`divmod`, :func:`pow`, ``**``, ``<<``,
- ``>>``, ``&``, ``^``, ``|``). For instance, to evaluate the expression
- ``x + y``, where *x* is an instance of a class that has an :meth:`__add__`
- method, ``x.__add__(y)`` is called. The :meth:`__divmod__` method should be the
- equivalent to using :meth:`__floordiv__` and :meth:`__mod__`; it should not be
- related to :meth:`__truediv__`. Note that :meth:`__pow__` should be defined
- to accept an optional third argument if the ternary version of the built-in
- :func:`pow` function is to be supported.
+ These methods are called to implement the binary arithmetic operations
+ (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`,
+ :func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For instance, to
+ evaluate the expression ``x + y``, where *x* is an instance of a class that
+ has an :meth:`__add__` method, ``x.__add__(y)`` is called. The
+ :meth:`__divmod__` method should be the equivalent to using
+ :meth:`__floordiv__` and :meth:`__mod__`; it should not be related to
+ :meth:`__truediv__`. Note that :meth:`__pow__` should be defined to accept
+ an optional third argument if the ternary version of the built-in :func:`pow`
+ function is to be supported.
If one of those methods does not support the operation with the supplied
arguments, it should return ``NotImplemented``.
@@ -2003,6 +2005,7 @@ left undefined.
.. method:: object.__radd__(self, other)
object.__rsub__(self, other)
object.__rmul__(self, other)
+ object.__rmatmul__(self, other)
object.__rtruediv__(self, other)
object.__rfloordiv__(self, other)
object.__rmod__(self, other)
@@ -2018,14 +2021,14 @@ left undefined.
builtin: divmod
builtin: pow
- These methods are called to implement the binary arithmetic operations (``+``,
- ``-``, ``*``, ``/``, ``//``, ``%``, :func:`divmod`, :func:`pow`, ``**``,
- ``<<``, ``>>``, ``&``, ``^``, ``|``) with reflected (swapped) operands.
- These functions are only called if the left operand does not support the
- corresponding operation and the operands are of different types. [#]_ For
- instance, to evaluate the expression ``x - y``, where *y* is an instance of
- a class that has an :meth:`__rsub__` method, ``y.__rsub__(x)`` is called if
- ``x.__sub__(y)`` returns *NotImplemented*.
+ These methods are called to implement the binary arithmetic operations
+ (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`,
+ :func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with reflected
+ (swapped) operands. These functions are only called if the left operand does
+ not support the corresponding operation and the operands are of different
+ types. [#]_ For instance, to evaluate the expression ``x - y``, where *y* is
+ an instance of a class that has an :meth:`__rsub__` method, ``y.__rsub__(x)``
+ is called if ``x.__sub__(y)`` returns *NotImplemented*.
.. index:: builtin: pow
@@ -2043,6 +2046,7 @@ left undefined.
.. method:: object.__iadd__(self, other)
object.__isub__(self, other)
object.__imul__(self, other)
+ object.__imatmul__(self, other)
object.__itruediv__(self, other)
object.__ifloordiv__(self, other)
object.__imod__(self, other)
@@ -2054,17 +2058,17 @@ left undefined.
object.__ior__(self, other)
These methods are called to implement the augmented arithmetic assignments
- (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``, ``**=``, ``<<=``, ``>>=``,
- ``&=``, ``^=``, ``|=``). These methods should attempt to do the operation
- in-place (modifying *self*) and return the result (which could be, but does
- not have to be, *self*). If a specific method is not defined, the augmented
- assignment falls back to the normal methods. For instance, if *x* is an
- instance of a class with an :meth:`__iadd__` method, ``x += y`` is equivalent
- to ``x = x.__iadd__(y)`` . Otherwise, ``x.__add__(y)`` and ``y.__radd__(x)``
- are considered, as with the evaluation of ``x + y``. In certain situations,
- augmented assignment can result in unexpected errors (see
- :ref:`faq-augmented-assignment-tuple-error`), but this behavior is in
- fact part of the data model.
+ (``+=``, ``-=``, ``*=``, ``@=``, ``/=``, ``//=``, ``%=``, ``**=``, ``<<=``,
+ ``>>=``, ``&=``, ``^=``, ``|=``). These methods should attempt to do the
+ operation in-place (modifying *self*) and return the result (which could be,
+ but does not have to be, *self*). If a specific method is not defined, the
+ augmented assignment falls back to the normal methods. For instance, if *x*
+ is an instance of a class with an :meth:`__iadd__` method, ``x += y`` is
+ equivalent to ``x = x.__iadd__(y)`` . Otherwise, ``x.__add__(y)`` and
+ ``y.__radd__(x)`` are considered, as with the evaluation of ``x + y``. In
+ certain situations, augmented assignment can result in unexpected errors (see
+ :ref:`faq-augmented-assignment-tuple-error`), but this behavior is in fact
+ part of the data model.
.. method:: object.__neg__(self)
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index 06baba0d605..5b92a480720 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -892,8 +892,9 @@ from the power operator, there are only two levels, one for multiplicative
operators and one for additive operators:
.. productionlist::
- m_expr: `u_expr` | `m_expr` "*" `u_expr` | `m_expr` "//" `u_expr` | `m_expr` "/" `u_expr`
- : | `m_expr` "%" `u_expr`
+ m_expr: `u_expr` | `m_expr` "*" `u_expr` | `m_expr` "@" `m_expr` |
+ : `m_expr` "//" `u_expr`| `m_expr` "/" `u_expr` |
+ : `m_expr` "%" `u_expr`
a_expr: `m_expr` | `a_expr` "+" `m_expr` | `a_expr` "-" `m_expr`
.. index:: single: multiplication
@@ -904,6 +905,13 @@ the other must be a sequence. In the former case, the numbers are converted to a
common type and then multiplied together. In the latter case, sequence
repetition is performed; a negative repetition factor yields an empty sequence.
+.. index:: single: matrix multiplication
+
+The ``@`` (at) operator is intended to be used for matrix multiplication. No
+builtin Python types implement this operator.
+
+.. versionadded:: 3.5
+
.. index::
exception: ZeroDivisionError
single: division
@@ -1346,8 +1354,9 @@ groups from right to left).
+-----------------------------------------------+-------------------------------------+
| ``+``, ``-`` | Addition and subtraction |
+-----------------------------------------------+-------------------------------------+
-| ``*``, ``/``, ``//``, ``%`` | Multiplication, division, remainder |
-| | [#]_ |
+| ``*``, ``@``, ``/``, ``//``, ``%`` | Multiplication, matrix |
+| | multiplication division, |
+| | remainder [#]_ |
+-----------------------------------------------+-------------------------------------+
| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT |
+-----------------------------------------------+-------------------------------------+
diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst
index 40bbc391d27..799c3232c50 100644
--- a/Doc/reference/simple_stmts.rst
+++ b/Doc/reference/simple_stmts.rst
@@ -267,7 +267,7 @@ operation and an assignment statement:
.. productionlist::
augmented_assignment_stmt: `augtarget` `augop` (`expression_list` | `yield_expression`)
augtarget: `identifier` | `attributeref` | `subscription` | `slicing`
- augop: "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="
+ augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="
: | ">>=" | "<<=" | "&=" | "^=" | "|="
(See section :ref:`primaries` for the syntax definitions for the last three
diff --git a/Grammar/Grammar b/Grammar/Grammar
index d7aaffd60e1..354fe607691 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -40,7 +40,7 @@ small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |
expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) |
('=' (yield_expr|testlist_star_expr))*)
testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [',']
-augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |
+augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |
'<<=' | '>>=' | '**=' | '//=')
# For normal assignments, additional restrictions enforced by the interpreter
del_stmt: 'del' exprlist
@@ -97,7 +97,7 @@ xor_expr: and_expr ('^' and_expr)*
and_expr: shift_expr ('&' shift_expr)*
shift_expr: arith_expr (('<<'|'>>') arith_expr)*
arith_expr: term (('+'|'-') term)*
-term: factor (('*'|'/'|'%'|'//') factor)*
+term: factor (('*'|'@'|'/'|'%'|'//') factor)*
factor: ('+'|'-'|'~') factor | power
power: atom trailer* ['**' factor]
atom: ('(' [yield_expr|testlist_comp] ')' |
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 67d677b233b..37e9a606c27 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -15,9 +15,9 @@ typedef struct _slice *slice_ty;
typedef enum _boolop { And=1, Or=2 } boolop_ty;
-typedef enum _operator { Add=1, Sub=2, Mult=3, Div=4, Mod=5, Pow=6, LShift=7,
- RShift=8, BitOr=9, BitXor=10, BitAnd=11, FloorDiv=12 }
- operator_ty;
+typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7,
+ LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12,
+ FloorDiv=13 } operator_ty;
typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;
diff --git a/Include/abstract.h b/Include/abstract.h
index 6e850b82e8f..db70f213bc6 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -658,6 +658,12 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
o1*o2.
*/
+ PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
+
+ /*
+ This is the equivalent of the Python expression: o1 @ o2.
+ */
+
PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
/*
@@ -832,6 +838,12 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
o1 *= o2.
*/
+ PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
+
+ /*
+ This is the equivalent of the Python expression: o1 @= o2.
+ */
+
PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
PyObject *o2);
diff --git a/Include/object.h b/Include/object.h
index 7584d4cdde1..f3c87ebd227 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -275,6 +275,9 @@ typedef struct {
binaryfunc nb_inplace_true_divide;
unaryfunc nb_index;
+
+ binaryfunc nb_matrix_multiply;
+ binaryfunc nb_inplace_matrix_multiply;
} PyNumberMethods;
typedef struct {
diff --git a/Include/opcode.h b/Include/opcode.h
index 0936f2d9f42..9e5f0bf5d18 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -20,6 +20,9 @@ extern "C" {
#define UNARY_INVERT 15
+#define BINARY_MATRIX_MULTIPLY 16
+#define INPLACE_MATRIX_MULTIPLY 17
+
#define BINARY_POWER 19
#define BINARY_MULTIPLY 20
diff --git a/Include/token.h b/Include/token.h
index 905022b8d2c..2b213eeb32f 100644
--- a/Include/token.h
+++ b/Include/token.h
@@ -58,13 +58,14 @@ extern "C" {
#define DOUBLESTAREQUAL 46
#define DOUBLESLASH 47
#define DOUBLESLASHEQUAL 48
-#define AT 49
-#define RARROW 50
-#define ELLIPSIS 51
+#define AT 49
+#define ATEQUAL 50
+#define RARROW 51
+#define ELLIPSIS 52
/* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */
-#define OP 52
-#define ERRORTOKEN 53
-#define N_TOKENS 54
+#define OP 53
+#define ERRORTOKEN 54
+#define N_TOKENS 55
/* Special definitions for cooperation with parser */
diff --git a/Include/typeslots.h b/Include/typeslots.h
index ad3cdfb19ad..da2e87cb719 100644
--- a/Include/typeslots.h
+++ b/Include/typeslots.h
@@ -74,3 +74,5 @@
#define Py_tp_members 72
#define Py_tp_getset 73
#define Py_tp_free 74
+#define Py_nb_matrix_multiply 75
+#define Py_nb_inplace_matrix_multiply 76
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index beaa9b3758c..6b8c9eaf31e 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -419,12 +419,13 @@ def _call_with_frames_removed(f, *args, **kwds):
# Python 3.4a4 3290 (changes to __qualname__ computation)
# Python 3.4a4 3300 (more changes to __qualname__ computation)
# Python 3.4rc2 3310 (alter __qualname__ computation)
+# Python 3.5a0 3320 (matrix multiplication operator)
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
# longer be understood by older implementations of the eval loop (usually
# due to the addition of new opcodes).
-MAGIC_NUMBER = (3310).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3320).to_bytes(2, 'little') + b'\r\n'
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
_PYCACHE = '__pycache__'
diff --git a/Lib/opcode.py b/Lib/opcode.py
index 0bd1ee679cf..bfd3c4d8dd4 100644
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -70,6 +70,9 @@ def_op('UNARY_NOT', 12)
def_op('UNARY_INVERT', 15)
+def_op('BINARY_MATRIX_MULTIPLY', 16)
+def_op('INPLACE_MATRIX_MULTIPLY', 17)
+
def_op('BINARY_POWER', 19)
def_op('BINARY_MULTIPLY', 20)
diff --git a/Lib/operator.py b/Lib/operator.py
index b60349fe4c9..856036ddf12 100644
--- a/Lib/operator.py
+++ b/Lib/operator.py
@@ -105,6 +105,10 @@ def mul(a, b):
"Same as a * b."
return a * b
+def matmul(a, b):
+ "Same as a @ b."
+ return a @ b
+
def neg(a):
"Same as -a."
return -a
@@ -326,6 +330,11 @@ def imul(a, b):
a *= b
return a
+def imatmul(a, b):
+ "Same as a @= b."
+ a @= b
+ return a
+
def ior(a, b):
"Same as a |= b."
a |= b
@@ -383,6 +392,7 @@ __invert__ = invert
__lshift__ = lshift
__mod__ = mod
__mul__ = mul
+__matmul__ = matmul
__neg__ = neg
__or__ = or_
__pos__ = pos
@@ -403,6 +413,7 @@ __ifloordiv__ = ifloordiv
__ilshift__ = ilshift
__imod__ = imod
__imul__ = imul
+__imatmul__ = imatmul
__ior__ = ior
__ipow__ = ipow
__irshift__ = irshift
diff --git a/Lib/test/test_augassign.py b/Lib/test/test_augassign.py
index 9a59c58ec06..19b76874bea 100644
--- a/Lib/test/test_augassign.py
+++ b/Lib/test/test_augassign.py
@@ -136,6 +136,14 @@ class AugAssignTest(unittest.TestCase):
output.append("__imul__ called")
return self
+ def __matmul__(self, val):
+ output.append("__matmul__ called")
+ def __rmatmul__(self, val):
+ output.append("__rmatmul__ called")
+ def __imatmul__(self, val):
+ output.append("__imatmul__ called")
+ return self
+
def __div__(self, val):
output.append("__div__ called")
def __rdiv__(self, val):
@@ -233,6 +241,10 @@ class AugAssignTest(unittest.TestCase):
1 * x
x *= 1
+ x @ 1
+ 1 @ x
+ x @= 1
+
x / 1
1 / x
x /= 1
@@ -279,6 +291,9 @@ __isub__ called
__mul__ called
__rmul__ called
__imul__ called
+__matmul__ called
+__rmatmul__ called
+__imatmul__ called
__truediv__ called
__rtruediv__ called
__itruediv__ called
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 408f12c3245..ba7f2c4c6d8 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -150,6 +150,23 @@ class CAPITest(unittest.TestCase):
self.assertEqual(_testcapi.docstring_with_signature_and_extra_newlines.__text_signature__,
"($module, /, parameter)")
+ def test_c_type_with_matrix_multiplication(self):
+ M = _testcapi.matmulType
+ m1 = M()
+ m2 = M()
+ self.assertEqual(m1 @ m2, ("matmul", m1, m2))
+ self.assertEqual(m1 @ 42, ("matmul", m1, 42))
+ self.assertEqual(42 @ m1, ("matmul", 42, m1))
+ o = m1
+ o @= m2
+ self.assertEqual(o, ("imatmul", m1, m2))
+ o = m1
+ o @= 42
+ self.assertEqual(o, ("imatmul", m1, 42))
+ o = 42
+ o @= m1
+ self.assertEqual(o, ("matmul", 42, m1))
+
@unittest.skipUnless(threading, 'Threading required for this test.')
class TestPendingCalls(unittest.TestCase):
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 8bb7d6a4742..e65edb2f8cd 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4160,6 +4160,7 @@ order (MRO) for bases """
('__add__', 'x + y', 'x += y'),
('__sub__', 'x - y', 'x -= y'),
('__mul__', 'x * y', 'x *= y'),
+ ('__matmul__', 'x @ y', 'x @= y'),
('__truediv__', 'operator.truediv(x, y)', None),
('__floordiv__', 'operator.floordiv(x, y)', None),
('__div__', 'x / y', 'x /= y'),
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index bba8820ab1e..a7bad2d2d9d 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -985,6 +985,20 @@ class GrammarTests(unittest.TestCase):
self.assertFalse((False is 2) is 3)
self.assertFalse(False is 2 is 3)
+ def test_matrix_mul(self):
+ # This is not intended to be a comprehensive test, rather just to be few
+ # samples of the @ operator in test_grammar.py.
+ class M:
+ def __matmul__(self, o):
+ return 4
+ def __imatmul__(self, o):
+ self.other = o
+ return self
+ m = M()
+ self.assertEqual(m @ m, 4)
+ m @= 42
+ self.assertEqual(m.other, 42)
+
def test_main():
run_unittest(TokenTests, GrammarTests)
diff --git a/Lib/test/test_operator.py b/Lib/test/test_operator.py
index ab58a98365c..1bd0391ee29 100644
--- a/Lib/test/test_operator.py
+++ b/Lib/test/test_operator.py
@@ -203,6 +203,15 @@ class OperatorTestCase:
self.assertRaises(TypeError, operator.mul, None, None)
self.assertTrue(operator.mul(5, 2) == 10)
+ def test_matmul(self):
+ operator = self.module
+ self.assertRaises(TypeError, operator.matmul)
+ self.assertRaises(TypeError, operator.matmul, 42, 42)
+ class M:
+ def __matmul__(self, other):
+ return other - 1
+ self.assertEqual(M() @ 42, 41)
+
def test_neg(self):
operator = self.module
self.assertRaises(TypeError, operator.neg)
@@ -416,6 +425,7 @@ class OperatorTestCase:
def __ilshift__ (self, other): return "ilshift"
def __imod__ (self, other): return "imod"
def __imul__ (self, other): return "imul"
+ def __imatmul__ (self, other): return "imatmul"
def __ior__ (self, other): return "ior"
def __ipow__ (self, other): return "ipow"
def __irshift__ (self, other): return "irshift"
@@ -430,6 +440,7 @@ class OperatorTestCase:
self.assertEqual(operator.ilshift (c, 5), "ilshift")
self.assertEqual(operator.imod (c, 5), "imod")
self.assertEqual(operator.imul (c, 5), "imul")
+ self.assertEqual(operator.imatmul (c, 5), "imatmul")
self.assertEqual(operator.ior (c, 5), "ior")
self.assertEqual(operator.ipow (c, 5), "ipow")
self.assertEqual(operator.irshift (c, 5), "irshift")
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index b82358ea786..a809fd737fc 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -952,7 +952,7 @@ class SizeofTest(unittest.TestCase):
check(int, s)
# (PyTypeObject + PyNumberMethods + PyMappingMethods +
# PySequenceMethods + PyBufferProcs + 4P)
- s = vsize('P2n15Pl4Pn9Pn11PIP') + struct.calcsize('34P 3P 10P 2P 4P')
+ s = vsize('P2n17Pl4Pn9Pn11PIP') + struct.calcsize('34P 3P 10P 2P 4P')
# Separate block for PyDictKeysObject with 4 entries
s += struct.calcsize("2nPn") + 4*struct.calcsize("n2P")
# class
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
index 38611a79eec..8f74a06df58 100644
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -464,7 +464,7 @@ Additive
Multiplicative
- >>> dump_tokens("x = 1//1*1/5*12%0x12")
+ >>> dump_tokens("x = 1//1*1/5*12%0x12@42")
ENCODING 'utf-8' (0, 0) (0, 0)
NAME 'x' (1, 0) (1, 1)
OP '=' (1, 2) (1, 3)
@@ -479,6 +479,8 @@ Multiplicative
NUMBER '12' (1, 13) (1, 15)
OP '%' (1, 15) (1, 16)
NUMBER '0x12' (1, 16) (1, 20)
+ OP '@' (1, 20) (1, 21)
+ NUMBER '42' (1, 21) (1, 23)
Unary
@@ -1154,6 +1156,7 @@ class TestTokenize(TestCase):
self.assertExactTypeEqual('//', token.DOUBLESLASH)
self.assertExactTypeEqual('//=', token.DOUBLESLASHEQUAL)
self.assertExactTypeEqual('@', token.AT)
+ self.assertExactTypeEqual('@=', token.ATEQUAL)
self.assertExactTypeEqual('a**2+b**2==c**2',
NAME, token.DOUBLESTAR, NUMBER,
diff --git a/Lib/token.py b/Lib/token.py
index 7470c8c3763..bdfcec8ea4b 100644
--- a/Lib/token.py
+++ b/Lib/token.py
@@ -60,11 +60,12 @@ DOUBLESTAREQUAL = 46
DOUBLESLASH = 47
DOUBLESLASHEQUAL = 48
AT = 49
-RARROW = 50
-ELLIPSIS = 51
-OP = 52
-ERRORTOKEN = 53
-N_TOKENS = 54
+ATEQUAL = 50
+RARROW = 51
+ELLIPSIS = 52
+OP = 53
+ERRORTOKEN = 54
+N_TOKENS = 55
NT_OFFSET = 256
#--end constants--
diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index 98e91223fed..742abd19922 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -91,7 +91,8 @@ EXACT_TOKEN_TYPES = {
'**=': DOUBLESTAREQUAL,
'//': DOUBLESLASH,
'//=': DOUBLESLASHEQUAL,
- '@': AT
+ '@': AT,
+ '@=': ATEQUAL,
}
class TokenInfo(collections.namedtuple('TokenInfo', 'type string start end line')):
@@ -150,7 +151,7 @@ String = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'",
# recognized as two instances of =).
Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=",
r"//=?", r"->",
- r"[+\-*/%&|^=<>]=?",
+ r"[+\-*/%&@|^=<>]=?",
r"~")
Bracket = '[][(){}]'
diff --git a/Misc/NEWS b/Misc/NEWS
index 11d036e2635..28324418f66 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@ Release date: TBA
Core and Builtins
-----------------
+- PEP 465 and Issue #21176: Add the '@' operator for matrix multiplication.
+
- Issue #21134: Fix segfault when str is called on an uninitialized
UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object.
diff --git a/Modules/_operator.c b/Modules/_operator.c
index e8bef04f84a..bcc0a0ee5c6 100644
--- a/Modules/_operator.c
+++ b/Modules/_operator.c
@@ -69,6 +69,7 @@ spami(truth , PyObject_IsTrue)
spam2(op_add , PyNumber_Add)
spam2(op_sub , PyNumber_Subtract)
spam2(op_mul , PyNumber_Multiply)
+spam2(op_matmul , PyNumber_MatrixMultiply)
spam2(op_floordiv , PyNumber_FloorDivide)
spam2(op_truediv , PyNumber_TrueDivide)
spam2(op_mod , PyNumber_Remainder)
@@ -86,6 +87,7 @@ spam2(op_or_ , PyNumber_Or)
spam2(op_iadd , PyNumber_InPlaceAdd)
spam2(op_isub , PyNumber_InPlaceSubtract)
spam2(op_imul , PyNumber_InPlaceMultiply)
+spam2(op_imatmul , PyNumber_InPlaceMatrixMultiply)
spam2(op_ifloordiv , PyNumber_InPlaceFloorDivide)
spam2(op_itruediv , PyNumber_InPlaceTrueDivide)
spam2(op_imod , PyNumber_InPlaceRemainder)
@@ -343,6 +345,7 @@ spam2o(index, "index(a) -- Same as a.__index__()")
spam2(add, "add(a, b) -- Same as a + b.")
spam2(sub, "sub(a, b) -- Same as a - b.")
spam2(mul, "mul(a, b) -- Same as a * b.")
+spam2(matmul, "matmul(a, b) -- Same as a @ b.")
spam2(floordiv, "floordiv(a, b) -- Same as a // b.")
spam2(truediv, "truediv(a, b) -- Same as a / b.")
spam2(mod, "mod(a, b) -- Same as a % b.")
@@ -360,6 +363,7 @@ spam2(or_, "or_(a, b) -- Same as a | b.")
spam2(iadd, "a = iadd(a, b) -- Same as a += b.")
spam2(isub, "a = isub(a, b) -- Same as a -= b.")
spam2(imul, "a = imul(a, b) -- Same as a *= b.")
+spam2(imatmul, "a = imatmul(a, b) -- Same as a @= b.")
spam2(ifloordiv, "a = ifloordiv(a, b) -- Same as a //= b.")
spam2(itruediv, "a = itruediv(a, b) -- Same as a /= b")
spam2(imod, "a = imod(a, b) -- Same as a %= b.")
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index db2376d0369..291eee69efb 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -3298,6 +3298,109 @@ static PyTypeObject test_structmembersType = {
};
+typedef struct {
+ PyObject_HEAD
+} matmulObject;
+
+static PyObject *
+matmulType_matmul(PyObject *self, PyObject *other)
+{
+ return Py_BuildValue("(sOO)", "matmul", self, other);
+}
+
+static PyObject *
+matmulType_imatmul(PyObject *self, PyObject *other)
+{
+ return Py_BuildValue("(sOO)", "imatmul", self, other);
+}
+
+static void
+matmulType_dealloc(PyObject *self)
+{
+ return Py_TYPE(self)->tp_free(self);
+}
+
+static PyNumberMethods matmulType_as_number = {
+ 0, /* nb_add */
+ 0, /* nb_subtract */
+ 0, /* nb_multiply */
+ 0, /* nb_remainde r*/
+ 0, /* nb_divmod */
+ 0, /* nb_power */
+ 0, /* nb_negative */
+ 0, /* tp_positive */
+ 0, /* tp_absolute */
+ 0, /* tp_bool */
+ 0, /* nb_invert */
+ 0, /* nb_lshift */
+ 0, /* nb_rshift */
+ 0, /* nb_and */
+ 0, /* nb_xor */
+ 0, /* nb_or */
+ 0, /* nb_int */
+ 0, /* nb_reserved */
+ 0, /* nb_float */
+ 0, /* nb_inplace_add */
+ 0, /* nb_inplace_subtract */
+ 0, /* nb_inplace_multiply */
+ 0, /* nb_inplace_remainder */
+ 0, /* nb_inplace_power */
+ 0, /* nb_inplace_lshift */
+ 0, /* nb_inplace_rshift */
+ 0, /* nb_inplace_and */
+ 0, /* nb_inplace_xor */
+ 0, /* nb_inplace_or */
+ 0, /* nb_floor_divide */
+ 0, /* nb_true_divide */
+ 0, /* nb_inplace_floor_divide */
+ 0, /* nb_inplace_true_divide */
+ 0, /* nb_index */
+ matmulType_matmul, /* nb_matrix_multiply */
+ matmulType_imatmul /* nb_matrix_inplace_multiply */
+};
+
+static PyTypeObject matmulType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "matmulType",
+ sizeof(matmulObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ matmulType_dealloc, /* destructor tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ &matmulType_as_number, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ 0, /* tp_flags */
+ "C level type with matrix operations defined",
+ 0, /* traverseproc tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ PyType_GenericNew, /* tp_new */
+ PyObject_Del, /* tp_free */
+};
+
static struct PyModuleDef _testcapimodule = {
PyModuleDef_HEAD_INIT,
@@ -3327,6 +3430,10 @@ PyInit__testcapi(void)
/* don't use a name starting with "test", since we don't want
test_capi to automatically call this */
PyModule_AddObject(m, "_test_structmembersType", (PyObject *)&test_structmembersType);
+ if (PyType_Ready(&matmulType) < 0)
+ return NULL;
+ Py_INCREF(&matmulType);
+ PyModule_AddObject(m, "matmulType", (PyObject *)&matmulType);
PyModule_AddObject(m, "CHAR_MAX", PyLong_FromLong(CHAR_MAX));
PyModule_AddObject(m, "CHAR_MIN", PyLong_FromLong(CHAR_MIN));
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 38ddb0f3dfe..aeb863487dc 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -932,6 +932,12 @@ PyNumber_Multiply(PyObject *v, PyObject *w)
}
PyObject *
+PyNumber_MatrixMultiply(PyObject *v, PyObject *w)
+{
+ return binary_op(v, w, NB_SLOT(nb_matrix_multiply), "@");
+}
+
+PyObject *
PyNumber_FloorDivide(PyObject *v, PyObject *w)
{
return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
@@ -1012,6 +1018,7 @@ INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
+INPLACE_BINOP(PyNumber_InMatrixMultiply, nb_inplace_matrix_multiply, nb_matrix_multiply, "@=")
PyObject *
PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
@@ -1078,6 +1085,13 @@ PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
}
PyObject *
+PyNumber_InPlaceMatrixMultiply(PyObject *v, PyObject *w)
+{
+ return binary_iop(v, w, NB_SLOT(nb_inplace_matrix_multiply),
+ NB_SLOT(nb_matrix_multiply), "@=");
+}
+
+PyObject *
PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
{
return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index c21b397c04e..6129523afc7 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4469,6 +4469,8 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
COPYNUM(nb_inplace_true_divide);
COPYNUM(nb_inplace_floor_divide);
COPYNUM(nb_index);
+ COPYNUM(nb_matrix_multiply);
+ COPYNUM(nb_inplace_matrix_multiply);
}
if (type->tp_as_sequence != NULL && base->tp_as_sequence != NULL) {
@@ -5605,6 +5607,7 @@ slot_mp_ass_subscript(PyObject *self, PyObject *key, PyObject *value)
SLOT1BIN(slot_nb_add, nb_add, "__add__", "__radd__")
SLOT1BIN(slot_nb_subtract, nb_subtract, "__sub__", "__rsub__")
SLOT1BIN(slot_nb_multiply, nb_multiply, "__mul__", "__rmul__")
+SLOT1BIN(slot_nb_matrix_multiply, nb_matrix_multiply, "__matmul__", "__rmatmul__")
SLOT1BIN(slot_nb_remainder, nb_remainder, "__mod__", "__rmod__")
SLOT1BIN(slot_nb_divmod, nb_divmod, "__divmod__", "__rdivmod__")
@@ -5698,6 +5701,7 @@ SLOT0(slot_nb_float, "__float__")
SLOT1(slot_nb_inplace_add, "__iadd__", PyObject *, "O")
SLOT1(slot_nb_inplace_subtract, "__isub__", PyObject *, "O")
SLOT1(slot_nb_inplace_multiply, "__imul__", PyObject *, "O")
+SLOT1(slot_nb_inplace_matrix_multiply, "__imatmul__", PyObject *, "O")
SLOT1(slot_nb_inplace_remainder, "__imod__", PyObject *, "O")
/* Can't use SLOT1 here, because nb_inplace_power is ternary */
static PyObject *
@@ -6278,6 +6282,12 @@ static slotdef slotdefs[] = {
"__index__($self, /)\n--\n\n"
"Return self converted to an integer, if self is suitable"
"for use as an index into a list."),
+ BINSLOT("__matmul__", nb_matrix_multiply, slot_nb_matrix_multiply,
+ "@"),
+ RBINSLOT("__rmatmul__", nb_matrix_multiply, slot_nb_matrix_multiply,
+ "@"),
+ IBSLOT("__imatmul__", nb_inplace_matrix_multiply, slot_nb_inplace_matrix_multiply,
+ wrap_binaryfunc, "@="),
MPSLOT("__len__", mp_length, slot_mp_length, wrap_lenfunc,
"__len__($self, /)\n--\n\nReturn len(self)."),
MPSLOT("__getitem__", mp_subscript, slot_mp_subscript,
diff --git a/Objects/typeslots.inc b/Objects/typeslots.inc
index caa1e035d67..2ed99d894df 100644
--- a/Objects/typeslots.inc
+++ b/Objects/typeslots.inc
@@ -73,3 +73,5 @@ offsetof(PyHeapTypeObject, ht_type.tp_traverse),
offsetof(PyHeapTypeObject, ht_type.tp_members),
offsetof(PyHeapTypeObject, ht_type.tp_getset),
offsetof(PyHeapTypeObject, ht_type.tp_free),
+offsetof(PyHeapTypeObject, as_number.nb_matrix_multiply),
+offsetof(PyHeapTypeObject, as_number.nb_inplace_matrix_multiply),
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
index debd89edb85..792cab78e65 100644
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -91,7 +91,7 @@ module Python
boolop = And | Or
- operator = Add | Sub | Mult | Div | Mod | Pow | LShift
+ operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift
| RShift | BitOr | BitXor | BitAnd | FloorDiv
unaryop = Invert | Not | UAdd | USub
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 7283058fc88..6aaa4a9d383 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -98,6 +98,7 @@ const char *_PyParser_TokenNames[] = {
"DOUBLESLASH",
"DOUBLESLASHEQUAL",
"AT",
+ "ATEQUAL",
"RARROW",
"ELLIPSIS",
/* This table must match the #defines in token.h! */
@@ -1131,7 +1132,7 @@ PyToken_OneChar(int c)
case '}': return RBRACE;
case '^': return CIRCUMFLEX;
case '~': return TILDE;
- case '@': return AT;
+ case '@': return AT;
default: return OP;
}
}
@@ -1207,6 +1208,11 @@ PyToken_TwoChars(int c1, int c2)
case '=': return CIRCUMFLEXEQUAL;
}
break;
+ case '@':
+ switch (c2) {
+ case '=': return ATEQUAL;
+ }
+ break;
}
return OP;
}
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 44fdafc50ae..994e7213375 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -349,13 +349,14 @@ static PyTypeObject *And_type;
static PyTypeObject *Or_type;
static PyTypeObject *operator_type;
static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
-*Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton,
-*RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton,
-*FloorDiv_singleton;
+*MatMult_singleton, *Div_singleton, *Mod_singleton, *Pow_singleton,
+*LShift_singleton, *RShift_singleton, *BitOr_singleton, *BitXor_singleton,
+*BitAnd_singleton, *FloorDiv_singleton;
static PyObject* ast2obj_operator(operator_ty);
static PyTypeObject *Add_type;
static PyTypeObject *Sub_type;
static PyTypeObject *Mult_type;
+static PyTypeObject *MatMult_type;
static PyTypeObject *Div_type;
static PyTypeObject *Mod_type;
static PyTypeObject *Pow_type;
@@ -970,6 +971,10 @@ static int init_types(void)
if (!Mult_type) return 0;
Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
if (!Mult_singleton) return 0;
+ MatMult_type = make_type("MatMult", operator_type, NULL, 0);
+ if (!MatMult_type) return 0;
+ MatMult_singleton = PyType_GenericNew(MatMult_type, NULL, NULL);
+ if (!MatMult_singleton) return 0;
Div_type = make_type("Div", operator_type, NULL, 0);
if (!Div_type) return 0;
Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
@@ -3232,6 +3237,9 @@ PyObject* ast2obj_operator(operator_ty o)
case Mult:
Py_INCREF(Mult_singleton);
return Mult_singleton;
+ case MatMult:
+ Py_INCREF(MatMult_singleton);
+ return MatMult_singleton;
case Div:
Py_INCREF(Div_singleton);
return Div_singleton;
@@ -6175,6 +6183,14 @@ obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
*out = Mult;
return 0;
}
+ isinstance = PyObject_IsInstance(obj, (PyObject *)MatMult_type);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ *out = MatMult;
+ return 0;
+ }
isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
if (isinstance == -1) {
return 1;
@@ -6956,6 +6972,8 @@ PyInit__ast(void)
if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return NULL;
if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return NULL;
if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return NULL;
+ if (PyDict_SetItemString(d, "MatMult", (PyObject*)MatMult_type) < 0) return
+ NULL;
if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return NULL;
if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return NULL;
if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return NULL;
diff --git a/Python/ast.c b/Python/ast.c
index 5668755346e..d6bddf1192c 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -825,6 +825,8 @@ get_operator(const node *n)
return Sub;
case STAR:
return Mult;
+ case AT:
+ return MatMult;
case SLASH:
return Div;
case DOUBLESLASH:
@@ -1030,6 +1032,8 @@ ast_for_augassign(struct compiling *c, const node *n)
return Pow;
else
return Mult;
+ case '@':
+ return MatMult;
default:
PyErr_Format(PyExc_SystemError, "invalid augassign: %s", STR(n));
return (operator_ty)0;
@@ -2266,7 +2270,7 @@ ast_for_expr(struct compiling *c, const node *n)
and_expr: shift_expr ('&' shift_expr)*
shift_expr: arith_expr (('<<'|'>>') arith_expr)*
arith_expr: term (('+'|'-') term)*
- term: factor (('*'|'/'|'%'|'//') factor)*
+ term: factor (('*'|'@'|'/'|'%'|'//') factor)*
factor: ('+'|'-'|'~') factor | power
power: atom trailer* ('**' factor)*
*/
@@ -2577,7 +2581,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
/* expr_stmt: testlist_star_expr (augassign (yield_expr|testlist)
| ('=' (yield_expr|testlist))*)
testlist_star_expr: (test|star_expr) (',' test|star_expr)* [',']
- augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^='
+ augassign: '+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^='
| '<<=' | '>>=' | '**=' | '//='
test: ... here starts the operator precendence dance
*/
diff --git a/Python/ceval.c b/Python/ceval.c
index 5db88be6207..ab7afa90d5a 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1495,6 +1495,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
DISPATCH();
}
+ TARGET(BINARY_MATRIX_MULTIPLY) {
+ PyObject *right = POP();
+ PyObject *left = TOP();
+ PyObject *res = PyNumber_MatrixMultiply(left, right);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ SET_TOP(res);
+ if (res == NULL)
+ goto error;
+ DISPATCH();
+ }
+
TARGET(BINARY_TRUE_DIVIDE) {
PyObject *divisor = POP();
PyObject *dividend = TOP();
@@ -1685,6 +1697,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
DISPATCH();
}
+ TARGET(INPLACE_MATRIX_MULTIPLY) {
+ PyObject *right = POP();
+ PyObject *left = TOP();
+ PyObject *res = PyNumber_InPlaceMatrixMultiply(left, right);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ SET_TOP(res);
+ if (res == NULL)
+ goto error;
+ DISPATCH();
+ }
+
TARGET(INPLACE_TRUE_DIVIDE) {
PyObject *divisor = POP();
PyObject *dividend = TOP();
diff --git a/Python/compile.c b/Python/compile.c
index 9978eb3a1df..9d3646eb919 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -881,6 +881,7 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg)
case BINARY_POWER:
case BINARY_MULTIPLY:
+ case BINARY_MATRIX_MULTIPLY:
case BINARY_MODULO:
case BINARY_ADD:
case BINARY_SUBTRACT:
@@ -895,6 +896,7 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg)
case INPLACE_ADD:
case INPLACE_SUBTRACT:
case INPLACE_MULTIPLY:
+ case INPLACE_MATRIX_MULTIPLY:
case INPLACE_MODULO:
return -1;
case STORE_SUBSCR:
@@ -2625,6 +2627,8 @@ binop(struct compiler *c, operator_ty op)
return BINARY_SUBTRACT;
case Mult:
return BINARY_MULTIPLY;
+ case MatMult:
+ return BINARY_MATRIX_MULTIPLY;
case Div:
return BINARY_TRUE_DIVIDE;
case Mod:
@@ -2689,6 +2693,8 @@ inplace_binop(struct compiler *c, operator_ty op)
return INPLACE_SUBTRACT;
case Mult:
return INPLACE_MULTIPLY;
+ case MatMult:
+ return INPLACE_MATRIX_MULTIPLY;
case Div:
return INPLACE_TRUE_DIVIDE;
case Mod:
diff --git a/Python/graminit.c b/Python/graminit.c
index e04999bbff2..9f79d593f55 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -476,7 +476,7 @@ static state states_16[3] = {
{2, arcs_16_1},
{3, arcs_16_2},
};
-static arc arcs_17_0[12] = {
+static arc arcs_17_0[13] = {
{49, 1},
{50, 1},
{51, 1},
@@ -489,19 +489,20 @@ static arc arcs_17_0[12] = {
{58, 1},
{59, 1},
{60, 1},
+ {61, 1},
};
static arc arcs_17_1[1] = {
{0, 1},
};
static state states_17[2] = {
- {12, arcs_17_0},
+ {13, arcs_17_0},
{1, arcs_17_1},
};
static arc arcs_18_0[1] = {
- {61, 1},
+ {62, 1},
};
static arc arcs_18_1[1] = {
- {62, 2},
+ {63, 2},
};
static arc arcs_18_2[1] = {
{0, 2},
@@ -512,7 +513,7 @@ static state states_18[3] = {
{1, arcs_18_2},
};
static arc arcs_19_0[1] = {
- {63, 1},
+ {64, 1},
};
static arc arcs_19_1[1] = {
{0, 1},
@@ -522,11 +523,11 @@ static state states_19[2] = {
{1, arcs_19_1},
};
static arc arcs_20_0[5] = {
- {64, 1},
{65, 1},
{66, 1},
{67, 1},
{68, 1},
+ {69, 1},
};
static arc arcs_20_1[1] = {
{0, 1},
@@ -536,7 +537,7 @@ static state states_20[2] = {
{1, arcs_20_1},
};
static arc arcs_21_0[1] = {
- {69, 1},
+ {70, 1},
};
static arc arcs_21_1[1] = {
{0, 1},
@@ -546,7 +547,7 @@ static state states_21[2] = {
{1, arcs_21_1},
};
static arc arcs_22_0[1] = {
- {70, 1},
+ {71, 1},
};
static arc arcs_22_1[1] = {
{0, 1},
@@ -556,7 +557,7 @@ static state states_22[2] = {
{1, arcs_22_1},
};
static arc arcs_23_0[1] = {
- {71, 1},
+ {72, 1},
};
static arc arcs_23_1[2] = {
{9, 2},
@@ -581,14 +582,14 @@ static state states_24[2] = {
{1, arcs_24_1},
};
static arc arcs_25_0[1] = {
- {72, 1},
+ {73, 1},
};
static arc arcs_25_1[2] = {
{24, 2},
{0, 1},
};
static arc arcs_25_2[2] = {
- {73, 3},
+ {74, 3},
{0, 2},
};
static arc arcs_25_3[1] = {
@@ -605,8 +606,8 @@ static state states_25[5] = {
{1, arcs_25_4},
};
static arc arcs_26_0[2] = {
- {74, 1},
{75, 1},
+ {76, 1},
};
static arc arcs_26_1[1] = {
{0, 1},
@@ -616,10 +617,10 @@ static state states_26[2] = {
{1, arcs_26_1},
};
static arc arcs_27_0[1] = {
- {76, 1},
+ {77, 1},
};
static arc arcs_27_1[1] = {
- {77, 2},
+ {78, 2},
};
static arc arcs_27_2[1] = {
{0, 2},
@@ -630,32 +631,32 @@ static state states_27[3] = {
{1, arcs_27_2},
};
static arc arcs_28_0[1] = {
- {73, 1},
+ {74, 1},
};
static arc arcs_28_1[3] = {
- {78, 2},
{79, 2},
+ {80, 2},
{12, 3},
};
static arc arcs_28_2[4] = {
- {78, 2},
{79, 2},
+ {80, 2},
{12, 3},
- {76, 4},
+ {77, 4},
};
static arc arcs_28_3[1] = {
- {76, 4},
+ {77, 4},
};
static arc arcs_28_4[3] = {
{31, 5},
{13, 6},
- {80, 5},
+ {81, 5},
};
static arc arcs_28_5[1] = {
{0, 5},
};
static arc arcs_28_6[1] = {
- {80, 7},
+ {81, 7},
};
static arc arcs_28_7[1] = {
{15, 5},
@@ -674,7 +675,7 @@ static arc arcs_29_0[1] = {
{21, 1},
};
static arc arcs_29_1[2] = {
- {82, 2},
+ {83, 2},
{0, 1},
};
static arc arcs_29_2[1] = {
@@ -693,7 +694,7 @@ static arc arcs_30_0[1] = {
{12, 1},
};
static arc arcs_30_1[2] = {
- {82, 2},
+ {83, 2},
{0, 1},
};
static arc arcs_30_2[1] = {
@@ -709,14 +710,14 @@ static state states_30[4] = {
{1, arcs_30_3},
};
static arc arcs_31_0[1] = {
- {81, 1},
+ {82, 1},
};
static arc arcs_31_1[2] = {
{30, 2},
{0, 1},
};
static arc arcs_31_2[2] = {
- {81, 1},
+ {82, 1},
{0, 2},
};
static state states_31[3] = {
@@ -725,7 +726,7 @@ static state states_31[3] = {
{2, arcs_31_2},
};
static arc arcs_32_0[1] = {
- {83, 1},
+ {84, 1},
};
static arc arcs_32_1[2] = {
{30, 0},
@@ -739,7 +740,7 @@ static arc arcs_33_0[1] = {
{21, 1},
};
static arc arcs_33_1[2] = {
- {78, 0},
+ {79, 0},
{0, 1},
};
static state states_33[2] = {
@@ -747,7 +748,7 @@ static state states_33[2] = {
{2, arcs_33_1},
};
static arc arcs_34_0[1] = {
- {84, 1},
+ {85, 1},
};
static arc arcs_34_1[1] = {
{21, 2},
@@ -762,7 +763,7 @@ static state states_34[3] = {
{2, arcs_34_2},
};
static arc arcs_35_0[1] = {
- {85, 1},
+ {86, 1},
};
static arc arcs_35_1[1] = {
{21, 2},
@@ -777,7 +778,7 @@ static state states_35[3] = {
{2, arcs_35_2},
};
static arc arcs_36_0[1] = {
- {86, 1},
+ {87, 1},
};
static arc arcs_36_1[1] = {
{24, 2},
@@ -800,11 +801,11 @@ static state states_36[5] = {
{1, arcs_36_4},
};
static arc arcs_37_0[8] = {
- {87, 1},
{88, 1},
{89, 1},
{90, 1},
{91, 1},
+ {92, 1},
{19, 1},
{18, 1},
{17, 1},
@@ -817,7 +818,7 @@ static state states_37[2] = {
{1, arcs_37_1},
};
static arc arcs_38_0[1] = {
- {92, 1},
+ {93, 1},
};
static arc arcs_38_1[1] = {
{24, 2},
@@ -829,8 +830,8 @@ static arc arcs_38_3[1] = {
{26, 4},
};
static arc arcs_38_4[3] = {
- {93, 1},
- {94, 5},
+ {94, 1},
+ {95, 5},
{0, 4},
};
static arc arcs_38_5[1] = {
@@ -853,7 +854,7 @@ static state states_38[8] = {
{1, arcs_38_7},
};
static arc arcs_39_0[1] = {
- {95, 1},
+ {96, 1},
};
static arc arcs_39_1[1] = {
{24, 2},
@@ -865,7 +866,7 @@ static arc arcs_39_3[1] = {
{26, 4},
};
static arc arcs_39_4[2] = {
- {94, 5},
+ {95, 5},
{0, 4},
};
static arc arcs_39_5[1] = {
@@ -888,13 +889,13 @@ static state states_39[8] = {
{1, arcs_39_7},
};
static arc arcs_40_0[1] = {
- {96, 1},
+ {97, 1},
};
static arc arcs_40_1[1] = {
- {62, 2},
+ {63, 2},
};
static arc arcs_40_2[1] = {
- {97, 3},
+ {98, 3},
};
static arc arcs_40_3[1] = {
{9, 4},
@@ -906,7 +907,7 @@ static arc arcs_40_5[1] = {
{26, 6},
};
static arc arcs_40_6[2] = {
- {94, 7},
+ {95, 7},
{0, 6},
};
static arc arcs_40_7[1] = {
@@ -931,7 +932,7 @@ static state states_40[10] = {
{1, arcs_40_9},
};
static arc arcs_41_0[1] = {
- {98, 1},
+ {99, 1},
};
static arc arcs_41_1[1] = {
{25, 2},
@@ -940,8 +941,8 @@ static arc arcs_41_2[1] = {
{26, 3},
};
static arc arcs_41_3[2] = {
- {99, 4},
- {100, 5},
+ {100, 4},
+ {101, 5},
};
static arc arcs_41_4[1] = {
{25, 6},
@@ -956,9 +957,9 @@ static arc arcs_41_7[1] = {
{26, 9},
};
static arc arcs_41_8[4] = {
- {99, 4},
- {94, 10},
- {100, 5},
+ {100, 4},
+ {95, 10},
+ {101, 5},
{0, 8},
};
static arc arcs_41_9[1] = {
@@ -971,7 +972,7 @@ static arc arcs_41_11[1] = {
{26, 12},
};
static arc arcs_41_12[2] = {
- {100, 5},
+ {101, 5},
{0, 12},
};
static state states_41[13] = {
@@ -990,10 +991,10 @@ static state states_41[13] = {
{2, arcs_41_12},
};
static arc arcs_42_0[1] = {
- {101, 1},
+ {102, 1},
};
static arc arcs_42_1[1] = {
- {102, 2},
+ {103, 2},
};
static arc arcs_42_2[2] = {
{30, 1},
@@ -1016,11 +1017,11 @@ static arc arcs_43_0[1] = {
{24, 1},
};
static arc arcs_43_1[2] = {
- {82, 2},
+ {83, 2},
{0, 1},
};
static arc arcs_43_2[1] = {
- {103, 3},
+ {104, 3},
};
static arc arcs_43_3[1] = {
{0, 3},
@@ -1032,14 +1033,14 @@ static state states_43[4] = {
{1, arcs_43_3},
};
static arc arcs_44_0[1] = {
- {104, 1},
+ {105, 1},
};
static arc arcs_44_1[2] = {
{24, 2},
{0, 1},
};
static arc arcs_44_2[2] = {
- {82, 3},
+ {83, 3},
{0, 2},
};
static arc arcs_44_3[1] = {
@@ -1063,14 +1064,14 @@ static arc arcs_45_1[1] = {
{0, 1},
};
static arc arcs_45_2[1] = {
- {105, 3},
+ {106, 3},
};
static arc arcs_45_3[1] = {
{6, 4},
};
static arc arcs_45_4[2] = {
{6, 4},
- {106, 1},
+ {107, 1},
};
static state states_45[5] = {
{2, arcs_45_0},
@@ -1080,21 +1081,21 @@ static state states_45[5] = {
{2, arcs_45_4},
};
static arc arcs_46_0[2] = {
- {107, 1},
- {108, 2},
+ {108, 1},
+ {109, 2},
};
static arc arcs_46_1[2] = {
- {92, 3},
+ {93, 3},
{0, 1},
};
static arc arcs_46_2[1] = {
{0, 2},
};
static arc arcs_46_3[1] = {
- {107, 4},
+ {108, 4},
};
static arc arcs_46_4[1] = {
- {94, 5},
+ {95, 5},
};
static arc arcs_46_5[1] = {
{24, 2},
@@ -1108,8 +1109,8 @@ static state states_46[6] = {
{1, arcs_46_5},
};
static arc arcs_47_0[2] = {
- {107, 1},
- {110, 1},
+ {108, 1},
+ {111, 1},
};
static arc arcs_47_1[1] = {
{0, 1},
@@ -1119,7 +1120,7 @@ static state states_47[2] = {
{1, arcs_47_1},
};
static arc arcs_48_0[1] = {
- {111, 1},
+ {112, 1},
};
static arc arcs_48_1[2] = {
{33, 2},
@@ -1142,7 +1143,7 @@ static state states_48[5] = {
{1, arcs_48_4},
};
static arc arcs_49_0[1] = {
- {111, 1},
+ {112, 1},
};
static arc arcs_49_1[2] = {
{33, 2},
@@ -1152,7 +1153,7 @@ static arc arcs_49_2[1] = {
{25, 3},
};
static arc arcs_49_3[1] = {
- {109, 4},
+ {110, 4},
};
static arc arcs_49_4[1] = {
{0, 4},
@@ -1165,10 +1166,10 @@ static state states_49[5] = {
{1, arcs_49_4},
};
static arc arcs_50_0[1] = {
- {112, 1},
+ {113, 1},
};
static arc arcs_50_1[2] = {
- {113, 0},
+ {114, 0},
{0, 1},
};
static state states_50[2] = {
@@ -1176,10 +1177,10 @@ static state states_50[2] = {
{2, arcs_50_1},
};
static arc arcs_51_0[1] = {
- {114, 1},
+ {115, 1},
};
static arc arcs_51_1[2] = {
- {115, 0},
+ {116, 0},
{0, 1},
};
static state states_51[2] = {
@@ -1187,11 +1188,11 @@ static state states_51[2] = {
{2, arcs_51_1},
};
static arc arcs_52_0[2] = {
- {116, 1},
- {117, 2},
+ {117, 1},
+ {118, 2},
};
static arc arcs_52_1[1] = {
- {114, 2},
+ {115, 2},
};
static arc arcs_52_2[1] = {
{0, 2},
@@ -1202,10 +1203,10 @@ static state states_52[3] = {
{1, arcs_52_2},
};
static arc arcs_53_0[1] = {
- {103, 1},
+ {104, 1},
};
static arc arcs_53_1[2] = {
- {118, 0},
+ {119, 0},
{0, 1},
};
static state states_53[2] = {
@@ -1213,25 +1214,25 @@ static state states_53[2] = {
{2, arcs_53_1},
};
static arc arcs_54_0[10] = {
- {119, 1},
{120, 1},
{121, 1},
{122, 1},
{123, 1},
{124, 1},
{125, 1},
- {97, 1},
- {116, 2},
- {126, 3},
+ {126, 1},
+ {98, 1},
+ {117, 2},
+ {127, 3},
};
static arc arcs_54_1[1] = {
{0, 1},
};
static arc arcs_54_2[1] = {
- {97, 1},
+ {98, 1},
};
static arc arcs_54_3[2] = {
- {116, 1},
+ {117, 1},
{0, 3},
};
static state states_54[4] = {
@@ -1244,7 +1245,7 @@ static arc arcs_55_0[1] = {
{31, 1},
};
static arc arcs_55_1[1] = {
- {103, 2},
+ {104, 2},
};
static arc arcs_55_2[1] = {
{0, 2},
@@ -1255,10 +1256,10 @@ static state states_55[3] = {
{1, arcs_55_2},
};
static arc arcs_56_0[1] = {
- {127, 1},
+ {128, 1},
};
static arc arcs_56_1[2] = {
- {128, 0},
+ {129, 0},
{0, 1},
};
static state states_56[2] = {
@@ -1266,10 +1267,10 @@ static state states_56[2] = {
{2, arcs_56_1},
};
static arc arcs_57_0[1] = {
- {129, 1},
+ {130, 1},
};
static arc arcs_57_1[2] = {
- {130, 0},
+ {131, 0},
{0, 1},
};
static state states_57[2] = {
@@ -1277,10 +1278,10 @@ static state states_57[2] = {
{2, arcs_57_1},
};
static arc arcs_58_0[1] = {
- {131, 1},
+ {132, 1},
};
static arc arcs_58_1[2] = {
- {132, 0},
+ {133, 0},
{0, 1},
};
static state states_58[2] = {
@@ -1288,11 +1289,11 @@ static state states_58[2] = {
{2, arcs_58_1},
};
static arc arcs_59_0[1] = {
- {133, 1},
+ {134, 1},
};
static arc arcs_59_1[3] = {
- {134, 0},
{135, 0},
+ {136, 0},
{0, 1},
};
static state states_59[2] = {
@@ -1300,11 +1301,11 @@ static state states_59[2] = {
{3, arcs_59_1},
};
static arc arcs_60_0[1] = {
- {136, 1},
+ {137, 1},
};
static arc arcs_60_1[3] = {
- {137, 0},
{138, 0},
+ {139, 0},
{0, 1},
};
static state states_60[2] = {
@@ -1312,27 +1313,28 @@ static state states_60[2] = {
{3, arcs_60_1},
};
static arc arcs_61_0[1] = {
- {139, 1},
+ {140, 1},
};
-static arc arcs_61_1[5] = {
+static arc arcs_61_1[6] = {
{31, 0},
- {140, 0},
+ {11, 0},
{141, 0},
{142, 0},
+ {143, 0},
{0, 1},
};
static state states_61[2] = {
{1, arcs_61_0},
- {5, arcs_61_1},
+ {6, arcs_61_1},
};
static arc arcs_62_0[4] = {
- {137, 1},
{138, 1},
- {143, 1},
- {144, 2},
+ {139, 1},
+ {144, 1},
+ {145, 2},
};
static arc arcs_62_1[1] = {
- {139, 2},
+ {140, 2},
};
static arc arcs_62_2[1] = {
{0, 2},
@@ -1343,15 +1345,15 @@ static state states_62[3] = {
{1, arcs_62_2},
};
static arc arcs_63_0[1] = {
- {145, 1},
+ {146, 1},
};
static arc arcs_63_1[3] = {
- {146, 1},
+ {147, 1},
{32, 2},
{0, 1},
};
static arc arcs_63_2[1] = {
- {139, 3},
+ {140, 3},
};
static arc arcs_63_3[1] = {
{0, 3},
@@ -1364,44 +1366,44 @@ static state states_63[4] = {
};
static arc arcs_64_0[10] = {
{13, 1},
- {148, 2},
- {150, 3},
+ {149, 2},
+ {151, 3},
{21, 4},
- {153, 4},
- {154, 5},
- {79, 4},
- {155, 4},
+ {154, 4},
+ {155, 5},
+ {80, 4},
{156, 4},
{157, 4},
+ {158, 4},
};
static arc arcs_64_1[3] = {
{47, 6},
- {147, 6},
+ {148, 6},
{15, 4},
};
static arc arcs_64_2[2] = {
- {147, 7},
- {149, 4},
+ {148, 7},
+ {150, 4},
};
static arc arcs_64_3[2] = {
- {151, 8},
- {152, 4},
+ {152, 8},
+ {153, 4},
};
static arc arcs_64_4[1] = {
{0, 4},
};
static arc arcs_64_5[2] = {
- {154, 5},
+ {155, 5},
{0, 5},
};
static arc arcs_64_6[1] = {
{15, 4},
};
static arc arcs_64_7[1] = {
- {149, 4},
+ {150, 4},
};
static arc arcs_64_8[1] = {
- {152, 4},
+ {153, 4},
};
static state states_64[9] = {
{10, arcs_64_0},
@@ -1419,7 +1421,7 @@ static arc arcs_65_0[2] = {
{48, 1},
};
static arc arcs_65_1[3] = {
- {158, 2},
+ {159, 2},
{30, 3},
{0, 1},
};
@@ -1444,15 +1446,15 @@ static state states_65[5] = {
};
static arc arcs_66_0[3] = {
{13, 1},
- {148, 2},
- {78, 3},
+ {149, 2},
+ {79, 3},
};
static arc arcs_66_1[2] = {
{14, 4},
{15, 5},
};
static arc arcs_66_2[1] = {
- {159, 6},
+ {160, 6},
};
static arc arcs_66_3[1] = {
{21, 5},
@@ -1464,7 +1466,7 @@ static arc arcs_66_5[1] = {
{0, 5},
};
static arc arcs_66_6[1] = {
- {149, 5},
+ {150, 5},
};
static state states_66[7] = {
{3, arcs_66_0},
@@ -1476,14 +1478,14 @@ static state states_66[7] = {
{1, arcs_66_6},
};
static arc arcs_67_0[1] = {
- {160, 1},
+ {161, 1},
};
static arc arcs_67_1[2] = {
{30, 2},
{0, 1},
};
static arc arcs_67_2[2] = {
- {160, 1},
+ {161, 1},
{0, 2},
};
static state states_67[3] = {
@@ -1501,11 +1503,11 @@ static arc arcs_68_1[2] = {
};
static arc arcs_68_2[3] = {
{24, 3},
- {161, 4},
+ {162, 4},
{0, 2},
};
static arc arcs_68_3[2] = {
- {161, 4},
+ {162, 4},
{0, 3},
};
static arc arcs_68_4[1] = {
@@ -1534,7 +1536,7 @@ static state states_69[3] = {
{1, arcs_69_2},
};
static arc arcs_70_0[2] = {
- {103, 1},
+ {104, 1},
{48, 1},
};
static arc arcs_70_1[2] = {
@@ -1542,7 +1544,7 @@ static arc arcs_70_1[2] = {
{0, 1},
};
static arc arcs_70_2[3] = {
- {103, 1},
+ {104, 1},
{48, 1},
{0, 2},
};
@@ -1572,7 +1574,7 @@ static arc arcs_72_0[1] = {
};
static arc arcs_72_1[4] = {
{25, 2},
- {158, 3},
+ {159, 3},
{30, 4},
{0, 1},
};
@@ -1587,7 +1589,7 @@ static arc arcs_72_4[2] = {
{0, 4},
};
static arc arcs_72_5[3] = {
- {158, 3},
+ {159, 3},
{30, 7},
{0, 5},
};
@@ -1623,7 +1625,7 @@ static state states_72[11] = {
{2, arcs_72_10},
};
static arc arcs_73_0[1] = {
- {162, 1},
+ {163, 1},
};
static arc arcs_73_1[1] = {
{21, 2},
@@ -1659,7 +1661,7 @@ static state states_73[8] = {
{1, arcs_73_7},
};
static arc arcs_74_0[3] = {
- {163, 1},
+ {164, 1},
{31, 2},
{32, 3},
};
@@ -1674,7 +1676,7 @@ static arc arcs_74_3[1] = {
{24, 6},
};
static arc arcs_74_4[4] = {
- {163, 1},
+ {164, 1},
{31, 2},
{32, 3},
{0, 4},
@@ -1687,7 +1689,7 @@ static arc arcs_74_6[1] = {
{0, 6},
};
static arc arcs_74_7[2] = {
- {163, 5},
+ {164, 5},
{32, 3},
};
static state states_74[8] = {
@@ -1704,7 +1706,7 @@ static arc arcs_75_0[1] = {
{24, 1},
};
static arc arcs_75_1[3] = {
- {158, 2},
+ {159, 2},
{29, 3},
{0, 1},
};
@@ -1721,8 +1723,8 @@ static state states_75[4] = {
{1, arcs_75_3},
};
static arc arcs_76_0[2] = {
- {158, 1},
- {165, 1},
+ {159, 1},
+ {166, 1},
};
static arc arcs_76_1[1] = {
{0, 1},
@@ -1732,19 +1734,19 @@ static state states_76[2] = {
{1, arcs_76_1},
};
static arc arcs_77_0[1] = {
- {96, 1},
+ {97, 1},
};
static arc arcs_77_1[1] = {
- {62, 2},
+ {63, 2},
};
static arc arcs_77_2[1] = {
- {97, 3},
+ {98, 3},
};
static arc arcs_77_3[1] = {
- {107, 4},
+ {108, 4},
};
static arc arcs_77_4[2] = {
- {164, 5},
+ {165, 5},
{0, 4},
};
static arc arcs_77_5[1] = {
@@ -1759,13 +1761,13 @@ static state states_77[6] = {
{1, arcs_77_5},
};
static arc arcs_78_0[1] = {
- {92, 1},
+ {93, 1},
};
static arc arcs_78_1[1] = {
- {109, 2},
+ {110, 2},
};
static arc arcs_78_2[2] = {
- {164, 3},
+ {165, 3},
{0, 2},
};
static arc arcs_78_3[1] = {
@@ -1788,10 +1790,10 @@ static state states_79[2] = {
{1, arcs_79_1},
};
static arc arcs_80_0[1] = {
- {167, 1},
+ {168, 1},
};
static arc arcs_80_1[2] = {
- {168, 2},
+ {169, 2},
{0, 1},
};
static arc arcs_80_2[1] = {
@@ -1803,7 +1805,7 @@ static state states_80[3] = {
{1, arcs_80_2},
};
static arc arcs_81_0[2] = {
- {73, 1},
+ {74, 1},
{9, 2},
};
static arc arcs_81_1[1] = {
@@ -1819,11 +1821,11 @@ static state states_81[3] = {
};
static dfa dfas[82] = {
{256, "single_input", 0, 3, states_0,
- "\004\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"},
+ "\004\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
{257, "file_input", 0, 2, states_1,
- "\204\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"},
+ "\204\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
{258, "eval_input", 0, 3, states_2,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{259, "decorator", 0, 7, states_3,
"\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{260, "decorators", 0, 2, states_4,
@@ -1843,39 +1845,39 @@ static dfa dfas[82] = {
{267, "vfpdef", 0, 2, states_11,
"\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{268, "stmt", 0, 2, states_12,
- "\000\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"},
+ "\000\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
{269, "simple_stmt", 0, 4, states_13,
- "\000\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"},
+ "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
{270, "small_stmt", 0, 2, states_14,
- "\000\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"},
+ "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
{271, "expr_stmt", 0, 6, states_15,
- "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{272, "testlist_star_expr", 0, 3, states_16,
- "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{273, "augassign", 0, 2, states_17,
- "\000\000\000\000\000\000\376\037\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\376\077\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{274, "del_stmt", 0, 3, states_18,
- "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{275, "pass_stmt", 0, 2, states_19,
- "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{276, "flow_stmt", 0, 2, states_20,
- "\000\000\000\000\000\000\000\000\340\001\000\000\000\000\000\000\000\000\000\000\200\000"},
+ "\000\000\000\000\000\000\000\000\300\003\000\000\000\000\000\000\000\000\000\000\000\001"},
{277, "break_stmt", 0, 2, states_21,
- "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"},
- {278, "continue_stmt", 0, 2, states_22,
"\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000"},
- {279, "return_stmt", 0, 3, states_23,
+ {278, "continue_stmt", 0, 2, states_22,
"\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ {279, "return_stmt", 0, 3, states_23,
+ "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
{280, "yield_stmt", 0, 2, states_24,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
{281, "raise_stmt", 0, 5, states_25,
- "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
{282, "import_stmt", 0, 2, states_26,
- "\000\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\000\000\000\000\000\000\000"},
{283, "import_name", 0, 3, states_27,
- "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
{284, "import_from", 0, 8, states_28,
- "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
{285, "import_as_name", 0, 4, states_29,
"\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{286, "dotted_as_name", 0, 4, states_30,
@@ -1887,103 +1889,103 @@ static dfa dfas[82] = {
{289, "dotted_name", 0, 2, states_33,
"\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{290, "global_stmt", 0, 3, states_34,
- "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000"},
- {291, "nonlocal_stmt", 0, 3, states_35,
"\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
- {292, "assert_stmt", 0, 5, states_36,
+ {291, "nonlocal_stmt", 0, 3, states_35,
"\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+ {292, "assert_stmt", 0, 5, states_36,
+ "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
{293, "compound_stmt", 0, 2, states_37,
- "\000\010\020\000\000\000\000\000\000\000\000\220\045\000\000\000\000\000\000\000\004\000"},
+ "\000\010\020\000\000\000\000\000\000\000\000\040\113\000\000\000\000\000\000\000\010\000"},
{294, "if_stmt", 0, 8, states_38,
- "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
{295, "while_stmt", 0, 8, states_39,
- "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
- {296, "for_stmt", 0, 10, states_40,
"\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+ {296, "for_stmt", 0, 10, states_40,
+ "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
{297, "try_stmt", 0, 13, states_41,
- "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
{298, "with_stmt", 0, 5, states_42,
- "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
{299, "with_item", 0, 4, states_43,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{300, "except_clause", 0, 5, states_44,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
{301, "suite", 0, 5, states_45,
- "\004\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"},
+ "\004\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
{302, "test", 0, 6, states_46,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{303, "test_nocond", 0, 2, states_47,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{304, "lambdef", 0, 5, states_48,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
{305, "lambdef_nocond", 0, 5, states_49,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
{306, "or_test", 0, 2, states_50,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
{307, "and_test", 0, 2, states_51,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
{308, "not_test", 0, 3, states_52,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
{309, "comparison", 0, 2, states_53,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{310, "comp_op", 0, 4, states_54,
- "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\220\177\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\040\377\000\000\000\000\000\000"},
{311, "star_expr", 0, 3, states_55,
"\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{312, "expr", 0, 2, states_56,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{313, "xor_expr", 0, 2, states_57,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{314, "and_expr", 0, 2, states_58,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{315, "shift_expr", 0, 2, states_59,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{316, "arith_expr", 0, 2, states_60,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{317, "term", 0, 2, states_61,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{318, "factor", 0, 3, states_62,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{319, "power", 0, 4, states_63,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"},
{320, "atom", 0, 9, states_64,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"},
{321, "testlist_comp", 0, 5, states_65,
- "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{322, "trailer", 0, 7, states_66,
- "\000\040\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\020\000\000\000"},
+ "\000\040\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\040\000\000\000"},
{323, "subscriptlist", 0, 3, states_67,
- "\000\040\040\002\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{324, "subscript", 0, 5, states_68,
- "\000\040\040\002\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{325, "sliceop", 0, 3, states_69,
"\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{326, "exprlist", 0, 3, states_70,
- "\000\040\040\200\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"},
+ "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
{327, "testlist", 0, 3, states_71,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{328, "dictorsetmaker", 0, 11, states_72,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{329, "classdef", 0, 8, states_73,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000"},
{330, "arglist", 0, 8, states_74,
- "\000\040\040\200\001\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\200\001\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{331, "argument", 0, 4, states_75,
- "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
{332, "comp_iter", 0, 2, states_76,
- "\000\000\000\000\000\000\000\000\000\000\000\020\001\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000\000"},
{333, "comp_for", 0, 6, states_77,
- "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
{334, "comp_if", 0, 4, states_78,
- "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
{335, "encoding_decl", 0, 2, states_79,
"\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{336, "yield_expr", 0, 3, states_80,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
{337, "yield_arg", 0, 3, states_81,
- "\000\040\040\000\000\000\000\000\000\202\000\000\000\200\020\000\000\206\120\076\000\000"},
+ "\000\040\040\000\000\000\000\000\000\004\001\000\000\000\041\000\000\014\241\174\000\000"},
};
-static label labels[169] = {
+static label labels[170] = {
{0, "EMPTY"},
{256, 0},
{4, 0},
@@ -2007,7 +2009,7 @@ static label labels[169] = {
{1, "def"},
{1, 0},
{263, 0},
- {50, 0},
+ {51, 0},
{302, 0},
{11, 0},
{301, 0},
@@ -2036,6 +2038,7 @@ static label labels[169] = {
{36, 0},
{37, 0},
{38, 0},
+ {50, 0},
{39, 0},
{40, 0},
{41, 0},
@@ -2063,7 +2066,7 @@ static label labels[169] = {
{1, "import"},
{288, 0},
{23, 0},
- {51, 0},
+ {52, 0},
{287, 0},
{285, 0},
{1, "as"},
@@ -2157,6 +2160,6 @@ static label labels[169] = {
grammar _PyParser_Grammar = {
82,
dfas,
- {169, labels},
+ {170, labels},
256
};
diff --git a/Python/importlib.h b/Python/importlib.h
index 2644b1d94e3..a97af194de8 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -702,7 +702,7 @@ const unsigned char _Py_M__importlib[] = {
5,0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,
95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,57,
1,0,0,115,2,0,0,0,0,8,114,114,0,0,0,105,
- 238,12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,
+ 248,12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,
0,0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,
95,95,122,3,46,112,121,122,4,46,112,121,99,122,4,46,
112,121,111,78,99,2,0,0,0,0,0,0,0,11,0,0,
@@ -771,7 +771,7 @@ const unsigned char _Py_M__importlib[] = {
3,116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,
97,99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,
- 181,1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,
+ 182,1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,
2,6,1,18,1,24,1,12,1,12,1,15,1,31,1,114,
132,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,
0,5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,
@@ -828,7 +828,7 @@ const unsigned char _Py_M__importlib[] = {
95,102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,
104,101,114,129,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,
- 114,111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,
+ 114,111,109,95,99,97,99,104,101,209,1,0,0,115,24,0,
0,0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,
24,1,21,1,3,1,21,1,19,1,114,135,0,0,0,99,
1,0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,
@@ -865,7 +865,7 @@ const unsigned char _Py_M__importlib[] = {
105,111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
15,95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,
- 231,1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,
+ 232,1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,
1,35,1,4,1,3,1,16,1,19,1,21,1,114,142,0,
0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,
0,0,0,67,0,0,0,115,60,0,0,0,121,19,0,116,
@@ -880,7 +880,7 @@ const unsigned char _Py_M__importlib[] = {
114,41,0,0,0,114,40,0,0,0,41,2,114,35,0,0,
0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,218,10,95,99,97,108,99,95,109,111,100,
- 101,250,1,0,0,115,12,0,0,0,0,2,3,1,19,1,
+ 101,251,1,0,0,115,12,0,0,0,0,2,3,1,19,1,
13,1,11,3,10,1,114,144,0,0,0,218,9,118,101,114,
98,111,115,105,116,121,114,29,0,0,0,99,1,0,0,0,
1,0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,
@@ -901,7 +901,7 @@ const unsigned char _Py_M__importlib[] = {
6,115,116,100,101,114,114,41,3,218,7,109,101,115,115,97,
103,101,114,145,0,0,0,114,80,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,16,95,118,101,
- 114,98,111,115,101,95,109,101,115,115,97,103,101,6,2,0,
+ 114,98,111,115,101,95,109,101,115,115,97,103,101,7,2,0,
0,115,8,0,0,0,0,2,18,1,15,1,13,1,114,152,
0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,
4,0,0,0,3,0,0,0,115,38,0,0,0,100,1,0,
@@ -937,14 +937,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,80,0,0,0,114,108,0,0,0,41,1,218,6,
109,101,116,104,111,100,114,4,0,0,0,114,5,0,0,0,
218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,
- 97,112,112,101,114,22,2,0,0,115,10,0,0,0,0,1,
+ 97,112,112,101,114,23,2,0,0,115,10,0,0,0,0,1,
12,1,12,1,15,1,25,1,122,40,95,99,104,101,99,107,
95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,
99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,
101,114,41,1,114,65,0,0,0,41,2,114,154,0,0,0,
114,155,0,0,0,114,4,0,0,0,41,1,114,154,0,0,
0,114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,
- 97,109,101,14,2,0,0,115,6,0,0,0,0,8,21,6,
+ 97,109,101,15,2,0,0,115,6,0,0,0,0,8,21,6,
13,1,114,156,0,0,0,99,1,0,0,0,0,0,0,0,
2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,
0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,
@@ -966,7 +966,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,218,8,102,117,108,108,110,97,109,101,41,1,218,3,
102,120,110,114,4,0,0,0,114,5,0,0,0,218,25,95,
114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,
- 95,119,114,97,112,112,101,114,34,2,0,0,115,8,0,0,
+ 95,119,114,97,112,112,101,114,35,2,0,0,115,8,0,0,
0,0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,
105,114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,
99,97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,
@@ -974,7 +974,7 @@ const unsigned char _Py_M__importlib[] = {
1,114,65,0,0,0,41,2,114,159,0,0,0,114,160,0,
0,0,114,4,0,0,0,41,1,114,159,0,0,0,114,5,
0,0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,
- 117,105,108,116,105,110,32,2,0,0,115,6,0,0,0,0,
+ 117,105,108,116,105,110,33,2,0,0,115,6,0,0,0,0,
2,18,5,13,1,114,161,0,0,0,99,1,0,0,0,0,
0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,
35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,
@@ -995,7 +995,7 @@ const unsigned char _Py_M__importlib[] = {
2,114,71,0,0,0,114,158,0,0,0,41,1,114,159,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,24,95,114,
101,113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,
- 114,97,112,112,101,114,45,2,0,0,115,8,0,0,0,0,
+ 114,97,112,112,101,114,46,2,0,0,115,8,0,0,0,0,
1,15,1,18,1,12,1,122,50,95,114,101,113,117,105,114,
101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,
115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,
@@ -1003,7 +1003,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,41,2,114,159,0,0,0,114,163,0,0,0,114,4,
0,0,0,41,1,114,159,0,0,0,114,5,0,0,0,218,
16,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,
- 110,43,2,0,0,115,6,0,0,0,0,2,18,5,13,1,
+ 110,44,2,0,0,115,6,0,0,0,0,2,18,5,13,1,
114,164,0,0,0,99,2,0,0,0,0,0,0,0,5,0,
0,0,5,0,0,0,67,0,0,0,115,87,0,0,0,124,
0,0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,
@@ -1032,7 +1032,7 @@ const unsigned char _Py_M__importlib[] = {
108,111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,
218,3,109,115,103,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,
- 108,101,95,115,104,105,109,54,2,0,0,115,10,0,0,0,
+ 108,101,95,115,104,105,109,55,2,0,0,115,10,0,0,0,
0,10,21,1,24,1,6,1,32,1,114,172,0,0,0,99,
2,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,
67,0,0,0,115,93,0,0,0,116,0,0,124,1,0,124,
@@ -1057,7 +1057,7 @@ const unsigned char _Py_M__importlib[] = {
4,115,112,101,99,218,7,109,101,116,104,111,100,115,218,6,
109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,218,17,95,108,111,97,100,95,109,111,100,
- 117,108,101,95,115,104,105,109,71,2,0,0,115,14,0,0,
+ 117,108,101,95,115,104,105,109,72,2,0,0,115,14,0,0,
0,0,6,15,1,12,1,15,1,13,1,13,1,11,2,114,
180,0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,
0,19,0,0,0,67,0,0,0,115,243,1,0,0,105,0,
@@ -1142,7 +1142,7 @@ const unsigned char _Py_M__importlib[] = {
101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,
115,105,122,101,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,
- 121,116,101,99,111,100,101,95,104,101,97,100,101,114,87,2,
+ 121,116,101,99,111,100,101,95,104,101,97,100,101,114,88,2,
0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,
1,12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,
1,18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,
@@ -1173,7 +1173,7 @@ const unsigned char _Py_M__importlib[] = {
41,5,114,53,0,0,0,114,67,0,0,0,114,140,0,0,
0,114,141,0,0,0,218,4,99,111,100,101,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,
- 109,112,105,108,101,95,98,121,116,101,99,111,100,101,142,2,
+ 109,112,105,108,101,95,98,121,116,101,99,111,100,101,143,2,
0,0,115,16,0,0,0,0,2,15,1,15,1,13,1,12,
1,19,1,4,2,18,1,114,195,0,0,0,114,84,0,0,
0,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,
@@ -1193,7 +1193,7 @@ const unsigned char _Py_M__importlib[] = {
5,100,117,109,112,115,41,4,114,194,0,0,0,114,183,0,
0,0,114,189,0,0,0,114,53,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,
- 100,101,95,116,111,95,98,121,116,101,99,111,100,101,154,2,
+ 100,101,95,116,111,95,98,121,116,101,99,111,100,101,155,2,
0,0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,
1,114,198,0,0,0,99,1,0,0,0,0,0,0,0,5,
0,0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,
@@ -1222,7 +1222,7 @@ const unsigned char _Py_M__importlib[] = {
101,218,8,101,110,99,111,100,105,110,103,90,15,110,101,119,
108,105,110,101,95,100,101,99,111,100,101,114,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,
- 111,100,101,95,115,111,117,114,99,101,164,2,0,0,115,10,
+ 111,100,101,95,115,111,117,114,99,101,165,2,0,0,115,10,
0,0,0,0,5,12,1,18,1,15,1,18,1,114,203,0,
0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,
0,0,0,67,0,0,0,115,15,1,0,0,116,0,0,124,
@@ -1256,7 +1256,7 @@ const unsigned char _Py_M__importlib[] = {
95,95,114,47,0,0,0,41,5,114,179,0,0,0,114,169,
0,0,0,114,177,0,0,0,114,67,0,0,0,114,131,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,12,95,109,111,100,117,108,101,95,114,101,112,114,178,
+ 0,218,12,95,109,111,100,117,108,101,95,114,101,112,114,179,
2,0,0,115,46,0,0,0,0,2,18,1,15,4,3,1,
17,1,13,1,8,1,3,1,13,1,13,1,5,2,12,1,
16,4,3,1,13,1,13,1,11,1,3,1,13,1,13,1,
@@ -1273,7 +1273,7 @@ const unsigned char _Py_M__importlib[] = {
83,41,1,78,41,3,218,7,95,109,111,100,117,108,101,114,
208,0,0,0,218,5,95,115,112,101,99,41,2,114,71,0,
0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,72,0,0,0,216,2,0,0,115,
+ 0,114,5,0,0,0,114,72,0,0,0,217,2,0,0,115,
4,0,0,0,0,1,9,1,122,26,95,105,110,115,116,97,
108,108,101,100,95,115,97,102,101,108,121,46,95,95,105,110,
105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,
@@ -1284,7 +1284,7 @@ const unsigned char _Py_M__importlib[] = {
13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,213,
0,0,0,114,7,0,0,0,114,73,0,0,0,114,67,0,
0,0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,75,0,0,0,220,2,0,
+ 0,0,0,114,5,0,0,0,114,75,0,0,0,221,2,0,
0,115,4,0,0,0,0,4,12,1,122,27,95,105,110,115,
116,97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,
101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0,
@@ -1302,7 +1302,7 @@ const unsigned char _Py_M__importlib[] = {
124,1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,
0,83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,
0,114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,77,0,0,0,230,2,0,0,115,2,
+ 114,5,0,0,0,114,77,0,0,0,231,2,0,0,115,2,
0,0,0,6,0,122,45,95,105,110,115,116,97,108,108,101,
100,95,115,97,102,101,108,121,46,95,95,101,120,105,116,95,
95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,
@@ -1312,14 +1312,14 @@ const unsigned char _Py_M__importlib[] = {
67,0,0,0,114,79,0,0,0,114,152,0,0,0,114,169,
0,0,0,114,215,0,0,0,41,3,114,71,0,0,0,114,
80,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,81,0,0,0,227,2,0,
+ 0,0,0,114,5,0,0,0,114,81,0,0,0,228,2,0,
0,115,18,0,0,0,0,1,3,1,9,1,25,1,3,1,
17,1,13,1,8,2,26,2,122,26,95,105,110,115,116,97,
108,108,101,100,95,115,97,102,101,108,121,46,95,95,101,120,
105,116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,
0,114,58,0,0,0,114,72,0,0,0,114,75,0,0,0,
114,81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,212,0,0,0,214,2,
+ 4,0,0,0,114,5,0,0,0,114,212,0,0,0,215,2,
0,0,115,6,0,0,0,12,2,12,4,12,7,114,212,0,
0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,8,
0,0,0,64,0,0,0,115,172,0,0,0,101,0,0,90,
@@ -1444,7 +1444,7 @@ const unsigned char _Py_M__importlib[] = {
97,99,104,101,100,41,6,114,71,0,0,0,114,67,0,0,
0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0,
114,219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,72,0,0,0,22,3,0,0,115,14,0,
+ 5,0,0,0,114,72,0,0,0,23,3,0,0,115,14,0,
0,0,0,2,9,1,9,1,9,1,9,1,21,3,9,1,
122,19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,
110,105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,
@@ -1469,7 +1469,7 @@ const unsigned char _Py_M__importlib[] = {
95,95,99,108,97,115,115,95,95,114,57,0,0,0,114,26,
0,0,0,41,2,114,71,0,0,0,114,80,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,
- 0,0,0,34,3,0,0,115,16,0,0,0,0,1,15,1,
+ 0,0,0,35,3,0,0,115,16,0,0,0,0,1,15,1,
21,1,15,1,28,1,15,1,6,1,22,1,122,19,77,111,
100,117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,
95,99,2,0,0,0,0,0,0,0,3,0,0,0,13,0,
@@ -1488,7 +1488,7 @@ const unsigned char _Py_M__importlib[] = {
104,97,115,95,108,111,99,97,116,105,111,110,114,209,0,0,
0,41,3,114,71,0,0,0,218,5,111,116,104,101,114,218,
4,115,109,115,108,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,218,6,95,95,101,113,95,95,44,3,0,0,
+ 5,0,0,0,218,6,95,95,101,113,95,95,45,3,0,0,
115,20,0,0,0,0,1,9,1,3,1,18,1,18,1,18,
1,15,1,18,1,20,1,13,1,122,17,77,111,100,117,108,
101,83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,
@@ -1509,7 +1509,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,124,0,0,0,218,17,66,89,84,69,67,79,
68,69,95,83,85,70,70,73,88,69,83,41,2,114,71,0,
0,0,114,131,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,225,0,0,0,56,3,0,0,115,
+ 0,114,5,0,0,0,114,225,0,0,0,57,3,0,0,115,
22,0,0,0,0,2,15,1,24,1,9,1,21,1,3,1,
19,1,13,1,8,1,21,1,18,1,122,17,77,111,100,117,
108,101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,
@@ -1517,7 +1517,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,115,13,0,0,0,124,1,0,124,0,0,95,0,0,
100,0,0,83,41,1,78,41,1,114,222,0,0,0,41,2,
114,71,0,0,0,114,225,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,225,0,0,0,70,3,
+ 4,0,0,0,114,5,0,0,0,114,225,0,0,0,71,3,
0,0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,
0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,46,
0,0,0,124,0,0,106,0,0,100,1,0,107,8,0,114,
@@ -1528,14 +1528,14 @@ const unsigned char _Py_M__importlib[] = {
114,101,110,116,46,78,114,116,0,0,0,114,84,0,0,0,
41,3,114,220,0,0,0,114,67,0,0,0,114,32,0,0,
0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,218,6,112,97,114,101,110,116,74,
+ 0,0,114,5,0,0,0,218,6,112,97,114,101,110,116,75,
3,0,0,115,6,0,0,0,0,3,15,1,20,2,122,17,
77,111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,
116,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,
0,0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,
0,83,41,1,78,41,1,114,221,0,0,0,41,1,114,71,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,226,0,0,0,82,3,0,0,115,2,0,0,0,
+ 0,0,114,226,0,0,0,83,3,0,0,115,2,0,0,0,
0,2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,
97,115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,
0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,
@@ -1543,14 +1543,14 @@ const unsigned char _Py_M__importlib[] = {
0,95,1,0,100,0,0,83,41,1,78,41,2,218,4,98,
111,111,108,114,221,0,0,0,41,2,114,71,0,0,0,218,
5,118,97,108,117,101,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,226,0,0,0,86,3,0,0,115,2,
+ 114,5,0,0,0,114,226,0,0,0,87,3,0,0,115,2,
0,0,0,0,2,41,12,114,57,0,0,0,114,56,0,0,
0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,
114,101,0,0,0,114,229,0,0,0,218,8,112,114,111,112,
101,114,116,121,114,225,0,0,0,218,6,115,101,116,116,101,
114,114,233,0,0,0,114,226,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 216,0,0,0,241,2,0,0,115,20,0,0,0,12,35,6,
+ 216,0,0,0,242,2,0,0,115,20,0,0,0,12,35,6,
2,15,1,15,11,12,10,12,12,18,14,21,4,18,8,18,
4,114,216,0,0,0,114,217,0,0,0,114,219,0,0,0,
99,2,0,0,0,2,0,0,0,5,0,0,0,15,0,0,
@@ -1578,7 +1578,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,216,0,0,0,41,5,114,67,0,0,0,114,169,
0,0,0,114,217,0,0,0,114,219,0,0,0,90,6,115,
101,97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,173,0,0,0,91,3,0,0,115,28,0,
+ 5,0,0,0,114,173,0,0,0,92,3,0,0,115,28,0,
0,0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,
12,1,15,1,3,1,19,1,13,1,14,3,9,2,114,173,
0,0,0,114,169,0,0,0,114,220,0,0,0,99,2,0,
@@ -1640,7 +1640,7 @@ const unsigned char _Py_M__importlib[] = {
218,12,108,111,97,100,101,114,95,99,108,97,115,115,114,127,
0,0,0,114,219,0,0,0,90,7,100,105,114,110,97,109,
101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,239,0,0,0,116,3,0,0,115,60,0,0,0,0,12,
+ 114,239,0,0,0,117,3,0,0,115,60,0,0,0,0,12,
12,4,6,1,15,2,3,1,19,1,13,1,11,8,21,1,
9,3,12,1,22,1,21,1,15,1,9,1,8,2,7,3,
12,2,15,1,3,1,19,1,13,1,5,2,6,1,18,2,
@@ -1680,7 +1680,7 @@ const unsigned char _Py_M__importlib[] = {
217,0,0,0,114,177,0,0,0,114,67,0,0,0,114,242,
0,0,0,114,225,0,0,0,114,220,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,115,
- 112,101,99,95,102,114,111,109,95,109,111,100,117,108,101,180,
+ 112,101,99,95,102,114,111,109,95,109,111,100,117,108,101,181,
3,0,0,115,72,0,0,0,0,2,3,1,13,1,13,1,
5,2,12,1,4,2,9,1,12,1,3,1,13,1,13,2,
8,1,3,1,13,1,13,1,11,1,12,1,12,1,3,1,
@@ -1707,7 +1707,7 @@ const unsigned char _Py_M__importlib[] = {
124,0,0,95,0,0,100,0,0,83,41,1,78,41,1,114,
177,0,0,0,41,2,114,71,0,0,0,114,177,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 72,0,0,0,232,3,0,0,115,2,0,0,0,0,1,122,
+ 72,0,0,0,233,3,0,0,115,2,0,0,0,0,1,122,
21,95,83,112,101,99,77,101,116,104,111,100,115,46,95,95,
105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,3,
0,0,0,3,0,0,0,67,0,0,0,115,158,0,0,0,
@@ -1733,7 +1733,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,169,0,0,0,114,47,0,0,0,114,226,0,0,0,
41,3,114,71,0,0,0,114,177,0,0,0,114,67,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,205,0,0,0,235,3,0,0,115,18,0,0,0,0,3,
+ 114,205,0,0,0,236,3,0,0,115,18,0,0,0,0,3,
9,1,30,1,15,1,15,1,13,2,22,2,9,1,19,2,
122,24,95,83,112,101,99,77,101,116,104,111,100,115,46,109,
111,100,117,108,101,95,114,101,112,114,218,9,95,111,118,101,
@@ -1824,7 +1824,7 @@ const unsigned char _Py_M__importlib[] = {
71,0,0,0,114,179,0,0,0,114,248,0,0,0,114,249,
0,0,0,114,177,0,0,0,114,169,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,17,105,110,
- 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,251,
+ 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,252,
3,0,0,115,88,0,0,0,0,17,9,6,12,1,24,1,
3,1,16,1,13,1,8,3,30,1,9,1,12,2,15,1,
15,1,18,1,3,1,13,1,13,1,8,3,30,1,3,1,
@@ -1856,7 +1856,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,68,0,0,0,114,67,0,0,0,114,254,0,0,
0,41,3,114,71,0,0,0,114,177,0,0,0,114,179,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,6,99,114,101,97,116,101,75,4,0,0,115,16,0,
+ 0,218,6,99,114,101,97,116,101,76,4,0,0,115,16,0,
0,0,0,7,9,2,18,3,21,2,6,1,12,4,18,1,
13,1,122,19,95,83,112,101,99,77,101,116,104,111,100,115,
46,99,114,101,97,116,101,99,2,0,0,0,0,0,0,0,
@@ -1878,7 +1878,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,169,0,0,0,218,11,101,120,101,99,95,109,111,100,
117,108,101,41,2,114,71,0,0,0,114,179,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,
- 95,101,120,101,99,98,4,0,0,115,2,0,0,0,0,7,
+ 95,101,120,101,99,99,4,0,0,115,2,0,0,0,0,7,
122,18,95,83,112,101,99,77,101,116,104,111,100,115,46,95,
101,120,101,99,99,2,0,0,0,0,0,0,0,4,0,0,
0,11,0,0,0,67,0,0,0,115,17,1,0,0,124,0,
@@ -1915,7 +1915,7 @@ const unsigned char _Py_M__importlib[] = {
111,100,117,108,101,114,2,1,0,0,41,4,114,71,0,0,
0,114,179,0,0,0,114,67,0,0,0,114,171,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 175,0,0,0,108,4,0,0,115,32,0,0,0,0,2,12,
+ 175,0,0,0,109,4,0,0,115,32,0,0,0,0,2,12,
1,10,1,13,1,24,1,15,1,21,1,18,1,18,1,27,
2,19,1,4,1,19,1,21,4,22,2,19,1,122,17,95,
83,112,101,99,77,101,116,104,111,100,115,46,101,120,101,99,
@@ -1948,7 +1948,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,177,0,0,0,114,179,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,25,95,108,111,
97,100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,
- 97,116,105,98,108,101,132,4,0,0,115,42,0,0,0,0,
+ 97,116,105,98,108,101,133,4,0,0,115,42,0,0,0,0,
4,9,1,19,2,16,1,24,1,3,1,16,1,13,1,8,
1,24,1,3,4,12,1,15,1,32,1,13,1,8,1,24,
1,3,1,13,1,13,1,8,1,122,38,95,83,112,101,99,
@@ -1975,7 +1975,7 @@ const unsigned char _Py_M__importlib[] = {
7,0,0,0,114,73,0,0,0,41,2,114,71,0,0,0,
114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,
- 99,107,101,100,162,4,0,0,115,20,0,0,0,0,2,18,
+ 99,107,101,100,163,4,0,0,115,20,0,0,0,0,2,18,
2,21,1,13,2,12,1,13,1,18,1,18,1,30,3,19,
5,122,27,95,83,112,101,99,77,101,116,104,111,100,115,46,
95,108,111,97,100,95,117,110,108,111,99,107,101,100,99,1,
@@ -2000,7 +2000,7 @@ const unsigned char _Py_M__importlib[] = {
106,0,0,0,114,3,1,0,0,114,103,0,0,0,114,177,
0,0,0,114,67,0,0,0,114,6,1,0,0,41,1,114,
71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,176,0,0,0,185,4,0,0,115,6,0,0,
+ 0,0,0,114,176,0,0,0,186,4,0,0,115,6,0,0,
0,0,9,10,1,19,1,122,17,95,83,112,101,99,77,101,
116,104,111,100,115,46,108,111,97,100,78,41,13,114,57,0,
0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,
@@ -2008,7 +2008,7 @@ const unsigned char _Py_M__importlib[] = {
114,0,1,0,0,114,2,1,0,0,114,175,0,0,0,114,
5,1,0,0,114,6,1,0,0,114,176,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,174,0,0,0,225,3,0,0,115,20,0,0,0,
+ 0,0,114,174,0,0,0,226,3,0,0,115,20,0,0,0,
12,3,6,4,12,3,12,16,24,80,12,23,12,10,12,24,
12,30,12,23,114,174,0,0,0,99,0,0,0,0,0,0,
0,0,0,0,0,0,5,0,0,0,64,0,0,0,115,181,
@@ -2047,7 +2047,7 @@ const unsigned char _Py_M__importlib[] = {
60,109,111,100,117,108,101,32,123,33,114,125,32,40,98,117,
105,108,116,45,105,110,41,62,41,2,114,47,0,0,0,114,
57,0,0,0,41,1,114,179,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,205,0,0,0,210,
+ 114,4,0,0,0,114,5,0,0,0,114,205,0,0,0,211,
4,0,0,115,2,0,0,0,0,7,122,27,66,117,105,108,
116,105,110,73,109,112,111,114,116,101,114,46,109,111,100,117,
108,101,95,114,101,112,114,78,99,4,0,0,0,0,0,0,
@@ -2061,7 +2061,7 @@ const unsigned char _Py_M__importlib[] = {
110,114,173,0,0,0,41,4,218,3,99,108,115,114,158,0,
0,0,114,35,0,0,0,218,6,116,97,114,103,101,116,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,9,
- 102,105,110,100,95,115,112,101,99,219,4,0,0,115,10,0,
+ 102,105,110,100,95,115,112,101,99,220,4,0,0,115,10,0,
0,0,0,2,12,1,4,1,15,1,19,2,122,25,66,117,
105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105,
110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,
@@ -2083,7 +2083,7 @@ const unsigned char _Py_M__importlib[] = {
114,10,1,0,0,114,169,0,0,0,41,4,114,8,1,0,
0,114,158,0,0,0,114,35,0,0,0,114,177,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 11,102,105,110,100,95,109,111,100,117,108,101,228,4,0,0,
+ 11,102,105,110,100,95,109,111,100,117,108,101,229,4,0,0,
115,4,0,0,0,0,9,18,1,122,27,66,117,105,108,116,
105,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,
109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,3,
@@ -2098,7 +2098,7 @@ const unsigned char _Py_M__importlib[] = {
110,105,116,95,98,117,105,108,116,105,110,114,204,0,0,0,
114,250,0,0,0,41,3,114,8,1,0,0,114,158,0,0,
0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,4,1,0,0,240,4,0,0,115,10,
+ 114,5,0,0,0,114,4,1,0,0,241,4,0,0,115,10,
0,0,0,0,6,13,1,24,1,9,1,9,1,122,27,66,
117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,108,
111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,
@@ -2110,7 +2110,7 @@ const unsigned char _Py_M__importlib[] = {
101,99,116,115,46,78,114,4,0,0,0,41,2,114,8,1,
0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,8,103,101,116,95,99,111,100,101,
- 252,4,0,0,115,2,0,0,0,0,4,122,24,66,117,105,
+ 253,4,0,0,115,2,0,0,0,0,4,122,24,66,117,105,
108,116,105,110,73,109,112,111,114,116,101,114,46,103,101,116,
95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,
0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
@@ -2120,7 +2120,7 @@ const unsigned char _Py_M__importlib[] = {
118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,78,
114,4,0,0,0,41,2,114,8,1,0,0,114,158,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 218,10,103,101,116,95,115,111,117,114,99,101,2,5,0,0,
+ 218,10,103,101,116,95,115,111,117,114,99,101,3,5,0,0,
115,2,0,0,0,0,4,122,26,66,117,105,108,116,105,110,
73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,
114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
@@ -2130,7 +2130,7 @@ const unsigned char _Py_M__importlib[] = {
100,117,108,101,115,32,97,114,101,32,110,101,118,101,114,32,
112,97,99,107,97,103,101,115,46,70,114,4,0,0,0,41,
2,114,8,1,0,0,114,158,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,8,
+ 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,9,
5,0,0,115,2,0,0,0,0,4,122,26,66,117,105,108,
116,105,110,73,109,112,111,114,116,101,114,46,105,115,95,112,
97,99,107,97,103,101,41,14,114,57,0,0,0,114,56,0,
@@ -2140,7 +2140,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,11,1,0,0,114,161,0,0,0,114,4,1,0,0,
114,12,1,0,0,114,13,1,0,0,114,219,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,7,1,0,0,201,4,0,0,115,28,0,0,
+ 0,0,0,114,7,1,0,0,202,4,0,0,115,28,0,0,
0,12,7,6,2,18,9,3,1,21,8,3,1,18,11,3,
1,21,11,3,1,21,5,3,1,21,5,3,1,114,7,1,
0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,
@@ -2180,7 +2180,7 @@ const unsigned char _Py_M__importlib[] = {
122,22,60,109,111,100,117,108,101,32,123,33,114,125,32,40,
102,114,111,122,101,110,41,62,41,2,114,47,0,0,0,114,
57,0,0,0,41,1,218,1,109,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,205,0,0,0,24,5,0,
+ 0,0,0,114,5,0,0,0,114,205,0,0,0,25,5,0,
0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,110,
73,109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,
114,101,112,114,78,99,4,0,0,0,0,0,0,0,4,0,
@@ -2192,7 +2192,7 @@ const unsigned char _Py_M__importlib[] = {
114,162,0,0,0,114,173,0,0,0,41,4,114,8,1,0,
0,114,158,0,0,0,114,35,0,0,0,114,9,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 10,1,0,0,33,5,0,0,115,6,0,0,0,0,2,15,
+ 10,1,0,0,34,5,0,0,115,6,0,0,0,0,2,15,
1,19,2,122,24,70,114,111,122,101,110,73,109,112,111,114,
116,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,
0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,
@@ -2207,7 +2207,7 @@ const unsigned char _Py_M__importlib[] = {
41,2,114,106,0,0,0,114,162,0,0,0,41,3,114,8,
1,0,0,114,158,0,0,0,114,35,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,11,1,0,
- 0,40,5,0,0,115,2,0,0,0,0,7,122,26,70,114,
+ 0,41,5,0,0,115,2,0,0,0,0,7,122,26,70,114,
111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,
100,95,109,111,100,117,108,101,99,1,0,0,0,0,0,0,
0,3,0,0,0,4,0,0,0,67,0,0,0,115,95,0,
@@ -2225,7 +2225,7 @@ const unsigned char _Py_M__importlib[] = {
95,102,114,111,122,101,110,95,111,98,106,101,99,116,114,175,
0,0,0,114,63,0,0,0,41,3,114,179,0,0,0,114,
67,0,0,0,114,194,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,1,1,0,0,49,5,0,
+ 0,0,0,114,5,0,0,0,114,1,1,0,0,50,5,0,
0,115,12,0,0,0,0,2,12,1,15,1,18,1,12,1,
18,1,122,26,70,114,111,122,101,110,73,109,112,111,114,116,
101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,
@@ -2239,7 +2239,7 @@ const unsigned char _Py_M__importlib[] = {
117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,
32,32,32,32,32,32,32,32,41,1,114,180,0,0,0,41,
2,114,8,1,0,0,114,158,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,58,
+ 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,59,
5,0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,
101,110,73,109,112,111,114,116,101,114,46,108,111,97,100,95,
109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,
@@ -2250,7 +2250,7 @@ const unsigned char _Py_M__importlib[] = {
102,114,111,122,101,110,32,109,111,100,117,108,101,46,41,2,
114,106,0,0,0,114,18,1,0,0,41,2,114,8,1,0,
0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,12,1,0,0,67,5,0,0,115,2,
+ 114,5,0,0,0,114,12,1,0,0,68,5,0,0,115,2,
0,0,0,0,4,122,23,70,114,111,122,101,110,73,109,112,
111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,2,
0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
@@ -2260,7 +2260,7 @@ const unsigned char _Py_M__importlib[] = {
32,110,111,116,32,104,97,118,101,32,115,111,117,114,99,101,
32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,8,
1,0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,13,1,0,0,73,5,0,0,
+ 0,0,114,5,0,0,0,114,13,1,0,0,74,5,0,0,
115,2,0,0,0,0,4,122,25,70,114,111,122,101,110,73,
109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,
99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,2,
@@ -2272,7 +2272,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,90,17,105,115,95,102,114,111,122,101,110,95,112,97,
99,107,97,103,101,41,2,114,8,1,0,0,114,158,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,219,0,0,0,79,5,0,0,115,2,0,0,0,0,4,
+ 114,219,0,0,0,80,5,0,0,115,2,0,0,0,0,4,
122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,
46,105,115,95,112,97,99,107,97,103,101,41,15,114,57,0,
0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,
@@ -2281,7 +2281,7 @@ const unsigned char _Py_M__importlib[] = {
4,1,0,0,114,164,0,0,0,114,12,1,0,0,114,13,
1,0,0,114,219,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,
- 0,15,5,0,0,115,28,0,0,0,12,7,6,2,18,9,
+ 0,16,5,0,0,115,28,0,0,0,12,7,6,2,18,9,
3,1,21,6,3,1,18,8,18,9,18,9,3,1,21,5,
3,1,21,5,3,1,114,16,1,0,0,99,0,0,0,0,
0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0,
@@ -2319,7 +2319,7 @@ const unsigned char _Py_M__importlib[] = {
95,77,65,67,72,73,78,69,41,2,114,8,1,0,0,218,
3,107,101,121,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,218,14,95,111,112,101,110,95,114,101,103,105,115,
- 116,114,121,98,5,0,0,115,8,0,0,0,0,2,3,1,
+ 116,114,121,99,5,0,0,115,8,0,0,0,0,2,3,1,
23,1,13,1,122,36,87,105,110,100,111,119,115,82,101,103,
105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101,
110,95,114,101,103,105,115,116,114,121,99,2,0,0,0,0,
@@ -2346,7 +2346,7 @@ const unsigned char _Py_M__importlib[] = {
4,104,107,101,121,218,8,102,105,108,101,112,97,116,104,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,16,
95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,
- 105,5,0,0,115,22,0,0,0,0,2,9,1,12,2,9,
+ 106,5,0,0,115,22,0,0,0,0,2,9,1,12,2,9,
1,15,1,22,1,3,1,18,1,28,1,13,1,9,1,122,
38,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,
70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,114,
@@ -2368,7 +2368,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,158,0,0,0,114,35,0,0,0,114,9,1,0,0,
114,27,1,0,0,114,169,0,0,0,114,127,0,0,0,114,
177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,10,1,0,0,120,5,0,0,115,24,0,0,
+ 0,0,0,114,10,1,0,0,121,5,0,0,115,24,0,0,
0,0,2,15,1,12,1,4,1,3,1,14,1,13,1,9,
1,22,1,21,1,21,1,9,1,122,31,87,105,110,100,111,
119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,
@@ -2387,7 +2387,7 @@ const unsigned char _Py_M__importlib[] = {
32,78,41,2,114,10,1,0,0,114,169,0,0,0,41,4,
114,8,1,0,0,114,158,0,0,0,114,35,0,0,0,114,
177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,11,1,0,0,135,5,0,0,115,8,0,0,
+ 0,0,0,114,11,1,0,0,136,5,0,0,115,8,0,0,
0,0,7,18,1,12,1,7,2,122,33,87,105,110,100,111,
119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,
46,102,105,110,100,95,109,111,100,117,108,101,41,12,114,57,
@@ -2396,7 +2396,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,15,1,0,0,114,22,1,0,0,114,28,1,0,0,
114,10,1,0,0,114,11,1,0,0,114,4,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,19,
- 1,0,0,86,5,0,0,115,20,0,0,0,12,2,6,3,
+ 1,0,0,87,5,0,0,115,20,0,0,0,12,2,6,3,
6,3,6,2,6,2,18,7,18,15,3,1,21,14,3,1,
114,19,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101,
@@ -2432,7 +2432,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,158,0,0,0,114,131,0,0,0,90,13,102,105,
108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,
108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,219,0,0,0,154,5,0,0,115,8,
+ 114,5,0,0,0,114,219,0,0,0,155,5,0,0,115,8,
0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111,
97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,
99,107,97,103,101,99,2,0,0,0,0,0,0,0,3,0,
@@ -2451,14 +2451,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,114,0,0,0,114,175,0,0,0,114,63,0,
0,0,41,3,114,71,0,0,0,114,179,0,0,0,114,194,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,1,1,0,0,162,5,0,0,115,10,0,0,0,
+ 0,0,114,1,1,0,0,163,5,0,0,115,10,0,0,0,
0,2,18,1,12,1,3,1,24,1,122,25,95,76,111,97,
100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,109,
111,100,117,108,101,78,41,8,114,57,0,0,0,114,56,0,
0,0,114,58,0,0,0,114,59,0,0,0,114,219,0,0,
0,114,1,1,0,0,114,180,0,0,0,114,4,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,29,1,0,0,149,5,0,0,115,8,0,
+ 5,0,0,0,114,29,1,0,0,150,5,0,0,115,8,0,
0,0,12,3,6,2,12,8,12,8,114,29,1,0,0,99,
0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
64,0,0,0,115,106,0,0,0,101,0,0,90,1,0,100,
@@ -2486,7 +2486,7 @@ const unsigned char _Py_M__importlib[] = {
218,7,73,79,69,114,114,111,114,41,2,114,71,0,0,0,
114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101,
- 175,5,0,0,115,2,0,0,0,0,6,122,23,83,111,117,
+ 176,5,0,0,115,2,0,0,0,0,6,122,23,83,111,117,
114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109,
116,105,109,101,99,2,0,0,0,0,0,0,0,2,0,0,
0,3,0,0,0,67,0,0,0,115,20,0,0,0,105,1,
@@ -2521,7 +2521,7 @@ const unsigned char _Py_M__importlib[] = {
32,32,32,114,183,0,0,0,41,1,114,32,1,0,0,41,
2,114,71,0,0,0,114,35,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104,
- 95,115,116,97,116,115,183,5,0,0,115,2,0,0,0,0,
+ 95,115,116,97,116,115,184,5,0,0,115,2,0,0,0,0,
11,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,
112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0,
0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,
@@ -2545,7 +2545,7 @@ const unsigned char _Py_M__importlib[] = {
141,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,
114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116,
- 101,99,111,100,101,196,5,0,0,115,2,0,0,0,0,8,
+ 101,99,111,100,101,197,5,0,0,115,2,0,0,0,0,8,
122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95,
99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3,
0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67,
@@ -2562,7 +2562,7 @@ const unsigned char _Py_M__importlib[] = {
32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,71,
0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,34,1,0,
- 0,206,5,0,0,115,0,0,0,0,122,21,83,111,117,114,
+ 0,207,5,0,0,115,0,0,0,0,122,21,83,111,117,114,
99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,
97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0,
0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0,
@@ -2583,7 +2583,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,153,0,0,0,114,203,0,0,0,41,5,114,71,0,
0,0,114,158,0,0,0,114,35,0,0,0,114,201,0,0,
0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,13,1,0,0,213,5,0,0,115,14,
+ 114,5,0,0,0,114,13,1,0,0,214,5,0,0,115,14,
0,0,0,0,2,15,1,3,1,19,1,18,1,9,1,31,
1,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,
103,101,116,95,115,111,117,114,99,101,218,9,95,111,112,116,
@@ -2605,7 +2605,7 @@ const unsigned char _Py_M__importlib[] = {
108,101,41,4,114,71,0,0,0,114,53,0,0,0,114,35,
0,0,0,114,38,1,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,
- 116,111,95,99,111,100,101,223,5,0,0,115,4,0,0,0,
+ 116,111,95,99,111,100,101,224,5,0,0,115,4,0,0,0,
0,5,18,1,122,27,83,111,117,114,99,101,76,111,97,100,
101,114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,
101,99,2,0,0,0,0,0,0,0,10,0,0,0,45,0,
@@ -2666,7 +2666,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,218,10,98,121,116,101,115,95,100,97,116,97,114,201,
0,0,0,90,11,99,111,100,101,95,111,98,106,101,99,116,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 12,1,0,0,231,5,0,0,115,78,0,0,0,0,7,15,
+ 12,1,0,0,232,5,0,0,115,78,0,0,0,0,7,15,
1,6,1,3,1,16,1,13,1,11,2,3,1,19,1,13,
1,5,2,16,1,3,1,19,1,13,1,5,2,3,1,9,
1,12,1,13,1,19,1,5,2,9,1,7,1,15,1,6,
@@ -2678,7 +2678,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,35,1,0,0,114,34,1,0,0,114,13,1,
0,0,114,41,1,0,0,114,12,1,0,0,114,4,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,30,1,0,0,173,5,0,0,115,14,0,0,0,12,2,
+ 114,30,1,0,0,174,5,0,0,115,14,0,0,0,12,2,
12,8,12,13,12,10,12,7,12,10,18,8,114,30,1,0,
0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
0,0,0,0,0,0,115,112,0,0,0,101,0,0,90,1,
@@ -2707,7 +2707,7 @@ const unsigned char _Py_M__importlib[] = {
46,78,41,2,114,67,0,0,0,114,35,0,0,0,41,3,
114,71,0,0,0,114,158,0,0,0,114,35,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72,
- 0,0,0,32,6,0,0,115,4,0,0,0,0,3,9,1,
+ 0,0,0,33,6,0,0,115,4,0,0,0,0,3,9,1,
122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,
110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,
0,0,3,0,0,0,67,0,0,0,115,34,0,0,0,124,
@@ -2716,7 +2716,7 @@ const unsigned char _Py_M__importlib[] = {
83,41,1,78,41,2,114,224,0,0,0,114,63,0,0,0,
41,2,114,71,0,0,0,114,227,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,229,0,0,0,
- 38,6,0,0,115,4,0,0,0,0,1,18,1,122,17,70,
+ 39,6,0,0,115,4,0,0,0,0,1,18,1,122,17,70,
105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95,
99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,
@@ -2724,7 +2724,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,65,83,41,1,78,41,3,218,4,104,97,115,104,114,
67,0,0,0,114,35,0,0,0,41,1,114,71,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 8,95,95,104,97,115,104,95,95,42,6,0,0,115,2,0,
+ 8,95,95,104,97,115,104,95,95,43,6,0,0,115,2,0,
0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,114,
46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,
0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,22,
@@ -2739,7 +2739,7 @@ const unsigned char _Py_M__importlib[] = {
32,41,3,218,5,115,117,112,101,114,114,45,1,0,0,114,
4,1,0,0,41,2,114,71,0,0,0,114,158,0,0,0,
41,1,114,224,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,4,1,0,0,45,6,0,0,115,2,0,0,0,0,
+ 0,114,4,1,0,0,46,6,0,0,115,2,0,0,0,0,
10,122,22,70,105,108,101,76,111,97,100,101,114,46,108,111,
97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,7,
@@ -2749,7 +2749,7 @@ const unsigned char _Py_M__importlib[] = {
32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,
32,102,105,110,100,101,114,46,41,1,114,35,0,0,0,41,
2,114,71,0,0,0,114,158,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,238,0,0,0,57,
+ 114,4,0,0,0,114,5,0,0,0,114,238,0,0,0,58,
6,0,0,115,2,0,0,0,0,3,122,23,70,105,108,101,
76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,
97,109,101,99,2,0,0,0,0,0,0,0,3,0,0,0,
@@ -2762,7 +2762,7 @@ const unsigned char _Py_M__importlib[] = {
46,218,1,114,78,41,3,114,49,0,0,0,114,50,0,0,
0,90,4,114,101,97,100,41,3,114,71,0,0,0,114,35,
0,0,0,114,54,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,36,1,0,0,62,6,0,0,
+ 0,0,114,5,0,0,0,114,36,1,0,0,63,6,0,0,
115,4,0,0,0,0,2,21,1,122,19,70,105,108,101,76,
111,97,100,101,114,46,103,101,116,95,100,97,116,97,41,11,
114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,
@@ -2770,7 +2770,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,156,0,0,0,114,4,1,0,0,114,238,0,
0,0,114,36,1,0,0,114,4,0,0,0,114,4,0,0,
0,41,1,114,224,0,0,0,114,5,0,0,0,114,45,1,
- 0,0,27,6,0,0,115,14,0,0,0,12,3,6,2,12,
+ 0,0,28,6,0,0,115,14,0,0,0,12,3,6,2,12,
6,12,4,12,3,24,12,18,5,114,45,1,0,0,99,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,
0,0,0,115,64,0,0,0,101,0,0,90,1,0,100,0,
@@ -2793,7 +2793,7 @@ const unsigned char _Py_M__importlib[] = {
218,8,115,116,95,109,116,105,109,101,90,7,115,116,95,115,
105,122,101,41,3,114,71,0,0,0,114,35,0,0,0,114,
43,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,33,1,0,0,72,6,0,0,115,4,0,0,
+ 0,0,0,114,33,1,0,0,73,6,0,0,115,4,0,0,
0,0,2,12,1,122,27,83,111,117,114,99,101,70,105,108,
101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,
116,115,99,4,0,0,0,0,0,0,0,5,0,0,0,5,
@@ -2804,7 +2804,7 @@ const unsigned char _Py_M__importlib[] = {
34,1,0,0,41,5,114,71,0,0,0,114,141,0,0,0,
114,140,0,0,0,114,53,0,0,0,114,42,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,35,
- 1,0,0,77,6,0,0,115,4,0,0,0,0,2,12,1,
+ 1,0,0,78,6,0,0,115,4,0,0,0,0,2,12,1,
122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100,
101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,
100,101,114,52,1,0,0,105,182,1,0,0,99,3,0,0,
@@ -2842,7 +2842,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,233,0,0,0,114,131,0,0,0,114,27,0,
0,0,114,23,0,0,0,114,37,1,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,34,1,0,0,
- 82,6,0,0,115,38,0,0,0,0,2,18,1,6,2,22,
+ 83,6,0,0,115,38,0,0,0,0,2,18,1,6,2,22,
1,18,1,17,2,19,1,15,1,3,1,17,1,13,2,7,
1,18,3,16,1,27,1,3,1,16,1,17,1,18,2,122,
25,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,
@@ -2850,7 +2850,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,
0,114,33,1,0,0,114,35,1,0,0,114,34,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,50,1,0,0,68,6,0,0,115,8,0,
+ 5,0,0,0,114,50,1,0,0,69,6,0,0,115,8,0,
0,0,12,2,6,2,12,5,12,5,114,50,1,0,0,99,
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
64,0,0,0,115,46,0,0,0,101,0,0,90,1,0,100,
@@ -2872,7 +2872,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,190,0,0,0,114,195,0,0,0,41,5,114,71,
0,0,0,114,158,0,0,0,114,35,0,0,0,114,53,0,
0,0,114,44,1,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,12,1,0,0,115,6,0,0,115,
+ 0,114,5,0,0,0,114,12,1,0,0,116,6,0,0,115,
8,0,0,0,0,1,15,1,15,1,24,1,122,29,83,111,
117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,
101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,
@@ -2882,14 +2882,14 @@ const unsigned char _Py_M__importlib[] = {
101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,
111,100,101,46,78,114,4,0,0,0,41,2,114,71,0,0,
0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,13,1,0,0,121,6,0,0,115,2,
+ 114,5,0,0,0,114,13,1,0,0,122,6,0,0,115,2,
0,0,0,0,2,122,31,83,111,117,114,99,101,108,101,115,
115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,
115,111,117,114,99,101,78,41,6,114,57,0,0,0,114,56,
0,0,0,114,58,0,0,0,114,59,0,0,0,114,12,1,
0,0,114,13,1,0,0,114,4,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,54,1,0,0,
- 111,6,0,0,115,6,0,0,0,12,2,6,2,12,6,114,
+ 112,6,0,0,115,6,0,0,0,12,2,6,2,12,6,114,
54,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,0,0,64,0,0,0,115,130,0,0,0,101,0,
0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,
@@ -2913,7 +2913,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,100,0,0,83,41,1,78,41,2,114,67,0,0,0,
114,35,0,0,0,41,3,114,71,0,0,0,114,67,0,0,
0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,72,0,0,0,138,6,0,0,115,4,
+ 114,5,0,0,0,114,72,0,0,0,139,6,0,0,115,4,
0,0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,
111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,
110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,
@@ -2923,7 +2923,7 @@ const unsigned char _Py_M__importlib[] = {
83,41,1,78,41,2,114,224,0,0,0,114,63,0,0,0,
41,2,114,71,0,0,0,114,227,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,229,0,0,0,
- 142,6,0,0,115,4,0,0,0,0,1,18,1,122,26,69,
+ 143,6,0,0,115,4,0,0,0,0,1,18,1,122,26,69,
120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
101,114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,
0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,
@@ -2931,7 +2931,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,
41,3,114,46,1,0,0,114,67,0,0,0,114,35,0,0,
0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,47,1,0,0,146,6,0,0,
+ 0,0,114,5,0,0,0,114,47,1,0,0,147,6,0,0,
115,2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,
111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,
97,115,104,95,95,99,2,0,0,0,0,0,0,0,4,0,
@@ -2960,7 +2960,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,32,0,0,0,41,4,114,71,0,0,0,114,158,
0,0,0,114,179,0,0,0,114,219,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0,
- 0,149,6,0,0,115,24,0,0,0,0,5,13,1,9,1,
+ 0,150,6,0,0,115,24,0,0,0,0,5,13,1,9,1,
21,1,16,1,15,1,22,1,28,1,9,1,12,1,6,1,
28,1,122,31,69,120,116,101,110,115,105,111,110,70,105,108,
101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100,
@@ -2979,7 +2979,7 @@ const unsigned char _Py_M__importlib[] = {
41,2,114,72,0,0,0,78,114,4,0,0,0,41,2,114,
22,0,0,0,218,6,115,117,102,102,105,120,41,1,218,9,
102,105,108,101,95,110,97,109,101,114,4,0,0,0,114,5,
- 0,0,0,114,77,0,0,0,170,6,0,0,115,2,0,0,
+ 0,0,0,114,77,0,0,0,171,6,0,0,115,2,0,0,
0,6,1,122,49,69,120,116,101,110,115,105,111,110,70,105,
108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,
97,103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,
@@ -2987,7 +2987,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,78,0,0,0,218,18,69,88,84,69,78,83,73,
79,78,95,83,85,70,70,73,88,69,83,41,2,114,71,0,
0,0,114,158,0,0,0,114,4,0,0,0,41,1,114,57,
- 1,0,0,114,5,0,0,0,114,219,0,0,0,167,6,0,
+ 1,0,0,114,5,0,0,0,114,219,0,0,0,168,6,0,
0,115,6,0,0,0,0,2,19,1,18,1,122,30,69,120,
116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,
@@ -2999,7 +2999,7 @@ const unsigned char _Py_M__importlib[] = {
32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,4,
0,0,0,41,2,114,71,0,0,0,114,158,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,12,
- 1,0,0,173,6,0,0,115,2,0,0,0,0,2,122,28,
+ 1,0,0,174,6,0,0,115,2,0,0,0,0,2,122,28,
69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,
0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
@@ -3009,7 +3009,7 @@ const unsigned char _Py_M__importlib[] = {
97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,
100,101,46,78,114,4,0,0,0,41,2,114,71,0,0,0,
114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,13,1,0,0,177,6,0,0,115,2,0,
+ 5,0,0,0,114,13,1,0,0,178,6,0,0,115,2,0,
0,0,0,2,122,30,69,120,116,101,110,115,105,111,110,70,
105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,
117,114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,
@@ -3020,7 +3020,7 @@ const unsigned char _Py_M__importlib[] = {
111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,
101,114,46,41,1,114,35,0,0,0,41,2,114,71,0,0,
0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,238,0,0,0,181,6,0,0,115,2,
+ 114,5,0,0,0,114,238,0,0,0,182,6,0,0,115,2,
0,0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,
70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,
105,108,101,110,97,109,101,78,41,13,114,57,0,0,0,114,
@@ -3029,7 +3029,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,4,1,0,0,114,219,0,0,0,114,12,1,0,
0,114,13,1,0,0,114,238,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 55,1,0,0,130,6,0,0,115,18,0,0,0,12,6,6,
+ 55,1,0,0,131,6,0,0,115,18,0,0,0,12,6,6,
2,12,4,12,4,12,3,18,18,12,6,12,4,12,4,114,
55,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
0,2,0,0,0,64,0,0,0,115,130,0,0,0,101,0,
@@ -3073,7 +3073,7 @@ const unsigned char _Py_M__importlib[] = {
101,114,41,4,114,71,0,0,0,114,67,0,0,0,114,35,
0,0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 72,0,0,0,194,6,0,0,115,8,0,0,0,0,1,9,
+ 72,0,0,0,195,6,0,0,115,8,0,0,0,0,1,9,
1,9,1,21,1,122,23,95,78,97,109,101,115,112,97,99,
101,80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,
0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
@@ -3091,7 +3091,7 @@ const unsigned char _Py_M__importlib[] = {
0,41,4,114,71,0,0,0,114,233,0,0,0,218,3,100,
111,116,114,94,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,23,95,102,105,110,100,95,112,97,
- 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,200,
+ 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,201,
6,0,0,115,8,0,0,0,0,2,27,1,12,2,4,3,
122,38,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
46,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,
@@ -3105,7 +3105,7 @@ const unsigned char _Py_M__importlib[] = {
95,109,111,100,117,108,101,95,110,97,109,101,90,14,112,97,
116,104,95,97,116,116,114,95,110,97,109,101,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0,
- 210,6,0,0,115,4,0,0,0,0,1,18,1,122,31,95,
+ 211,6,0,0,115,4,0,0,0,0,1,18,1,122,31,95,
78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,103,
101,116,95,112,97,114,101,110,116,95,112,97,116,104,99,1,
0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
@@ -3123,7 +3123,7 @@ const unsigned char _Py_M__importlib[] = {
253,0,0,0,41,3,114,71,0,0,0,90,11,112,97,114,
101,110,116,95,112,97,116,104,114,177,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,12,95,114,
- 101,99,97,108,99,117,108,97,116,101,214,6,0,0,115,16,
+ 101,99,97,108,99,117,108,97,116,101,215,6,0,0,115,16,
0,0,0,0,2,18,1,15,1,21,3,27,1,9,1,18,
1,12,1,122,27,95,78,97,109,101,115,112,97,99,101,80,
97,116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,
@@ -3132,7 +3132,7 @@ const unsigned char _Py_M__importlib[] = {
106,1,0,131,0,0,131,1,0,83,41,1,78,41,2,218,
4,105,116,101,114,114,66,1,0,0,41,1,114,71,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 218,8,95,95,105,116,101,114,95,95,227,6,0,0,115,2,
+ 218,8,95,95,105,116,101,114,95,95,228,6,0,0,115,2,
0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,
101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,1,
0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,
@@ -3140,7 +3140,7 @@ const unsigned char _Py_M__importlib[] = {
0,131,0,0,131,1,0,83,41,1,78,41,2,114,31,0,
0,0,114,66,1,0,0,41,1,114,71,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,
- 95,108,101,110,95,95,230,6,0,0,115,2,0,0,0,0,
+ 95,108,101,110,95,95,231,6,0,0,115,2,0,0,0,0,
1,122,22,95,78,97,109,101,115,112,97,99,101,80,97,116,
104,46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,
0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16,
@@ -3149,7 +3149,7 @@ const unsigned char _Py_M__importlib[] = {
99,101,80,97,116,104,40,123,33,114,125,41,41,2,114,47,
0,0,0,114,253,0,0,0,41,1,114,71,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,
- 0,0,0,233,6,0,0,115,2,0,0,0,0,1,122,23,
+ 0,0,0,234,6,0,0,115,2,0,0,0,0,1,122,23,
95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,
2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,
@@ -3157,7 +3157,7 @@ const unsigned char _Py_M__importlib[] = {
83,41,1,78,41,1,114,66,1,0,0,41,2,114,71,0,
0,0,218,4,105,116,101,109,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,12,95,95,99,111,110,116,97,
- 105,110,115,95,95,236,6,0,0,115,2,0,0,0,0,1,
+ 105,110,115,95,95,237,6,0,0,115,2,0,0,0,0,1,
122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,0,
0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
@@ -3165,7 +3165,7 @@ const unsigned char _Py_M__importlib[] = {
124,1,0,131,1,0,1,100,0,0,83,41,1,78,41,2,
114,253,0,0,0,114,223,0,0,0,41,2,114,71,0,0,
0,114,70,1,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,223,0,0,0,239,6,0,0,115,2,
+ 114,5,0,0,0,114,223,0,0,0,240,6,0,0,115,2,
0,0,0,0,1,122,21,95,78,97,109,101,115,112,97,99,
101,80,97,116,104,46,97,112,112,101,110,100,78,41,13,114,
57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,
@@ -3173,7 +3173,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,66,1,0,0,114,68,1,0,0,114,69,1,0,
0,114,101,0,0,0,114,71,1,0,0,114,223,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,59,1,0,0,187,6,0,0,115,20,0,
+ 5,0,0,0,114,59,1,0,0,188,6,0,0,115,20,0,
0,0,12,5,6,2,12,6,12,10,12,4,12,13,12,3,
12,3,12,3,12,3,114,59,1,0,0,99,0,0,0,0,
0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,
@@ -3191,7 +3191,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,253,0,0,0,41,4,114,71,0,0,0,114,
67,0,0,0,114,35,0,0,0,114,63,1,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,
- 0,0,245,6,0,0,115,2,0,0,0,0,1,122,25,95,
+ 0,0,246,6,0,0,115,2,0,0,0,0,1,122,25,95,
78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,
95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,
0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,
@@ -3208,21 +3208,21 @@ const unsigned char _Py_M__importlib[] = {
99,101,41,62,41,2,114,47,0,0,0,114,57,0,0,0,
41,2,114,8,1,0,0,114,179,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,205,0,0,0,
- 248,6,0,0,115,2,0,0,0,0,7,122,28,95,78,97,
+ 249,6,0,0,115,2,0,0,0,0,7,122,28,95,78,97,
109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,
100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,
0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
0,0,0,100,1,0,83,41,2,78,84,114,4,0,0,0,
41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,
- 1,7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,
+ 2,7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,
109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,
95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,
0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
0,0,100,1,0,83,41,2,78,114,30,0,0,0,114,4,
0,0,0,41,2,114,71,0,0,0,114,158,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,13,
- 1,0,0,4,7,0,0,115,2,0,0,0,0,1,122,27,
+ 1,0,0,5,7,0,0,115,2,0,0,0,0,1,122,27,
95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,
0,0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,
@@ -3231,14 +3231,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,122,8,60,115,116,114,105,110,103,62,114,175,0,
0,0,114,39,1,0,0,84,41,1,114,40,1,0,0,41,
2,114,71,0,0,0,114,158,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,12,1,0,0,7,
+ 114,4,0,0,0,114,5,0,0,0,114,12,1,0,0,8,
7,0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,
101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,
95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,
0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
0,0,83,41,1,78,114,4,0,0,0,41,2,114,71,0,
0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,1,1,0,0,10,7,0,0,115,
+ 0,114,5,0,0,0,114,1,1,0,0,11,7,0,0,115,
2,0,0,0,0,1,122,28,95,78,97,109,101,115,112,97,
99,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,
100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,
@@ -3256,7 +3256,7 @@ const unsigned char _Py_M__importlib[] = {
112,97,116,104,32,123,33,114,125,41,3,114,152,0,0,0,
114,253,0,0,0,114,180,0,0,0,41,2,114,71,0,0,
0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,4,1,0,0,13,7,0,0,115,4,
+ 114,5,0,0,0,114,4,1,0,0,14,7,0,0,115,4,
0,0,0,0,7,16,1,122,28,95,78,97,109,101,115,112,
97,99,101,76,111,97,100,101,114,46,108,111,97,100,95,109,
111,100,117,108,101,78,41,11,114,57,0,0,0,114,56,0,
@@ -3264,7 +3264,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,205,0,0,0,114,219,0,0,0,114,13,1,0,0,
114,12,1,0,0,114,1,1,0,0,114,4,1,0,0,114,
4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,251,0,0,0,244,6,0,0,115,14,0,0,
+ 0,0,0,114,251,0,0,0,245,6,0,0,115,14,0,0,
0,12,1,12,3,18,9,12,3,12,3,12,3,12,3,114,
251,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
0,5,0,0,0,64,0,0,0,115,160,0,0,0,101,0,
@@ -3302,7 +3302,7 @@ const unsigned char _Py_M__importlib[] = {
101,218,6,118,97,108,117,101,115,114,60,0,0,0,114,73,
1,0,0,41,2,114,8,1,0,0,218,6,102,105,110,100,
101,114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,73,1,0,0,30,7,0,0,115,6,0,0,0,0,
+ 0,114,73,1,0,0,31,7,0,0,115,6,0,0,0,0,
4,22,1,15,1,122,28,80,97,116,104,70,105,110,100,101,
114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,
104,101,115,99,2,0,0,0,0,0,0,0,3,0,0,0,
@@ -3326,7 +3326,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,167,0,0,0,114,168,0,0,0,114,153,0,0,
0,41,3,114,8,1,0,0,114,35,0,0,0,90,4,104,
111,111,107,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,38,
+ 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,39,
7,0,0,115,16,0,0,0,0,7,9,1,19,1,16,1,
3,1,14,1,13,1,12,2,122,22,80,97,116,104,70,105,
110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115,
@@ -3356,7 +3356,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,78,1,0,0,41,3,114,8,1,0,0,114,35,0,
0,0,114,76,1,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,20,95,112,97,116,104,95,105,109,
- 112,111,114,116,101,114,95,99,97,99,104,101,55,7,0,0,
+ 112,111,114,116,101,114,95,99,97,99,104,101,56,7,0,0,
115,16,0,0,0,0,8,12,1,15,1,3,1,17,1,13,
1,15,1,18,1,122,31,80,97,116,104,70,105,110,100,101,
114,46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,
@@ -3375,7 +3375,7 @@ const unsigned char _Py_M__importlib[] = {
114,158,0,0,0,114,76,1,0,0,114,169,0,0,0,114,
170,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,218,16,95,108,101,103,97,99,
- 121,95,103,101,116,95,115,112,101,99,72,7,0,0,115,18,
+ 121,95,103,101,116,95,115,112,101,99,73,7,0,0,115,18,
0,0,0,0,4,15,1,24,2,15,1,6,1,12,1,13,
1,15,1,9,1,122,27,80,97,116,104,70,105,110,100,101,
114,46,95,108,101,103,97,99,121,95,103,101,116,95,115,112,
@@ -3411,7 +3411,7 @@ const unsigned char _Py_M__importlib[] = {
97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101,
110,116,114,121,114,76,1,0,0,114,177,0,0,0,114,170,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,218,9,95,103,101,116,95,115,112,101,99,87,7,0,
+ 0,0,218,9,95,103,101,116,95,115,112,101,99,88,7,0,
0,115,40,0,0,0,0,5,6,1,13,1,21,1,6,1,
15,1,12,1,15,1,21,2,18,1,12,1,6,1,15,1,
4,1,9,1,12,1,15,5,20,2,15,1,9,1,122,20,
@@ -3439,7 +3439,7 @@ const unsigned char _Py_M__importlib[] = {
59,1,0,0,41,6,114,8,1,0,0,114,158,0,0,0,
114,35,0,0,0,114,9,1,0,0,114,177,0,0,0,114,
83,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,10,1,0,0,119,7,0,0,115,26,0,0,
+ 0,0,0,114,10,1,0,0,120,7,0,0,115,26,0,0,
0,0,4,12,1,12,1,21,1,12,1,4,1,15,1,9,
1,6,3,9,1,24,1,4,2,7,2,122,20,80,97,116,
104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,
@@ -3461,7 +3461,7 @@ const unsigned char _Py_M__importlib[] = {
32,32,78,41,2,114,10,1,0,0,114,169,0,0,0,41,
4,114,8,1,0,0,114,158,0,0,0,114,35,0,0,0,
114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,11,1,0,0,141,7,0,0,115,8,0,
+ 5,0,0,0,114,11,1,0,0,142,7,0,0,115,8,0,
0,0,0,8,18,1,12,1,4,1,122,22,80,97,116,104,
70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,
108,101,41,12,114,57,0,0,0,114,56,0,0,0,114,58,
@@ -3469,7 +3469,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,78,1,0,0,114,79,1,0,0,114,80,1,0,
0,114,84,1,0,0,114,10,1,0,0,114,11,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,72,1,0,0,26,7,0,0,115,22,0,
+ 5,0,0,0,114,72,1,0,0,27,7,0,0,115,22,0,
0,0,12,2,6,2,18,8,18,17,18,17,18,15,3,1,
18,31,3,1,21,21,3,1,114,72,1,0,0,99,0,0,
0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,
@@ -3518,7 +3518,7 @@ const unsigned char _Py_M__importlib[] = {
136,0,0,102,2,0,86,1,113,3,0,100,0,0,83,41,
1,78,114,4,0,0,0,41,2,114,22,0,0,0,114,56,
1,0,0,41,1,114,169,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,77,0,0,0,170,7,0,0,115,2,0,
+ 5,0,0,0,114,77,0,0,0,171,7,0,0,115,2,0,
0,0,6,0,122,38,70,105,108,101,70,105,110,100,101,114,
46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,
115,62,46,60,103,101,110,101,120,112,114,62,114,116,0,0,
@@ -3531,7 +3531,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105,
108,115,90,7,108,111,97,100,101,114,115,114,127,0,0,0,
114,4,0,0,0,41,1,114,169,0,0,0,114,5,0,0,
- 0,114,72,0,0,0,164,7,0,0,115,16,0,0,0,0,
+ 0,114,72,0,0,0,165,7,0,0,115,16,0,0,0,0,
4,6,1,19,1,36,1,9,2,15,1,9,1,12,1,122,
19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,
105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,
@@ -3541,7 +3541,7 @@ const unsigned char _Py_M__importlib[] = {
114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,29,
0,0,0,78,114,138,0,0,0,41,1,114,87,1,0,0,
41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,73,1,0,0,178,7,0,0,115,
+ 0,114,5,0,0,0,114,73,1,0,0,179,7,0,0,115,
2,0,0,0,0,2,122,28,70,105,108,101,70,105,110,100,
101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,
99,104,101,115,99,2,0,0,0,0,0,0,0,3,0,0,
@@ -3565,7 +3565,7 @@ const unsigned char _Py_M__importlib[] = {
32,32,78,41,3,114,10,1,0,0,114,169,0,0,0,114,
220,0,0,0,41,3,114,71,0,0,0,114,158,0,0,0,
114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,165,0,0,0,184,7,0,0,115,8,0,
+ 5,0,0,0,114,165,0,0,0,185,7,0,0,115,8,0,
0,0,0,7,15,1,12,1,10,1,122,22,70,105,108,101,
70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,
101,114,99,6,0,0,0,0,0,0,0,7,0,0,0,7,
@@ -3577,7 +3577,7 @@ const unsigned char _Py_M__importlib[] = {
243,0,0,0,114,158,0,0,0,114,35,0,0,0,114,228,
0,0,0,114,9,1,0,0,114,169,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,84,1,0,
- 0,196,7,0,0,115,6,0,0,0,0,1,15,1,18,1,
+ 0,197,7,0,0,115,6,0,0,0,0,1,15,1,18,1,
122,20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,
116,95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,
14,0,0,0,15,0,0,0,67,0,0,0,115,240,1,0,
@@ -3640,7 +3640,7 @@ const unsigned char _Py_M__importlib[] = {
104,114,56,1,0,0,114,243,0,0,0,90,13,105,110,105,
116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,108,
95,112,97,116,104,114,177,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,10,1,0,0,201,7,
+ 4,0,0,0,114,5,0,0,0,114,10,1,0,0,202,7,
0,0,115,68,0,0,0,0,3,6,1,19,1,3,1,34,
1,13,1,11,1,15,1,10,1,12,2,9,1,9,1,15,
2,9,1,6,2,12,1,18,1,22,1,10,1,15,1,12,
@@ -3677,7 +3677,7 @@ const unsigned char _Py_M__importlib[] = {
0,146,2,0,113,6,0,83,114,4,0,0,0,41,1,114,
139,0,0,0,41,2,114,22,0,0,0,90,2,102,110,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,250,9,
- 60,115,101,116,99,111,109,112,62,19,8,0,0,115,2,0,
+ 60,115,101,116,99,111,109,112,62,20,8,0,0,115,2,0,
0,0,9,0,122,41,70,105,108,101,70,105,110,100,101,114,
46,95,102,105,108,108,95,99,97,99,104,101,46,60,108,111,
99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,78,
@@ -3695,7 +3695,7 @@ const unsigned char _Py_M__importlib[] = {
110,116,101,110,116,115,114,70,1,0,0,114,67,0,0,0,
114,64,1,0,0,114,56,1,0,0,90,8,110,101,119,95,
110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,92,1,0,0,246,7,0,0,115,34,0,0,
+ 0,0,0,114,92,1,0,0,247,7,0,0,115,34,0,0,
0,0,2,9,1,3,1,31,1,22,3,11,3,18,1,18,
7,9,1,13,1,24,1,6,1,27,2,6,1,17,1,9,
1,18,1,122,22,70,105,108,101,70,105,110,100,101,114,46,
@@ -3734,7 +3734,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,41,1,114,35,0,0,0,41,2,114,8,1,0,
0,114,91,1,0,0,114,4,0,0,0,114,5,0,0,0,
218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,
- 70,105,108,101,70,105,110,100,101,114,31,8,0,0,115,6,
+ 70,105,108,101,70,105,110,100,101,114,32,8,0,0,115,6,
0,0,0,0,2,12,1,21,1,122,54,70,105,108,101,70,
105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,
60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,111,
@@ -3742,7 +3742,7 @@ const unsigned char _Py_M__importlib[] = {
114,114,4,0,0,0,41,3,114,8,1,0,0,114,91,1,
0,0,114,98,1,0,0,114,4,0,0,0,41,2,114,8,
1,0,0,114,91,1,0,0,114,5,0,0,0,218,9,112,
- 97,116,104,95,104,111,111,107,21,8,0,0,115,4,0,0,
+ 97,116,104,95,104,111,111,107,22,8,0,0,115,4,0,0,
0,0,10,21,6,122,20,70,105,108,101,70,105,110,100,101,
114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,0,
0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,
@@ -3751,7 +3751,7 @@ const unsigned char _Py_M__importlib[] = {
110,100,101,114,40,123,33,114,125,41,41,2,114,47,0,0,
0,114,35,0,0,0,41,1,114,71,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,101,0,0,
- 0,39,8,0,0,115,2,0,0,0,0,1,122,19,70,105,
+ 0,40,8,0,0,115,2,0,0,0,0,1,122,19,70,105,
108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,
95,41,15,114,57,0,0,0,114,56,0,0,0,114,58,0,
0,0,114,59,0,0,0,114,72,0,0,0,114,73,1,0,
@@ -3759,7 +3759,7 @@ const unsigned char _Py_M__importlib[] = {
114,84,1,0,0,114,10,1,0,0,114,92,1,0,0,114,
15,1,0,0,114,99,1,0,0,114,101,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,85,1,0,0,155,7,0,0,115,20,0,0,0,
+ 0,0,114,85,1,0,0,156,7,0,0,115,20,0,0,0,
12,7,6,2,12,14,12,4,6,2,12,12,12,5,15,45,
12,31,18,18,114,85,1,0,0,99,0,0,0,0,0,0,
0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,
@@ -3776,7 +3776,7 @@ const unsigned char _Py_M__importlib[] = {
32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,
46,78,41,2,114,106,0,0,0,114,3,1,0,0,41,1,
114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,75,0,0,0,49,8,0,0,115,2,0,
+ 5,0,0,0,114,75,0,0,0,50,8,0,0,115,2,0,
0,0,0,2,122,28,95,73,109,112,111,114,116,76,111,99,
107,67,111,110,116,101,120,116,46,95,95,101,110,116,101,114,
95,95,99,4,0,0,0,0,0,0,0,4,0,0,0,1,
@@ -3790,13 +3790,13 @@ const unsigned char _Py_M__importlib[] = {
101,120,99,95,116,121,112,101,90,9,101,120,99,95,118,97,
108,117,101,90,13,101,120,99,95,116,114,97,99,101,98,97,
99,107,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,81,0,0,0,53,8,0,0,115,2,0,0,0,0,
+ 0,114,81,0,0,0,54,8,0,0,115,2,0,0,0,0,
2,122,27,95,73,109,112,111,114,116,76,111,99,107,67,111,
110,116,101,120,116,46,95,95,101,120,105,116,95,95,78,41,
6,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,
114,59,0,0,0,114,75,0,0,0,114,81,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,100,1,0,0,45,8,0,0,115,6,0,0,
+ 0,0,0,114,100,1,0,0,46,8,0,0,115,6,0,0,
0,12,2,6,2,12,4,114,100,1,0,0,99,3,0,0,
0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
0,115,91,0,0,0,124,1,0,106,0,0,100,1,0,124,
@@ -3818,7 +3818,7 @@ const unsigned char _Py_M__importlib[] = {
112,97,99,107,97,103,101,218,5,108,101,118,101,108,90,4,
98,105,116,115,90,4,98,97,115,101,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,13,95,114,101,115,111,
- 108,118,101,95,110,97,109,101,58,8,0,0,115,10,0,0,
+ 108,118,101,95,110,97,109,101,59,8,0,0,115,10,0,0,
0,0,2,22,1,18,1,15,1,10,1,114,103,1,0,0,
99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,
0,67,0,0,0,115,47,0,0,0,124,0,0,106,0,0,
@@ -3829,7 +3829,7 @@ const unsigned char _Py_M__importlib[] = {
67,0,0,0,114,35,0,0,0,114,169,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,
102,105,110,100,95,115,112,101,99,95,108,101,103,97,99,121,
- 67,8,0,0,115,8,0,0,0,0,3,18,1,12,1,4,
+ 68,8,0,0,115,8,0,0,0,0,3,18,1,12,1,4,
1,114,104,1,0,0,99,3,0,0,0,0,0,0,0,9,
0,0,0,27,0,0,0,67,0,0,0,115,34,1,0,0,
116,0,0,106,1,0,115,28,0,116,2,0,106,3,0,100,
@@ -3862,7 +3862,7 @@ const unsigned char _Py_M__importlib[] = {
100,114,76,1,0,0,114,10,1,0,0,114,177,0,0,0,
114,179,0,0,0,114,208,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,10,95,102,105,110,100,
- 95,115,112,101,99,76,8,0,0,115,48,0,0,0,0,2,
+ 95,115,112,101,99,77,8,0,0,115,48,0,0,0,0,2,
9,1,19,4,15,1,16,1,10,1,3,1,13,1,13,1,
18,1,12,1,11,2,24,1,12,2,22,1,13,1,3,1,
13,1,13,4,9,2,12,1,4,2,7,2,11,2,114,106,
@@ -3899,7 +3899,7 @@ const unsigned char _Py_M__importlib[] = {
121,115,116,101,109,69,114,114,111,114,41,4,114,67,0,0,
0,114,101,1,0,0,114,102,1,0,0,114,171,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 13,95,115,97,110,105,116,121,95,99,104,101,99,107,116,8,
+ 13,95,115,97,110,105,116,121,95,99,104,101,99,107,117,8,
0,0,115,24,0,0,0,0,2,15,1,30,1,12,1,15,
1,6,1,15,1,15,1,15,1,6,2,27,1,19,1,114,
109,1,0,0,122,16,78,111,32,109,111,100,117,108,101,32,
@@ -3938,7 +3938,7 @@ const unsigned char _Py_M__importlib[] = {
114,177,0,0,0,114,179,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,23,95,102,105,110,100,
95,97,110,100,95,108,111,97,100,95,117,110,108,111,99,107,
- 101,100,136,8,0,0,115,42,0,0,0,0,1,6,1,19,
+ 101,100,137,8,0,0,115,42,0,0,0,0,1,6,1,19,
1,6,1,15,1,16,2,15,1,11,1,13,1,3,1,13,
1,13,1,22,1,26,1,15,1,12,1,30,2,18,1,6,
2,13,1,32,1,114,112,1,0,0,99,2,0,0,0,0,
@@ -3952,7 +3952,7 @@ const unsigned char _Py_M__importlib[] = {
107,46,78,41,2,114,103,0,0,0,114,112,1,0,0,41,
2,114,67,0,0,0,114,111,1,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,14,95,102,105,110,
- 100,95,97,110,100,95,108,111,97,100,163,8,0,0,115,4,
+ 100,95,97,110,100,95,108,111,97,100,164,8,0,0,115,4,
0,0,0,0,2,13,1,114,113,1,0,0,99,3,0,0,
0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
0,115,172,0,0,0,116,0,0,124,0,0,124,1,0,124,
@@ -3996,7 +3996,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,112,0,0,0,41,5,114,67,0,0,0,114,101,1,
0,0,114,102,1,0,0,114,179,0,0,0,114,151,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,114,1,0,0,169,8,0,0,115,26,0,0,0,0,9,
+ 114,114,1,0,0,170,8,0,0,115,26,0,0,0,0,9,
16,1,12,1,21,1,10,1,15,1,13,1,13,1,12,1,
10,2,15,1,21,1,10,1,114,114,1,0,0,99,3,0,
0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0,
@@ -4043,7 +4043,7 @@ const unsigned char _Py_M__importlib[] = {
90,9,102,114,111,109,95,110,97,109,101,114,37,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,
- 116,193,8,0,0,115,34,0,0,0,0,10,15,1,12,1,
+ 116,194,8,0,0,115,34,0,0,0,0,10,15,1,12,1,
12,1,13,1,15,1,22,1,13,1,15,1,21,1,3,1,
17,1,18,4,21,1,15,1,9,1,32,1,114,120,1,0,
0,99,1,0,0,0,0,0,0,0,2,0,0,0,2,0,
@@ -4068,7 +4068,7 @@ const unsigned char _Py_M__importlib[] = {
114,93,0,0,0,114,32,0,0,0,41,2,218,7,103,108,
111,98,97,108,115,114,101,1,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,17,95,99,97,108,99,
- 95,95,95,112,97,99,107,97,103,101,95,95,225,8,0,0,
+ 95,95,95,112,97,99,107,97,103,101,95,95,226,8,0,0,
115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,25,
1,114,122,1,0,0,99,0,0,0,0,0,0,0,0,3,
0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,0,
@@ -4088,7 +4088,7 @@ const unsigned char _Py_M__importlib[] = {
90,10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,
117,114,99,101,90,8,98,121,116,101,99,111,100,101,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,240,0,
- 0,0,240,8,0,0,115,8,0,0,0,0,5,18,1,12,
+ 0,0,241,8,0,0,115,8,0,0,0,0,5,18,1,12,
1,12,1,114,240,0,0,0,99,5,0,0,0,0,0,0,
0,9,0,0,0,5,0,0,0,67,0,0,0,115,227,0,
0,0,124,4,0,100,1,0,107,2,0,114,27,0,116,0,
@@ -4143,7 +4143,7 @@ const unsigned char _Py_M__importlib[] = {
114,102,1,0,0,114,179,0,0,0,90,8,103,108,111,98,
97,108,115,95,114,101,1,0,0,90,7,99,117,116,95,111,
102,102,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,10,95,95,105,109,112,111,114,116,95,95,251,8,0,
+ 0,218,10,95,95,105,109,112,111,114,116,95,95,252,8,0,
0,115,26,0,0,0,0,11,12,1,15,2,24,1,12,1,
18,1,6,3,12,1,23,1,6,1,4,4,35,3,40,2,
114,125,1,0,0,99,1,0,0,0,0,0,0,0,3,0,
@@ -4159,7 +4159,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,177,0,0,0,114,178,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,98,
117,105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,
- 30,9,0,0,115,10,0,0,0,0,1,15,1,12,1,19,
+ 31,9,0,0,115,10,0,0,0,0,1,15,1,12,1,19,
1,12,1,114,126,1,0,0,99,2,0,0,0,0,0,0,
0,19,0,0,0,12,0,0,0,67,0,0,0,115,232,2,
0,0,124,1,0,97,0,0,124,0,0,97,1,0,116,1,
@@ -4233,7 +4233,7 @@ const unsigned char _Py_M__importlib[] = {
0,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,
29,0,0,0,78,41,1,114,31,0,0,0,41,2,114,22,
0,0,0,114,130,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,77,0,0,0,82,9,0,0,
+ 0,0,114,5,0,0,0,114,77,0,0,0,83,9,0,0,
115,2,0,0,0,6,0,122,25,95,115,101,116,117,112,46,
60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,
114,62,114,84,0,0,0,122,30,105,109,112,111,114,116,108,
@@ -4269,7 +4269,7 @@ const unsigned char _Py_M__importlib[] = {
101,97,107,114,101,102,95,109,111,100,117,108,101,90,13,119,
105,110,114,101,103,95,109,111,100,117,108,101,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,6,95,115,101,
- 116,117,112,38,9,0,0,115,108,0,0,0,0,9,6,1,
+ 116,117,112,39,9,0,0,115,108,0,0,0,0,9,6,1,
6,2,12,1,9,2,6,3,12,1,28,1,15,1,15,1,
9,1,15,1,9,2,3,1,15,1,12,1,20,3,13,1,
13,1,15,1,15,2,13,1,20,3,33,1,19,2,31,1,
@@ -4299,7 +4299,7 @@ const unsigned char _Py_M__importlib[] = {
134,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,
108,111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,
- 125,9,0,0,115,16,0,0,0,0,2,13,1,9,1,28,
+ 126,9,0,0,115,16,0,0,0,0,2,13,1,9,1,28,
1,16,1,16,1,15,1,19,1,114,136,1,0,0,41,3,
122,3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,
91,114,59,0,0,0,114,10,0,0,0,114,11,0,0,0,
@@ -4337,7 +4337,7 @@ const unsigned char _Py_M__importlib[] = {
115,168,0,0,0,6,17,6,3,12,12,12,5,12,5,12,
6,12,12,12,10,12,9,12,5,12,7,15,22,12,8,12,
4,15,4,19,20,6,2,6,3,22,4,19,68,19,21,19,
- 19,12,19,12,20,12,114,22,1,18,2,6,2,9,2,9,
+ 19,12,19,12,20,12,115,22,1,18,2,6,2,9,2,9,
1,9,2,15,27,12,23,12,19,12,12,18,8,12,18,12,
11,12,11,12,17,12,16,21,55,21,12,18,10,12,14,12,
36,19,27,19,106,24,22,9,3,12,1,15,63,18,45,19,
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
index f90a17a7ee2..1553a7a32f7 100644
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -15,8 +15,8 @@ static void *opcode_targets[256] = {
&&_unknown_opcode,
&&_unknown_opcode,
&&TARGET_UNARY_INVERT,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_BINARY_MATRIX_MULTIPLY,
+ &&TARGET_INPLACE_MATRIX_MULTIPLY,
&&_unknown_opcode,
&&TARGET_BINARY_POWER,
&&TARGET_BINARY_MULTIPLY,