We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Here are the tests for matrix stuffing from cvxpy. I'm removing them as part of switching to CVXcanon, but you might find them useful.
def test_get_coefficients(self): """Test the get_coefficients function. """ size = (5, 4) # Eye x = create_var(size) coeffs = get_coefficients(x) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(id_, x.data) self.assertItemsAlmostEqual(mat.todense(), sp.eye(20).todense()) # Eye with scalar mult. x = create_var(size) A = create_const(5, (1, 1)) coeffs = get_coefficients(mul_expr(A, x, size)) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertItemsAlmostEqual(mat.todense(), 5*sp.eye(20).todense()) # Promoted x = create_var((1, 1)) coeffs = get_coefficients(promote(x, size)) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (20, 1)) self.assertItemsAlmostEqual(mat, np.ones((20, 1))) # Normal size = (5, 5) x = create_var((5, 1)) A = create_const(np.ones(size), size) coeffs = get_coefficients(mul_expr(A, x, (5, 1))) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (5, 5)) self.assertItemsAlmostEqual(mat.todense(), A.data) # Blocks size = (5, 5) x = create_var(size) A = create_const(np.ones(size), size) coeffs = get_coefficients(mul_expr(A, x, size)) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (25, 25)) self.assertItemsAlmostEqual(mat.todense(), sp.block_diag(5*[np.ones(size)]).todense()) # Scalar constant size = (1, 1) A = create_const(5, size) coeffs = get_coefficients(A) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(intf.size(mat), (1, 1)) self.assertEqual(mat, 5) # Dense constant size = (5, 4) A = create_const(np.ones(size), size) coeffs = get_coefficients(A) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (size[0]*size[1], 1)) self.assertItemsAlmostEqual(mat, np.ones(size)) # Sparse constant size = (5, 5) A = create_const(sp.eye(5), size) coeffs = get_coefficients(A) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (size[0]*size[1], 1)) self.assertItemsAlmostEqual(mat, sp.eye(5).todense()) # Parameter size = (5, 4) param = Parameter(*size) param.value = np.ones(size) A = create_param(param, size) coeffs = get_coefficients(A) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (size[0]*size[1], 1)) self.assertItemsAlmostEqual(mat, param.value) def test_transpose(self): """Test transpose op and coefficients. """ size = (5, 4) x = create_var(size) expr = transpose(x) self.assertEqual(expr.size, (4, 5)) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] test_mat = np.mat(range(20)).T self.assertItemsAlmostEqual((mat*test_mat).reshape((4, 5), order='F'), test_mat.reshape(size, order='F').T) def test_index(self): """Test the get_coefficients function for index. """ size = (5, 4) # Eye key = (slice(0,2,None), slice(0,2,None)) x = create_var(size) expr = index(x, (2, 2), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(id_, x.data) self.assertEqual(mat.shape, (4, 20)) test_mat = np.mat(range(20)).T self.assertItemsAlmostEqual((mat*test_mat).reshape((2, 2), order='F'), test_mat.reshape(size, order='F')[key]) # Eye with scalar mult. key = (slice(0,2,None), slice(0,2,None)) x = create_var(size) A = create_const(5, (1, 1)) expr = mul_expr(A, x, size) expr = index(expr, (2, 2), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] test_mat = np.mat(range(20)).T self.assertItemsAlmostEqual((mat*test_mat).reshape((2, 2), order='F'), 5*test_mat.reshape(size, order='F')[key]) # Promoted key = (slice(0,2,None), slice(0,2,None)) x = create_var((1, 1)) value = np.array(range(20)).reshape(size) A = create_const(value, size) prom_x = promote(x, (size[1], 1)) expr = mul_expr(A, diag_vec(prom_x), size) expr = index(expr, (2, 2), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (4, 1)) self.assertItemsAlmostEqual(mat, value[key]) # Normal size = (5, 5) key = (slice(0,2,None), slice(0,1,None)) x = create_var((5, 1)) A = create_const(np.ones(size), size) expr = mul_expr(A, x, (5, 1)) expr = index(expr, (2, 1), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (2, 5)) self.assertItemsAlmostEqual(mat.todense(), A.data[slice(0,2,None)]) # Blocks size = (5, 5) key = (slice(0,2,None), slice(0,2,None)) x = create_var(size) value = np.array(range(25)).reshape(size) A = create_const(value, size) expr = mul_expr(A, x, size) expr = index(expr, (2, 2), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (4, 25)) test_mat = np.mat(range(25)).T self.assertItemsAlmostEqual((mat*test_mat).reshape((2, 2), order='F'), (A.data*test_mat.reshape(size, order='F'))[key]) # Scalar constant size = (1, 1) A = create_const(5, size) key = (slice(0,1,None), slice(0,1,None)) expr = index(A, (1, 1), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(intf.size(mat), (1, 1)) self.assertEqual(mat, 5) # Dense constant size = (5, 4) key = (slice(0,2,None), slice(0,1,None)) value = np.array(range(20)).reshape(size) A = create_const(value, size) expr = index(A, (2, 1), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (2, 1)) self.assertItemsAlmostEqual(mat, value[key]) # Sparse constant size = (5, 5) key = (slice(0,2,None), slice(0,1,None)) A = create_const(sp.eye(5), size) expr = index(A, (2, 1), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (2, 1)) self.assertItemsAlmostEqual(mat, sp.eye(5).todense()[key]) # Parameter size = (5, 4) key = (slice(0,2,None), slice(0,1,None)) param = Parameter(*size) value = np.array(range(20)).reshape(size) param.value = value A = create_param(param, size) expr = index(A, (2, 1), key) coeffs = get_coefficients(expr) assert len(coeffs) == 1 id_, mat = coeffs[0] self.assertEqual(mat.shape, (2, 1)) self.assertItemsAlmostEqual(mat, param.value[key])
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Here are the tests for matrix stuffing from cvxpy. I'm removing them as part of switching to CVXcanon, but you might find them useful.
The text was updated successfully, but these errors were encountered: