<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reduce_(self):
 r"""Return a degree-reduced version of the current curve. .. _pseudo-inverse: https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse Does this by converting the current nodes :math:`v_0, \ldots, v_n` to new nodes :math:`w_0, \ldots, w_{n - 1}` that correspond to reversing the :meth:`elevate` process. This uses the `pseudo-inverse`_ of the elevation matrix. For example when elevating from degree 2 to 3, the matrix :math:`E_2` is given by .. math:: \mathbf{v} = \left[\begin{array}{c c c} v_0 & v_1 & v_2 \end{array}\right] \longmapsto \left[\begin{array}{c c c c} v_0 & \frac{v_0 + 2 v_1}{3} & \frac{2 v_1 + v_2}{3} & v_2 \end{array}\right] = \frac{1}{3} \mathbf{v} \left[\begin{array}{c c c c} 3 & 1 & 0 & 0 \\ 0 & 2 & 2 & 0 \\ 0 & 0 & 1 & 3 \end{array}\right] and the (right) pseudo-inverse is given by .. math:: R_2 = E_2^T \left(E_2 E_2^T\right)^{-1} = \frac{1}{20} \left[\begin{array}{c c c} 19 & -5 & 1 \\ 3 & 15 & -3 \\ -3 & 15 & 3 \\ 1 & -5 & 19 \end{array}\right]. .. warning:: Though degree-elevation preserves the start and end nodes, degree reduction has no such guarantee. Rather, the nodes produced are "best" in the least squares sense (when solving the normal equations). .. image:: ../../images/curve_reduce.png :align: center .. testsetup:: curve-reduce, curve-reduce-approx import numpy as np import bezier .. doctest:: curve-reduce :options: +NORMALIZE_WHITESPACE <Curve (degree=2, dimension=2)> array([[-3. , 1.5, 0. ], [ 3. , 1.5, 6. ]]) .. testcleanup:: curve-reduce import make_images make_images.curve_reduce(curve, reduced) In the case that the current curve **is not** degree-elevated. .. image:: ../../images/curve_reduce_approx.png :align: center .. doctest:: curve-reduce-approx :options: +NORMALIZE_WHITESPACE <Curve (degree=2, dimension=2)> array([[-0.125, 2.5 , 5.125], [ 2.125, 8.125, 2.875]]) .. testcleanup:: curve-reduce-approx import make_images make_images.curve_reduce_approx(curve, reduced) Returns: Curve: The degree-reduced curve. """

        new_nodes = _curve_helpers.reduce_pseudo_inverse(self._nodes)
        return Curve(new_nodes, self._degree - 1, _copy=False)