code: def algebraic_intersect(nodes1, degree1, nodes2, degree2, verify):
      r
      all_intersections = _algebraic_intersection.all_intersections
      return generic_intersect(
          nodes1, degree1, nodes2, degree2, verify, all_intersections
      )
docs: r"""Find all intersections among edges of two surfaces.
  
      Uses :func:`generic_intersect` with the
      :attr:`~.IntersectionStrategy.ALGEBRAIC` intersection strategy.
  
      Args:
          nodes1 (numpy.ndarray): The nodes defining the first surface in
              the intersection (assumed in :math:\mathbf{R}^2`).
          degree1 (int): The degree of the surface given by ``nodes1``.
          nodes2 (numpy.ndarray): The nodes defining the second surface in
              the intersection (assumed in :math:\mathbf{R}^2`).
          degree2 (int): The degree of the surface given by ``nodes2``.
          verify (Optional[bool]): Indicates if duplicate intersections
              should be checked.
  
      Returns:
          Tuple[Optional[list], Optional[bool], tuple]: 3-tuple of
  
          * List of "edge info" lists. Each list represents a curved polygon
            and contains 3-tuples of edge index, start and end (see the
            output of :func:`ends_to_curve`).
          * "Contained" boolean. If not :data:`None`, indicates
            that one of the surfaces is contained in the other.
          * The nodes of three edges of the first surface being intersected
            followed by the nodes of the three edges of the second.