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
Example #4
0
 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]
Example #5
0
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)
Example #7
0
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)
Example #12
0
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)]
Example #13
0
 def a(n,k):
     """See OEIS A111492"""
     return fac(k-1)*choose(n,k)
Example #14
0
def expm(A,n=100):
    return sum(linalg.matrix_power(A,i)/fac(i) for i in range(n+1))
Example #15
0
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
Example #18
0
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()
Example #20
0
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)