def add_submultiples_to_list(D): N = [] for d in D: for i in range(1, 1 + int(d['Volume'] / number('0.9'))): e = d.copy() e['Volume'] = d['Volume'] / number(i) e['VolumeFactor'] = i N.append(e) N.sort(key = lambda d:d['Volume']) return N
def old___volume2_old_and_Obsolete(t, N, solution): volume = number("0.0") elements = c_param_elements(t, N, solution) for sign, element in elements: w = c_params_to_w(element[0],element[1],element[2],element[3],element[4],element[5]) zpq = w_to_zpq(w) v = zpq_volume(zpq) volume += number(sign) * v return volume
def old___complex_volume2_old_and_obsolete(t, N, solution): complex_volume = number("0.0 + 0.0 * I") elements = c_param_elements(t, N, solution) for sign, element in elements: w = c_params_to_w(element[0],element[1],element[2],element[3],element[4],element[5]) zpq = w_to_zpq(w) v = zpq_L_function(zpq) complex_volume += number(sign) * v return complex_volume / number(eval_this="I")
def find_equivalent_census_volumes(D): vols = [] prev_vol = number("-1.0") mfds = [] new_list = [] for d in D: if (d['Volume']-prev_vol).abs() > number("1E-30"): if mfds: new_list.append(mfds) mfds = [] prev_vol = d['Volume'] mfds.append(d) new_list.append(mfds) return new_list
def read_census_volumes(csv_file): CensusVolumesReader = csv.DictReader(csv_file) CensusVolumesDict = [] for d in CensusVolumesReader: d['Volume'] = number(d['Volume']) d['Tetrahedra'] = int(d['Tetrahedra']) CensusVolumesDict.append(d) CensusVolumesDict.sort(key = lambda d: d['Volume']) return CensusVolumesDict
print float(CensusVolumesDict[0][0]['Volume']) find_lin_comb.initialize(CensusVolumesDict) #for i in CensusVolumesDict: # print # for j in i: # print j RepresentationHeader = csv.reader(open(sys.argv[2],'rb')).next() RepresentationReader = csv.DictReader(open(sys.argv[2],'rb')) OutWriter = csv.DictWriter(open(sys.argv[3],'wb'),RepresentationHeader + ['Linear Combinations']) for d in RepresentationReader: d['Linear Combinations'] = '-' if not d['Volume'] == '-': v = number(d['Volume']) vfloat = float(d['Volume']) if vfloat > 1e-10: print vfloat, v print find_lin_comb.find_as_multiple(v) print find_lin_comb.find_as_linear_combination(v) OutWriter.writerow(d)
import hashlib except ImportError as e: print e print print "This program was called as :", sys.argv[0] print "Absolute path to this program is :", abs_path print "Base path is :", base_path sys.exit(1) if not len(sys.argv)==4: print "Usage: recognize_linear_2 representation_volumes.csv linear_combinations.csv PRECISION" sys.exit(1) volDict = { "4_1" : number("2.02988321281930725004240510854904057188337861506059958403497821355319495251648804427294070845651338989172365506271977525"), "m003(-3,1)" : number("0.942707362776927720921299603092211647590327105766883159014506775752934182774157210312315672643333035804180429759598797803"), "m003(-2,3)" : number("0.981368828892232088091452189794427068238164321906312438642604199777420481646215962007743465608622970924477159450932847661"), "m006(1,3)" : number("1.83193118835443803010920702986476822154829874856334426853299623924352603955250953895871302585223021249714884523839239916"), "m009" : number("2.66674478344905979079671246261065004409838388855263953139317180331572348841561131881281221620442212850291034276448127621"), "m004(6,1)": number("1.28448530046835444246033708486871125891241877318392809214943701516964507690587972156461082746727624238071994448327461536"), "m007(3,2)": number("1.58316666062481283616602885187919062839805259468511564120510037138514921358016328417586218367685774975389015282528735199"), "9^3_15" : number("8.35550214637956599430377376881477535438602570433613182225567019065904209089981277038106183143111474247020120487272572689"), "8_16" :
from algebra.polynomial import polynomial from algebra.pari import number, set_pari_precision, set_pari_allowed_error, get_pari_allowed_error, NumericalError import manifold.slN import algebra.magma import algebra.pari import hashlib import linear_combinations.find_as_multiple_sum_diff as find_lin_comb except ImportError as e: print e print print "This program was called as :", sys.argv[0] print "Absolute path to this program is :", abs_path print "Base path is :", base_path sys.exit(1) set_pari_precision(120) RepresentationHeader = csv.reader(open(sys.argv[1],'rb')).next() RepresentationReader = csv.DictReader(open(sys.argv[1],'rb')) OutWriter = csv.DictWriter(open(sys.argv[2],'wb'),RepresentationHeader) L = [d for d in RepresentationReader if not d['Invariant Trace Field']=='-'] L.sort(key=lambda x:(x['Invariant Trace Field'],number(x['Volume']))) OutWriter.writerow(dict(zip(RepresentationHeader,RepresentationHeader))) for d in L: OutWriter.writerow(d)
def process_file(trig_file): d,in_filename = tempfile.mkstemp() tmp_in_file = open(in_filename, 'wb') tmp_in_file.write("r f %s\n" % trig_file) tmp_in_file.write("set precision 15\n") tmp_in_file.write("set digits_printed 120 f\n") tmp_in_file.write("print solution_type\n") tmp_in_file.write("print volume\n") #tmp_in_file.write("print complex_volume\n") tmp_in_file.write("quit\n") tmp_in_file.close() l = subprocess.Popen("ulimit -t 1; snap <" + in_filename, shell=True, stdout = subprocess.PIPE) s = l.stdout.read() if not ("solution type: geometric" in s or "solution type: nongeometric" in s): return None try: os.unlink(in_filename) except: pass d,in_filename = tempfile.mkstemp() tmp_in_file = open(in_filename, 'wb') tmp_in_file.write("r f %s\n" % trig_file) tmp_in_file.write("set degree 7\n") tmp_in_file.write("set precision 15\n") tmp_in_file.write("set digits_printed 120 f\n") tmp_in_file.write("compute invariant_trace_field\n") tmp_in_file.write("quit\n") tmp_in_file.close() l = subprocess.Popen("ulimit -t 20; snap <" + in_filename, shell=True, stdout = subprocess.PIPE) s2 = l.stdout.read() try: os.unlink(in_filename) except: pass r = re.search("Complex volume: (.*)",s) rcvol = '"-"' icvol = '"-"' if r: cvol = number(r.group(1)) rcvol = str(cvol.real()) icvol = str(cvol.imag()) r = re.search("Volume is: (.*)", s) if r: rcvol = r.group(1) f = re.search("Invariant trace field: (.*) \[",s2) fp = '-' fdeg = '-' if f: fp = f.group(1) fdeg = str(Polynomial.parseFromMagma(fp).degree()) if re.search(r"\(-?\d+,-?\d+\)", trig_file): if "(0,0)" in trig_file: # manifold is cusped if there is an unfilled cusped oc = "cusped" else: oc = "closed" else: oc = "cusped" t = read_triangulation_from_file(trig_file) return ('"%s",%s,%d,%s,%s,"%s",%s' % (trig_file.split('/')[-1].replace('.trig',''), oc, t.num_tets, rcvol, icvol, fp, fdeg))