- copy = libisl.isl_basic_set_copy(bset)
- ls = libisl.isl_local_space_from_space(libisl.isl_space_copy(space))
- ceq = libisl.isl_equality_alloc(libisl.isl_local_space_copy(ls))
- for value in self.equalities:
- for value in self.equalities:
- #need method to get expression value
- if self._equalities:
- value = self._equalities.method_get_value_from_expression()
- ceq = libisl.isl_constraint_set_constant_val(ceq, value )
- #ceq = libisl.isl_constraint_set_coefficient_si(ceq, libisl.isl_set_dim, self.symbols(), value)
- '''
- cin = libisl.isl_inequality_alloc(libisl.isl_local_space_copy(ls))
- for item in self.inequalities:
- for item in self.inequalities:
- if isinstance(item, int):
- cin = libisl.isl_constraint_set_constant_si(cin, item)
- else:
- cin = libisl.isl_constraint_set_coefficient_si(cin, libisl.isl_set_dim, self.symbols(), item)
- '''
- bsetfinal = libisl.isl_basic_set_add_contraint(copy, ceq)
- #bsetfinal = libisl.isl_basic_set_add_contraint(copy, cin)
- string = libisl.isl_printer_print_basic_set(bsetfinal)
- print(string)
- return self
+ ls = libisl.isl_local_space_from_space(space)
+ #if there are equalities/inequalities, take each constant and coefficient and add as a constraint to the basic set
+ for eq in self.equalities:
+ ceq = libisl.isl_equality_alloc(libisl.isl_local_space_copy(ls))
+ coeff_eq = dict(eq.coefficients())
+ if eq.constant:
+ value = str(eq.constant).encode()
+ val = libisl.isl_val_read_from_str(_main_ctx, value)
+ ceq = libisl.isl_constraint_set_constant_val(ceq, val)
+ for eq in coeff_eq:
+ number = str(coeff_eq.get(eq)).encode()
+ num = libisl.isl_val_read_from_str(_main_ctx, number)
+ iden = symbols.index(eq)
+ ceq = libisl.isl_constraint_set_coefficient_val(ceq, libisl.isl_dim_set, iden, num) #use 3 for type isl_dim_set
+ bset = libisl.isl_basic_set_add_constraint(bset, ceq)
+ for ineq in self.inequalities:
+ cin = libisl.isl_inequality_alloc(libisl.isl_local_space_copy(ls))
+ coeff_in = dict(ineq.coefficients())
+ if ineq.constant:
+ value = str(ineq.constant).encode()
+ val = libisl.isl_val_read_from_str(_main_ctx, value)
+ cin = libisl.isl_constraint_set_constant_val(cin, val)
+ for ineq in coeff_in:
+ number = str(coeff_in.get(ineq)).encode()
+ num = libisl.isl_val_read_from_str(_main_ctx, number)
+ iden = symbols.index(ineq)
+ cin = libisl.isl_constraint_set_coefficient_val(cin, libisl.isl_dim_set, iden, num) #use 3 for type isl_dim_set
+ bset = libisl.isl_basic_set_add_constraint(bset, cin)
+ bset = isl.BasicSet(bset)
+ return bset