code: def update_locate_candidates(candidate, next_candidates, x_val, y_val, degree):
      
      centroid_x, centroid_y, width, candidate_nodes = candidate
      point = np.asfortranarray([x_val, y_val])
      if not _helpers.contains_nd(candidate_nodes, point):
          return
  
      nodes_a, nodes_b, nodes_c, nodes_d = _surface_helpers.subdivide_nodes(
          candidate_nodes, degree
      )
      half_width = 0.5 * width
      next_candidates.extend(
          (
              (
                  centroid_x - half_width,
                  centroid_y - half_width,
                  half_width,
                  nodes_a,
              ),
              (centroid_x, centroid_y, -half_width, nodes_b),
              (centroid_x + width, centroid_y - half_width, half_width, nodes_c),
              (centroid_x - half_width, centroid_y + width, half_width, nodes_d),
          )
      )
docs: Update list of candidate surfaces during geometric search for a point.
  
      .. note::
  
         This is used **only** as a helper for :func:`locate_point`.
  
      Checks if the point ``(x_val, y_val)`` is contained in the ``candidate``
      surface. If not, this function does nothing. If the point is contaned,
      the four subdivided surfaces from ``candidate`` are added to
      ``next_candidates``.
  
      Args:
          candidate (Tuple[float, float, float, numpy.ndarray]): A 4-tuple
              describing a surface and its centroid / width. Contains
  
              * Three times centroid ``x``-value
              * Three times centroid ``y``-value
              * "Width" of parameter space for the surface
              * Control points for the surface
          next_candidates (list): List of "candidate" sub-surfaces that may
              contain the point being located.
          x_val (float): The ``x``-coordinate being located.
          y_val (float): The ``y``-coordinate being located.
          degree (int): The degree of the surface.