code: def flip_ctrlpts2d(ctrlpts2d, size_u=0, size_v=0):
      
      if size_u <= 0 or size_v <= 0:
          # Detect array shapes
          size_u = len(ctrlpts2d)
          size_v = len(ctrlpts2d[0])
  
      new_ctrlpts2d = [[[] for _ in range(size_u)] for _ in range(size_v)]
      for i in range(size_v):
          for j in range(size_u):
              new_ctrlpts2d[i][j] = [float(c) for c in ctrlpts2d[j][i]]
  
      return new_ctrlpts2d
docs: Flips a list of surface 2-D control points from *[u][v]* to *[v][u]* order.
  
      :param ctrlpts2d: 2-D control points
      :type ctrlpts2d: list, tuple
      :param size_u: size in U-direction (row length)
      :type size_u: int
      :param size_v: size in V-direction (column length)
      :type size_v: int
      :return: flipped 2-D control points
      :rtype: list