@@ -202,14 +202,14 @@ def test_select_vec(vs):
202202 operations .select (z , SelectOp .rowgt , x , 2 )
203203 idx , vals = z .extract_tuples ()
204204 np_assert_equal (idx , [3 ])
205- np_assert_equal (vals , [30. ])
205+ np_assert_allclose (vals , [30. ])
206206
207207 # Select by value
208208 z = Vector .new (x .dtype , x .size ())
209209 operations .select (z , SelectOp .valuegt , x , 10. )
210210 idx , vals = z .extract_tuples ()
211211 np_assert_equal (idx , [2 , 3 ])
212- np_assert_equal (vals , [20. , 30. ])
212+ np_assert_allclose (vals , [20. , 30. ])
213213
214214
215215def test_select_mat (mm ):
@@ -220,7 +220,7 @@ def test_select_mat(mm):
220220 rowidx , colidx , vals = z .extract_tuples ()
221221 np_assert_equal (rowidx , [0 , 1 , 1 , 2 ])
222222 np_assert_equal (colidx , [4 , 0 , 4 , 3 ])
223- np_assert_equal (vals , [6. , 1. , 8. , 2. ])
223+ np_assert_allclose (vals , [6. , 1. , 8. , 2. ])
224224
225225 # Transposed
226226 z = Matrix .new (y .dtype , y .shape [1 ], y .shape [0 ])
@@ -229,7 +229,7 @@ def test_select_mat(mm):
229229 rowidx , colidx , vals = z .extract_tuples ()
230230 np_assert_equal (rowidx , [0 , 0 , 0 ])
231231 np_assert_equal (colidx , [1 , 3 , 5 ])
232- np_assert_equal (vals , [1. , 5. , 7. ])
232+ np_assert_allclose (vals , [1. , 5. , 7. ])
233233
234234
235235def test_empty_select ():
@@ -275,3 +275,61 @@ def test_reduce_scalar_vec(vs):
275275 s = Scalar .new (x .dtype )
276276 operations .reduce_to_scalar (s , Monoid .times , x )
277277 np_assert_allclose (s .extract_element (), functools .reduce (operator .mul , xvals ))
278+
279+
280+ def test_extract_vec (vs ):
281+ x , _ = vs
282+ xidx , xvals = x .extract_tuples ()
283+ z = Vector .new (x .dtype , * x .shape )
284+ operations .extract (z , x , [0 , 1 , 3 ])
285+ idx , vals = z .extract_tuples ()
286+ np_assert_equal (idx , [1 , 3 ])
287+ np_assert_allclose (vals , [10. , 30. ])
288+
289+ # None == GrB_ALL
290+ operations .extract (z , x , None )
291+ idx , vals = z .extract_tuples ()
292+ np_assert_equal (idx , xidx )
293+ np_assert_allclose (vals , xvals )
294+
295+
296+ def test_extract_mat (mm ):
297+ x , _ = mm
298+ xrows , xcols , xvals = x .extract_tuples ()
299+ z = Matrix .new (x .dtype , * x .shape )
300+ operations .extract (z , x , [0 , 4 ], [1 , 3 , 5 ])
301+ rowidx , colidx , vals = z .extract_tuples ()
302+ np_assert_equal (rowidx , [0 , 0 ])
303+ np_assert_equal (colidx , [3 , 5 ])
304+ np_assert_allclose (vals , [1.1 , 2.2 ])
305+
306+ # None == GrB_ALL
307+ operations .extract (z , x , None , None )
308+ rowidx , colidx , vals = z .extract_tuples ()
309+ np_assert_equal (rowidx , xrows )
310+ np_assert_equal (colidx , xcols )
311+ np_assert_allclose (vals , xvals )
312+
313+
314+ def test_extract_vec_from_mat (mm ):
315+ x , _ = mm
316+ # Extract column
317+ z = Vector .new (x .dtype , x .shape [0 ])
318+ operations .extract (z , x , [0 , 1 , 4 ], 3 )
319+ idx , vals = z .extract_tuples ()
320+ np_assert_equal (idx , [0 , 1 ])
321+ np_assert_allclose (vals , [1.1 , 3.3 ])
322+
323+ # Extract row
324+ z = Vector .new (x .dtype , x .shape [1 ])
325+ operations .extract (z , x , 2 , [0 , 1 , 4 ])
326+ idx , vals = z .extract_tuples ()
327+ np_assert_equal (idx , [0 , 1 ])
328+ np_assert_allclose (vals , [4.4 , 5.5 ])
329+
330+ # Extract column via transposed input
331+ z = Vector .new (x .dtype , x .shape [0 ])
332+ operations .extract (z , x , 3 , [0 , 1 , 4 ], desc = desc .T0 )
333+ idx , vals = z .extract_tuples ()
334+ np_assert_equal (idx , [0 , 1 ])
335+ np_assert_allclose (vals , [1.1 , 3.3 ])
0 commit comments