code: def _rotate(edges, step):
          
          step = Step(step)
          result = set()
          movement = {
              "U": "RFLB", 
              "D": "LFRB", 
              "R": "FUBD", 
              "L": "FDBU", 
              "F": "URDL", 
              "B": "ULDR", 
              }[step.face]
          movement = {
              movement[i]: movement[(i + step.is_clockwise + (-1 * step.is_counter_clockwise) + (2 * step.is_180)) % 4]
              for i in range(4)
              }
          for edge in edges:
              if step.face not in edge:
                  result.add(edge.copy())
              else:
                  k = (set(edge.facings.keys()) - {step.face}).pop()
                  new_edge = Edge(**{
                      step.face: edge[step.face], 
                      movement[k]: edge[k], 
                      })
                  result.add(new_edge)
          return result
docs: Simulate the cube rotation by updating four edges.