def _convertToMonicNf(nf, timeout): pariStr = "PRIVATEconvertToMonicNf = nfinit(%s, 3)" % nf.printMagma() print pariStr print timeout r = pari.pari_eval(pariStr, timeout = timeout) nf = Polynomial.parseFromMagma( pari.pari_eval("PRIVATEconvertToMonicNf[1].pol", timeout = timeout)) newExpressionForX = Polynomial.parseFromMagma( pari.pari_eval("PRIVATEconvertToMonicNf[2].pol", timeout = timeout)) return nf, newExpressionForX
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 main(): parser = create_parser() # Parse command line options options, args = parser.parse_args() if not len(args) == 1: parser.print_help() sys.exit(1) filename = args[0] if filename[-4:] == ".csv": outFilenameBase = filename[:-4] else: outFilenameBase = filename outFilename = outFilenameBase + "_complexPlaces.csv" print "output to", outFilename censusTable = readCensusTable(filename, convertData=False) fieldnames = censusTable.header if not "NumberOfComplexPlaces" in fieldnames: fieldnames = fieldnames + ["NumberOfComplexPlaces"] csv_writer = csv.DictWriter(open(outFilename, "w"), fieldnames=fieldnames) csv_writer.writerow(dict(zip(fieldnames, fieldnames))) for row in censusTable.listOfDicts: if row.has_key("InvariantTraceField"): if row["InvariantTraceField"] and not row["InvariantTraceField"] == "-": pariStr = "nfinit(%s).r2" % row["InvariantTraceField"] row["NumberOfComplexPlaces"] = pari.pari_eval(pariStr) csv_writer.writerow(row)
OutWriter.writerow( dict(zip(RepresentationHeader, RepresentationHeader))) for d in RepresentationReader: d['Linear Combinations'] = '-' if d['Volume'] and not d['Volume'] == '-': v = number(d['Volume']) vfloat = float(d['Volume']) if vfloat > 1e-10: pari_cmd = ("lindep([%s],%d)" % (','.join([str(x) for x in volDict.values() + [v]]), precision)) s = pari_eval(pari_cmd) if d['Manifold'] == '4_1' and False: print s print v print len(volDict.values() + [v]) assert s[0] == '[' assert s[-2:] == ']~' s = [int(x) for x in s[1:-2].split(',')] k = max([max(s),-min(s)]) if k < 1000: q = '(' q+= '+'.join(['(%d) * %s' % x for x in zip(s[:-1], volDict.keys()) if x[0]]) q+= ') / (%d)' % s[-1] d['Linear Combinations'] = q