def get_Ptolemy_relations(t, N, cohomology_class = None): if cohomology_class: cohomology_coefficients = ( cohomology_2_rel_boundary_class_to_coeffs(t, cohomology_class)) eqns = [] for tet in t.tet_list: i = tet.index if cohomology_class: signs = cohomology_coefficients[tet.index] sign_01 = Z2_to_sign(signs[2] + signs[3]) sign_12 = Z2_to_sign(signs[0] + signs[3]) else: sign_01 = +1 sign_12 = +1 sign_01 = Polynomial.constantPolynomial(sign_01) sign_12 = Polynomial.constantPolynomial(sign_12) for coord in simplex_coords_with_fixed_sum(4, N-2): eqns.append( - sign_01 * c_parameter(coord+(1,0,0,1),i) * c_parameter(coord+(0,1,1,0),i) - sign_12 * c_parameter(coord+(1,1,0,0),i) * c_parameter(coord+(0,0,1,1),i) + c_parameter(coord+(1,0,1,0),i) * c_parameter(coord+(0,1,0,1),i)) return eqns
def check_solution_on_gluing_equations(t, N, solution, cohomology_class = None): maxErr = globalsettings.getSetting("maximalError") if cohomology_class: cohomology_coefficients = ( cohomology_2_rel_boundary_class_to_coeffs(t,cohomology_class)) for tet in t.tet_list: i = tet.index if cohomology_class: signs = cohomology_coefficients[tet.index] sign_01 = Z2_to_sign(signs[2] + signs[3]) sign_12 = Z2_to_sign(signs[0] + signs[3]) else: sign_01 = +1 sign_12 = +1 for coord in simplex_coords_with_fixed_sum(4, N-2): err = ( - sign_01 * solution[c_parameter_var(coord+(1,0,0,1),i)] * solution[c_parameter_var(coord+(0,1,1,0),i)] - sign_12 * solution[c_parameter_var(coord+(1,1,0,0),i)] * solution[c_parameter_var(coord+(0,0,1,1),i)] + solution[c_parameter_var(coord+(1,0,1,0),i)] * solution[c_parameter_var(coord+(0,1,0,1),i)]) if abs(err) > maxErr: raise NumericalError( val = err, msg = "in verify gluing equations")