Godtone (talk | contribs)
Godtone (talk | contribs)
Line 559: Line 559:
p = prime_limit(prime_idx( len(f)-1 ))
p = prime_limit(prime_idx( len(f)-1 ))
return sum([ f[i]*round(steps(p[i],et2)) for i in range(len(f)) ])
return sum([ f[i]*round(steps(p[i],et2)) for i in range(len(f)) ])
def map_iv(val_map, x): # assumes same harmonic subgroup
if type(x)==tuple:
x = fact(x)
return sum([ x[i]*val_map[i] for i in range(len(x)) ])
def sgn(x):
if x!=0:
return 1
elif x < 0:
return -1
else:
return 0
def idx_alpha(c):
n = ord(c)
if n>=ord('a') and n<=ord('z'):
return n-ord('a')
elif n>=ord('A') and n<=ord('Z'):
return n-ord('A')+26
elif c=='#': # the hash/octothorpe character is
return 52 # the beginning of a record prime gap
else: # prime_idx(53) = 251 is the highest prime reachable
return 53 # with extended warts
def alphawarts(alphabet, gens = prime_limit(256)):
return [gens[idx_alpha(c)] for c in alphabet]
# the wart_tendency determines if a wart's behaviour is:
# the wart_tendency determines if a wart's behaviour is:
# 0: to change to second-best mapping (default)
# 0: to change to second-best mapping (default)
Line 568: Line 591:
def make_val(et2, gens, warts = [], wart_tendency = 0):
def make_val(et2, gens, warts = [], wart_tendency = 0):
val = []
val = []
if type(warts) == str:
warts = alphawarts(warts,gens)
for g in gens:
for g in gens:
gen_steps = steps(g,et2)
gen_steps = steps(g,et2)
Line 574: Line 599:
if wart_tendency != 0:
if wart_tendency != 0:
val.append(pval_steps + wart_tendency)
val.append(pval_steps + wart_tendency)
elif pval_steps - gen_steps > 0: # pval is sharp
else:
val.append(pval_steps - 1)
val.append(pval_steps - sgn(pval_steps - gen_steps))
elif pval_steps - gen_steps < 0:
val.append(pval_steps + 1)
else: # perfectly mapped
val.append(pval_steps)
else:
else:
val.append(pval_steps)
val.append(pval_steps)
return val
return val
def map_iv(val_map, x): # assumes same harmonic subgroup
def odd_lim(lim, remove=set(), add=set(), complements=True):
if type(x)==tuple:
x = fact(x)
return sum([ x[i]*val_map[i] for i in range(len(x)) ])
def consistent_err(x, et2, p=None):
return pval(x if type(x)==list else fact(x,p), et2, p) - steps(as_float(x,p),et2)
def odd_lim(lim, remove=set(), add=set(), include_complements=True):
odds = set([i for i in range(1,lim+1,2) if i not in remove])
odds = set([i for i in range(1,lim+1,2) if i not in remove])
odds |= set(add)
odds |= set(add)
Line 600: Line 615:
oct_denom *= 2
oct_denom *= 2
ivs|={iv(numer,oct_denom)}
ivs|={iv(numer,oct_denom)}
if include_complements:
if complements:
ivs |= set([ iv(i[1]*2,i[0]) for i in ivs ])
ivs |= set([ iv(i[1]*2,i[0]) for i in ivs ])
return ivs
return ivs