ConvolutedDog opened a new issue, #19552: URL: https://github.com/apache/tvm/issues/19552
Before this change (https://github.com/apache/tvm/pull/19535/changes#diff-99b18a9138d30ae5ee7f4f2bc8ebe1e3629024386488d38b9e65bfdcd60226d8L327), CI lint did not report this syntax error: ```bash tests/python/s_tir/meta_schedule/test_meta_schedule_search_strategy.py:327:107: SyntaxError: Expected ':', found newline | 327 | def test_meta_schedule_evolutionary_search_skip_invalid_measured_trace() # pylint: disable = invalid-name | ^ 328 | # Construct an incompatible measured trace: it references block name "other", 329 | # which doesn't exist in Matmul. Replaying this trace should fail and be skipped. 330 | wrong_sch = Schedule(OtherBlock) | ``` The following issues are reported locally: ```bash check ASF Header.........................................................Passed check file types.........................................................Passed check for added large files..............................................Passed check for case conflicts.................................................Passed check for merge conflicts................................................Passed check for broken symlinks............................(no files to check)Skipped fix end of files.........................................................Failed - hook id: end-of-file-fixer - exit code: 1 - files were modified by this hook Fixing docs/arch/pass_infra.rst mixed line ending........................................................Passed fix requirements.txt.................................(no files to check)Skipped trim trailing whitespace.................................................Failed - hook id: trailing-whitespace - exit code: 1 - files were modified by this hook Fixing tests/python/relax/test_frontend_from_exported_program.py Fixing python/tvm/relax/frontend/tflite/tflite_frontend.py Fixing python/tvm/relax/frontend/torch/fx_translator.py Fixing tests/python/relax/test_frontend_tflite.py Fixing tests/python/relax/test_frontend_onnx.py Fixing python/tvm/relax/frontend/onnx/onnx_frontend.py Fixing python/tvm/relax/frontend/nn/core.py check yaml...............................................................Passed check toml...............................................................Passed yamllint.................................................................Passed taplo-format.............................................................Passed ruff check...............................................................Failed - hook id: ruff-check - exit code: 1 - files were modified by this hook docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.py:391:43: RUF003 Comment contains ambiguous `–` (EN DASH). Did you mean `-` (HYPHEN-MINUS)? | 389 | # TIR and Relax functions, and Relax functions can call Python functions. We have already seen: 390 | # 391 | # - Python → TIR via ``call_tir`` (Steps 1–3) | ^ RUF003 392 | # - Python → packed function via ``call_dps_packed`` (Step 3) 393 | # - Relax → Python via ``R.call_py_func`` (Step 5) | python/tvm/relax/frontend/nn/core.py:649:101: E501 Line too long (105 > 100) | 647 | raise TypeError(f"ParameterDict keys must be strings, but got {type(key).__name__}") 648 | if not isinstance(param, Parameter): 649 | raise TypeError(f"ParameterDict values must be nn.Parameter, but got {type(param).__name__}") | ^^^^^ E501 650 | self.params[key] = param | python/tvm/relax/frontend/nn/core.py:734:101: E501 Line too long (107 > 100) | 732 | def __setitem__(self, idx: int, param: Parameter) -> None: 733 | if not isinstance(param, Parameter): 734 | raise TypeError(f"ParameterList elements must be nn.Parameter, but got {type(param).__name__}") | ^^^^^^^ E501 735 | self.params[idx] = param | python/tvm/relax/frontend/nn/core.py:743:101: E501 Line too long (107 > 100) | 741 | """Add a parameter to the end of the ParameterList""" 742 | if not isinstance(param, Parameter): 743 | raise TypeError(f"ParameterList elements must be nn.Parameter, but got {type(param).__name__}") | ^^^^^^^ E501 744 | self.params.append(param) | python/tvm/relax/frontend/onnx/onnx_frontend.py:4626:9: F841 Local variable `split_is_scalar` is assigned to but never used | 4624 | input_tensor = inputs[0] 4625 | input_shape = input_tensor.struct_info.shape 4626 | split_is_scalar = False | ^^^^^^^^^^^^^^^ F841 4627 | 4628 | if len(inputs) == 1: | = help: Remove assignment to unused variable `split_is_scalar` python/tvm/relax/frontend/onnx/onnx_frontend.py:4643:16: UP038 Use `X | Y` in `isinstance` call instead of `(X, Y)` | 4641 | dim_size = input_shape[axis] 4642 | 4643 | if isinstance(dim_size, (int, tirx.IntImm)): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP038 4644 | dim_size_int = int(dim_size) 4645 | split = math.ceil(dim_size_int / chunk_size) | = help: Convert to `X | Y` python/tvm/relax/frontend/tflite/tflite_flexbuffer.py:113:101: E501 Line too long (101 > 100) | 111 | value_bit_width = BitWidth(value_type_packed & 3) 112 | value_byte_width = 1 << value_bit_width 113 | value_bytes = self.buffer[end + i * byte_width : end + i * byte_width + value_byte_width] | ^ E501 114 | if value_type == FlexBufferType.FBT_BOOL: 115 | value = bool(value_bytes[0]) | python/tvm/relax/frontend/tflite/tflite_frontend.py:568:101: E501 Line too long (102 > 100) | 566 | dims_ndim = int(self.get_tensor_shape(shape_tensor)[0]) 567 | dims_dtype = self.get_tensor_type_str(shape_tensor.tensor.Type()) 568 | dims_expr = self.bb.match_cast(dims_expr, relax.TensorStructInfo([dims_ndim], dims_dtype)) | ^^ E501 569 | dims_expr = self.bb.normalize(relax.op.astype(dims_expr, "int64")) 570 | shape_dataflow_var = self.bb.emit(relax.op.tensor_to_shape(dims_expr)) | python/tvm/relax/frontend/tflite/tflite_frontend.py:906:101: E501 Line too long (109 > 100) | 904 | pooled = self.bb.normalize(_op.reshape(pooled, data_shape)) 905 | denom = relax.op.power( 906 | relax.op.add(relax.const(bias, in_type), relax.op.multiply(relax.const(alpha, in_type), pooled)), | ^^^^^^^^^ E501 907 | relax.const(beta, in_type), 908 | ) | python/tvm/relax/frontend/tflite/tflite_frontend.py:999:101: E501 Line too long (105 > 100) | 997 | # Keep dynamic scalar RANGE explicit until frontend support is added. 998 | raise tvm.error.OpNotImplemented( 999 | "TFLite RANGE with dynamic scalar inputs is not supported in Relax frontend yet." | ^^^^^ E501 1000 | ) 1001 | else: | python/tvm/relax/frontend/tflite/tflite_frontend.py:4488:101: E501 Line too long (101 > 100) | 4486 | output_dtype = self.get_tensor_type_str(output_tensor.tensor.Type()) 4487 | 4488 | # topi.matrix_set_diag(input, diagonal, k1, k2, super_diag_right_align, sub_diag_right_align) | ^ E501 4489 | # TFLite MATRIX_SET_DIAG only sets the main diagonal, so k1=0, k2=0 4490 | out = relax.op.call_dps_packed( | python/tvm/relax/frontend/tflite/tflite_frontend.py:4492:101: E501 Line too long (112 > 100) | 4490 | out = relax.op.call_dps_packed( 4491 | "topi.matrix_set_diag", 4492 | (input_expr, diagonal_expr, relax.const(0), relax.const(0), relax.const(False), relax.const(False)), | ^^^^^^^^^^^^ E501 4493 | out_sinfo=relax.TensorStructInfo(output_shape, output_dtype), 4494 | ) | python/tvm/relax/frontend/tflite/tflite_frontend.py:4520:101: E501 Line too long (101 > 100) | 4518 | zeros_expr = relax.op.zeros(output_shape, output_dtype) 4519 | 4520 | # topi.matrix_set_diag(input, diagonal, k1, k2, super_diag_right_align, sub_diag_right_align) | ^ E501 4521 | # TFLite MATRIX_DIAG only sets the main diagonal, so k1=0, k2=0 4522 | out = relax.op.call_dps_packed( | python/tvm/relax/frontend/tflite/tflite_frontend.py:4524:101: E501 Line too long (112 > 100) | 4522 | out = relax.op.call_dps_packed( 4523 | "topi.matrix_set_diag", 4524 | (zeros_expr, diagonal_expr, relax.const(0), relax.const(0), relax.const(False), relax.const(False)), | ^^^^^^^^^^^^ E501 4525 | out_sinfo=relax.TensorStructInfo(output_shape, output_dtype), 4526 | ) | python/tvm/relax/frontend/torch/base_fx_graph_translator.py:1701:14: UP038 Use `X | Y` in `isinstance` call instead of `(X, Y)` | 1699 | elif isinstance(dim, int): 1700 | axes = [dim] 1701 | elif isinstance(dim, (list, tuple)) and all(isinstance(a, int) for a in dim): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP038 1702 | axes = list(dim) 1703 | else: | = help: Convert to `X | Y` python/tvm/relax/op/nn/nn.py:590:101: E501 Line too long (110 > 100) | 588 | -------- 589 | conv3d : Forward 3D convolution (default ``OIDHW`` weights vs. ``IODHW`` here). 590 | conv2d_transpose : 2D analogue; legalization supports the same TOPI subset (canonical layout, dilation 1). | ^^^^^^^^^^ E501 591 | 592 | Returns | python/tvm/relax/transform/legalize_ops/image.py:60:16: UP038 Use `X | Y` in `isinstance` call instead of `(X, Y)` | 58 | def _image_affine_grid(bb: BlockBuilder, call: Call) -> Expr: 59 | for v in call.args[1].values: 60 | if not isinstance(v, (int, tirx.IntImm)): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP038 61 | raise ValueError( 62 | "affine_grid legalization requires static target_shape, " | = help: Convert to `X | Y` python/tvm/relax/transform/legalize_ops/nn.py:225:101: E501 Line too long (103 > 100) | 223 | @register_legalize("relax.nn.conv3d_transpose") 224 | def _nn_conv3d_transpose(bb: BlockBuilder, call: Call) -> Expr: 225 | # Keep policy in sync with _nn_conv2d_transpose: only lower when TOPI supports the layout/dilation. | ^^^ E501 226 | if call.attrs.out_layout != call.attrs.data_layout: 227 | logging.info( | python/tvm/s_tir/meta_schedule/relax_integration.py:466:20: RUF005 Consider iterable unpacking instead of concatenation | 464 | @tvm.transform.module_pass(opt_level=3) 465 | def _ms_pipeline(mod: tvm.ir.IRModule, _ctx: tvm.transform.PassContext) -> tvm.ir.IRModule: 466 | fuse_seq = dispatch_passes + [ | ____________________^ 467 | | relax.transform.LegalizeOps(enable_warning=enable_warning), 468 | | relax.transform.AnnotateTIROpPattern(), 469 | | relax.transform.FoldConstant(), 470 | | relax.transform.FuseOps(), 471 | | relax.transform.FuseTIR(), 472 | | ] | |_________^ RUF005 473 | mod = tvm.transform.Sequential(fuse_seq)(mod) 474 | mod = MetaScheduleApplyDatabase(enable_warning=enable_warning)(mod) | = help: Replace with iterable unpacking python/tvm/topi/vision/multibox_transform_loc.py:77:9: E741 Ambiguous variable name: `l` | 76 | def decode_bbox(b, a, k): 77 | l = anchor[0, a, 0] | ^ E741 78 | t = anchor[0, a, 1] 79 | r = anchor[0, a, 2] | python/tvm/topi/vision/nms.py:555:8: UP038 Use `X | Y` in `isinstance` call instead of `(X, Y)` | 553 | if isinstance(max_output_size, int): 554 | max_output_size = tvm.tirx.const(max_output_size, dtype="int32") 555 | if isinstance(iou_threshold, (float, int)): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP038 556 | iou_threshold = tvm.tirx.const(iou_threshold, dtype=data.dtype) | = help: Convert to `X | Y` python/tvm/topi/vision/nms_util.py:311:12: UP038 Use `X | Y` in `isinstance` call instead of `(X, Y)` | 309 | selected_scores = T.buffer_proxy(selected_scores) 310 | 311 | if isinstance(iou_threshold, (float, int)): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP038 312 | iou_threshold = tvm.tirx.FloatImm("float32", float(iou_threshold)) 313 | elif isinstance(iou_threshold, te.Tensor): | = help: Convert to `X | Y` tests/python/relax/test_frontend_from_exported_program.py:7407:30: E741 Ambiguous variable name: `l` | 7405 | def test_index_put_with_tuple_output(): 7406 | class IndexPutTupleOutput(Module): 7407 | def forward(self, x, l, idx): | ^ E741 7408 | values = x 7409 | l[..., idx, idx] = values | tests/python/relax/test_frontend_from_exported_program.py:7437:13: E741 Ambiguous variable name: `l` | 7435 | def forward(self, x): 7436 | b, k, n = 2, 3, 5 7437 | l = x.new_zeros(b, k, n, n) | ^ E741 7438 | idx = torch.arange(n, device=x.device) | tests/python/relax/test_frontend_from_exported_program.py:7461:48: RUF003 Comment contains ambiguous `×` (MULTIPLICATION SIGN). Did you mean `x` (LATIN SMALL LETTER X)? | 7459 | # x: (2, 3, 5) → x[..., :1]: (2, 3, 1) 7460 | assert any(len(f.shape) == 3 and int(f.shape[-1]) == 1 for f in tensor_fields) 7461 | # l: (2, 3, 5, 5) → 4-D with spatial dims 5×5 | ^ RUF003 7462 | assert any( 7463 | len(f.shape) == 4 and int(f.shape[-2]) == 5 and int(f.shape[-1]) == 5 | tests/python/relax/test_frontend_tflite.py:3385:5: F811 Redefinition of unused `test_prelu` from line 738 | 3383 | ], 3384 | ) 3385 | def test_prelu(shared_axes): | ^^^^^^^^^^ F811 3386 | inputs = tf.keras.Input(shape=(4, 4, 3), batch_size=1, dtype=tf.float32) 3387 | prelu_kwargs = { | = help: Remove definition: `test_prelu` tests/python/s_tir/meta_schedule/test_meta_schedule_search_strategy.py:327:107: SyntaxError: Expected ':', found newline | 327 | def test_meta_schedule_evolutionary_search_skip_invalid_measured_trace() # pylint: disable = invalid-name | ^ 328 | # Construct an incompatible measured trace: it references block name "other", 329 | # which doesn't exist in Matmul. Replaying this trace should fail and be skipped. 330 | wrong_sch = Schedule(OtherBlock) | Found 48 errors (21 fixed, 27 remaining). No fixes available (7 hidden fixes can be enabled with the `--unsafe-fixes` option). ruff format..............................................................Failed - hook id: ruff-format - exit code: 2 - files were modified by this hook error: Failed to parse tests/python/s_tir/meta_schedule/test_meta_schedule_search_strategy.py:327:107: Expected ':', found newline 28 files reformatted, 1377 files left unchanged clang-format.............................................................Failed - hook id: clang-format - files were modified by this hook cython-lint..........................................(no files to check)Skipped double-quote Cython strings..........................(no files to check)Skipped ``` ### Environment TVM: main branch Python: v3.10.12 pre_commit: v4.6.0 ### Steps to reproduce ```bash pre-commit run --all-files ``` ### Triage Please refer to the list of label tags [here](https://github.com/apache/tvm/wiki/Issue-Triage-Labels) to find the relevant tags and add them below in a bullet format (example below). * needs-triage -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
