code: def _preprocess(self, lhs, rhs):
      # A linestring A covers another linestring B iff
      # no point in B is outside of A.
      pli = _basic_intersects_pli(lhs, rhs)
      points = _points_and_lines_to_multipoints(pli[1], pli[0])
      # Every point in B must be in the intersection
      equals = _basic_equals_count(rhs, points) == rhs.sizes
      return equals
  
file_path: cuspatial/python/cuspatial/cuspatial/core/binpreds/feature_covers.py
imports: from cuspatial.core.binpreds.basic_predicates import _basic_contains_any, _basic_contains_count, _basic_equals_count, _basic_intersects_pli
  from cuspatial.core.binpreds.binpred_interface import BinPred, ImpossiblePredicate, NotImplementedPredicate
  from cuspatial.core.binpreds.feature_equals import EqualsPredicateBase
  from cuspatial.core.binpreds.feature_intersects import LineStringPointIntersects
  from cuspatial.utils.binpred_utils import LineString, MultiPoint, Point, Polygon, _points_and_lines_to_multipoints, _zero_series
label_desc: Use image node_id 1 for calling the LineStringLineStringCovers obj's underlying member method code with example usage: obj._preprocess(lhs, rhs) and returns: equals