8
8
assert_allclose ,
9
9
assert_almost_equal ,
10
10
assert_array_equal ,
11
+ assert_equal ,
11
12
assert_raises ,
12
13
assert_raises_regex ,
13
14
suppress_warnings ,
@@ -2087,29 +2088,29 @@ def setup_method(self):
2087
2088
def test_empty (self , shape , ord , axis , keepdims ):
2088
2089
a = numpy .empty (shape )
2089
2090
ia = dpnp .array (a )
2091
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2092
+
2090
2093
if axis is None and a .ndim > 1 and ord in [0 , 3 ]:
2091
2094
# Invalid norm order for matrices (a.ndim == 2) or
2092
2095
# Improper number of dimensions to norm (a.ndim>2)
2093
- with pytest . raises (ValueError ):
2094
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2096
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2097
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2095
2098
elif axis is None and a .ndim > 2 and ord is not None :
2096
2099
# Improper number of dimensions to norm
2097
- with pytest . raises (ValueError ):
2098
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2100
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2101
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2099
2102
elif (
2100
2103
axis is None
2101
- and ord is not None
2104
+ and ord in [ - 2 , - 1 , 0 , 3 ]
2102
2105
and a .ndim != 1
2103
2106
and a .shape [- 1 ] == 0
2104
2107
):
2105
2108
# reduction cannot be performed over zero-size axes
2106
- with pytest . raises (ValueError ):
2107
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2109
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2110
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2108
2111
else :
2109
- result = dpnp .linalg .norm (ia , ord = ord , axis = axis , keepdims = keepdims )
2110
- expected = numpy .linalg .norm (
2111
- a , ord = ord , axis = axis , keepdims = keepdims
2112
- )
2112
+ result = dpnp .linalg .norm (ia , ** kwarg )
2113
+ expected = numpy .linalg .norm (a , ** kwarg )
2113
2114
assert_dtype_allclose (result , expected )
2114
2115
2115
2116
@pytest .mark .parametrize (
@@ -2121,11 +2122,11 @@ def test_0D(self, ord, axis):
2121
2122
ia = dpnp .array (a )
2122
2123
if axis is None and ord is not None :
2123
2124
# Improper number of dimensions to norm
2124
- with pytest . raises (ValueError ):
2125
- dpnp .linalg .norm ( ia , ord = ord , axis = axis )
2125
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ord = ord , axis = axis )
2126
+ assert_raises ( ValueError , numpy .linalg .norm , a , ord = ord , axis = axis )
2126
2127
elif axis is not None :
2127
- with pytest . raises ( AxisError ):
2128
- dpnp .linalg .norm ( ia , ord = ord , axis = axis )
2128
+ assert_raises ( IndexError , dpnp . linalg . norm , ia , ord = ord , axis = axis )
2129
+ assert_raises ( AxisError , numpy .linalg .norm , a , ord = ord , axis = axis )
2129
2130
else :
2130
2131
result = dpnp .linalg .norm (ia , ord = ord , axis = axis )
2131
2132
expected = numpy .linalg .norm (a , ord = ord , axis = axis )
@@ -2158,24 +2159,21 @@ def test_1D(self, dtype, ord, axis, keepdims):
2158
2159
def test_2D (self , dtype , ord , axis , keepdims ):
2159
2160
a = generate_random_numpy_array ((3 , 5 ), dtype )
2160
2161
ia = dpnp .array (a )
2162
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2163
+
2161
2164
if (axis in [- 1 , 0 , 1 ] and ord in ["nuc" , "fro" ]) or (
2162
2165
(isinstance (axis , tuple ) or axis is None ) and ord == 3
2163
2166
):
2164
2167
# Invalid norm order for vectors
2165
- with pytest . raises (ValueError ):
2166
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2168
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2169
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2167
2170
else :
2168
- result = dpnp .linalg .norm (ia , ord = ord , axis = axis , keepdims = keepdims )
2169
- expected = numpy .linalg .norm (
2170
- a , ord = ord , axis = axis , keepdims = keepdims
2171
- )
2171
+ result = dpnp .linalg .norm (ia , ** kwarg )
2172
+ expected = numpy .linalg .norm (a , ** kwarg )
2172
2173
assert_dtype_allclose (result , expected )
2173
2174
2174
2175
@pytest .mark .usefixtures ("suppress_divide_numpy_warnings" )
2175
- @pytest .mark .parametrize (
2176
- "dtype" ,
2177
- get_all_dtypes (no_none = True ),
2178
- )
2176
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
2179
2177
@pytest .mark .parametrize (
2180
2178
"ord" , [None , - dpnp .inf , - 2 , - 1 , 1 , 2 , 3 , dpnp .inf , "fro" , "nuc" ]
2181
2179
)
@@ -2188,21 +2186,21 @@ def test_2D(self, dtype, ord, axis, keepdims):
2188
2186
def test_ND (self , dtype , ord , axis , keepdims ):
2189
2187
a = generate_random_numpy_array ((2 , 3 , 4 , 5 ), dtype )
2190
2188
ia = dpnp .array (a )
2189
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2190
+
2191
2191
if (axis in [- 1 , 0 , 1 ] and ord in ["nuc" , "fro" ]) or (
2192
2192
isinstance (axis , tuple ) and ord == 3
2193
2193
):
2194
2194
# Invalid norm order for vectors
2195
- with pytest . raises (ValueError ):
2196
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2195
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2196
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2197
2197
elif axis is None and ord is not None :
2198
2198
# Improper number of dimensions to norm
2199
- with pytest . raises (ValueError ):
2200
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2199
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2200
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2201
2201
else :
2202
- result = dpnp .linalg .norm (ia , ord = ord , axis = axis , keepdims = keepdims )
2203
- expected = numpy .linalg .norm (
2204
- a , ord = ord , axis = axis , keepdims = keepdims
2205
- )
2202
+ result = dpnp .linalg .norm (ia , ** kwarg )
2203
+ expected = numpy .linalg .norm (a , ** kwarg )
2206
2204
assert_dtype_allclose (result , expected )
2207
2205
2208
2206
@pytest .mark .usefixtures ("suppress_divide_numpy_warnings" )
@@ -2219,21 +2217,21 @@ def test_ND(self, dtype, ord, axis, keepdims):
2219
2217
def test_usm_ndarray (self , dtype , ord , axis , keepdims ):
2220
2218
a = generate_random_numpy_array ((2 , 3 , 4 , 5 ), dtype )
2221
2219
ia = dpt .asarray (a )
2220
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2221
+
2222
2222
if (axis in [- 1 , 0 , 1 ] and ord in ["nuc" , "fro" ]) or (
2223
2223
isinstance (axis , tuple ) and ord == 3
2224
2224
):
2225
2225
# Invalid norm order for vectors
2226
- with pytest . raises (ValueError ):
2227
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2226
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2227
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2228
2228
elif axis is None and ord is not None :
2229
2229
# Improper number of dimensions to norm
2230
- with pytest . raises (ValueError ):
2231
- dpnp .linalg .norm ( ia , ord = ord , axis = axis , keepdims = keepdims )
2230
+ assert_raises (ValueError , dpnp . linalg . norm , ia , ** kwarg )
2231
+ assert_raises ( ValueError , numpy .linalg .norm , a , ** kwarg )
2232
2232
else :
2233
- result = dpnp .linalg .norm (ia , ord = ord , axis = axis , keepdims = keepdims )
2234
- expected = numpy .linalg .norm (
2235
- a , ord = ord , axis = axis , keepdims = keepdims
2236
- )
2233
+ result = dpnp .linalg .norm (ia , ** kwarg )
2234
+ expected = numpy .linalg .norm (a , ** kwarg )
2237
2235
assert_dtype_allclose (result , expected )
2238
2236
2239
2237
@pytest .mark .parametrize ("stride" , [3 , - 1 , - 5 ])
@@ -2257,8 +2255,7 @@ def test_strided_2D(self, axis, stride):
2257
2255
A = numpy .random .rand (20 , 30 )
2258
2256
B = dpnp .asarray (A )
2259
2257
slices = tuple (slice (None , None , stride [i ]) for i in range (A .ndim ))
2260
- a = A [slices ]
2261
- b = B [slices ]
2258
+ a , b = A [slices ], B [slices ]
2262
2259
2263
2260
result = dpnp .linalg .norm (b , axis = axis )
2264
2261
expected = numpy .linalg .norm (a , axis = axis )
@@ -2278,8 +2275,7 @@ def test_strided_ND(self, axis, stride):
2278
2275
A = numpy .random .rand (12 , 16 , 20 , 24 )
2279
2276
B = dpnp .asarray (A )
2280
2277
slices = tuple (slice (None , None , stride [i ]) for i in range (A .ndim ))
2281
- a = A [slices ]
2282
- b = B [slices ]
2278
+ a , b = A [slices ], B [slices ]
2283
2279
2284
2280
result = dpnp .linalg .norm (b , axis = axis )
2285
2281
expected = numpy .linalg .norm (a , axis = axis )
@@ -2299,6 +2295,28 @@ def test_matrix_norm(self, ord, keepdims):
2299
2295
expected = numpy .linalg .matrix_norm (a , ord = ord , keepdims = keepdims )
2300
2296
assert_dtype_allclose (result , expected )
2301
2297
2298
+ @pytest .mark .parametrize ("dtype" , [dpnp .float32 , dpnp .int32 ])
2299
+ @pytest .mark .parametrize (
2300
+ "shape_axis" , [[(2 , 0 ), None ], [(2 , 0 , 3 ), (0 , 1 )]]
2301
+ )
2302
+ def test_matrix_norm_empty (self , dtype , shape_axis ):
2303
+ shape , axis = shape_axis [0 ], shape_axis [1 ]
2304
+ x = dpnp .zeros (shape , dtype = dtype )
2305
+
2306
+ assert_equal (dpnp .linalg .norm (x , axis = axis , ord = "fro" ), 0 )
2307
+ assert_equal (dpnp .linalg .norm (x , axis = axis , ord = "nuc" ), 0 )
2308
+ assert_equal (dpnp .linalg .norm (x , axis = axis , ord = 2 ), 0 )
2309
+ assert_equal (dpnp .linalg .norm (x , axis = axis , ord = 1 ), 0 )
2310
+ assert_equal (dpnp .linalg .norm (x , axis = axis , ord = dpnp .inf ), 0 )
2311
+
2312
+ @pytest .mark .parametrize ("dtype" , [dpnp .float32 , dpnp .int32 ])
2313
+ @pytest .mark .parametrize ("axis" , [None , 0 ])
2314
+ def test_vector_norm_empty (self , dtype , axis ):
2315
+ x = dpnp .zeros (0 , dtype = dtype )
2316
+ assert_equal (dpnp .linalg .vector_norm (x , axis = axis , ord = 1 ), 0 )
2317
+ assert_equal (dpnp .linalg .vector_norm (x , axis = axis , ord = 2 ), 0 )
2318
+ assert_equal (dpnp .linalg .vector_norm (x , axis = axis , ord = dpnp .inf ), 0 )
2319
+
2302
2320
@testing .with_requires ("numpy>=2.0" )
2303
2321
@pytest .mark .parametrize (
2304
2322
"ord" , [None , - dpnp .inf , - 2 , - 1 , 0 , 1 , 2 , 3.5 , dpnp .inf ]
@@ -2320,13 +2338,10 @@ def test_vector_norm_0D(self, ord):
2320
2338
def test_vector_norm_1D (self , ord , axis , keepdims ):
2321
2339
a = generate_random_numpy_array (10 )
2322
2340
ia = dpnp .array (a )
2341
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2323
2342
2324
- result = dpnp .linalg .vector_norm (
2325
- ia , ord = ord , axis = axis , keepdims = keepdims
2326
- )
2327
- expected = numpy .linalg .vector_norm (
2328
- a , ord = ord , axis = axis , keepdims = keepdims
2329
- )
2343
+ result = dpnp .linalg .vector_norm (ia , ** kwarg )
2344
+ expected = numpy .linalg .vector_norm (a , ** kwarg )
2330
2345
assert_dtype_allclose (result , expected )
2331
2346
2332
2347
@testing .with_requires ("numpy>=2.0" )
@@ -2343,29 +2358,26 @@ def test_vector_norm_1D(self, ord, axis, keepdims):
2343
2358
def test_vector_norm_ND (self , ord , axis , keepdims ):
2344
2359
a = numpy .arange (120 ).reshape (2 , 3 , 4 , 5 )
2345
2360
ia = dpnp .array (a )
2361
+ kwarg = {"ord" : ord , "axis" : axis , "keepdims" : keepdims }
2346
2362
2347
- result = dpnp .linalg .vector_norm (
2348
- ia , ord = ord , axis = axis , keepdims = keepdims
2349
- )
2350
- expected = numpy .linalg .vector_norm (
2351
- a , ord = ord , axis = axis , keepdims = keepdims
2352
- )
2363
+ result = dpnp .linalg .vector_norm (ia , ** kwarg )
2364
+ expected = numpy .linalg .vector_norm (a , ** kwarg )
2353
2365
assert_dtype_allclose (result , expected )
2354
2366
2355
2367
def test_error (self ):
2356
- ia = dpnp .arange (120 ).reshape (2 , 3 , 4 , 5 )
2368
+ a = numpy .arange (120 ).reshape (2 , 3 , 4 , 5 )
2369
+ ia = dpnp .array (a )
2357
2370
2358
2371
# Duplicate axes given
2359
- with pytest . raises ( ValueError ):
2360
- dpnp .linalg .norm ( ia , axis = (2 , 2 ))
2372
+ assert_raises ( ValueError , dpnp . linalg . norm , ia , axis = ( 2 , 2 ))
2373
+ assert_raises ( ValueError , numpy .linalg .norm , a , axis = (2 , 2 ))
2361
2374
2362
2375
#'axis' must be None, an integer or a tuple of integers
2363
- with pytest . raises (TypeError ):
2364
- dpnp .linalg .norm ( ia , axis = [2 ])
2376
+ assert_raises (TypeError , dpnp . linalg . norm , ia , axis = [ 2 ])
2377
+ assert_raises ( TypeError , numpy .linalg .norm , a , axis = [2 ])
2365
2378
2366
2379
# Invalid norm order for vectors
2367
- with pytest .raises (ValueError ):
2368
- dpnp .linalg .norm (ia , axis = 1 , ord = [3 ])
2380
+ assert_raises (ValueError , dpnp .linalg .norm , ia , axis = 1 , ord = [3 ])
2369
2381
2370
2382
2371
2383
class TestQr :
0 commit comments