def test_sign(self): x = cp.Variable() problem = cp.Problem(cp.Minimize(cp.sign(x)), [-2 <= x, x <= -0.5]) problem.solve(SOLVER, qcp=True) self.assertEqual(problem.objective.value, -1) self.assertLessEqual(x.value, 0) problem = cp.Problem(cp.Maximize(cp.sign(x)), [1 <= x, x <= 2]) problem.solve(SOLVER, qcp=True) self.assertEqual(problem.objective.value, 1.0) self.assertGreater(x.value, 0)
def test_sign(self) -> None: x = cp.Variable() problem = cp.Problem(cp.Minimize(cp.sign(x)), [-2 <= x, x <= -0.5]) problem.solve(SOLVER, qcp=True) self.assertEqual(problem.objective.value, -1) self.assertLessEqual(x.value, 0) problem = cp.Problem(cp.Maximize(cp.sign(x)), [1 <= x, x <= 2]) problem.solve(SOLVER, qcp=True) self.assertEqual(problem.objective.value, 1.0) self.assertGreater(x.value, 0) # Check that sign doesn't change value. vector = np.array([.1, -.3, .5]) variable = cp.Variable(len(vector)) problem = cp.Problem(cp.Maximize(vector @ variable), [cp.norm2(variable) <= 1.]) problem.solve() value = variable.value.copy() cp.sign(variable).value self.assertItemsAlmostEqual(value, variable.value)