code: def _subdivide_nodes(nodes):
      
      _, num_nodes = np.shape(nodes)
      if num_nodes == 2:
          left_nodes = _helpers.matrix_product(nodes, _LINEAR_SUBDIVIDE_LEFT)
          right_nodes = _helpers.matrix_product(nodes, _LINEAR_SUBDIVIDE_RIGHT)
      elif num_nodes == 3:
          left_nodes = _helpers.matrix_product(nodes, _QUADRATIC_SUBDIVIDE_LEFT)
          right_nodes = _helpers.matrix_product(
              nodes, _QUADRATIC_SUBDIVIDE_RIGHT
          )
      elif num_nodes == 4:
          left_nodes = _helpers.matrix_product(nodes, _CUBIC_SUBDIVIDE_LEFT)
          right_nodes = _helpers.matrix_product(nodes, _CUBIC_SUBDIVIDE_RIGHT)
      else:
          left_mat, right_mat = make_subdivision_matrices(num_nodes - 1)
          left_nodes = _helpers.matrix_product(nodes, left_mat)
          right_nodes = _helpers.matrix_product(nodes, right_mat)
      return left_nodes, right_nodes
docs: Subdivide a curve into two sub-curves.
  
      Does so by taking the unit interval (i.e. the domain of the surface) and
      splitting it into two sub-intervals by splitting down the middle.
  
      .. note::
  
         There is also a Fortran implementation of this function, which
         will be used if it can be built.
  
      Args:
          nodes (numpy.ndarray): The nodes defining a B |eacute| zier curve.
  
      Returns:
          Tuple[numpy.ndarray, numpy.ndarray]: The nodes for the two sub-curves.