Beispiel #1
0
def _parse_term(term_str, range_cb, base_cb, free_vars):
    """Parse the term string after the square bracket into a Term.
    """

    # First break the string into indexed values.
    summed_vars, idxed_vals = _break_into_idxed(term_str)

    sums = tuple((Symbol(i), range_cb(i)) for i in summed_vars)
    dumms = {i[0] for i in sums}
    amp = sympify('1')

    for base, indices in idxed_vals:
        indices_symbs = tuple(Symbol(i) for i in indices)
        for i, j in zip(indices_symbs, indices):
            if i not in dumms:
                free_vars[range_cb(j)].add(i)
            continue

        base_symb = base_cb(base, indices_symbs)
        amp *= base_symb[indices_symbs]
        continue

    return Term(sums=sums, amp=amp, vecs=())