code: def specialize(self, start, end):
          
          new_nodes = _curve_helpers.specialize_curve(self._nodes, start, end)
          return Curve(new_nodes, self._degree, _copy=False)
docs: Specialize the curve to a given sub-interval.
  
          .. image:: ../../images/curve_specialize.png
             :align: center
  
          .. doctest:: curve-specialize
  
             >>> nodes = np.asfortranarray([
             ...     [0.0, 0.5, 1.0],
             ...     [0.0, 1.0, 0.0],
             ... ])
             >>> curve = bezier.Curve(nodes, degree=2)
             >>> new_curve = curve.specialize(-0.25, 0.75)
             >>> new_curve.nodes
             array([[-0.25 ,  0.25 ,  0.75 ],
                    [-0.625,  0.875,  0.375]])
  
          .. testcleanup:: curve-specialize
  
             import make_images
             make_images.curve_specialize(curve, new_curve)
  
          This is generalized version of :meth:`subdivide`, and can even
          match the output of that method:
  
          .. testsetup:: curve-specialize2
  
             import numpy as np
             import bezier
  
             nodes = np.asfortranarray([
                 [0.0, 0.5, 1.0],
                 [0.0, 1.0, 0.0],
             ])
             curve = bezier.Curve(nodes, degree=2)
  
          .. doctest:: curve-specialize2
  
             >>> left, right = curve.subdivide()
             >>> also_left = curve.specialize(0.0, 0.5)
             >>> np.all(also_left.nodes == left.nodes)
             True
             >>> also_right = curve.specialize(0.5, 1.0)
             >>> np.all(also_right.nodes == right.nodes)
             True
  
          Args:
              start (float): The start point of the interval we
                  are specializing to.
              end (float): The end point of the interval we
                  are specializing to.
  
          Returns:
              Curve: The newly-specialized curve.