code: def test_nodes_undirected_str(self):
      g = graphistry.edges(
          pd.DataFrame(
              {
                  "s": ["a", "b", "c"],
                  "d": ["b", "c", "a"],
              }
          ),
          "s",
          "d",
      ).nodes(
          pd.DataFrame(
              {"n": ["a", "b", "c"], "names": ["x", "y", "z"]}
          ),
          "n",
      )
      with warnings.catch_warnings():
          warnings.filterwarnings("ignore", category=FutureWarning)
          ig = g.to_igraph(directed=False)
      logger.debug("ig: %s", ig)
      ig.vs["cluster"] = ig.community_infomap().membership
      g2 = g.from_igraph(ig)
      assert g2._edges.shape == g._edges.shape
      assert g2._source == g._source
      assert g2._destination == g._destination
      assert g2._edge is None
      logger.debug("g2._nodes: %s", g2._nodes)
      assert g2._nodes.equals(
          pd.DataFrame(
              {
                  "n": ["a", "b", "c"],
                  "names": ["x", "y", "z"],
                  "cluster": [0, 0, 0],
              }
          )
      )
      assert g2._node == "n"
  
imports: import pyarrow
  import graphistry, logging, pandas, pytest, warnings
  from graphistry.tests.common import NoAuthTestCase
  from graphistry.constants import SRC, DST, NODE
  from graphistry.plugins.igraph import SRC_IGRAPH, DST_IGRAPH, compute_algs, compute_igraph, layout_algs, layout_igraph
label_desc: Use image node_id 13 for calling the Test_to_igraph obj's underlying member method code with example usage: obj.test_nodes_undirected_str() without return types