code: def cases_test_graph(
      self, g, kind="nodes", df=ndf_reddit, verbose=False
  ):
      if kind == "nodes":
          ndf = g._nodes
          self.cases_check_node_attributes(g)
      else:
          ndf = g._edges
          self.cases_check_edge_attributes(g)
  
      ndf = remove_internal_namespace_if_present(ndf)
      cols = ndf.columns
      logger.debug("g_nodes: %s", g._nodes)
      logger.debug("df: %s", df)
      assert ndf.reset_index(drop=True).equals(
          df[cols].reset_index(drop=True)
      )
  
imports: from xml.sax.handler import feature_external_ges
  import pytest
  import unittest
  import warnings
  import graphistry
  import os
  import logging
  import numpy
  import pandas
  from graphistry import Plottable
  from graphistry.feature_utils import remove_internal_namespace_if_present
  from graphistry.tests.test_feature_utils import ndf_reddit, text_cols_reddit, meta_cols_reddit, good_cols_reddit, single_target_reddit, double_target_reddit, edge_df, edge_df2, edge2_target_df, model_avg_name, lazy_import_has_min_dependancy, check_allclose_fit_transform_on_same_data
  from graphistry.umap_utils import lazy_umap_import_has_dependancy, lazy_cuml_import_has_dependancy, lazy_cudf_import_has_dependancy
label_desc: Use image node_id 4 for calling the TestUMAPMethods obj's underlying member method code with example usage: obj.cases_test_graph(g, kind, df, verbose) without return types