from pmap import from_word, PMap from evalmap import sfp, sfidx def W(m, layers): return from_word(m, layers)[0] def build_relations(t): """list of dicts: name, L, rhs [(coeff, map)], err: name of unknown block or None, errdim, errvec(fn) giving the error in L's coords as linear in unknowns.""" one = t**0 r0 = one/t rels = [] strand = W(1, []) rels.append(dict(name="R1", L=W(1, [("cup",1),("X",0),("cap",1)]), rhs=[(one, strand)], err="a")) tau = W(2, [("T",0)]) rels.append(dict(name="R15", L=W(2, [("X",0),("T",0)]), rhs=[(one, tau)], err="b")) rels.append(dict(name="R2", L=W(2, [("X",0),("X",0)]), rhs=[(one, W(2, []))], err="E2")) rels.append(dict(name="R25", L=W(3, [("X",0),("X",1),("T",0)]), rhs=[(one, W(3, [("T",1),("X",0)]))], err="E25")) rels.append(dict(name="R3", L=W(3, [("X",0),("X",1),("X",0)]), rhs=[(one, W(3, [("X",1),("X",0),("X",1)]))], err="E3")) rels.append(dict(name="Lol", L=W(0, [("cup",0),("T",0)]), rhs=[], err=None)) rels.append(dict(name="Big", L=W(1, [("Ts",0),("T",0)]), rhs=[((t-2)/t, strand)], err=None)) I = W(2, [("T",0),("Ts",0)]) rels.append(dict(name="IH", L=I, rhs=[(one, I.rotated(1)), (r0, W(2, [])), (-r0, W(2, [("cap",0),("cup",0)]))], err=None)) return rels