@@ -186,11 +186,35 @@ def _asarray_from_usm_ndarray(
186
186
order = order ,
187
187
buffer_ctor_kwargs = {"queue" : copy_q },
188
188
)
189
- # FIXME: call copy_to when implemented
190
- res [(slice (None , None , None ),) * res .ndim ] = usm_ndary
189
+ hev , _ = ti ._copy_usm_ndarray_into_usm_ndarray (
190
+ src = usm_ndary , dst = res , sycl_queue = copy_q
191
+ )
192
+ hev .wait ()
191
193
return res
192
194
193
195
196
+ def _map_to_device_dtype (dt , q ):
197
+ if dt .char == "?" or np .issubdtype (dt , np .integer ):
198
+ return dt
199
+ d = q .sycl_device
200
+ dtc = dt .char
201
+ if np .issubdtype (dt , np .floating ):
202
+ if dtc == "f" :
203
+ return dt
204
+ else :
205
+ if dtc == "d" and d .has_aspect_fp64 :
206
+ return dt
207
+ if dtc == "h" and d .has_aspect_fp16 :
208
+ return dt
209
+ return dpt .dtype ("f4" )
210
+ elif np .issubdtype (dt , np .complexfloating ):
211
+ if dtc == "F" :
212
+ return dt
213
+ if dtc == "D" and d .has_aspect_fp64 :
214
+ return dt
215
+ return dpt .dtype ("c8" )
216
+
217
+
194
218
def _asarray_from_numpy_ndarray (
195
219
ary , dtype = None , usm_type = None , sycl_queue = None , order = "K"
196
220
):
@@ -205,10 +229,8 @@ def _asarray_from_numpy_ndarray(
205
229
"Please convert the input to an array with numeric data type."
206
230
)
207
231
if dtype is None :
208
- ary_dtype = ary .dtype
209
- dtype = _get_dtype (dtype , copy_q , ref_type = ary_dtype )
210
- if dtype .itemsize > ary_dtype .itemsize :
211
- dtype = ary_dtype
232
+ # deduce device-representable output data type
233
+ dtype = _map_to_device_dtype (ary .dtype , copy_q )
212
234
f_contig = ary .flags ["F" ]
213
235
c_contig = ary .flags ["C" ]
214
236
fc_contig = f_contig or c_contig
@@ -244,8 +266,7 @@ def _asarray_from_numpy_ndarray(
244
266
order = order ,
245
267
buffer_ctor_kwargs = {"queue" : copy_q },
246
268
)
247
- # FIXME: call copy_to when implemented
248
- res [(slice (None , None , None ),) * res .ndim ] = ary
269
+ res [...] = ary
249
270
return res
250
271
251
272
0 commit comments