def d_mixed_case_1(module: Module, x: ETangleStrands, b1: int, b2: int) -> Module.TensorElement: c = x.etangle.ring.one() powers = x.to_strand_diagram().figure_8_case_1b(b1, b2) if powers is None: return module.zero() for orange, power in powers.items(): c *= x.etangle.strand_index_to_variable(orange)**power x_out = ETangleStrands(x.etangle, x.left_strands, swap_values(x.right_strands, b1, b2)) return c * x_out.to_generator(module)
def d_mixed_case_4(module: Module, x: ETangleStrands, b1: int, b2: int) -> Module.TensorElement: c = x.etangle.ring.one() powers = x.to_strand_diagram().figure_8_case_4b(b1, b2) if powers is None: return module.zero() for orange, power in powers.items(): c *= x.etangle.strand_index_to_variable(orange)**power a1 = x.left_y_pos(b1) a2 = x.right_y_pos(b2) new_left_strands = dict(x.left_strands) new_left_strands[a1] = b2 new_right_strands = dict(x.right_strands) del new_right_strands[b2] new_right_strands[b1] = a2 x_out = ETangleStrands(x.etangle, new_left_strands, new_right_strands) return c * x_out.to_generator(module)