docs: def close_path_traces(*args):
      '''
      close_path_traces(pt1, pt2...) yields the path-trace formed by joining the list of path traces
        at their intersection points in the order given. Note that the direction in which each
        individual path trace's coordinates are specified is ultimately ignored by this function--the
        only ordering that matters is the order in which the list of paths is given.
  
      Each path argument may alternately be a curve-spline object or coordinate matrix, so long as all
      paths and curves track the same 2D space.
      '''
      pts = [x for x in args if is_path_trace(x)]
      if len(pts) == 0:
          if len(args) == 1 and hasattr(args[0], '__iter__'): return close_path_traces(*args[0])
          raise ValueError('at least one argument to close_path_traces must be a path trace')
      mp0 = pts[0].map_projection
      if not all(mp is None or mp.normalize() == mp0.normalize()
                 for x in pts[1:] for mp in [x.map_projection]):
          warnings.warn('path traces do not share a map projection')
      crvs = [x.curve if is_path_trace(x) else to_curve_spline(x) for x in args]
      loop = close_curves(*crvs)
      return path_trace(mp0, loop.coordinates, closed=True)