nareshmlx/opencv-pr huggingface dataset:
**File:** modules/dnn/test/test_ie_models.cpp
**Change Type:** modified
**Context:** PR #25199: Fix for OpenVINO 2024.0. OpenVINO 2022.1 as minimal supported version.
**Review Line:** 269

**Code Changes:**
```diff
-    // Fill output blobs.
+    // Fill output tensors.
     outputsMap.clear();
-    BlobMap outputBlobs;
-    for (auto& it : net.getOutputsInfo())
+    for (const auto& it : model->outputs())
     {
-        const InferenceEngine::TensorDesc& desc = it.second->getTensorDesc();
-        genData(desc, outputsMap[it.first], outputBlobs[it.first]);
+        auto type = it.get_element_type();
+        auto shape = it.get_shape();
```

Review comment:
Single failed test: ``` [ RUN ] DNNTestOpenVINO.models/0, where GetParam() = (NGRAPH/CPU, "age-gender-recognition-retail-0013") Exception message: OpenCV(4.9.0-dev) /home/openvino/opencv/modules/dnn/src/net_impl.cpp:570: error: (-215:Assertion failed) inp.total() in function 'allocateLayers' /home/openvino/opencv/modules/dnn/test/test_ie_models.cpp:399: Failure Expected: runCV(backendId, targetId, xmlPath, binPath, inputsMap, cvOutputsMap) doesn't throw an exception. Actual: it throws. runCV /home/openvino/opencv/modules/dnn/test/test_ie_models.cpp:415: Failure Expected equality of these values: ieOutputsMap.size() Which is: 2 cvOutputsMap.size() Which is: 0 unknown file: Failure C++ exception with description "OpenCV(4.9.0-dev) /home/openvino/opencv/modules/dnn/test/test_ie_models.cpp:419: error: (-215:Assertion failed) dstIt != cvOutputsMap.end() in function 'Body' " thrown in the test body. [ FAILED ] DNNTestOpenVINO.models/0, where GetParam() = (NGRAPH/CPU, "age-gender-recognition-retail-0013") (87 ms) ```
**File:** modules/dnn/src/net_openvino.cpp
**Change Type:** modified
**Context:** PR #25199: Fix for OpenVINO 2024.0. OpenVINO 2022.1 as minimal supported version.

**Code Changes:**
```diff
@@ -9,6 +9,12 @@
 #include <opencv2/core/utils/configuration.private.hpp>
 #include <opencv2/core/utils/logger.hpp>
 
+#include "op_inf_engine.hpp"
+
+#ifdef HAVE_INF_ENGINE
+#include <openvino/op/util/op_types.hpp>
+#endif
+
```

Review comment:
This is a workaround to wrap `ov::Model` from API 2.0: https://github.com/opencv/opencv/pull/25199/files#r1524623439
**File:** modules/imgproc/test/test_smooth_bitexact.cpp
**Change Type:** modified
**Context:** PR #25911: Post-merge fixes for algorithm hint API
**Review Line:** 296

**Code Changes:**
```diff
-    EXPECT_LE(nz, 0.06*src.total()); // Less 6% of different pixels
-
-    double min_val, max_val;
-    minMaxLoc(flatten_diff, &min_val, &max_val);
-    EXPECT_LE(max_val, 2); // expectes results floating +-1
+    EXPECT_LE(cvtest::norm(dst, gt, NORM_INF), 1);
+    EXPECT_LE(cvtest::norm(dst, gt, NORM_L1 | NORM_RELATIVE), 0.06); // Less 6% of different pixels
 }
 
 INSTANTIATE_TEST_CASE_P(/*nothing*/, GaussianBlurVsBitexact,
```

Review comment:
`EXPECT_LE(cvtest::norm(dst, gt, NORM_L1 | NORM_RELATIVE), 0.06); // Less 6% of different pixels`
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
Please add reference to the algorithm with name. Information about application range and quality will be very useful too.
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 1702

**Code Changes:**
```diff
@@ -1698,6 +1698,103 @@ template<typename R> struct TheTest
         return *this;
     }
 
+    void __test_exp(LaneType dataMax, LaneType diff_thr, LaneType enlarge_factor, LaneType flt_min) {
+        int n = VTraits<R>::vlanes();
+
+        // Test overflow and underflow values with step
+        const LaneType step = (LaneType) 0.01;
+        for (LaneType i = dataMax + 1; i <= dataMax + 11;) {
+            Data<R> dataUpperBound, dataLowerBound, resOverflow, resUnderflow;
```

Review comment:
The test is very weak. v_exp() is critical function. We must test it properly. 1. We must test all the corner and popular cases ``` exp(nan)=nan, exp(0)=1, exp(1)~e, exp(inf)=inf, exp(-inf)=0, exp(88) < inf, exp(89..100)=inf (overflow), // check every number with step 0.1 or even 0.01 0<=exp(-100..-88)<FLT_MIN (underflow). // check every number with step 0.1 or even 0.01 ``` 2. ``` for (int i = 0; i < 10000; i++) { 1. generate vlanes() numbers x_j, j=0..vlanes()-1 in range [-100,100]. 2. compute vector exponent v_exp() 3. compute exponent for each number using std::exp() 4. check relative accuracy a. std::exp(x_j) = inf => EXPECT_GT(vector_exp_j, FLT_MAX*0.99) b. std::exp(x_j) < inf => EXPECT_GE(vector_exp_j, 0); EXPECT_LT(std::abs(vector_exp_j-std_exp_j) < 1e-6*(std::abs(std_exp_j)+FLT_MIN*100) ``` where 0.99, 1e-6 and 100 should probably be adjusted.
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
sure, I will do it
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
Almost all documentation in this file is ignored. This file contains too much conditional compilations through `#if` and template-based logic. Doxygen doesn't work properly with that. Documentation is stored and well structured in intrin_cpp.hpp
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
1. My suggestion is to move this and similar implementations into a separate file. There is already `simd_utils.impl.hpp`. It could be reused or created a new one like `simd_math.impl.hpp` 2. Also all functions should be guarded if some ISA has better support for these functions. At least intrin_cpp.hpp could use `std::exp()` as reference (to ensure that test code is adequate)
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 1702

**Code Changes:**
```diff
@@ -1698,6 +1698,103 @@ template<typename R> struct TheTest
         return *this;
     }
 
+    void __test_exp(LaneType dataMax, LaneType diff_thr, LaneType enlarge_factor, LaneType flt_min) {
+        int n = VTraits<R>::vlanes();
+
+        // Test overflow and underflow values with step
+        const LaneType step = (LaneType) 0.01;
+        for (LaneType i = dataMax + 1; i <= dataMax + 11;) {
+            Data<R> dataUpperBound, dataLowerBound, resOverflow, resUnderflow;
```

Review comment:
Since `v_max(nan, x)` and `v_min(nan, x)` will not return `nan` except neon, I disabled this test. Are there some way to handle this case?
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
OK, I added a line in `intrin_cpp.hpp` for document ``` | Operations\\Types | float 32 | float 64 | |-------------------|:-:|:-:| ...... |exp | x | x | ```
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
Let's implement item 2 too. I want to benchmark both options before merge.
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
Also I propose to add reference to some paper, description, or implementation details, if you have it.
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
> Also I propose to add reference to some paper, description, or implementation details, if you have it. I cannot find the original paper; I only found the code and some comments. I already added these comments and references.
**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)

**Code Changes:**
```diff
@@ -1239,6 +1239,7 @@ namespace CV__SIMD_NAMESPACE {
 #define CV_SIMD 0
 #endif
 
+#include "intrin_math.hpp"
 #include "simd_utils.impl.hpp"
 
 #ifndef CV_DOXYGEN
```

Review comment:
The fallback with just loop and standatrd exp is still needed. We have platforms, where fma/sse/avx/neon are not implemented. Looped exp should be better there.
**File:** modules/core/include/opencv2/core/hal/intrin_cpp.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 724

**Code Changes:**
```diff
  @{ */
 
@@ -721,11 +722,33 @@ template<typename _Tp, int n> inline v_reg<_Tp2, n> func(const v_reg<_Tp, n>& a)
 Only for floating point types.*/
 OPENCV_HAL_IMPL_MATH_FUNC(v_sqrt, std::sqrt, _Tp)
 
+/**
+ * @brief Exponential \f$ e^x \f$ of elements
+ *
+ * Only for floating point types. Core implementation steps:
+ * 1. Decompose Input: Convert the input to \f$ 2^{x \cdot \log_2e} \f$ and split its exponential into integer and fractional parts:
```

Review comment:
insert ``` #define OPENCV_HAL_MATH_HAVE_EXP 1 #define OPENCV_HAL_MATH_HAVE_LOG 1 #define OPENCV_HAL_MATH_HAVE_SIN 1 #define OPENCV_HAL_MATH_HAVE_COS 1 ```
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** added
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 94

**Code Changes:**
```diff
+        return v_select(mask_not_nan, _vexp_y, v_reinterpret_as_f16(vx_setall_s16(0x7e00)));
+    }
+#endif
+
+    inline v_float32 v_exp(const v_float32 &x) {
+        const v_float32 _vexp_lo_f32 = vx_setall_f32(-88.3762626647949f);
+        const v_float32 _vexp_hi_f32 = vx_setall_f32(89.f);
+        const v_float32 _vexp_half_fp32 = vx_setall_f32(0.5f);
+        const v_float32 _vexp_one_fp32 = vx_setall_f32(1.f);
+        const v_float32 _vexp_LOG2EF_f32 = vx_setall_f32(1.44269504088896341f);
+        const v_float32 _vexp_C1_f32 = vx_setall_f32(-6.93359375E-1f);
```

Review comment:
In general OpenCV SIMD provides for each compilation unit (.cpp file) all **available** of these: - SIMD128 types and `v_` functions - SIMD256 types and `v256_` functions - SIMD512 types and `v512_` functions - aliases for SIMDMAX types and necessary `vx_` functions Here we have just one definition. And plus one SIMD128 implementation in intrin_cpp.hpp (which conflicts in SIMD128_CPP case) See `simd_utils.impl.hpp` which provides 4 implementations inside. If you put your header near that then you should follow the similar scheme (or have the same result). --- Note we should have 4 `#include` statements of that file (to avoid code duplication).
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 2038

**Code Changes:**
```diff
@@ -1698,6 +1698,103 @@ template<typename R> struct TheTest
         return *this;
     }
 
+    void __test_exp(LaneType dataMax, LaneType diff_thr, LaneType enlarge_factor, LaneType flt_min) {
+        int n = VTraits<R>::vlanes();
+
+        // Test overflow and underflow values with step
+        const LaneType step = (LaneType) 0.01;
+        for (LaneType i = dataMax + 1; i <= dataMax + 11;) {
+            Data<R> dataUpperBound, dataLowerBound, resOverflow, resUnderflow;
+            for (int j = 0; j < n; ++j) {
+                dataUpperBound[j] = i;
+                dataLowerBound[j] = -i;
+                i += step;
```

Review comment:
Why is it removed?
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 2038

**Code Changes:**
```diff
@@ -1698,6 +1698,103 @@ template<typename R> struct TheTest
         return *this;
     }
 
+    void __test_exp(LaneType dataMax, LaneType diff_thr, LaneType enlarge_factor, LaneType flt_min) {
+        int n = VTraits<R>::vlanes();
+
+        // Test overflow and underflow values with step
+        const LaneType step = (LaneType) 0.01;
+        for (LaneType i = dataMax + 1; i <= dataMax + 11;) {
+            Data<R> dataUpperBound, dataLowerBound, resOverflow, resUnderflow;
+            for (int j = 0; j < n; ++j) {
+                dataUpperBound[j] = i;
+                dataLowerBound[j] = -i;
+                i += step;
```

Review comment:
I think it's by accident. I will add it back.
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** added
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 94

**Code Changes:**
```diff
+        return v_select(mask_not_nan, _vexp_y, v_reinterpret_as_f16(vx_setall_s16(0x7e00)));
+    }
+#endif
+
+    inline v_float32 v_exp(const v_float32 &x) {
+        const v_float32 _vexp_lo_f32 = vx_setall_f32(-88.3762626647949f);
+        const v_float32 _vexp_hi_f32 = vx_setall_f32(89.f);
+        const v_float32 _vexp_half_fp32 = vx_setall_f32(0.5f);
+        const v_float32 _vexp_one_fp32 = vx_setall_f32(1.f);
+        const v_float32 _vexp_LOG2EF_f32 = vx_setall_f32(1.44269504088896341f);
+        const v_float32 _vexp_C1_f32 = vx_setall_f32(-6.93359375E-1f);
```

Review comment:
So should I provide `v_`, `v256_`, `v512_` and `vx_` versions implementation in `intrin_math.hpp` like `simd_utils.impl.hpp`? That's really will make many duplicated code.
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** added
**Context:** PR #24941: Add support for v_exp (exponential)
**Review Line:** 94

**Code Changes:**
```diff
+        return v_select(mask_not_nan, _vexp_y, v_reinterpret_as_f16(vx_setall_s16(0x7e00)));
+    }
+#endif
+
+    inline v_float32 v_exp(const v_float32 &x) {
+        const v_float32 _vexp_lo_f32 = vx_setall_f32(-88.3762626647949f);
+        const v_float32 _vexp_hi_f32 = vx_setall_f32(89.f);
+        const v_float32 _vexp_half_fp32 = vx_setall_f32(0.5f);
+        const v_float32 _vexp_one_fp32 = vx_setall_f32(1.f);
+        const v_float32 _vexp_LOG2EF_f32 = vx_setall_f32(1.44269504088896341f);
+        const v_float32 _vexp_C1_f32 = vx_setall_f32(-6.93359375E-1f);
```

Review comment:
It must be a better way of doing it without duplication.
**File:** modules/imgproc/include/opencv2/imgproc.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -1536,12 +1536,14 @@ respectively (see #getGaussianKernel for details); to fully control the result r
 possible future modifications of all this semantics, it is recommended to specify all of ksize,
 sigmaX, and sigmaY.
 @param borderType pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
+@param hint Implementation modfication flags. See #AlgorithmHint
 
 @sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur
  */
 CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                 double sigmaX, double sigmaY = 0,
```

Review comment:
the flag to allow non-bit-exact implementations should be called universally and added universally to multiple functions. This very solution looks like quite ugly hack. Let's think of it and do properly. In IPP they used AlgorithmHint or something like that. Such enumeration as a separate proper enumeration could be added to various functions (starting with GuassianBlur, for example)
**File:** modules/imgproc/src/smooth.dispatch.cpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -468,7 +468,7 @@ static bool openvx_gaussianBlur(InputArray _src, OutputArray _dst, Size ksize,
 
 #endif
 
-#if defined ENABLE_IPP_GAUSSIAN_BLUR  // see CMake's OPENCV_IPP_GAUSSIAN_BLUR option
+#ifdef ENABLE_IPP_GAUSSIAN_BLUR  // see CMake's OPENCV_IPP_GAUSSIAN_BLUR option
 
 #define IPP_DISABLE_GAUSSIAN_BLUR_LARGE_KERNELS_1TH 1
 #define IPP_DISABLE_GAUSSIAN_BLUR_16SC4_1TH 1
@@ -526,14 +526,14 @@ class ipp_gaussianBlurParallel: public ParallelLoopBody
```

Review comment:
Maybe it would be better to add this condition (negated) conditions on lines 657 and 726? Currently it looks like this: ```.cpp if (depth==CV_8U && <something>) { // ... more conditions // trying OCL - ocl_sepFilter2D_BitExact // trying HAL - gaussianBlurBinomial if (allow_approximations) { // trying IPP - ipp_GaussianBlur // trying HAL - gaussianBlur // trying OVX } // call GaussianBlurFixedPoint return; } if (depth==CV_16U && <something>) { // similar scheme return; } // try OCL - sepFilter2D // try HAL - gaussianBlur // try OVX // try IPP - ipp_GaussianBlur // call sepFilter2D ``` Maybe we could just add `!allow_approximations` in both bit-exact branches and fall to the last non-bit-exact block? --- Also, why is IPP called before HAL in new blocks? Usually we prefer HAL to anything else.
**File:** modules/core/include/opencv2/core.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation
**Review Line:** 159

**Code Changes:**
```diff
+*/
+enum AlgorithmHint {
+    ALGO_DEFAULT = 0, //!< Default algorithm behaviour defined during OpenCV build
+    ALGO_ACCURATE = 1, //!< Use generic portable implementation
+    ALGO_APPROX = 2, //!< Allow alternative approximations to get faster implementation. Behaviour and result depends on a platform
+};
+
+/*! @brief Returns ImplementationHint selected by default, a.k.a. `IMPL_DEFAULT` defined during OpenCV compilation.
+ */
+CV_EXPORTS_W AlgorithmHint getDefaultAlgorithmHint();
+
```

Review comment:
'Implementation' word is not good, in my opinion, too long to type. `AlgoHint` is better. ``` enum class AlgoHint { Default = 0, Fast = 1, Inherit = 2 }; ```
**File:** modules/imgproc/include/opencv2/imgproc.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -1536,12 +1536,14 @@ respectively (see #getGaussianKernel for details); to fully control the result r
 possible future modifications of all this semantics, it is recommended to specify all of ksize,
 sigmaX, and sigmaY.
 @param borderType pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
+@param hint Implementation modfication flags. See #AlgorithmHint
 
 @sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur
  */
 CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                 double sigmaX, double sigmaY = 0,
```

Review comment:
use explicit type instead of int
**File:** modules/imgproc/include/opencv2/imgproc.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -1536,12 +1536,14 @@ respectively (see #getGaussianKernel for details); to fully control the result r
 possible future modifications of all this semantics, it is recommended to specify all of ksize,
 sigmaX, and sigmaY.
 @param borderType pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
+@param hint Implementation modfication flags. See #AlgorithmHint
 
 @sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur
  */
 CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                 double sigmaX, double sigmaY = 0,
```

Review comment:
int => ImplementationHint ?
**File:** modules/imgproc/include/opencv2/imgproc.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -1536,12 +1536,14 @@ respectively (see #getGaussianKernel for details); to fully control the result r
 possible future modifications of all this semantics, it is recommended to specify all of ksize,
 sigmaX, and sigmaY.
 @param borderType pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
+@param hint Implementation modfication flags. See #AlgorithmHint
 
 @sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur
  */
 CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                 double sigmaX, double sigmaY = 0,
```

Review comment:
How to mix Fast+Inherit then?
**File:** modules/imgproc/include/opencv2/imgproc.hpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -1536,12 +1536,14 @@ respectively (see #getGaussianKernel for details); to fully control the result r
 possible future modifications of all this semantics, it is recommended to specify all of ksize,
 sigmaX, and sigmaY.
 @param borderType pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
+@param hint Implementation modfication flags. See #AlgorithmHint
 
 @sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur
  */
 CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                 double sigmaX, double sigmaY = 0,
```

Review comment:
what's the meaning of Fast+Inherit? it's very confusing. In my opinion, 'inherit' itself is confusing. Instead, the hint could be explicitly passed from the parent function to child: ``` void opticalFlowABC(...., AlgoHint hint) { GaussianBlur(prev_layer, smoothed_prev_layer, ...., hint); // pass hint explicitly from the parent } ```
**File:** modules/imgproc/src/smooth.dispatch.cpp
**Change Type:** modified
**Context:** PR #25792: Added flag to GaussianBlur for faster but not bit-exact implementation

**Code Changes:**
```diff
@@ -468,7 +468,7 @@ static bool openvx_gaussianBlur(InputArray _src, OutputArray _dst, Size ksize,
 
 #endif
 
-#if defined ENABLE_IPP_GAUSSIAN_BLUR  // see CMake's OPENCV_IPP_GAUSSIAN_BLUR option
+#ifdef ENABLE_IPP_GAUSSIAN_BLUR  // see CMake's OPENCV_IPP_GAUSSIAN_BLUR option
 
 #define IPP_DISABLE_GAUSSIAN_BLUR_LARGE_KERNELS_1TH 1
 #define IPP_DISABLE_GAUSSIAN_BLUR_16SC4_1TH 1
@@ -526,14 +526,14 @@ class ipp_gaussianBlurParallel: public ParallelLoopBody
```

Review comment:
Fixed HAL-IPP order. In case if "faster" branch does not work or not available we need to fallback to bit-exact implementation.