@@ -109,6 +109,25 @@ def test_usm_ndarray_flags():
109109 x .flags ["C" ] = False
110110
111111
112+ def test_usm_ndarray_flags_bug_gh_1334 ():
113+ get_queue_or_skip ()
114+ a = dpt .ones ((2 , 3 ), dtype = "u4" )
115+ r = dpt .reshape (a , (1 , 6 , 1 ))
116+ assert r .flags ["C" ] and r .flags ["F" ]
117+
118+ a = dpt .ones ((2 , 3 ), dtype = "u4" , order = "F" )
119+ r = dpt .reshape (a , (1 , 6 , 1 ), order = "F" )
120+ assert r .flags ["C" ] and r .flags ["F" ]
121+
122+ a = dpt .ones ((2 , 3 , 4 ), dtype = "i8" )
123+ r = dpt .sum (a , axis = (1 , 2 ), keepdims = True )
124+ assert r .flags ["C" ] and r .flags ["F" ]
125+
126+ a = dpt .ones ((2 , 1 ), dtype = "?" )
127+ r = a [:, 1 ::- 1 ]
128+ assert r .flags ["F" ] and r .flags ["C" ]
129+
130+
112131@pytest .mark .parametrize (
113132 "dtype" ,
114133 [
@@ -1012,6 +1031,53 @@ def test_setitem_same_dtype(dtype, src_usm_type, dst_usm_type):
10121031 Zusm_empty [Ellipsis ] = Zusm_3d [0 , 0 , 0 :0 ]
10131032
10141033
1034+ def test_setitem_broadcasting ():
1035+ get_queue_or_skip ()
1036+ dst = dpt .ones ((2 , 3 , 4 ), dtype = "u4" )
1037+ src = dpt .zeros ((3 , 1 ), dtype = dst .dtype )
1038+ dst [...] = src
1039+ expected = np .zeros (dst .shape , dtype = dst .dtype )
1040+ assert np .array_equal (dpt .asnumpy (dst ), expected )
1041+
1042+
1043+ def test_setitem_broadcasting_empty_dst_validation ():
1044+ "Broadcasting rules apply, except exception"
1045+ get_queue_or_skip ()
1046+ dst = dpt .ones ((2 , 0 , 5 , 4 ), dtype = "i8" )
1047+ src = dpt .ones ((2 , 0 , 3 , 4 ), dtype = "i8" )
1048+ with pytest .raises (ValueError ):
1049+ dst [...] = src
1050+
1051+
1052+ def test_setitem_broadcasting_empty_dst_edge_case ():
1053+ """RHS is shunken to empty array by
1054+ broadasting rule, hence no exception"""
1055+ get_queue_or_skip ()
1056+ dst = dpt .ones (1 , dtype = "i8" )[0 :0 ]
1057+ src = dpt .ones (tuple (), dtype = "i8" )
1058+ dst [...] = src
1059+
1060+
1061+ def test_setitem_broadcasting_src_ndim_equal_dst_ndim ():
1062+ get_queue_or_skip ()
1063+ dst = dpt .ones ((2 , 3 , 4 ), dtype = "i4" )
1064+ src = dpt .zeros ((2 , 1 , 4 ), dtype = "i4" )
1065+ dst [...] = src
1066+
1067+ expected = np .zeros (dst .shape , dtype = dst .dtype )
1068+ assert np .array_equal (dpt .asnumpy (dst ), expected )
1069+
1070+
1071+ def test_setitem_broadcasting_src_ndim_greater_than_dst_ndim ():
1072+ get_queue_or_skip ()
1073+ dst = dpt .ones ((2 , 3 , 4 ), dtype = "i4" )
1074+ src = dpt .zeros ((1 , 2 , 1 , 4 ), dtype = "i4" )
1075+ dst [...] = src
1076+
1077+ expected = np .zeros (dst .shape , dtype = dst .dtype )
1078+ assert np .array_equal (dpt .asnumpy (dst ), expected )
1079+
1080+
10151081@pytest .mark .parametrize (
10161082 "dtype" ,
10171083 _all_dtypes ,
0 commit comments