mirror of
https://github.com/Instagram/LibCST.git
synced 2025-12-23 10:35:53 +00:00
[parsing 3.3] Matrix multiply (PEP 465)
This commit is contained in:
parent
2a3703ec0a
commit
9d0a2be845
3 changed files with 84 additions and 1 deletions
73
libcst/_nodes/tests/test_matrix_multiply.py
Normal file
73
libcst/_nodes/tests/test_matrix_multiply.py
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
# pyre-strict
|
||||
from typing import Any
|
||||
|
||||
import libcst as cst
|
||||
from libcst._nodes.tests.base import (
|
||||
CSTNodeTest,
|
||||
parse_expression_as,
|
||||
parse_statement_as,
|
||||
)
|
||||
from libcst.testing.utils import data_provider
|
||||
|
||||
|
||||
class NamedExprTest(CSTNodeTest):
|
||||
@data_provider(
|
||||
(
|
||||
{
|
||||
"node": cst.BinaryOperation(
|
||||
left=cst.Name("a"),
|
||||
operator=cst.MatrixMultiply(),
|
||||
right=cst.Name("b"),
|
||||
),
|
||||
"code": "a @ b",
|
||||
"parser": parse_expression_as(python_version="3.8"),
|
||||
},
|
||||
{
|
||||
"node": cst.SimpleStatementLine(
|
||||
body=(
|
||||
cst.AugAssign(
|
||||
target=cst.Name("a"),
|
||||
operator=cst.MatrixMultiplyAssign(),
|
||||
value=cst.Name("b"),
|
||||
),
|
||||
),
|
||||
),
|
||||
"code": "a @= b\n",
|
||||
"parser": parse_statement_as(python_version="3.8"),
|
||||
},
|
||||
)
|
||||
)
|
||||
def test_valid(self, **kwargs: Any) -> None:
|
||||
self.validate_node(**kwargs)
|
||||
|
||||
@data_provider(
|
||||
(
|
||||
{
|
||||
"code": "a @ b",
|
||||
"parser": parse_expression_as(python_version="3.6"),
|
||||
"expect_success": True,
|
||||
},
|
||||
{
|
||||
"code": "a @ b",
|
||||
"parser": parse_expression_as(python_version="3.3"),
|
||||
"expect_success": False,
|
||||
},
|
||||
{
|
||||
"code": "a @= b",
|
||||
"parser": parse_statement_as(python_version="3.6"),
|
||||
"expect_success": True,
|
||||
},
|
||||
{
|
||||
"code": "a @= b",
|
||||
"parser": parse_statement_as(python_version="3.3"),
|
||||
"expect_success": False,
|
||||
},
|
||||
)
|
||||
)
|
||||
def test_versions(self, code, parser, expect_success) -> None:
|
||||
self.assert_parses(code, parser, expect_success)
|
||||
|
|
@ -478,7 +478,8 @@ def convert_star_expr(
|
|||
@with_production("and_expr", "shift_expr ('&' shift_expr)*")
|
||||
@with_production("shift_expr", "arith_expr (('<<'|'>>') arith_expr)*")
|
||||
@with_production("arith_expr", "term (('+'|'-') term)*")
|
||||
@with_production("term", "factor (('*'|'@'|'/'|'%'|'//') factor)*")
|
||||
@with_production("term", "factor (('*'|'@'|'/'|'%'|'//') factor)*", version=">=3.5")
|
||||
@with_production("term", "factor (('*'|'/'|'%'|'//') factor)*", version="<3.5")
|
||||
def convert_binop(
|
||||
config: ParserConfig, children: typing.Sequence[typing.Any]
|
||||
) -> typing.Any:
|
||||
|
|
|
|||
|
|
@ -306,6 +306,15 @@ def convert_annassign(config: ParserConfig, children: Sequence[Any]) -> Any:
|
|||
"('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | "
|
||||
+ "'>>=' | '**=' | '//=') (yield_expr | testlist)"
|
||||
),
|
||||
version=">=3.5",
|
||||
)
|
||||
@with_production(
|
||||
"augassign",
|
||||
(
|
||||
"('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | "
|
||||
+ "'>>=' | '**=' | '//=') (yield_expr | testlist)"
|
||||
),
|
||||
version="<3.5",
|
||||
)
|
||||
def convert_augassign(config: ParserConfig, children: Sequence[Any]) -> Any:
|
||||
op, expr = children
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue