Godtone
Joined 17 December 2020
| 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) | ||
else: | |||
val.append(pval_steps - | val.append(pval_steps - sgn(pval_steps - gen_steps)) | ||
else: | else: | ||
val.append(pval_steps) | val.append(pval_steps) | ||
return val | return val | ||
def odd_lim(lim, remove=set(), add=set(), complements=True): | |||
def odd_lim(lim, remove=set(), add=set(), | |||
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 | 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 | ||