11from lpython import i32 , f32 , f64
2- from numpy import empty , arcsin , arccos , sin , cos , sqrt , arctan , tan , degrees , radians , float32 , float64
2+ from numpy import empty , arcsin , arccos , sin , cos , sqrt , arctan , tan , degrees , radians , hypot , float32 , float64
33from math import pi
44
55def verify1d_same (array : f32 [:], result : f32 [:], size : i32 ):
@@ -57,6 +57,15 @@ def verify_arctan_2d(array: f64[:, :], result: f64[:, :], size1:i32, size2:i32):
5757 for j in range (size2 ):
5858 assert abs (arctan (array [i , j ])** 2.0 - result [i , j ]) <= eps
5959
60+ def verify_hypot_2d (array1 : f64 [:, :], array2 : f64 [:, :], result : f64 [:, :], size1 :i32 , size2 :i32 ):
61+ i : i32
62+ j : i32
63+ eps : f64
64+ eps = 1e-12
65+ for i in range (size1 ):
66+ for j in range (size2 ):
67+ assert abs (hypot (array1 [i , j ], array2 [i , j ]) - result [i , j ]) <= eps
68+
6069def elemental_arcsin ():
6170 i : i32
6271 j : i32
@@ -222,6 +231,35 @@ def elemental_radians():
222231 for j in range (64 ):
223232 assert abs (radians2d [i , j ] - cos (radians (array2d [i , j ]))) <= eps_64
224233
234+ def elemental_hypot ():
235+ i : i32
236+ j : i32
237+ eps_32 : f32
238+ eps_32 = f32 (1e-6 )
239+
240+ hypot1d : f32 [200 ] = empty (200 , dtype = float32 )
241+ array1d1 : f32 [200 ] = empty (200 , dtype = float32 )
242+ array1d2 : f32 [200 ] = empty (200 , dtype = float32 )
243+ for i in range (200 ):
244+ array1d1 [i ] = f32 (i )
245+ array1d2 [i ] = f32 (i + 10 )
246+
247+ hypot1d = hypot (array1d1 , array1d2 )
248+
249+ for i in range (200 ):
250+ assert abs (hypot1d [i ] - hypot (array1d1 [i ], array1d2 [i ])) <= eps_32
251+
252+ array2d1 : f64 [64 , 64 ] = empty ((64 , 64 ), dtype = float64 )
253+ array2d2 : f64 [64 , 64 ] = empty ((64 , 64 ), dtype = float64 )
254+ hypot2d : f64 [64 , 64 ] = empty ((64 , 64 ), dtype = float64 )
255+ for i in range (64 ):
256+ for j in range (64 ):
257+ array2d1 [i ,j ]= float (i * j )
258+ array2d2 [i ,j ]= float (64 * i + j - 2048 )
259+
260+ hypot2d = hypot (array2d1 , array2d2 )
261+ verify_hypot_2d (array2d1 , array2d2 , hypot2d , 64 , 64 )
262+
225263
226264elemental_arcsin ()
227265elemental_arccos ()
@@ -231,3 +269,4 @@ def elemental_radians():
231269elemental_trig_identity ()
232270elemental_reverse ()
233271elemental_trig_identity_extra ()
272+ elemental_hypot ()
0 commit comments