def delta_ell_case_1(module: Module, x: ETangleStrands, a1: int, a2: int) -> Module.TensorElement: c1 = module.left_algebra.ring.one() c2 = module.ring.one() powers = x.idempotent_and_left_strands().figure_8_case_1a(a1, a2) if powers is None: return module.zero() for orange, power in powers.items(): if x.etangle.strand_index_to_left_sign(orange) == 1: c1 *= x.etangle.left_algebra_strand_index_to_variable( orange)**power else: c2 *= x.etangle.strand_index_to_variable(orange)**power b1 = a1 b2 = a2 idempotent_strands = x.left_idempotent_strands() elt_strands = swap_values(idempotent_strands, b1, b2) elt = x.etangle.left_algebra.generator(elt_strands) return (c1 * elt)**(c2 * x.to_generator(module))
def delta_ell_case_4(module: Module, x: ETangleStrands, a1: int, a2: int) -> Module.TensorElement: c1 = module.left_algebra.ring.one() c2 = x.etangle.ring.one() powers = x.idempotent_and_left_strands().figure_8_case_4a(a1, a2) if powers is None: return module.zero() for orange, power in powers.items(): if x.etangle.strand_index_to_left_sign(orange) == 1: c1 *= x.etangle.left_algebra_strand_index_to_variable( orange)**power else: c2 *= x.etangle.strand_index_to_variable(orange)**power b1 = x.left_strands[a1] b2 = a2 elt_strands = x.left_idempotent_strands() elt_strands[b2] = a1 new_left_strands = dict(x.left_strands) del new_left_strands[a1] new_left_strands[a2] = b1 elt = x.etangle.left_algebra.generator(elt_strands) y = ETangleStrands(x.etangle, new_left_strands, x.right_strands) return (c1 * elt)**(c2 * y.to_generator(module))