def I_lu(nballs, nboxes, labels): if nballs == 0: yield (tuple(), ) * nboxes else: for idxs in labeled_balls_in_unlabeled_boxes(nballs, [nballs] * nboxes): yield tuple(tuple(labels[i] for i in subset) for subset in idxs)
def I_lubar(nballs, nboxes, labels): if nballs != 0: for idxs in labeled_balls_in_unlabeled_boxes(nballs, [nballs]*nboxes): if not all(len(i) > 0 for i in idxs): continue else: yield tuple(tuple(labels[i] for i in subset) for subset in idxs)
def I_lubar(nballs, nboxes, labels): if nballs != 0: for idxs in labeled_balls_in_unlabeled_boxes(nballs, [nballs] * nboxes): if not all(len(i) > 0 for i in idxs): continue else: yield tuple( tuple(labels[i] for i in subset) for subset in idxs)
def brace_notation_iter(sequence_of_sequences): """ This iterates over the brace notation combinations from Allen, et al. Mol. Phys. 89 (1996), 1213-1221 See the explanation of its funtion therein. This is needed for the arbitrary order B tensor formulae. :Examples: >>> [tuple(''.join(part) for part in parts) for parts in brace_notation_iter(['AB', 'C', 'D'])] [('AB', 'C', 'D'), ('AC', 'B', 'D'), ('AD', 'B', 'C'), ('BC', 'A', 'D'), ('BD', 'A', 'C'), ('CD', 'A', 'B')] """ seq = [p for p in sequence_of_sequences] joined = [item for item in chain(*seq)] for indices in labeled_balls_in_unlabeled_boxes(len(joined), [len(s) for s in seq]): yield tuple(tuple(joined[idx] for idx in subset) for subset in indices)
def Bcscphi(phi, *b_alphas): phi_val = phi.value * phi.units.to(Radians) sinphi = sin(phi_val) cscphi = 1.0 / sinphi if len(b_alphas) == 0: return cscphi cotphi = cos(phi_val) / sinphi #------------------------------------# def dcsc_n(n): def t(n_t, k): if k == 0: return 1 elif k <= n_t//2: return (2*k + 1) * t(n_t-1, k) + (n_t - 2*k + 1) * t(n_t-1, k-1) else: return 0 #--------------------------------# ret_val = 0.0 for kk in xrange(n//2 + 1): ret_val += t(n, kk) * cotphi**(n - 2*kk) * cscphi**(2*kk + 1) if n % 2 == 1: return -ret_val else: return ret_val #------------------------------------# outer_sum = 0.0 for k in xrange(1, len(b_alphas) + 1): inner_sum = 0.0 for idx_sets in labeled_balls_in_unlabeled_boxes(len(b_alphas), [len(b_alphas)]*k): if any(len(st) == 0 for st in idx_sets): continue b_idx_sets = tuple(tuple(b_alphas[i] for i in idxset) for idxset in idx_sets) product = 1.0 for b_idxs in b_idx_sets: product *= B(phi, *b_idxs) inner_sum += product outer_sum += dcsc_n(k) * inner_sum return outer_sum
def I_lu(nballs, nboxes, labels): if nballs == 0: yield (tuple(),) * nboxes else: for idxs in labeled_balls_in_unlabeled_boxes(nballs, [nballs]*nboxes): yield tuple(tuple(labels[i] for i in subset) for subset in idxs)