def test_diagonal_zero_chunks(): x = da.ones((8, 8), chunks=(4, 4)) dd = da.ones((8, 8), chunks=(4, 4)) d = da.diagonal(dd) expected = np.ones((8, )) assert_eq(d, expected) assert_eq(d + d, 2 * expected) A = d + x assert_eq(A, np.full((8, 8), 2.0))
def test_diagonal(): v = np.arange(11) with pytest.raises(ValueError): da.diagonal(v) v = np.arange(4).reshape((2, 2)) with pytest.raises(ValueError): da.diagonal(v, axis1=0, axis2=0) with pytest.raises(AxisError): da.diagonal(v, axis1=-4) with pytest.raises(AxisError): da.diagonal(v, axis2=-4) v = np.arange(4 * 5 * 6).reshape((4, 5, 6)) v = da.from_array(v, chunks=2) assert_eq(da.diagonal(v), np.diagonal(v)) # Empty diagonal. assert_eq(da.diagonal(v, offset=10), np.diagonal(v, offset=10)) assert_eq(da.diagonal(v, offset=-10), np.diagonal(v, offset=-10)) with pytest.raises(ValueError): da.diagonal(v, axis1=-2) # Negative axis. assert_eq(da.diagonal(v, axis1=-1), np.diagonal(v, axis1=-1)) assert_eq(da.diagonal(v, offset=1, axis1=-1), np.diagonal(v, offset=1, axis1=-1)) # Heterogenous chunks. v = np.arange(2 * 3 * 4 * 5 * 6).reshape((2, 3, 4, 5, 6)) v = da.from_array(v, chunks=(1, (1, 2), (1, 2, 1), (2, 1, 2), (5, 1))) assert_eq(da.diagonal(v), np.diagonal(v)) assert_eq( da.diagonal(v, offset=2, axis1=3, axis2=1), np.diagonal(v, offset=2, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-2, axis1=3, axis2=1), np.diagonal(v, offset=-2, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-2, axis1=3, axis2=4), np.diagonal(v, offset=-2, axis1=3, axis2=4), ) assert_eq(da.diagonal(v, 1), np.diagonal(v, 1)) assert_eq(da.diagonal(v, -1), np.diagonal(v, -1)) # Positional arguments assert_eq(da.diagonal(v, 1, 2, 1), np.diagonal(v, 1, 2, 1)) v = np.arange(2 * 3 * 4 * 5 * 6).reshape((2, 3, 4, 5, 6)) assert_eq(da.diagonal(v, axis1=1, axis2=3), np.diagonal(v, axis1=1, axis2=3)) assert_eq( da.diagonal(v, offset=1, axis1=1, axis2=3), np.diagonal(v, offset=1, axis1=1, axis2=3), ) assert_eq( da.diagonal(v, offset=1, axis1=3, axis2=1), np.diagonal(v, offset=1, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-5, axis1=3, axis2=1), np.diagonal(v, offset=-5, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-6, axis1=3, axis2=1), np.diagonal(v, offset=-6, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-6, axis1=-3, axis2=1), np.diagonal(v, offset=-6, axis1=-3, axis2=1), ) assert_eq( da.diagonal(v, offset=-6, axis1=-3, axis2=1), np.diagonal(v, offset=-6, axis1=-3, axis2=1), ) v = da.from_array(v, chunks=2) assert_eq( da.diagonal(v, offset=1, axis1=3, axis2=1), np.diagonal(v, offset=1, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-1, axis1=3, axis2=1), np.diagonal(v, offset=-1, axis1=3, axis2=1), ) v = np.arange(384).reshape((8, 8, 6)) assert_eq(da.diagonal(v, offset=-1, axis1=2), np.diagonal(v, offset=-1, axis1=2)) v = da.from_array(v, chunks=(4, 4, 2)) assert_eq(da.diagonal(v, offset=-1, axis1=2), np.diagonal(v, offset=-1, axis1=2))
def test_diagonal(): v = cupy.arange(11) with pytest.raises(ValueError): da.diagonal(v) v = cupy.arange(4).reshape((2, 2)) with pytest.raises(ValueError): da.diagonal(v, axis1=0, axis2=0) with pytest.raises(AxisError): da.diagonal(v, axis1=-4) with pytest.raises(AxisError): da.diagonal(v, axis2=-4) v = cupy.arange(4 * 5 * 6).reshape((4, 5, 6)) v = da.from_array(v, chunks=2, asarray=False) assert_eq(da.diagonal(v), np.diagonal(v)) # Empty diagonal. assert_eq(da.diagonal(v, offset=10), np.diagonal(v, offset=10)) assert_eq(da.diagonal(v, offset=-10), np.diagonal(v, offset=-10)) assert isinstance(da.diagonal(v).compute(), cupy.core.core.ndarray) with pytest.raises(ValueError): da.diagonal(v, axis1=-2) # Negative axis. assert_eq(da.diagonal(v, axis1=-1), np.diagonal(v, axis1=-1)) assert_eq(da.diagonal(v, offset=1, axis1=-1), np.diagonal(v, offset=1, axis1=-1)) # Heterogenous chunks. v = cupy.arange(2 * 3 * 4 * 5 * 6).reshape((2, 3, 4, 5, 6)) v = da.from_array(v, chunks=(1, (1, 2), (1, 2, 1), (2, 1, 2), (5, 1)), asarray=False) assert_eq(da.diagonal(v), np.diagonal(v)) assert_eq( da.diagonal(v, offset=2, axis1=3, axis2=1), np.diagonal(v, offset=2, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-2, axis1=3, axis2=1), np.diagonal(v, offset=-2, axis1=3, axis2=1), ) assert_eq( da.diagonal(v, offset=-2, axis1=3, axis2=4), np.diagonal(v, offset=-2, axis1=3, axis2=4), ) assert_eq(da.diagonal(v, 1), np.diagonal(v, 1)) assert_eq(da.diagonal(v, -1), np.diagonal(v, -1)) # Positional arguments assert_eq(da.diagonal(v, 1, 2, 1), np.diagonal(v, 1, 2, 1))
def test_diagonal(): v = np.arange(11) with pytest.raises(ValueError): da.diagonal(v) v = np.arange(4).reshape((2, 2)) with pytest.raises(ValueError): da.diagonal(v, axis1=0, axis2=0) with pytest.raises(AxisError): da.diagonal(v, axis1=-4) with pytest.raises(AxisError): da.diagonal(v, axis2=-4) v = np.arange(4 * 5 * 6).reshape((4, 5, 6)) v = da.from_array(v, chunks=2) assert_eq(da.diagonal(v), np.diagonal(v)) # Empty diagonal. assert_eq(da.diagonal(v, offset=10), np.diagonal(v, offset=10)) assert_eq(da.diagonal(v, offset=-10), np.diagonal(v, offset=-10)) with pytest.raises(ValueError): da.diagonal(v, axis1=-2) # Negative axis. assert_eq(da.diagonal(v, axis1=-1), np.diagonal(v, axis1=-1)) assert_eq(da.diagonal(v, offset=1, axis1=-1), np.diagonal(v, offset=1, axis1=-1)) # Heterogenous chunks. v = np.arange(2 * 3 * 4 * 5 * 6).reshape((2, 3, 4, 5, 6)) v = da.from_array(v, chunks=(1, (1, 2), (1, 2, 1), (2, 1, 2), (5, 1))) assert_eq(da.diagonal(v), np.diagonal(v)) assert_eq(da.diagonal(v, offset=2, axis1=3, axis2=1), np.diagonal(v, offset=2, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-2, axis1=3, axis2=1), np.diagonal(v, offset=-2, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-2, axis1=3, axis2=4), np.diagonal(v, offset=-2, axis1=3, axis2=4)) assert_eq(da.diagonal(v, 1), np.diagonal(v, 1)) assert_eq(da.diagonal(v, -1), np.diagonal(v, -1)) # Positional arguments assert_eq(da.diagonal(v, 1, 2, 1), np.diagonal(v, 1, 2, 1)) v = np.arange(2 * 3 * 4 * 5 * 6).reshape((2, 3, 4, 5, 6)) assert_eq(da.diagonal(v, axis1=1, axis2=3), np.diagonal(v, axis1=1, axis2=3)) assert_eq(da.diagonal(v, offset=1, axis1=1, axis2=3), np.diagonal(v, offset=1, axis1=1, axis2=3)) assert_eq(da.diagonal(v, offset=1, axis1=3, axis2=1), np.diagonal(v, offset=1, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-5, axis1=3, axis2=1), np.diagonal(v, offset=-5, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-6, axis1=3, axis2=1), np.diagonal(v, offset=-6, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-6, axis1=-3, axis2=1), np.diagonal(v, offset=-6, axis1=-3, axis2=1)) assert_eq(da.diagonal(v, offset=-6, axis1=-3, axis2=1), np.diagonal(v, offset=-6, axis1=-3, axis2=1)) v = da.from_array(v, chunks=2) assert_eq(da.diagonal(v, offset=1, axis1=3, axis2=1), np.diagonal(v, offset=1, axis1=3, axis2=1)) assert_eq(da.diagonal(v, offset=-1, axis1=3, axis2=1), np.diagonal(v, offset=-1, axis1=3, axis2=1)) v = np.arange(384).reshape((8, 8, 6)) assert_eq(da.diagonal(v, offset=-1, axis1=2), np.diagonal(v, offset=-1, axis1=2)) v = da.from_array(v, chunks=(4, 4, 2)) assert_eq(da.diagonal(v, offset=-1, axis1=2), np.diagonal(v, offset=-1, axis1=2))