diff options
Diffstat (limited to 'polymatrix/expression/mixins/determinantexprmixin.py')
-rw-r--r-- | polymatrix/expression/mixins/determinantexprmixin.py | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/polymatrix/expression/mixins/determinantexprmixin.py b/polymatrix/expression/mixins/determinantexprmixin.py index 7614669..d848bd2 100644 --- a/polymatrix/expression/mixins/determinantexprmixin.py +++ b/polymatrix/expression/mixins/determinantexprmixin.py @@ -26,7 +26,7 @@ class DeterminantExprMixin(ExpressionBaseMixin): self, state: ExpressionState, ) -> tuple[ExpressionState, PolyMatrix]: - raise Exception('not implemented') + # raise Exception('not implemented') if self in state.cache: return state, state.cache[self] @@ -35,7 +35,7 @@ class DeterminantExprMixin(ExpressionBaseMixin): assert underlying.shape[0] == underlying.shape[1] - inequality_terms = {} + inequality_data = {} auxillary_equations = {} index_start = state.n_param @@ -43,69 +43,69 @@ class DeterminantExprMixin(ExpressionBaseMixin): for row in range(underlying.shape[0]): - current_inequality_terms = collections.defaultdict(float) + polynomial = collections.defaultdict(float) # f in f-v^T@x-r^2 # terms = underlying.get_poly(row, row) try: - underlying_terms = underlying.get_poly(row, row) + underlying_poly = underlying.get_poly(row, row) except KeyError: pass else: - for monomial, value in underlying_terms.items(): - current_inequality_terms[monomial] += value + for monomial, value in underlying_poly.items(): + polynomial[monomial] += value for inner_row in range(row): # -v^T@x in f-v^T@x-r^2 # terms = underlying.get_poly(row, inner_row) try: - underlying_terms = underlying.get_poly(row, inner_row) + underlying_poly = underlying.get_poly(row, inner_row) except KeyError: pass else: - for monomial, value in underlying_terms.items(): + for monomial, value in underlying_poly.items(): new_monomial = monomial + (index_start + rel_index + inner_row,) - current_inequality_terms[new_monomial] -= value + polynomial[new_monomial] -= value # auxillary terms # --------------- - auxillary_term = collections.defaultdict(float) + auxillary_polynomial = collections.defaultdict(float) for inner_col in range(row): # P@x in P@x-v key = tuple(reversed(sorted((inner_row, inner_col)))) try: - underlying_terms = underlying.get_poly(*key) + underlying_poly = underlying.get_poly(*key) except KeyError: pass else: - for monomial, value in underlying_terms.items(): + for monomial, value in underlying_poly.items(): new_monomial = monomial + (index_start + rel_index + inner_col,) - auxillary_term[new_monomial] += value + auxillary_polynomial[new_monomial] += value # -v in P@x-v try: - underlying_terms = underlying.get_poly(row, inner_row) + underlying_poly = underlying.get_poly(row, inner_row) except KeyError: pass else: - for monomial, value in underlying_terms.items(): - auxillary_term[monomial] -= value + for monomial, value in underlying_poly.items(): + auxillary_polynomial[monomial] -= value x_variable = index_start + rel_index + inner_row assert x_variable not in state.auxillary_equations - auxillary_equations[x_variable] = dict(auxillary_term) + auxillary_equations[x_variable] = dict(auxillary_polynomial) rel_index += row - inequality_terms[row, 0] = dict(current_inequality_terms) + inequality_data[row, 0] = dict(polynomial) state = state.register(rel_index) poly_matrix = init_poly_matrix( - terms=inequality_terms, + data=inequality_data, shape=(underlying.shape[0], 1), ) |