@@ -73,3 +73,57 @@ def test_dense_sparse_sparse(self):
7373 assert np .allclose (dense_val , csc_val )
7474 assert np .allclose (dense_sol , sparse_sol )
7575 assert np .allclose (dense_sol , csc_sol )
76+
77+ def test_dense_left_matmul (self ):
78+ np .random .seed (0 )
79+ m , n = 4 , 4
80+ A = np .random .rand (m , n )
81+ X = cp .Variable ((n , n ), nonneg = True )
82+ B = np .random .rand (m , n )
83+ obj = cp .Minimize (cp .sum_squares (A @ X - B ))
84+ constraints = []
85+ problem = cp .Problem (obj , constraints )
86+ problem .solve (nlp = True , verbose = True )
87+ checker = DerivativeChecker (problem )
88+ checker .run_and_assert ()
89+
90+ def test_dense_right_matmul (self ):
91+ np .random .seed (0 )
92+ m , n = 4 , 4
93+ A = np .random .rand (m , n )
94+ X = cp .Variable ((n , n ), nonneg = True )
95+ B = np .random .rand (m , n )
96+ obj = cp .Minimize (cp .sum_squares (X @ A - B ))
97+ constraints = []
98+ problem = cp .Problem (obj , constraints )
99+ problem .solve (nlp = True , verbose = True )
100+ checker = DerivativeChecker (problem )
101+ checker .run_and_assert ()
102+
103+ def test_sparse_and_dense_matmul (self ):
104+ np .random .seed (0 )
105+ m , n = 4 , 4
106+ A = np .random .rand (m , n )
107+ C = sp .random (m , n , density = 0.5 )
108+ X = cp .Variable ((n , n ), nonneg = True )
109+ B = np .random .rand (m , n )
110+ obj = cp .Minimize (cp .sum_squares (A @ X @ C - B ))
111+ constraints = []
112+ problem = cp .Problem (obj , constraints )
113+ problem .solve (nlp = True , verbose = True )
114+ checker = DerivativeChecker (problem )
115+ checker .run_and_assert ()
116+
117+ def test_sparse_and_dense_matmul2 (self ):
118+ np .random .seed (0 )
119+ m , n = 4 , 3
120+ A = np .random .rand (n , m )
121+ C = sp .random (m , n , density = 0.5 )
122+ X = cp .Variable ((n , n ), nonneg = True )
123+ B = np .random .rand (m , m )
124+ obj = cp .Minimize (cp .sum_squares (C @ X @ A - B ))
125+ constraints = []
126+ problem = cp .Problem (obj , constraints )
127+ problem .solve (nlp = True , verbose = True )
128+ checker = DerivativeChecker (problem )
129+ checker .run_and_assert ()
0 commit comments