@@ -87,61 +87,102 @@ def assert_dtype_allclose(
87
87
assert dpnp_arr .dtype == numpy_arr .dtype
88
88
89
89
90
- def get_integer_dtypes (all_int_types = False , no_unsigned = False ):
91
- """
92
- Build a list of integer types supported by DPNP.
90
+ def generate_random_numpy_array (
91
+ shape ,
92
+ dtype = None ,
93
+ order = "C" ,
94
+ hermitian = False ,
95
+ seed_value = None ,
96
+ low = - 10 ,
97
+ high = 10 ,
98
+ probability = 0.5 ,
99
+ ):
93
100
"""
101
+ Generate a random numpy array with the specified shape and dtype.
94
102
95
- dtypes = [dpnp .int32 , dpnp .int64 ]
103
+ If required, the array can be made Hermitian (for complex data types) or
104
+ symmetric (for real data types).
96
105
97
- if config .all_int_types or all_int_types :
98
- dtypes += [dpnp .int8 , dpnp .int16 ]
99
- if not no_unsigned :
100
- dtypes += [dpnp .uint8 , dpnp .uint16 , dpnp .uint32 , dpnp .uint64 ]
106
+ Parameters
107
+ ----------
108
+ shape : tuple
109
+ Shape of the generated array.
110
+ dtype : str or dtype, optional
111
+ Desired data-type for the output array.
112
+ If not specified, data type will be determined by numpy.
101
113
102
- return dtypes
114
+ Default : ``None``
115
+ order : {"C", "F"}, optional
116
+ Specify the memory layout of the output array.
103
117
118
+ Default: ``"C"``.
119
+ hermitian : bool, optional
120
+ If True, generates a Hermitian (symmetric if `dtype` is real) matrix.
104
121
105
- def get_complex_dtypes (device = None ):
106
- """
107
- Build a list of complex types supported by DPNP based on device capabilities.
108
- """
122
+ Default : ``False``
123
+ seed_value : int, optional
124
+ The seed value to initialize the random number generator.
109
125
110
- dev = dpctl .select_default_device () if device is None else device
126
+ Default : ``None``
127
+ low : {int, float}, optional
128
+ Lower boundary of the generated samples from a uniform distribution.
111
129
112
- # add complex types
113
- dtypes = [dpnp .complex64 ]
114
- if dev .has_aspect_fp64 :
115
- dtypes .append (dpnp .complex128 )
116
- return dtypes
130
+ Default : ``-10``.
131
+ high : {int, float}, optional
132
+ Upper boundary of the generated samples from a uniform distribution.
117
133
134
+ Default : ``10``.
135
+ probability : float, optional
136
+ If dtype is bool, the probability of True. Ignored for other dtypes.
137
+
138
+ Default : ``0.5``.
139
+ Returns
140
+ -------
141
+ out : numpy.ndarray
142
+ A random numpy array of the specified shape, dtype and memory layout.
143
+ The array is Hermitian or symmetric if `hermitian` is True.
144
+
145
+ Note:
146
+ For arrays with more than 2 dimensions, the Hermitian or
147
+ symmetric property is ensured for each 2D sub-array.
118
148
119
- def get_float_dtypes (no_float16 = True , device = None ):
120
- """
121
- Build a list of floating types supported by DPNP based on device capabilities.
122
149
"""
123
150
124
- dev = dpctl .select_default_device () if device is None else device
151
+ if seed_value is None :
152
+ seed_value = 42
153
+ numpy .random .seed (seed_value )
125
154
126
- # add floating types
127
- dtypes = []
128
- if not no_float16 and dev .has_aspect_fp16 :
129
- dtypes .append (dpnp .float16 )
155
+ if numpy .issubdtype (dtype , numpy .unsignedinteger ):
156
+ low = 0
130
157
131
- dtypes .append (dpnp .float32 )
132
- if dev .has_aspect_fp64 :
133
- dtypes .append (dpnp .float64 )
134
- return dtypes
158
+ # dtype=int is needed for 0d arrays
159
+ size = numpy .prod (shape , dtype = int )
160
+ if dtype == dpnp .bool :
161
+ a = numpy .random .choice (
162
+ [False , True ], size , p = [1 - probability , probability ]
163
+ )
164
+ else :
165
+ a = numpy .random .uniform (low , high , size ).astype (dtype )
135
166
167
+ if numpy .issubdtype (a .dtype , numpy .complexfloating ):
168
+ a += 1j * numpy .random .uniform (low , high , size )
136
169
137
- def get_float_complex_dtypes (no_float16 = True , device = None ):
138
- """
139
- Build a list of floating and complex types supported by DPNP based on device capabilities.
140
- """
170
+ a = a .reshape (shape )
171
+ if hermitian and a .size > 0 :
172
+ if a .ndim > 2 :
173
+ orig_shape = a .shape
174
+ # get 3D array
175
+ a = a .reshape (- 1 , orig_shape [- 2 ], orig_shape [- 1 ])
176
+ for i in range (a .shape [0 ]):
177
+ a [i ] = numpy .conj (a [i ].T ) @ a [i ]
178
+ a = a .reshape (orig_shape )
179
+ else :
180
+ a = numpy .conj (a .T ) @ a
141
181
142
- dtypes = get_float_dtypes (no_float16 , device )
143
- dtypes .extend (get_complex_dtypes (device ))
144
- return dtypes
182
+ # a.reshape(shape) returns an array in C order by default
183
+ if order != "C" and a .ndim > 1 :
184
+ a = numpy .array (a , order = order )
185
+ return a
145
186
146
187
147
188
def get_abs_array (data , dtype = None ):
@@ -214,102 +255,79 @@ def get_array(xp, a):
214
255
return a
215
256
216
257
217
- def generate_random_numpy_array (
218
- shape ,
219
- dtype = None ,
220
- order = "C" ,
221
- hermitian = False ,
222
- seed_value = None ,
223
- low = - 10 ,
224
- high = 10 ,
225
- probability = 0.5 ,
226
- ):
258
+ def get_complex_dtypes (device = None ):
259
+ """
260
+ Build a list of complex types supported by DPNP based on device capabilities.
227
261
"""
228
- Generate a random numpy array with the specified shape and dtype.
229
262
230
- If required, the array can be made Hermitian (for complex data types) or
231
- symmetric (for real data types).
263
+ dev = dpctl .select_default_device () if device is None else device
232
264
233
- Parameters
234
- ----------
235
- shape : tuple
236
- Shape of the generated array.
237
- dtype : str or dtype, optional
238
- Desired data-type for the output array.
239
- If not specified, data type will be determined by numpy.
265
+ # add complex types
266
+ dtypes = [dpnp .complex64 ]
267
+ if dev .has_aspect_fp64 :
268
+ dtypes .append (dpnp .complex128 )
269
+ return dtypes
240
270
241
- Default : ``None``
242
- order : {"C", "F"}, optional
243
- Specify the memory layout of the output array.
244
271
245
- Default: ``"C"``.
246
- hermitian : bool, optional
247
- If True, generates a Hermitian (symmetric if `dtype` is real) matrix.
272
+ def get_float_dtypes (no_float16 = True , device = None ):
273
+ """
274
+ Build a list of floating types supported by DPNP based on device capabilities.
275
+ """
248
276
249
- Default : ``False``
250
- seed_value : int, optional
251
- The seed value to initialize the random number generator.
277
+ dev = dpctl .select_default_device () if device is None else device
252
278
253
- Default : ``None``
254
- low : {int, float}, optional
255
- Lower boundary of the generated samples from a uniform distribution.
279
+ # add floating types
280
+ dtypes = []
281
+ if not no_float16 and dev .has_aspect_fp16 :
282
+ dtypes .append (dpnp .float16 )
256
283
257
- Default : ``-10``.
258
- high : {int, float}, optional
259
- Upper boundary of the generated samples from a uniform distribution.
284
+ dtypes .append (dpnp .float32 )
285
+ if dev .has_aspect_fp64 :
286
+ dtypes .append (dpnp .float64 )
287
+ return dtypes
260
288
261
- Default : ``10``.
262
- probability : float, optional
263
- If dtype is bool, the probability of True. Ignored for other dtypes.
264
289
265
- Default : ``0.5``.
266
- Returns
267
- -------
268
- out : numpy.ndarray
269
- A random numpy array of the specified shape, dtype and memory layout.
270
- The array is Hermitian or symmetric if `hermitian` is True.
290
+ def get_float_complex_dtypes (no_float16 = True , device = None ):
291
+ """
292
+ Build a list of floating and complex types supported by DPNP based on device capabilities.
293
+ """
294
+
295
+ dtypes = get_float_dtypes (no_float16 , device )
296
+ dtypes .extend (get_complex_dtypes (device ))
297
+ return dtypes
271
298
272
- Note:
273
- For arrays with more than 2 dimensions, the Hermitian or
274
- symmetric property is ensured for each 2D sub-array.
275
299
300
+ def get_integer_dtypes (all_int_types = False , no_unsigned = False ):
301
+ """
302
+ Build a list of integer types supported by DPNP.
276
303
"""
277
304
278
- if seed_value is None :
279
- seed_value = 42
280
- numpy .random .seed (seed_value )
305
+ dtypes = [dpnp .int32 , dpnp .int64 ]
281
306
282
- if numpy .issubdtype (dtype , numpy .unsignedinteger ):
283
- low = 0
307
+ if config .all_int_types or all_int_types :
308
+ dtypes += [dpnp .int8 , dpnp .int16 ]
309
+ if not no_unsigned :
310
+ dtypes += [dpnp .uint8 , dpnp .uint16 , dpnp .uint32 , dpnp .uint64 ]
284
311
285
- # dtype=int is needed for 0d arrays
286
- size = numpy .prod (shape , dtype = int )
287
- if dtype == dpnp .bool :
288
- a = numpy .random .choice (
289
- [False , True ], size , p = [1 - probability , probability ]
290
- )
291
- else :
292
- a = numpy .random .uniform (low , high , size ).astype (dtype )
312
+ return dtypes
293
313
294
- if numpy .issubdtype (a .dtype , numpy .complexfloating ):
295
- a += 1j * numpy .random .uniform (low , high , size )
296
314
297
- a = a .reshape (shape )
298
- if hermitian and a .size > 0 :
299
- if a .ndim > 2 :
300
- orig_shape = a .shape
301
- # get 3D array
302
- a = a .reshape (- 1 , orig_shape [- 2 ], orig_shape [- 1 ])
303
- for i in range (a .shape [0 ]):
304
- a [i ] = numpy .conj (a [i ].T ) @ a [i ]
305
- a = a .reshape (orig_shape )
306
- else :
307
- a = numpy .conj (a .T ) @ a
315
+ def has_support_aspect16 (device = None ):
316
+ """
317
+ Return True if the device supports 16-bit precision floating point operations,
318
+ False otherwise.
319
+ """
320
+ dev = dpctl .select_default_device () if device is None else device
321
+ return dev .has_aspect_fp16
308
322
309
- # a.reshape(shape) returns an array in C order by default
310
- if order != "C" and a .ndim > 1 :
311
- a = numpy .array (a , order = order )
312
- return a
323
+
324
+ def has_support_aspect64 (device = None ):
325
+ """
326
+ Return True if the device supports 64-bit precision floating point operations,
327
+ False otherwise.
328
+ """
329
+ dev = dpctl .select_default_device () if device is None else device
330
+ return dev .has_aspect_fp64
313
331
314
332
315
333
def is_cpu_device (device = None ):
@@ -335,23 +353,5 @@ def is_win_platform():
335
353
return platform .startswith ("win" )
336
354
337
355
338
- def has_support_aspect16 (device = None ):
339
- """
340
- Return True if the device supports 16-bit precision floating point operations,
341
- False otherwise.
342
- """
343
- dev = dpctl .select_default_device () if device is None else device
344
- return dev .has_aspect_fp16
345
-
346
-
347
- def has_support_aspect64 (device = None ):
348
- """
349
- Return True if the device supports 64-bit precision floating point operations,
350
- False otherwise.
351
- """
352
- dev = dpctl .select_default_device () if device is None else device
353
- return dev .has_aspect_fp64
354
-
355
-
356
356
def numpy_version ():
357
357
return numpy .lib .NumpyVersion (numpy .__version__ )
0 commit comments