docs: def check_shapes(pfeed, *, as_df=False, include_warnings=False):
      """
      Analog of :func:`check_frequencies` for ``pfeed.shapes``
      """
      table = 'shapes'
      problems = []
  
      # Preliminary checks
      if pfeed.shapes is None:
          return problems
  
      f = pfeed.shapes.copy()
      problems = check_for_required_columns(problems, table, f)
      if problems:
          return gt.format_problems(problems, as_df=as_df)
  
      if include_warnings:
          problems = check_for_invalid_columns(problems, table, f)
  
      # Check shape_id
      problems = gt.check_column(problems, table, f, 'shape_id', gt.valid_str)
  
      # Check geometry
      v = lambda x: isinstance(x, sg.LineString) and not x.is_empty
      problems = gt.check_column(problems, table, f, 'geometry', v)
  
      return gt.format_problems(problems, as_df=as_df)