diff options
author | Michael Schneeberger <michael.schneeberger@fhnw.ch> | 2022-03-16 13:09:00 +0100 |
---|---|---|
committer | Michael Schneeberger <michael.schneeberger@fhnw.ch> | 2022-03-16 13:09:00 +0100 |
commit | f0981e0d4c85ddb8527501e77ee44dcbd86bdfea (patch) | |
tree | 79340a67199bc942004dc51a4d4ee2e8e2d8ab00 /test_polymatrix | |
parent | add inequality constraint and KKT conditions (diff) | |
download | polymatrix-f0981e0d4c85ddb8527501e77ee44dcbd86bdfea.tar.gz polymatrix-f0981e0d4c85ddb8527501e77ee44dcbd86bdfea.zip |
bugfixes in KKT conditions
Diffstat (limited to '')
-rw-r--r-- | test_polymatrix/test_polymatrix.py | 290 |
1 files changed, 148 insertions, 142 deletions
diff --git a/test_polymatrix/test_polymatrix.py b/test_polymatrix/test_polymatrix.py index f693df0..d8abeef 100644 --- a/test_polymatrix/test_polymatrix.py +++ b/test_polymatrix/test_polymatrix.py @@ -1,22 +1,55 @@ import unittest - -from polymatrix.polystruct import init_equation, init_poly_matrix -from polymatrix.utils import variable_to_index +from polymatrix.init.initoptimization import init_optimization +from polymatrix.init.initpolymatrix import init_poly_matrix +from polymatrix.optimization import Optimization +from polymatrix.polymatrix import PolyMatrix class TestPolyMatrix(unittest.TestCase): + # @staticmethod + # def assert_term_in_eq(result, degree, eq_idx, row_idx, value, monoms=None): + # if monoms is None: + # monoms = tuple() + + # assert degree in result.data, f'could not find {degree} in {result.data}' + # degree_terms = result.data[degree] + + # key = eq_idx, monoms, row_idx + # assert key in degree_terms, f'could not find {key} in {degree_terms}' + # # eq_terms = degree_terms[key] + # # assert row_idx in eq_terms, f'could not find {row_idx} in {eq_terms}' + # assert degree_terms[key] == value, f'value {degree_terms[key]} and {value} do not match' + + # @staticmethod + # def assert_term_in_eq(result, degree, row_idx, monoms, value): + + # assert degree in result.data, f'could not find {degree} in {result.data}' + # degree_terms = result.data[degree] + + # key = row_idx, variable_to_index(result.n_param, monoms) + # assert key in degree_terms, f'could not find {key} in {degree_terms}' + + # assert degree_terms[key] == value, f'value {degree_terms[key]} and {value} do not match' + @staticmethod - def assert_term_in_eq(result, degree, eq_idx, row_idx, value, monoms=None): - if monoms is None: - monoms = tuple() + def assert_term_in_eq( + problem: Optimization, + poly_row: int, + p_monomial: tuple[tuple[PolyMatrix, int, int], ...], + value: float, + x_monomial: tuple[int, ...] = None, + ): + if x_monomial is None: + x_monomial = tuple() + + offset_dict = problem.state.offset_dict + p_monomial = tuple(offset_dict[(polymat, degree)][0] + offset for polymat, degree, offset in p_monomial) - assert degree in result.terms, f'could not find {degree} in {result.terms}' - degree_terms = result.terms[degree] + equality_constraint = problem.equality_constraints[0] - key = eq_idx, monoms, row_idx - assert key in degree_terms, f'could not find {key} in {degree_terms}' - # eq_terms = degree_terms[key] - # assert row_idx in eq_terms, f'could not find {row_idx} in {eq_terms}' - assert degree_terms[key] == value, f'value {degree_terms[key]} and {value} do not match' + key = (poly_row, x_monomial, p_monomial) + assert key in equality_constraint, f'could not find {key} in {equality_constraint}' + + assert equality_constraint[key] == value, f'value {equality_constraint[key]} and {value} do not match' def test_param_matrix_param_d0_vector_degree_d0(self): """ @@ -25,50 +58,44 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 - mat = init_poly_matrix(degrees=(0,), shape=(n_var, n_var)) - vec = init_poly_matrix(degrees=(0,), shape=(n_var, 1)) + mat = init_poly_matrix(name='mat', degrees=(0,), shape=(n_var, n_var)) + vec = init_poly_matrix(name='vec', degrees=(0,), shape=(n_var, 1)) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - # a11 v11 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 0, - row_idx = (offset_dict[(mat, 0)], offset_dict[(vec, 0)]), + problem = problem, + poly_row = 0, + p_monomial = ((mat, 0, 0), (vec, 0, 0)), value = 1, ) # a12 v21 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 0, - row_idx = (offset_dict[(mat, 0)]+2, offset_dict[(vec, 0)]+1), + problem = problem, + poly_row = 0, + p_monomial = ((mat, 0, 2), (vec, 0, 1)), value = 1, ) # a21 v11 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 1, - row_idx = (offset_dict[(mat, 0)]+1, offset_dict[(vec, 0)]), + problem = problem, + poly_row = 1, + p_monomial = ((mat, 0, 1), (vec, 0, 0)), value = 1, ) # a22 v21 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 1, - row_idx = (offset_dict[(mat, 0)]+3, offset_dict[(vec, 0)]+1), + problem = problem, + poly_row = 1, + p_monomial = ((mat, 0, 3), (vec, 0, 1)), value = 1, ) @@ -79,33 +106,29 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 - mat = init_poly_matrix(degrees=(0,), shape=(n_var, n_var)) - vec = init_poly_matrix(degrees=(0,1), shape=(n_var, 1)) + mat = init_poly_matrix(name='mat', degrees=(0,), shape=(n_var, n_var)) + vec = init_poly_matrix(name='vec', degrees=(0, 1), shape=(n_var, 1)) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - # a11 v011 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 0, - row_idx = (offset_dict[(mat, 0)], offset_dict[(vec, 0)]), + problem = problem, + poly_row = 0, + p_monomial = ((mat, 0, 0), (vec, 0, 0)), value = 1, ) # a11 v011 self.assert_term_in_eq( - result = result, - degree = 2, - eq_idx = 0, - monoms=(0,), - row_idx = (offset_dict[(mat, 0)], offset_dict[(vec, 1)]), + problem = problem, + poly_row = 0, + x_monomial=(0,), + p_monomial = ((mat, 0, 0), (vec, 1, 0)), value = 1, ) @@ -116,32 +139,29 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 - mat = init_poly_matrix(degrees=(0,), shape=(n_var, n_var)) - vec = init_poly_matrix(subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) + mat = init_poly_matrix(name='mat', degrees=(0,), shape=(n_var, n_var)) + vec = init_poly_matrix(name='vec', subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict # a11 self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 0, - row_idx = (offset_dict[(mat, 0)],), + problem = problem, + poly_row = 0, + p_monomial = ((mat, 0, 0),), value = 1, ) # a21 self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 1, - row_idx = (offset_dict[(mat, 0)]+1,), + problem = problem, + poly_row = 1, + p_monomial = ((mat, 0, 1),), value = 1, ) @@ -151,45 +171,40 @@ class TestPolyMatrix(unittest.TestCase): """ n_var = 2 - - mat = init_poly_matrix(degrees=(0,), shape=(n_var, n_var)) - vec = init_poly_matrix(subs={1: {(0, 0, 0): 1, (0, 0, 1): 0, (1, 0, 0): 0, (1, 0, 1): 1}}, shape=(n_var, 1)) - - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + + mat = init_poly_matrix(name='mat', degrees=(0,), shape=(n_var, n_var)) + vec = init_poly_matrix(name='vec', subs={1: {(0, 0, 0): 1, (0, 0, 1): 0, (1, 0, 0): 0, (1, 0, 1): 1}}, shape=(n_var, 1)) + + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - # a11 self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 0, - monoms=(0,), - row_idx = (offset_dict[(mat, 0)],), + problem = problem, + poly_row = 0, + x_monomial=(0,), + p_monomial = ((mat, 0, 0),), value = 1, ) # a12 self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 0, - monoms=(1,), - row_idx = (offset_dict[(mat, 0)]+2,), + problem = problem, + poly_row = 0, + x_monomial=(1,), + p_monomial = ((mat, 0, 2),), value = 1, ) # a21 self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 1, - monoms=(0,), - row_idx = (offset_dict[(mat, 0)]+1,), + problem = problem, + poly_row = 1, + x_monomial=(0,), + p_monomial = ((mat, 0, 1),), value = 1, ) @@ -200,22 +215,19 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 - mat = init_poly_matrix(subs={0: {(0, 0, 0): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 0): 1}}, shape=(n_var, n_var)) - vec = init_poly_matrix(subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) + mat = init_poly_matrix(name='mat', subs={0: {(0, 0, 0): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 0): 1}}, shape=(n_var, n_var)) + vec = init_poly_matrix(name='vec', subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - self.assert_term_in_eq( - result = result, - degree = 0, - eq_idx = 0, - row_idx = tuple(), + problem = problem, + poly_row = 0, + p_monomial = tuple(), value = 2, ) @@ -233,33 +245,30 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 mat = init_poly_matrix( + name='mat', degrees=(0,), re_index=skew_symmetric, shape=(n_var, n_var), ) - vec = init_poly_matrix(subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) + vec = init_poly_matrix(name='vec', subs={0: {(0, 0, 0): 1, (1, 0, 0): 1}}, shape=(n_var, 1)) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 0, - row_idx = (offset_dict[(mat, 0)] + 2,), + problem = problem, + poly_row = 0, + p_monomial = ((mat, 0, 2),), value = 1, ) self.assert_term_in_eq( - result = result, - degree = 1, - eq_idx = 1, - row_idx = (offset_dict[(mat, 0)] + 2,), + problem = problem, + poly_row = 1, + p_monomial = ((mat, 0, 2),), value = -1, ) @@ -285,46 +294,43 @@ class TestPolyMatrix(unittest.TestCase): n_var = 2 mat = init_poly_matrix( + name='mat', subs={0: {(0, 0, 0): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 0): 1}}, shape=(n_var, n_var), ) vec = init_poly_matrix( + name='vec', degrees=(1,), re_index=gradient, shape=(n_var, 1), ) - eq = init_equation( - terms = [(mat, vec)], - n_var = n_var, + problem = init_optimization( + n_var=n_var, + ).add_equality_constraints( + expr=[(mat, vec)], ) - result = eq.create() - offset_dict = eq.offset_dict - self.assert_term_in_eq( - result = result, - degree = 1, - monoms=(0,), - eq_idx = 0, - row_idx = (offset_dict[(vec, 1)],), + problem = problem, + x_monomial=(0,), + poly_row = 0, + p_monomial = ((vec, 1, 0),), value = 2, ) self.assert_term_in_eq( - result = result, - degree = 1, - monoms=(1,), - eq_idx = 0, - row_idx = (offset_dict[(vec, 1)]+2,), + problem = problem, + x_monomial=(1,), + poly_row = 0, + p_monomial = ((vec, 1, 2),), value = 1, ) self.assert_term_in_eq( - result = result, - degree = 1, - monoms=(0,), - eq_idx = 1, - row_idx = (offset_dict[(vec, 1)]+2,), + problem = problem, + x_monomial=(0,), + poly_row = 1, + p_monomial = ((vec, 1, 2),), value = 1, ) |