def polynomialNonZeroCondition(eqns, var, andNonOne = False): variables = get_all_variables(eqns) prod = Polynomial.fromVariableName(var) for i in variables: prod = prod * Polynomial.fromVariableName(i) if andNonOne: prod = prod * (Polynomial.constantPolynomial(1) - Polynomial.fromVariableName(i)) return prod - Polynomial.constantPolynomial(1)
def _solveExactlyOverNumberField(univariatePoly, nf, timeout): variable = univariatePoly.variables()[0] def convertXtoY(p): return p.substitute({'x' : Polynomial.fromVariableName('y')}) univariatePoly = univariatePoly.convertCoefficients(convertXtoY) univariatePoly = univariatePoly.substitute( { variable : Polynomial.constantPolynomial( Polynomial.fromVariableName('x'))}) if not nf: assert univariatePoly.isConstant() newSolution = Polynomial.fromVariableName('x') newNf = univariatePoly.getConstant() newExpressionForX = Polynomial.constantPolynomial(0) else: nf = convertXtoY(nf) pariStr = "PRIAVTEsEONF = rnfequation(nfinit(%s), %s, 1)" % ( nf, univariatePoly) print pariStr print timeout r = pari.pari_eval(pariStr, timeout = timeout) # print r newNf = Polynomial.parseFromMagma(pari.pari_eval( "PRIAVTEsEONF[1]", timeout = timeout)) newExpressionForX = Polynomial.parseFromMagma(pari.pari_eval( "PRIAVTEsEONF[2].pol", timeout = timeout)) factor = int(pari.pari_eval( "PRIAVTEsEONF[3]", timeout = timeout)) newSolution = ( Polynomial.fromVariableName('x') - Polynomial.constantPolynomial(factor) * newExpressionForX) return newSolution, newNf, newExpressionForX
def get_additional_eqns_independent(t, N): # make sure cusps have indices # dictionary associating the decoration change vectors to Ptolemy coordinates d = {} for i, tet in zip(range(len(t.tet_list)), t.tet_list): for coord in simplex_coords_with_fixed_sum(4, N): if not N in coord: v = [0 for x in range((N-1) * t.num_or_cusps)] for j, k in zip(range(4), coord): for p in range(k): v[ tet.cusp_index[j] + p * t.num_or_cusps ] += 1 d[c_parameter_var(coord, i)] = v variables = find_independent_integer_vectors(d) return [ Polynomial.fromVariableName(var) - Polynomial.constantPolynomial(1) for var in variables]
def turn_pair_to_Polynomial(p): if p[0] == +1: return Polynomial.fromVariableName(p[1]) else: return -Polynomial.fromVariableName(p[1])
def c_parameter(coords, tet_index): """ Same as c_parameter_var but returns it as Polynomial type. """ return Polynomial.fromVariableName( c_parameter_var(coords, tet_index))
def convertXtoY(p): return p.substitute({'x' : Polynomial.fromVariableName('y')})