diff --git a/modules/dnn/src/layers/cast2_layer.cpp b/modules/dnn/src/layers/cast2_layer.cpp index eeec9e0f67..b9370849f1 100644 --- a/modules/dnn/src/layers/cast2_layer.cpp +++ b/modules/dnn/src/layers/cast2_layer.cpp @@ -118,8 +118,16 @@ namespace ushort* out = dst_bits.ptr(r); for (int i = 0; i < cols_x_cn; ++i) { + // float32 -> bfloat16 with round-to-nearest-even (matches ONNX). Cv32suf u; u.f = in[i]; - out[i] = (ushort)(u.u >> 16); + const uint32_t x = u.u; + if ((x & 0x7fffffffu) > 0x7f800000u) // NaN: keep it NaN + out[i] = (ushort)((x >> 16) | 0x0040u); + else + { + const uint32_t bias = 0x7fffu + ((x >> 16) & 1u); + out[i] = (ushort)((x + bias) >> 16); + } } } return; @@ -210,7 +218,6 @@ public: const int in0CN = in0Type >= 0 ? CV_MAT_CN(in0Type) : 1; int planDepth = targetDepth; if (planDepth == CV_16F) planDepth = CV_32F; - if (planDepth == CV_16BF) planDepth = CV_16U; const int outType = CV_MAKETYPE(planDepth, in0CN); outputs.assign(1, outType); } @@ -243,6 +250,13 @@ public: return false; } + // bf16 needs the float->bfloat16 bit reduction; a plain OpenCL convertTo + // would numerically round instead. Fall back to the CPU path. + if (runtimeTargetDepth == CV_16BF) + { + return false; + } + if (inputs[0].depth() == outputs[0].depth()) inputs[0].copyTo(outputs[0]); else @@ -291,8 +305,7 @@ public: } CV_CheckGE(runtimeTargetDepth, 0, "Cast: failed to resolve target data type at runtime"); - int plannedDDepth = (runtimeTargetDepth == CV_16F) ? CV_32F : - (runtimeTargetDepth == CV_16BF ? CV_16U : runtimeTargetDepth); + int plannedDDepth = (runtimeTargetDepth == CV_16F) ? CV_32F : runtimeTargetDepth; if (dst0.depth() != plannedDDepth) dst0.create(dst0.size(), CV_MAKETYPE(plannedDDepth, src0.channels())); diff --git a/modules/dnn/src/layers/nary_eltwise_layers.cpp b/modules/dnn/src/layers/nary_eltwise_layers.cpp index dce9b75bc5..650036d0c3 100644 --- a/modules/dnn/src/layers/nary_eltwise_layers.cpp +++ b/modules/dnn/src/layers/nary_eltwise_layers.cpp @@ -417,7 +417,8 @@ public: } else if (!baseIsFloat && expIsFloat) { - out_type = CV_32F; + // ONNX Pow output type follows the base (X): integer base -> integer output. + out_type = inputs[0]; } else { diff --git a/modules/dnn/test/test_common.impl.hpp b/modules/dnn/test/test_common.impl.hpp index 4ba8127f68..2098e56efc 100644 --- a/modules/dnn/test/test_common.impl.hpp +++ b/modules/dnn/test/test_common.impl.hpp @@ -82,6 +82,12 @@ void normAssert( { cv::Mat refMat = ref.getMat(); cv::Mat testMat = test.getMat(); + // 16-bit float types (half / bfloat16) are compared as float32: the two-arg + // cvtest::norm requires identical types and does not down-convert them. + if (refMat.depth() == CV_16F || refMat.depth() == CV_16BF) + refMat.convertTo(refMat, CV_32F); + if (testMat.depth() == CV_16F || testMat.depth() == CV_16BF) + testMat.convertTo(testMat, CV_32F); const cv::MatShape refShape = refMat.shape(); const cv::MatShape testShape = testMat.shape(); const bool scalar1dCompatible = diff --git a/modules/dnn/test/test_onnx_conformance.cpp b/modules/dnn/test/test_onnx_conformance.cpp index d1b65cd609..0d932d0fcf 100644 --- a/modules/dnn/test/test_onnx_conformance.cpp +++ b/modules/dnn/test/test_onnx_conformance.cpp @@ -554,7 +554,6 @@ static const TestCase testConformanceConfig[] = { {"test_pow_bcast_array", 2, 1}, {"test_pow_bcast_scalar", 2, 1}, {"test_pow_example", 2, 1}, - {"test_pow_types_float", 2, 1}, {"test_pow_types_float32_int32", 2, 1}, {"test_pow_types_float32_int64", 2, 1}, {"test_pow_types_float32_uint32", 2, 1}, @@ -1673,6 +1672,160 @@ static const TestCase testConformanceConfig[] = { {"test_top_k_uint64", 0, 0}, {"test_unique_length_1", 0, 0}, {"test_wrap_pad", 0, 0}, + + // ===== ONNX 1.22 additions ===== + {"test_attention_4d_softcap_neginf_mask", 4, 1}, + {"test_attention_4d_softcap_neginf_mask_expanded", 4, 1}, + {"test_attention_4d_softcap_neginf_mask_poison", 4, 1}, + {"test_attention_4d_softcap_neginf_mask_poison_expanded", 4, 1}, + {"test_bitcast_2d_float32_to_int32", 1, 1}, + {"test_bitcast_bool_to_uint8", 1, 1}, + {"test_bitcast_float32_to_int32", 1, 1}, + {"test_bitcast_float64_to_int64", 1, 1}, + {"test_bitcast_int32_to_float32", 1, 1}, + {"test_bitcast_int64_to_float64", 1, 1}, + {"test_bitcast_int8_to_uint8", 1, 1}, + {"test_bitcast_scalar_float32_to_int32", 1, 1}, + {"test_bitcast_uint16_to_int16", 1, 1}, + {"test_bitcast_uint32_to_int32", 1, 1}, + {"test_cast_FLOAT16_to_INT2", 1, 1}, + {"test_cast_FLOAT16_to_UINT2", 1, 1}, + {"test_cast_FLOAT_to_INT2", 1, 1}, + {"test_cast_FLOAT_to_UINT2", 1, 1}, + {"test_cast_INT2_to_FLOAT", 1, 1}, + {"test_cast_INT2_to_FLOAT16", 1, 1}, + {"test_cast_INT2_to_INT8", 1, 1}, + {"test_cast_UINT2_to_FLOAT", 1, 1}, + {"test_cast_UINT2_to_FLOAT16", 1, 1}, + {"test_cast_UINT2_to_UINT8", 1, 1}, + {"test_castlike_FLOAT16_to_INT2", 2, 1}, + {"test_castlike_FLOAT16_to_INT2_expanded", 2, 1}, + {"test_castlike_FLOAT16_to_UINT2", 2, 1}, + {"test_castlike_FLOAT16_to_UINT2_expanded", 2, 1}, + {"test_castlike_FLOAT_to_INT2", 2, 1}, + {"test_castlike_FLOAT_to_INT2_expanded", 2, 1}, + {"test_castlike_FLOAT_to_UINT2", 2, 1}, + {"test_castlike_FLOAT_to_UINT2_expanded", 2, 1}, + {"test_castlike_INT2_to_FLOAT", 2, 1}, + {"test_castlike_INT2_to_FLOAT16", 2, 1}, + {"test_castlike_INT2_to_FLOAT16_expanded", 2, 1}, + {"test_castlike_INT2_to_FLOAT_expanded", 2, 1}, + {"test_castlike_INT2_to_INT8", 2, 1}, + {"test_castlike_INT2_to_INT8_expanded", 2, 1}, + {"test_castlike_UINT2_to_FLOAT", 2, 1}, + {"test_castlike_UINT2_to_FLOAT16", 2, 1}, + {"test_castlike_UINT2_to_FLOAT16_expanded", 2, 1}, + {"test_castlike_UINT2_to_FLOAT_expanded", 2, 1}, + {"test_castlike_UINT2_to_UINT8", 2, 1}, + {"test_castlike_UINT2_to_UINT8_expanded", 2, 1}, + {"test_castlike_no_saturate_FLOAT_to_FLOAT8E4M3FNUZ_expanded", 2, 1}, + {"test_castlike_no_saturate_FLOAT_to_FLOAT8E4M3FN_expanded", 2, 1}, + {"test_causal_conv_with_state_b1_c1_degenerate", 2, 2}, + {"test_causal_conv_with_state_b1_c1_degenerate_expanded", 2, 2}, + {"test_causal_conv_with_state_basic", 2, 2}, + {"test_causal_conv_with_state_basic_expanded", 2, 2}, + {"test_causal_conv_with_state_decode_step", 4, 2}, + {"test_causal_conv_with_state_decode_step_expanded", 4, 2}, + {"test_causal_conv_with_state_fp16", 2, 2}, + {"test_causal_conv_with_state_fp16_expanded", 2, 2}, + {"test_causal_conv_with_state_kernel_size_one", 2, 2}, + {"test_causal_conv_with_state_kernel_size_one_expanded", 2, 2}, + {"test_causal_conv_with_state_short_input_no_past_state", 2, 2}, + {"test_causal_conv_with_state_short_input_no_past_state_expanded", 2, 2}, + {"test_causal_conv_with_state_silu", 2, 2}, + {"test_causal_conv_with_state_silu_expanded", 2, 2}, + {"test_causal_conv_with_state_silu_fp16", 2, 2}, + {"test_causal_conv_with_state_silu_fp16_expanded", 2, 2}, + {"test_causal_conv_with_state_silu_with_past_state", 3, 2}, + {"test_causal_conv_with_state_silu_with_past_state_expanded", 3, 2}, + {"test_causal_conv_with_state_swish_alias", 2, 2}, + {"test_causal_conv_with_state_swish_alias_expanded", 2, 2}, + {"test_causal_conv_with_state_with_bias", 3, 2}, + {"test_causal_conv_with_state_with_bias_and_past_state", 4, 2}, + {"test_causal_conv_with_state_with_bias_and_past_state_expanded", 4, 2}, + {"test_causal_conv_with_state_with_bias_expanded", 3, 2}, + {"test_causal_conv_with_state_with_past_state", 3, 2}, + {"test_causal_conv_with_state_with_past_state_expanded", 3, 2}, + {"test_cumprod_1d", 2, 1}, + {"test_cumprod_1d_exclusive", 2, 1}, + {"test_cumprod_1d_int32_exclusive", 2, 1}, + {"test_cumprod_1d_reverse", 2, 1}, + {"test_cumprod_1d_reverse_exclusive", 2, 1}, + {"test_cumprod_2d_axis_0", 2, 1}, + {"test_cumprod_2d_axis_1", 2, 1}, + {"test_cumprod_2d_int32", 2, 1}, + {"test_cumprod_2d_negative_axis", 2, 1}, + {"test_dequantizelinear_int2", 3, 1}, + {"test_dequantizelinear_uint2", 3, 1}, + {"test_dft_irfft", 2, 1}, + {"test_dft_irfft_opset19", 1, 1}, + {"test_dft_rfft", 2, 1}, + {"test_dft_rfft_opset19", 1, 1}, + {"test_div_int32_trunc", 2, 1}, + {"test_flexattention", 3, 1}, + {"test_flexattention_causal_mask", 3, 1}, + {"test_flexattention_causal_mask_expanded_ver26", 3, 1}, + {"test_flexattention_diff_head_sizes", 3, 1}, + {"test_flexattention_diff_head_sizes_expanded_ver26", 3, 1}, + {"test_flexattention_double", 3, 1}, + {"test_flexattention_double_expanded_ver26", 3, 1}, + {"test_flexattention_expanded_ver26", 3, 1}, + {"test_flexattention_fp16", 3, 1}, + {"test_flexattention_fp16_expanded_ver26", 3, 1}, + {"test_flexattention_gqa", 3, 1}, + {"test_flexattention_gqa_expanded_ver26", 3, 1}, + {"test_flexattention_prob_mod", 3, 1}, + {"test_flexattention_prob_mod_expanded_ver26", 3, 1}, + {"test_flexattention_relative_positional", 3, 1}, + {"test_flexattention_relative_positional_expanded_ver26", 3, 1}, + {"test_flexattention_scaled", 3, 1}, + {"test_flexattention_scaled_expanded_ver26", 3, 1}, + {"test_flexattention_score_mod", 3, 1}, + {"test_flexattention_score_mod_expanded_ver26", 3, 1}, + {"test_flexattention_soft_cap", 3, 1}, + {"test_flexattention_soft_cap_expanded_ver26", 3, 1}, + {"test_linear_attention_decode_step", 6, 2}, + {"test_linear_attention_decode_step_expanded", 6, 2}, + {"test_linear_attention_delta", 4, 2}, + {"test_linear_attention_delta_expanded", 4, 2}, + {"test_linear_attention_explicit_scale", 5, 2}, + {"test_linear_attention_explicit_scale_expanded", 5, 2}, + {"test_linear_attention_fp16", 5, 2}, + {"test_linear_attention_fp16_expanded", 5, 2}, + {"test_linear_attention_gated", 4, 2}, + {"test_linear_attention_gated_delta", 5, 2}, + {"test_linear_attention_gated_delta_beta_scalar", 5, 2}, + {"test_linear_attention_gated_delta_beta_scalar_expanded", 5, 2}, + {"test_linear_attention_gated_delta_expanded", 5, 2}, + {"test_linear_attention_gated_delta_gqa", 5, 2}, + {"test_linear_attention_gated_delta_gqa_expanded", 5, 2}, + {"test_linear_attention_gated_delta_mqa", 5, 2}, + {"test_linear_attention_gated_delta_mqa_expanded", 5, 2}, + {"test_linear_attention_gated_expanded", 4, 2}, + {"test_linear_attention_gated_per_head_decay", 4, 2}, + {"test_linear_attention_gated_per_head_decay_expanded", 4, 2}, + {"test_linear_attention_linear", 3, 2}, + {"test_linear_attention_linear_expanded", 3, 2}, + {"test_linear_attention_linear_t1_no_past", 3, 2}, + {"test_linear_attention_linear_t1_no_past_expanded", 3, 2}, + {"test_linear_attention_no_past_explicit_zeros", 6, 2}, + {"test_linear_attention_no_past_explicit_zeros_expanded", 6, 2}, + {"test_linear_attention_prefill_with_past", 6, 2}, + {"test_linear_attention_prefill_with_past_expanded", 6, 2}, + {"test_matmul_1d_1d", 2, 1}, + {"test_matmul_1d_3d", 2, 1}, + {"test_matmul_4d_1d", 2, 1}, + {"test_matmul_bcast", 2, 1}, + {"test_nonmaxsuppression_iou_threshold_boundary", 5, 1}, + {"test_quantizelinear_int2", 3, 1}, + {"test_quantizelinear_uint2", 3, 1}, + {"test_range_bfloat16_type_positive_delta", 3, 1}, + {"test_range_bfloat16_type_positive_delta_expanded", 3, 1}, + {"test_range_float16_type_positive_delta", 3, 1}, + {"test_range_float16_type_positive_delta_expanded", 3, 1}, + {"test_scan9_multi_state", 3, 3}, + {"test_scan9_scalar", 2, 2}, + {"test_scatter_elements_with_reduction_mul", 3, 1}, }; diff --git a/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp index d9c4db64c1..a3bc60f505 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp @@ -3326,6 +3326,52 @@ CASE(test_attention_4d_with_qk_matmul_softmax) SKIP; CASE(test_attention_4d_with_qk_matmul_softmax_expanded) SKIP; + +// ONNX 1.22 additions: unsupported on OpenVINO +CASE(test_dft_rfft) + SKIP; +CASE(test_nonmaxsuppression_iou_threshold_boundary) + SKIP; +CASE(test_attention_4d_softcap_neginf_mask_expanded) + SKIP; +CASE(test_attention_4d_softcap_neginf_mask_poison_expanded) + SKIP; +CASE(test_causal_conv_with_state_b1_c1_degenerate_expanded) + SKIP; +CASE(test_causal_conv_with_state_basic_expanded) + SKIP; +CASE(test_causal_conv_with_state_decode_step_expanded) + SKIP; +CASE(test_causal_conv_with_state_kernel_size_one_expanded) + SKIP; +CASE(test_causal_conv_with_state_short_input_no_past_state_expanded) + SKIP; +CASE(test_causal_conv_with_state_silu_expanded) + SKIP; +CASE(test_causal_conv_with_state_silu_with_past_state_expanded) + SKIP; +CASE(test_causal_conv_with_state_swish_alias_expanded) + SKIP; +CASE(test_causal_conv_with_state_with_bias_and_past_state_expanded) + SKIP; +CASE(test_causal_conv_with_state_with_bias_expanded) + SKIP; +CASE(test_causal_conv_with_state_with_past_state_expanded) + SKIP; +CASE(test_flexattention_scaled_expanded_ver26) + SKIP; +CASE(test_range_bfloat16_type_positive_delta) + SKIP; +CASE(test_range_float16_type_positive_delta) + SKIP; +CASE(test_dft_rfft_opset19) + SKIP; +CASE(test_div_int32_trunc) + SKIP; +CASE(test_matmul_bcast) + SKIP; +CASE(test_scatter_elements_with_reduction_mul) + SKIP; END_SWITCH() #undef EOF_LABEL #undef BEGIN_SWITCH diff --git a/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp index 4d311e0b7e..87d42deb6d 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp @@ -916,3 +916,21 @@ "test_attention_4d_with_qk_matmul_expanded", "test_attention_4d_with_qk_matmul_softmax", "test_attention_4d_with_qk_matmul_softmax_expanded", +"test_dft_rfft", +"test_nonmaxsuppression_iou_threshold_boundary", +"test_attention_4d_softcap_neginf_mask_expanded", +"test_attention_4d_softcap_neginf_mask_poison_expanded", +"test_causal_conv_with_state_b1_c1_degenerate_expanded", +"test_causal_conv_with_state_basic_expanded", +"test_causal_conv_with_state_decode_step_expanded", +"test_causal_conv_with_state_kernel_size_one_expanded", +"test_causal_conv_with_state_short_input_no_past_state_expanded", +"test_causal_conv_with_state_silu_expanded", +"test_causal_conv_with_state_silu_with_past_state_expanded", +"test_causal_conv_with_state_swish_alias_expanded", +"test_causal_conv_with_state_with_bias_and_past_state_expanded", +"test_causal_conv_with_state_with_bias_expanded", +"test_causal_conv_with_state_with_past_state_expanded", +"test_flexattention_scaled_expanded_ver26", +"test_range_bfloat16_type_positive_delta", +"test_range_float16_type_positive_delta", diff --git a/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp index e37d502a4d..b825ac9ca8 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp @@ -331,3 +331,149 @@ "test_training_dropout_mask", // ---- same as above --- "test_training_dropout_zero_ratio_mask", // ---- same as above --- "test_unique_length_1", //incorrect output + +// ===== ONNX 1.22 additions: ops/dtypes not yet supported by the importer ===== +// BitCast op not supported by the ONNX importer +"test_bitcast_2d_float32_to_int32", +"test_bitcast_bool_to_uint8", +"test_bitcast_float32_to_int32", +"test_bitcast_float64_to_int64", +"test_bitcast_int32_to_float32", +"test_bitcast_int64_to_float64", +"test_bitcast_int8_to_uint8", +"test_bitcast_scalar_float32_to_int32", +"test_bitcast_uint16_to_int16", +"test_bitcast_uint32_to_int32", +// INT2/UINT2 (2-bit) dtype not supported +"test_cast_FLOAT16_to_INT2", +"test_cast_FLOAT16_to_UINT2", +"test_cast_FLOAT_to_INT2", +"test_cast_FLOAT_to_UINT2", +"test_cast_INT2_to_FLOAT", +"test_cast_INT2_to_FLOAT16", +"test_cast_INT2_to_INT8", +"test_cast_UINT2_to_FLOAT", +"test_cast_UINT2_to_FLOAT16", +"test_cast_UINT2_to_UINT8", +"test_castlike_FLOAT16_to_INT2", +"test_castlike_FLOAT16_to_INT2_expanded", +"test_castlike_FLOAT16_to_UINT2", +"test_castlike_FLOAT16_to_UINT2_expanded", +"test_castlike_FLOAT_to_INT2", +"test_castlike_FLOAT_to_INT2_expanded", +"test_castlike_FLOAT_to_UINT2", +"test_castlike_FLOAT_to_UINT2_expanded", +"test_castlike_INT2_to_FLOAT", +"test_castlike_INT2_to_FLOAT16", +"test_castlike_INT2_to_FLOAT16_expanded", +"test_castlike_INT2_to_FLOAT_expanded", +"test_castlike_INT2_to_INT8", +"test_castlike_INT2_to_INT8_expanded", +"test_castlike_UINT2_to_FLOAT", +"test_castlike_UINT2_to_FLOAT16", +"test_castlike_UINT2_to_FLOAT16_expanded", +"test_castlike_UINT2_to_FLOAT_expanded", +"test_castlike_UINT2_to_UINT8", +"test_castlike_UINT2_to_UINT8_expanded", +"test_dequantizelinear_int2", +"test_dequantizelinear_uint2", +"test_quantizelinear_int2", +"test_quantizelinear_uint2", +// CausalConvWithState op not supported +"test_causal_conv_with_state_b1_c1_degenerate", +"test_causal_conv_with_state_basic", +"test_causal_conv_with_state_decode_step", +"test_causal_conv_with_state_fp16", +"test_causal_conv_with_state_kernel_size_one", +"test_causal_conv_with_state_short_input_no_past_state", +"test_causal_conv_with_state_silu", +"test_causal_conv_with_state_silu_fp16", +"test_causal_conv_with_state_silu_with_past_state", +"test_causal_conv_with_state_swish_alias", +"test_causal_conv_with_state_with_bias", +"test_causal_conv_with_state_with_bias_and_past_state", +"test_causal_conv_with_state_with_past_state", +// CumProd op not supported +"test_cumprod_1d", +"test_cumprod_1d_exclusive", +"test_cumprod_1d_int32_exclusive", +"test_cumprod_1d_reverse", +"test_cumprod_1d_reverse_exclusive", +"test_cumprod_2d_axis_0", +"test_cumprod_2d_axis_1", +"test_cumprod_2d_int32", +"test_cumprod_2d_negative_axis", +// FlexAttention op not supported +"test_flexattention", +"test_flexattention_causal_mask", +"test_flexattention_diff_head_sizes", +"test_flexattention_double", +"test_flexattention_fp16", +"test_flexattention_gqa", +"test_flexattention_prob_mod", +"test_flexattention_relative_positional", +"test_flexattention_scaled", +"test_flexattention_score_mod", +"test_flexattention_soft_cap", +// LinearAttention op not supported +"test_linear_attention_decode_step", +"test_linear_attention_decode_step_expanded", +"test_linear_attention_delta", +"test_linear_attention_delta_expanded", +"test_linear_attention_explicit_scale", +"test_linear_attention_explicit_scale_expanded", +"test_linear_attention_fp16", +"test_linear_attention_fp16_expanded", +"test_linear_attention_gated", +"test_linear_attention_gated_delta", +"test_linear_attention_gated_delta_beta_scalar", +"test_linear_attention_gated_delta_beta_scalar_expanded", +"test_linear_attention_gated_delta_expanded", +"test_linear_attention_gated_delta_gqa", +"test_linear_attention_gated_delta_gqa_expanded", +"test_linear_attention_gated_delta_mqa", +"test_linear_attention_gated_delta_mqa_expanded", +"test_linear_attention_gated_expanded", +"test_linear_attention_gated_per_head_decay", +"test_linear_attention_gated_per_head_decay_expanded", +"test_linear_attention_linear", +"test_linear_attention_linear_expanded", +"test_linear_attention_linear_t1_no_past", +"test_linear_attention_linear_t1_no_past_expanded", +"test_linear_attention_no_past_explicit_zeros", +"test_linear_attention_no_past_explicit_zeros_expanded", +"test_linear_attention_prefill_with_past", +"test_linear_attention_prefill_with_past_expanded", +// Scan op not supported +"test_scan9_multi_state", +"test_scan9_scalar", +// misc unsupported (expanded subgraphs / new ops) +"test_castlike_no_saturate_FLOAT_to_FLOAT8E4M3FNUZ_expanded", +"test_castlike_no_saturate_FLOAT_to_FLOAT8E4M3FN_expanded", +"test_range_bfloat16_type_positive_delta_expanded", +"test_range_float16_type_positive_delta_expanded", +// ===== ONNX 1.22 additions: forward/accuracy not yet supported ===== +// MatMul with 1-D operand not supported (requires >=2D) +"test_matmul_1d_1d", +"test_matmul_1d_3d", +"test_matmul_4d_1d", +// DFT inverse RFFT not supported +"test_dft_irfft", +"test_dft_irfft_opset19", +// Attention softcap accuracy +"test_attention_4d_softcap_neginf_mask", +"test_attention_4d_softcap_neginf_mask_poison", +// CausalConvWithState fp16 (expanded) accuracy +"test_causal_conv_with_state_fp16_expanded", +"test_causal_conv_with_state_silu_fp16_expanded", +// FlexAttention (expanded) accuracy +"test_flexattention_causal_mask_expanded_ver26", +"test_flexattention_diff_head_sizes_expanded_ver26", +"test_flexattention_double_expanded_ver26", +"test_flexattention_expanded_ver26", +"test_flexattention_fp16_expanded_ver26", +"test_flexattention_gqa_expanded_ver26", +"test_flexattention_prob_mod_expanded_ver26", +"test_flexattention_relative_positional_expanded_ver26", +"test_flexattention_score_mod_expanded_ver26", +"test_flexattention_soft_cap_expanded_ver26",