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=())