code: def subdivide(self):
          r
          left_nodes, right_nodes = _curve_helpers.subdivide_nodes(self._nodes)
          left = Curve(left_nodes, self._degree, _copy=False)
          right = Curve(right_nodes, self._degree, _copy=False)
          return left, right
docs: r"""Split the curve :math:`B(s)` into a left and right half.
  
          Takes the interval :math:`\left[0, 1\right]` and splits the curve into
          :math:`B_1 = B\left(\left[0, \frac{1}{2}\right]\right)` and
          :math:`B_2 = B\left(\left[\frac{1}{2}, 1\right]\right)`. In
          order to do this, also reparameterizes the curve, hence the resulting
          left and right halves have new nodes.
  
          .. image:: ../../images/curve_subdivide.png
             :align: center
  
          .. doctest:: curve-subdivide
             :options: +NORMALIZE_WHITESPACE
  
             >>> nodes = np.asfortranarray([
             ...     [0.0, 1.25, 2.0],
             ...     [0.0, 3.0 , 1.0],
             ... ])
             >>> curve = bezier.Curve(nodes, degree=2)
             >>> left, right = curve.subdivide()
             >>> left.nodes
             array([[0.   , 0.625, 1.125],
                    [0.   , 1.5  , 1.75 ]])
             >>> right.nodes
             array([[1.125, 1.625, 2.   ],
                    [1.75 , 2.   , 1.   ]])
  
          .. testcleanup:: curve-subdivide
  
             import make_images
             make_images.curve_subdivide(curve, left, right)
  
          Returns:
              Tuple[Curve, Curve]: The left and right sub-curves.