nareshmlx/opencv-pr huggingface dataset:
**File:** modules/dnn/src/net_impl.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend

**Code Changes:**
```diff
@@ -469,8 +469,8 @@ void Net::Impl::allocateLayer(int lid, const LayersShapesMap& layersShapes)
     for (std::set<int>::const_iterator i = ld.inputLayersId.begin(); i != ld.inputLayersId.end(); i++)
         allocateLayer(*i, layersShapes);
 
-    // bind inputs
-    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))  // DataLayer
+    // bind inputs for DataLayer
+    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))
     {
         ninputs = netInputLayer->inputsData.size();
```

Review comment:
Can you check why `netInputLayer` returns false in case of `DNN_BACKEND_INFERENCE_ENGINE_NGRAPH`?
**File:** modules/dnn/src/layers/expand_layer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 166

**Code Changes:**
```diff
+            output_shape[output_shape.size() - i] = std::max(
+                (int32_t)input_shape[input_shape.size() - i],
+                output_shape[output_shape.size() - i]);
+
+        auto shape_node = std::make_shared<ov::op::v0::Constant>(ov::element::i32, ov::Shape{output_shape.size()}, output_shape.data());
+        auto expand = std::make_shared<ov::op::v3::Broadcast>(nodes[0].dynamicCast<InfEngineNgraphNode>()->node, shape_node);
+        return Ptr<BackendNode>(new InfEngineNgraphNode(expand));
+    }
+#endif  // HAVE_DNN_NGRAPH
+
 private:
```

Review comment:
Why not reshape?
**File:** modules/dnn/src/ie_ngraph.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 51

**Code Changes:**
```diff
@@ -48,6 +48,48 @@ ngraphWrappers(const std::vector<Ptr<BackendWrapper> >& ptrs)
     return wrappers;
 }
 
+ov::element::Type cvTypeToOvType(MatType cvType)
+{
+    switch (cvType) {
+        case CV_32F:
+            return ov::element::f32;
+        case CV_8U:
```

Review comment:
Method is called differently for Mat using `.type()` or `.depth()`. This is not critical for dnn because everything is 1-channel but I suggest to add an overload ```cpp ov::element::Type cvTypeToOvType(const cv::Mat& m) { return cvTypeToOvType(m.depth()); } ```
**File:** modules/dnn/src/layers/blank_layer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 164

**Code Changes:**
```diff
                                         const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
     {
         auto ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
-        ov::OutputVector inp{ieInpNode};
-        auto blank = std::make_shared<ov::op::v0::Concat>(inp, 0);
+        auto blank = std::make_shared<ov::op::v1::ConvertLike>(ieInpNode, ieInpNode);
         return Ptr<BackendNode>(new InfEngineNgraphNode(blank));
     }
 #endif  // HAVE_DNN_NGRAPH
```

Review comment:
I mean, I've changed Concat to ConvertLike because ConvertLike should work fine in all cases
**File:** modules/dnn/src/ie_ngraph.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 494

**Code Changes:**
```diff
 
@@ -445,6 +491,7 @@ NgraphBackendWrapper::NgraphBackendWrapper(int targetId, const cv::Mat& m)
     , host((Mat*)&m)
 {
     blob = wrapToNgraphBlob(m);
+    hostMatDepth = m.depth();
 }
 
 NgraphBackendWrapper::NgraphBackendWrapper(Ptr<BackendWrapper> wrapper)
```

Review comment:
It as not a local variable, it is a field of BackendWrapper class
**File:** modules/dnn/src/net_impl.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend

**Code Changes:**
```diff
@@ -469,8 +469,8 @@ void Net::Impl::allocateLayer(int lid, const LayersShapesMap& layersShapes)
     for (std::set<int>::const_iterator i = ld.inputLayersId.begin(); i != ld.inputLayersId.end(); i++)
         allocateLayer(*i, layersShapes);
 
-    // bind inputs
-    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))  // DataLayer
+    // bind inputs for DataLayer
+    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))
     {
         ninputs = netInputLayer->inputsData.size();
```

Review comment:
Because there is no OpenVINO implementation of OpenCV DataLayer, but it is used on OpenVINO pipeline. I can modify DataLayer->supportBackend() function and remove this check, if you think that it is better
**File:** modules/dnn/src/layers/expand_layer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 166

**Code Changes:**
```diff
+            output_shape[output_shape.size() - i] = std::max(
+                (int32_t)input_shape[input_shape.size() - i],
+                output_shape[output_shape.size() - i]);
+
+        auto shape_node = std::make_shared<ov::op::v0::Constant>(ov::element::i32, ov::Shape{output_shape.size()}, output_shape.data());
+        auto expand = std::make_shared<ov::op::v3::Broadcast>(nodes[0].dynamicCast<InfEngineNgraphNode>()->node, shape_node);
+        return Ptr<BackendNode>(new InfEngineNgraphNode(expand));
+    }
+#endif  // HAVE_DNN_NGRAPH
+
 private:
```

Review comment:
Expand operation is similar to Broadcast. It can tile (4, 5, 1, 7) tensor to (4, 5, 6, 7). Reshape is a different operation.
**File:** modules/dnn/src/ie_ngraph.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 51

**Code Changes:**
```diff
@@ -48,6 +48,48 @@ ngraphWrappers(const std::vector<Ptr<BackendWrapper> >& ptrs)
     return wrappers;
 }
 
+ov::element::Type cvTypeToOvType(MatType cvType)
+{
+    switch (cvType) {
+        case CV_32F:
+            return ov::element::f32;
+        case CV_8U:
```

Review comment:
What the point to add a second cvTypeToOvType function and don't use it?
**File:** modules/dnn/src/net_impl.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend

**Code Changes:**
```diff
@@ -469,8 +469,8 @@ void Net::Impl::allocateLayer(int lid, const LayersShapesMap& layersShapes)
     for (std::set<int>::const_iterator i = ld.inputLayersId.begin(); i != ld.inputLayersId.end(); i++)
         allocateLayer(*i, layersShapes);
 
-    // bind inputs
-    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))  // DataLayer
+    // bind inputs for DataLayer
+    if (ld.id == 0 && netInputLayer->supportBackend(preferableBackend))
     {
         ninputs = netInputLayer->inputsData.size();
```

Review comment:
I think it's better, let's move
**File:** modules/dnn/src/ie_ngraph.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 51

**Code Changes:**
```diff
@@ -48,6 +48,48 @@ ngraphWrappers(const std::vector<Ptr<BackendWrapper> >& ptrs)
     return wrappers;
 }
 
+ov::element::Type cvTypeToOvType(MatType cvType)
+{
+    switch (cvType) {
+        case CV_32F:
+            return ov::element::f32;
+        case CV_8U:
```

Review comment:
Why not use? I mean add and replace every invocation on Mat type: ```cpp cvTypeToOvType(inputs[i].depth()) -> cvTypeToOvType(inputs[i]) cvTypeToOvType(m.type()) -> cvTypeToOvType(m) cvTypeToOvType(blobs[0].type()) -> cvTypeToOvType(blobs[0]) ```
**File:** modules/dnn/test/test_onnx_importer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 2678

**Code Changes:**
```diff
+}
+
+TEST_P(Test_ONNX_layers, TileInt64)
+{
+    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // OpenVINO uses int32 precision for int64 operations
     testONNXModels("tile_int64");
 }
 
```

Review comment:
Did test work before the patch?
**File:** modules/dnn/test/test_tflite_importer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 214

**Code Changes:**
```diff
@@ -210,6 +210,9 @@ TEST_P(Test_TFLite, max_unpooling)
 }
 
 TEST_P(Test_TFLite, EfficientDet_int8) {
+    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // TODO: fix this test for OpenVINO
+
     if (target != DNN_TARGET_CPU || (backend != DNN_BACKEND_OPENCV &&
         backend != DNN_BACKEND_TIMVX && backend != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)) {
         throw SkipTestException("Only OpenCV, TimVX and OpenVINO targets support INT8 on CPU");
```

Review comment:
Did test work before the patch?
**File:** modules/dnn/test/test_onnx_importer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 2678

**Code Changes:**
```diff
+}
+
+TEST_P(Test_ONNX_layers, TileInt64)
+{
+    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // OpenVINO uses int32 precision for int64 operations
     testONNXModels("tile_int64");
 }
 
```

Review comment:
I created this test recently when I added int support to dnn. OpenVINO tests were disabled at this time. This test couldn't work without the patch because OpenVINO pipeline didn't have int64 mat to tensor conversion.
**File:** modules/dnn/test/test_tflite_importer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 214

**Code Changes:**
```diff
@@ -210,6 +210,9 @@ TEST_P(Test_TFLite, max_unpooling)
 }
 
 TEST_P(Test_TFLite, EfficientDet_int8) {
+    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // TODO: fix this test for OpenVINO
+
     if (target != DNN_TARGET_CPU || (backend != DNN_BACKEND_OPENCV &&
         backend != DNN_BACKEND_TIMVX && backend != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)) {
         throw SkipTestException("Only OpenCV, TimVX and OpenVINO targets support INT8 on CPU");
```

Review comment:
This test doesn't work in both 4.x and 5.x branches. Probably because I use the newest OpenVINO version
**File:** modules/dnn/test/test_tflite_importer.cpp
**Change Type:** modified
**Context:** PR #25458: Added int support for OpenVINO dnn backend
**Review Line:** 214

**Code Changes:**
```diff
@@ -210,6 +210,9 @@ TEST_P(Test_TFLite, max_unpooling)
 }
 
 TEST_P(Test_TFLite, EfficientDet_int8) {
+    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
+        applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // TODO: fix this test for OpenVINO
+
     if (target != DNN_TARGET_CPU || (backend != DNN_BACKEND_OPENCV &&
         backend != DNN_BACKEND_TIMVX && backend != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)) {
         throw SkipTestException("Only OpenCV, TimVX and OpenVINO targets support INT8 on CPU");
```

Review comment:
Test definitely worked on 2023 release of OpenVINO. I will check 2024 version. I think ok to skip on this PR.
**File:** modules/highgui/test/test_gui.cpp
**Change Type:** modified
**Context:** PR #25561: highgui: wayland: expand image width if title bar cannot be shown

**Code Changes:**
```diff
@@ -205,6 +205,21 @@ TEST(Highgui_GUI, trackbar)
     EXPECT_NO_THROW(destroyAllWindows());
 }
 
+// See https://github.com/opencv/opencv/issues/25560
+#if !defined(ENABLE_PLUGINS)
+TEST(Highgui_GUI, DISABLED_small_width_image)
+#else
+TEST(Highgui_GUI, small_width_image)
+#endif
```

Review comment:
1000 is too much for automated test, IMHO.
**File:** modules/highgui/test/test_gui.cpp
**Change Type:** modified
**Context:** PR #25551: highgui: wayland: fix to pass highgui test

**Code Changes:**
```diff
@@ -48,6 +48,16 @@ inline void verify_size(const std::string &nm, const cv::Mat &img)
 {
     EXPECT_NO_THROW(imshow(nm, img));
     EXPECT_EQ(-1, waitKey(200));
+
+    // see https://github.com/opencv/opencv/issues/25550
+    // Wayland backend is not supported getWindowImageRect().
+    string framework;
+    EXPECT_NO_THROW(framework = currentUIFramework());
+    if(framework == "WAYLAND")
```

Review comment:
I propose to use runtime check with `currentUIFramework` to support build with UI plugins. Also please add reference to ticket to the check comment.
**File:** modules/highgui/src/window_wayland.cpp
**Change Type:** modified
**Context:** PR #25551: highgui: wayland: fix to pass highgui test

**Code Changes:**
```diff
@@ -84,20 +84,73 @@ static int xkb_keysym_to_ascii(xkb_keysym_t keysym) {
     return static_cast<int>(keysym & 0xff);
 }
 
+static void write_mat_to_xrgb8888(cv::Mat const &img_, void *data) {
+    // Validate destination data.
+    CV_CheckFalse((data == nullptr), "Destination Address must not be nullptr.");
+
+    // Validate source img parameters.
+    CV_CheckFalse(img_.empty(), "Source Mat must not be empty.");
```

Review comment:
Why not just `cv::Mat::copyTo`?
**File:** modules/highgui/include/opencv2/highgui.hpp
**Change Type:** modified
**Context:** PR #25551: highgui: wayland: fix to pass highgui test

**Code Changes:**
```diff
@@ -366,6 +366,11 @@ for image display). **waitKey(25)** will display a frame and wait approximately
 press (suitable for displaying a video frame-by-frame). To remove the window, use cv::destroyWindow.
 
 @note [__Windows Backend Only__] Pressing Ctrl+C will copy the image to the clipboard. Pressing Ctrl+S will show a dialog to save the image.
+@note [__Wayland Backend Only__] Supoorting format is extended.
+-   If the image is 8-bit signed, the pixels are biased by 128. That is, the
+    value range [-128,127] is mapped to [0,255].
+-   If the image is 16-bit signed, the pixels are divided by 256 and biased by 128. That is, the
+    value range [-32768,32767] is mapped to [0,255].
 
```

Review comment:
Yes, I agree with you. I fixed it.
**File:** modules/dnn/src/layers/gemm_layer.cpp
**Change Type:** modified
**Context:** PR #25518: Fixed OpenVINO gemm layer

**Code Changes:**
```diff
@@ -289,48 +289,54 @@ class GemmLayerImpl CV_FINAL : public GemmLayer {
     virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
                                         const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
     {
-        auto ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
-        std::shared_ptr<ov::Node> matmul;
+        ov::Output<ov::Node> nodeA = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
+        ov::Output<ov::Node> nodeB;
+        if (const_B)
+            nodeB = std::make_shared<ov::op::v0::Constant>(ov::element::f32, getShape(blobs[0]), blobs[0].data);
```

Review comment:
What if C is 1D tensor of shape [2] (2D mat in opencv, e.g. [2, 1] in 4.x)? If `getShape` gets shape [2, 1], then broadcasting will fail most probably.
**File:** modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp
**Change Type:** modified
**Context:** PR #25518: Fixed OpenVINO gemm layer
**Review Line:** 125

**Code Changes:**
```diff
 "test_gemm_alpha",
 "test_gemm_beta",
-"test_gemm_default_matrix_bias",
-"test_gemm_default_no_bias",
 "test_gemm_default_scalar_bias",
 "test_gemm_default_single_elem_vector_bias",
 "test_gemm_default_vector_bias",
```

Review comment:
Please remove.
**File:** modules/core/src/lut.cpp
**Change Type:** modified
**Context:** PR #25554: HAL for LUT added

**Code Changes:**
```diff
@@ -377,6 +377,9 @@ void cv::LUT( InputArray _src, InputArray _lut, OutputArray _dst )
     CV_OVX_RUN(!ovx::skipSmallImages<VX_KERNEL_TABLE_LOOKUP>(src.cols, src.rows),
                openvx_LUT(src, dst, lut))
 
+    CALL_HAL(LUT, cv_hal_lut, src.data, src.step, src.type(), lut.data,
+             lut.elemSize1(), lutcn, dst.data, dst.step, src.rows, src.cols);
+
 #if !IPP_DISABLE_PERF_LUT
     CV_IPP_RUN(_src.dims() <= 2, ipp_lut(src, lut, dst));
 #endif
```

Review comment:
Multi-channel inputs and tables are supported by original OpenCV function. HAL should have channels and lut_channels parameters.
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25554: HAL for LUT added

**Code Changes:**
```diff
@@ -214,6 +214,32 @@ inline int hal_ni_not8u(const uchar *src_data, size_t src_step, uchar *dst_data,
 #define cv_hal_not8u hal_ni_not8u
 //! @endcond
 
+/**
+Lookup table replacement
+Table consists of 256 elements of a size from 1 to 8 bytes having 1 channel or src_channels
+For 8s input type 128 is added to LUT index
+Destination should have the same element type and number of channels as lookup table elements
+@param src_data Source image data
```

Review comment:
Many just introduced functions use 'int depth', 'int channels' (or a single 'type' parameter). Can we normalize it and at least follow this pattern for all functions? In this case it can be 'int src_depth', 'int lut_type'. No need to populate this function in 2 different entries
**File:** modules/core/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25554: HAL for LUT added

**Code Changes:**
```diff
@@ -214,6 +214,32 @@ inline int hal_ni_not8u(const uchar *src_data, size_t src_step, uchar *dst_data,
 #define cv_hal_not8u hal_ni_not8u
 //! @endcond
 
+/**
+Lookup table replacement
+Table consists of 256 elements of a size from 1 to 8 bytes having 1 channel or src_channels
+For 8s input type 128 is added to LUT index
+Destination should have the same element type and number of channels as lookup table elements
+@param src_data Source image data
```

Review comment:
Makes sense, will do this for next HAL functions
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #25196: core: add universal intrinsics for fp16
**Review Line:** 1754

**Code Changes:**
```diff
-        EXPECT_EQ((size_t)0, (size_t)&out.a.d % VTraits<R>::max_nlanes);
-        EXPECT_NE((size_t)0, (size_t)&out.u.d % VTraits<R>::max_nlanes);
+        EXPECT_EQ((size_t)0, (size_t)&data.a.d % (sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()));
+        EXPECT_NE((size_t)0, (size_t)&data.u.d % (sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()));
+        EXPECT_EQ((size_t)0, (size_t)&out.a.d % (sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()));
+        EXPECT_NE((size_t)0, (size_t)&out.u.d % (sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()));
 
         // check some initialization methods
         R r1 = data.u;
-        R r2 = vx_load_expand((const hfloat*)data.a.d);
+        R r2 = vx_load(data.a.d);
```

Review comment:
Story behind these changes: 1. The dividend ` VTraits<R>::max_nlanes` was `CV_SIMD_WIDTH` in the previous change https://github.com/opencv/opencv/pull/22179. 2. Macro `CV_SIMD_WIDTH` was replaced with `sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()` in the pull request, but somehow only these four lines were replaced with `VTraits<R>::max_nlanes`. 3. Tried printing values of these variables and macros, looks like the correct replacement should be `sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()` instead. ``` VTraits<R>::max_nlanes = 4 CV_SIMD_WIDTH=16 sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()=16 ```
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #25196: core: add universal intrinsics for fp16
**Review Line:** 2236

**Code Changes:**
```diff
 #endif
         ;
 #else
     std::cout << "SKIP: CV_FP16 is not available" << std::endl;
 #endif
 }
 
-
-/*#if defined(CV_CPU_DISPATCH_MODE_FP16) && CV_CPU_DISPATCH_MODE == FP16
-void test_hal_intrin_float16()
-{
```

Review comment:
Story behind these changes: 1. https://github.com/opencv/opencv/pull/12120 shows that there was only two tests on `v_float16` in the beginning: `TheTest<v_float16>().test_loadstore_fp16().test_float_cvt_fp16();` 2. Then https://github.com/opencv/opencv/pull/12256 added `TheTest<v_float32>().test_loadstore_fp16_f32();` besides the above test. 3. Now problem came with https://github.com/opencv/opencv/pull/15494, which removed `TheTest<v_float16>()` and attached its belonged tests to `TheTest<v_float32>()` instead. These changes caused problems in test `test_loadstore_fp16()` and `test_float_cvt_fp16()`. They are supposed to test load and store FP16 numbers and FP16<->FP32 conversions if I am not mistaking, so they should not be attached to `TheTest<v_float32>()`.
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #25196: core: add universal intrinsics for fp16
**Review Line:** 1784

**Code Changes:**
```diff
         // check conversion
         v_float32 r1 = vx_load(data.a.d);
         v_float16 r2 = v_cvt_f16(r1, vx_setzero_f32());
         v_float32 r3 = v_cvt_f32(r2);
-        EXPECT_EQ(0x3c00, v_get0(r2));
+        EXPECT_EQ(1, v_get0(r2));
         EXPECT_EQ(v_get0(r3), v_get0(r1));
+#else
+        std::cout << "SKIP: test_float_cvt_fp16, CV_SIMD_FP16 is not available" << std::endl;
+#endif
 
```

Review comment:
Not sure why `0x3c00` was put here. Value is `1` on my machine (macOS 14.4.1, M1).
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #25196: core: add universal intrinsics for fp16
**Review Line:** 1758

**Code Changes:**
```diff
+        EXPECT_NE((size_t)0, (size_t)&out.u.d % (sizeof(typename VTraits<R>::lane_type) * VTraits<R>::vlanes()));
 
         // check some initialization methods
         R r1 = data.u;
-        R r2 = vx_load_expand((const hfloat*)data.a.d);
+        R r2 = vx_load(data.a.d);
         R r3(r2);
         EXPECT_EQ(data.u[0], v_get0(r1));
         EXPECT_EQ(data.a[0], v_get0(r2));
@@ -1598,24 +1765,30 @@ template<typename R> struct TheTest
         out.a.clear();
```

Review comment:
According to https://github.com/opencv/opencv/pull/25196#discussion_r1575865111, input data should be of type `v_float16`, so no conversion is needed. Replaced with a simple `vx_load` instead.
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #25196: core: add universal intrinsics for fp16
**Review Line:** 2207

**Code Changes:**
```diff
 #if CV_FP16
-    TheTest<v_float32>()
-        .test_loadstore_fp16_f32()
+    TheTest<v_float32>().test_loadstore_fp16_f32();
 #if CV_SIMD_FP16
+    TheTest<v_float16>()
         .test_loadstore_fp16()
         .test_float_cvt_fp16()
+        .test_interleave()
+        .test_addsub()
+        .test_mul()
```

Review comment:
Story behind these changes: 1. https://github.com/opencv/opencv/pull/12120 shows that there was only two tests on `v_float16` in the beginning: `TheTest<v_float16>().test_loadstore_fp16().test_float_cvt_fp16();` 2. Then https://github.com/opencv/opencv/pull/12256 added `TheTest<v_float32>().test_loadstore_fp16_f32();` besides the above test. 3. Now problem came with https://github.com/opencv/opencv/pull/15494, which removed `TheTest<v_float16>()` and attached its belonged tests to `TheTest<v_float32>()` instead. These changes caused problems in test `test_loadstore_fp16()` and `test_float_cvt_fp16()`. They are supposed to test load and store FP16 numbers and FP16<->FP32 conversions if I am not mistaking, so they should not be attached to `TheTest<v_float32>()`.