def weight_of_partition(part): n = sum(part) #abstract_sequences = fac(n)/prod(fac(i) for i in part) abstract_sequences = exp(log_fac(n) - sum(log_fac(i) for i in part)) foo = [part.count(i) for i in set(part)] bar = fac(4)/prod(fac(i) for i in foo) return abstract_sequences*bar
def count_partitions(n): d = defaultdict(int) for kmer in make_kmers(n): d[tuple(partition_sequence(kmer))] += 1 for k,v in sorted(d.items(),key=lambda (k,v):k): abstract_sequences = exp(log_fac(n) - sum(log_fac(i) for i in k)) assignments = choose(4,sum(1 for i in k if i > 0)) foo = [k.count(i) for i in set(k)] bar = fac(4)/prod(fac(i) for i in foo) print k,v,abstract_sequences*bar#,abstract_sequences,float(v)/abstract_sequences,foo,bar return d
def counts_to_cols(counts): """return numer of cols associated given counts""" N = sum(counts) # all_cols = 4**N metacounts = Counter(counts) counts_to_bases = fac(4) / prod( fac(multiplicity) for multiplicity in metacounts.values()) if N <= 170: bases_to_pos = fac(N) / prod(fac(count) for count in counts) else: #print "Warning: possible numerical issues in counts_to_cols" bases_to_pos = round( exp(log_fac(N) - sum(log_fac(count) for count in counts))) return counts_to_bases * bases_to_pos
def _ncp(ps,n): """find non-coincidence probability for n draws from ps""" tic = time.time() #print n,ncp_dict if n == 0: return 1 if n not in ncp_dict: #print "didn't find",n ans = sum((-1)**(i-1)*fac(n-1)/fac(n-i) *powsum(ps,i)*_ncp(ps,n-i) for i in range(1,n+1)) ncp_dict[n] = ans else: #print "found",n pass toc = time.time() #print "leaving call w/ %s in %1.2f sec" % (n,toc-tic) return ncp_dict[n]
def predict_log_partition_normal_series(K,sigma,n): Z0,norm_sig = predict_partition(K,sigma) a = norm_sig/Z0 print a def facfac(k): assert k % 2 == 1 return reduce(lambda x,y:x*y,range(1,k+1,2)) return log(Z0) - sum(1/fac(k)*a**k*facfac(k-1) for k in range(2,n+1,2))
from math import exp, log, sqrt, ceil from matplotlib import pyplot as plt #import seaborn as sbn import scipy from collections import defaultdict from sde import ou_relaxation_time_from_sample, is_stationary n = 16 L = 5 beta = 1 K = 4**L G = 5 * 10**6 AAS = 5 num_recognizers = AAS**L num_motifs = 4**(n * L) permutations = fac(L) * fac(n) num_genotypes = num_recognizers * num_motifs / float(permutations) log_num_genotypes = L * log(AAS) + (n * L) * log(4) - log_fac(L) # site_mut_prob = 10**-0.5 # rec_mut_prob = 10**-0.5 def sample_code(sigma=1): return {(i, b): random.gauss(0, sigma) for i in range(AAS) for b in "ACGT"} def code_statistics(code): mus = [mean([code[(aa, b)] for aa in range(AAS)]) for b in "ACGT"] sigmas = [sd([code[(aa, b)] for aa in range(AAS)]) for b in "ACGT"] return sum(mus), sum(sigmas)
def log_choose_approx(N,k): return k*log(N) - log(fac(k))
def multiplicities(eps): metacounts = Counter(eps) substitutions = fac(n)/prod(fac(multiplicity) for multiplicity in metacounts.values()) return substitutions
def dist_configs(G,q): """Return all ch-configs, assuming indistinguishable particles""" return [chi_from_tau(tau_config,G) for qp in range(q+1) for tau_config in itertools.combinations(range(G),qp) for degeneracy in range(int(fac(q)/fac(show(q-qp))))]
import utils factorials = {i: utils.fac(i) for i in range(10)} def is_factorial(n): summ = sum([factorials[int(digit)] for digit in str(n)]) if summ == n: return True return False def get_max(): num = 9 while True: summ = sum([factorials[9] for digit in str(num)]) if num > summ: break num = int(str(num) + '9') return len(str(num)) * factorials[9] i = 10 nums = [] maxx = get_max() print('max', maxx) while i < maxx: if is_factorial(i): print(i) nums.append(i) i += 1
def w(eps): """number of ways to """ return (fac(L)**len(eps)) / prod(fac(ep) * fac(L - ep) for ep in eps) * 3**sum(eps)
def occ_dist_poisson_ref(eps,mus): print "computing ps" ps = [fd(ep,mu) for ep in eps] print "---" lamb = sum(ps) return [lamb**k*exp(-lamb)/fac(k) for k in range(len(ps)+1)]
def a(n,k): """See OEIS A111492""" return fac(k-1)*choose(n,k)
def expm(A,n=100): return sum(linalg.matrix_power(A,i)/fac(i) for i in range(n+1))
def ncp(ps,n): return fac(n)*esp(ps,n)/1.0
import utils N = utils.get_N() if utils.get_N() else 100 num = utils.fac(N) print(sum([int(digit) for digit in str(num)]))
def multiplicities(eps): metacounts = Counter(eps) substitutions = fac(n) / prod( fac(multiplicity) for multiplicity in metacounts.values()) return substitutions
def omega(N,q): assert 0 <= q <= N ks = [make_k(i) for i in range(1,N+1)] return sum(int(fac(q)/fac(q-i))*esp(ks,i) for i in range(q+1))
from math import exp,log,sqrt,ceil from matplotlib import pyplot as plt #import seaborn as sbn import scipy from collections import defaultdict from sde import ou_relaxation_time_from_sample,is_stationary n = 16 L = 5 beta = 1 K = 4**L G = 5*10**6 AAS = 5 num_recognizers = AAS**L num_motifs = 4**(n*L) permutations = fac(L)*fac(n) num_genotypes = num_recognizers * num_motifs / float(permutations) log_num_genotypes = L*log(AAS) + (n*L)*log(4) - log_fac(L) # site_mut_prob = 10**-0.5 # rec_mut_prob = 10**-0.5 def sample_code(sigma=1): return {(i,b):random.gauss(0,sigma) for i in range(AAS) for b in "ACGT"} def code_statistics(code): mus = [mean([code[(aa,b)] for aa in range(AAS)]) for b in "ACGT"] sigmas = [sd([code[(aa,b)] for aa in range(AAS)]) for b in "ACGT"] return sum(mus),sum(sigmas) if not 'code' in globals(): code = sample_code()
def simplex_integrate(f, n, sigma, trials=1000): integrand = lambda ps: f(ps) * logit_measure(ps, sigma) / fac(n - 1) return mean(integrand(simplex_sample(n)) for i in xrange(trials))
def w(eps): """number of ways to """ return (fac(L)**len(eps))/prod(fac(ep)*fac(L-ep) for ep in eps)*3**sum(eps)