https://github.com/opencv/opencv_contrib/pull/3785
From 09eb618804588f77026924096d848800630c8d6f Mon Sep 17 00:00:00 2001
From: Alexander Smorkalov <alexander.smorkalov@xperience.ai>
Date: Tue, 3 Sep 2024 13:47:48 +0300
Subject: [PATCH] Workaround for CUDA 12.6 tuple_size issue #3773.

---
 modules/cudaarithm/src/cuda/polar_cart.cu | 20 +++++---------------
 1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/modules/cudaarithm/src/cuda/polar_cart.cu b/modules/cudaarithm/src/cuda/polar_cart.cu
index 725f5741d8..c65b894bf6 100644
--- a/modules/cudaarithm/src/cuda/polar_cart.cu
+++ b/modules/cudaarithm/src/cuda/polar_cart.cu
@@ -159,25 +159,15 @@ void cv::cuda::cartToPolar(InputArray _xy, OutputArray _mag, OutputArray _angle,
     GpuMat_<float> magc(mag);
     GpuMat_<float> anglec(angle);
 
+    gridTransformUnary(globPtr<float2>(xy), globPtr<float>(magc), magnitude_interleaved_func<float2>(), stream);
+
     if (angleInDegrees)
     {
-        auto f1 = magnitude_interleaved_func<float2>();
-        auto f2 = direction_interleaved_func<float2, true>();
-        cv::cudev::tuple<decltype(f1), decltype(f2)> f12 = cv::cudev::make_tuple(f1, f2);
-        gridTransformTuple(globPtr<float2>(xy),
-                           tie(magc, anglec),
-                           f12,
-                           stream);
+        gridTransformUnary(globPtr<float2>(xy), globPtr<float>(anglec), direction_interleaved_func<float2, true>(), stream);
     }
     else
     {
-        auto f1 = magnitude_interleaved_func<float2>();
-        auto f2 = direction_interleaved_func<float2, false>();
-        cv::cudev::tuple<decltype(f1), decltype(f2)> f12 = cv::cudev::make_tuple(f1, f2);
-        gridTransformTuple(globPtr<float2>(xy),
-                           tie(magc, anglec),
-                           f12,
-                           stream);
+        gridTransformUnary(globPtr<float2>(xy), globPtr<float>(anglec), direction_interleaved_func<float2, false>(), stream);
     }
 
     syncOutput(mag, _mag, stream);
@@ -191,7 +181,7 @@ void cv::cuda::cartToPolar(InputArray _xy, OutputArray _magAngle, bool angleInDe
     CV_Assert( xy.type() == CV_32FC2 );
 
     GpuMat magAngle = getOutputMat(_magAngle, xy.size(), CV_32FC2, stream);
-    
+
     if (angleInDegrees)
     {
         gridTransformUnary(globPtr<float2>(xy),
