Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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")
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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)

Exemplo n.º 7
0
    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" :
Exemplo n.º 8
0
    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))