code: def cytoscape_graph(data, name="name", ident="id"):
      """
      Create a NetworkX graph from a dictionary in cytoscape JSON format.
  
      Parameters
      ----------
      data : dict
          A dictionary of data conforming to cytoscape JSON format.
      name : string
          A string which is mapped to the 'name' node element in cyjs format.
          Must not have the same value as `ident`.
      ident : string
          A string which is mapped to the 'id' node element in cyjs format.
          Must not have the same value as `name`.
  
      Returns
      -------
      graph : a NetworkX graph instance
          The `graph` can be an instance of `Graph`, `DiGraph`, `MultiGraph`, or
          `MultiDiGraph` depending on the input data.
  
      Raises
      ------
      NetworkXError
          If the `name` and `ident` attributes are identical.
  
      See Also
      --------
      cytoscape_data: convert a NetworkX graph to a dict in cyjs format
  
      References
      ----------
      .. [1] Cytoscape user's manual:
         http://manual.cytoscape.org/en/stable/index.html
  
      Examples
      --------
      >>> data_dict = {
      ...     'data': [],
      ...     'directed': False,
      ...     'multigraph': False,
      ...     'elements': {'nodes': [{'data': {'id': '0', 'value': 0, 'name': '0'}},
      ...       {'data': {'id': '1', 'value': 1, 'name': '1'}}],
      ...      'edges': [{'data': {'source': 0, 'target': 1}}]}
      ... }
      >>> G = nx.cytoscape_graph(data_dict)
      >>> G.name
      ''
      >>> G.nodes()
      NodeView((0, 1))
      >>> G.nodes(data=True)[0]
      {'id': '0', 'value': 0, 'name': '0'}
      >>> G.edges(data=True)
      EdgeDataView([(0, 1, {'source': 0, 'target': 1})])
      """
      if name == ident:
          raise nx.NetworkXError("name and ident must be different.")
  
      multigraph = data.get("multigraph")
      directed = data.get("directed")
      if multigraph:
          graph = nx.MultiGraph()
      else:
          graph = nx.Graph()
      if directed:
          graph = graph.to_directed()
      graph.graph = dict(data.get("data"))
      for d in data["elements"]["nodes"]:
          node_data = d["data"].copy()
          node = d["data"]["value"]
  
          if d["data"].get(name):
              node_data[name] = d["data"].get(name)
          if d["data"].get(ident):
              node_data[ident] = d["data"].get(ident)
  
          graph.add_node(node)
          graph.nodes[node].update(node_data)
  
      for d in data["elements"]["edges"]:
          edge_data = d["data"].copy()
          sour = d["data"]["source"]
          targ = d["data"]["target"]
          if multigraph:
              key = d["data"].get("key", 0)
              graph.add_edge(sour, targ, key=key)
              graph.edges[sour, targ, key].update(edge_data)
          else:
              graph.add_edge(sour, targ)
              graph.edges[sour, targ].update(edge_data)
      return graph
  
label_desc: Use image node_id 2 for calling a global function with example usage: cytoscape_graph(data, name, ident) and returns: graph