Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
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)