code: def edges(self):
          
          edge1, edge2, edge3 = self._get_edges()
          # NOTE: It is crucial that we return copies here. Since the edges
          #       are cached, if they were mutable, callers could
          #       inadvertently mutate the cached value.
          edge1 = edge1._copy()  # pylint: disable=protected-access
          edge2 = edge2._copy()  # pylint: disable=protected-access
          edge3 = edge3._copy()  # pylint: disable=protected-access
          return edge1, edge2, edge3
docs: The edges of the surface.
  
          .. doctest:: surface-edges
             :options: +NORMALIZE_WHITESPACE
  
             >>> nodes = np.asfortranarray([
             ...     [0.0,  0.5   , 1.0, 0.1875, 0.625, 0.0],
             ...     [0.0, -0.1875, 0.0, 0.5   , 0.625, 1.0],
             ... ])
             >>> surface = bezier.Surface(nodes, degree=2)
             >>> edge1, _, _ = surface.edges
             >>> edge1
             <Curve (degree=2, dimension=2)>
             >>> edge1.nodes
             array([[ 0. ,  0.5   , 1. ],
                    [ 0. , -0.1875, 0. ]])
  
          Returns:
              Tuple[~bezier.curve.Curve, ~bezier.curve.Curve, \
                    ~bezier.curve.Curve]: The edges of
              the surface.