code: def _compute_predicate(self, lhs, rhs, point_indices):
      lengths_equal = self._offset_equals(
          lhs.multipoints.geometry_offset,
          rhs.multipoints.geometry_offset,
      )
      (lhs_sorted, rhs_sorted) = self._sort_multipoints(
          lhs[lengths_equal], rhs[lengths_equal]
      )
      result = self._vertices_equals(
          lhs_sorted.multipoints.xy, rhs_sorted.multipoints.xy
      )
      return self._postprocess(
          lhs, rhs, EqualsOpResult(result, rhs_sorted.point_indices)
      )
  
imports: from __future__ import annotations
  from typing import Generic, TypeVar
  import cupy
  import cudf
  from cudf import Series
  import cuspatial
  from cuspatial.core.binpreds.binpred_interface import BinPred, EqualsOpResult, ImpossiblePredicate, NotImplementedPredicate, PreprocessorResult
  from cuspatial.utils.binpred_utils import LineString, MultiPoint, Point, Polygon, _false_series
label_desc: Use image node_id 1 for calling the MultiPointMultiPointEquals obj's underlying member method code with example usage: obj._compute_predicate(lhs, rhs, point_indices) and returns: self