code: def test_visualize_training_data_graph(
      tmp_path: Path, domain: Domain
  ):
      graph = training.extract_story_graph(
          "data/test_yaml_stories/stories_with_cycle.yml", domain
      )
  
      graph = graph.with_cycles_removed()
  
      out_path = str(tmp_path / "graph.html")
  
      # this will be the plotted networkx graph
      G = graph.visualize(out_path)
  
      assert os.path.exists(out_path)
  
      # we can't check the exact topology - but this should be enough to ensure
      # the visualisation created a sane graph
      assert set(G.nodes()) == set(range(-1, 13)) or set(
          G.nodes()
      ) == set(range(-1, 14))
      if set(G.nodes()) == set(range(-1, 13)):
          assert len(G.edges()) == 14
      elif set(G.nodes()) == set(range(-1, 14)):
          assert len(G.edges()) == 16
  
imports: import json
  import warnings
  import numpy
  import os
  import pytest
  import sys
  from collections import Counter
  from pathlib import Path
  from typing import Any, Text, List, Dict, Optional
  from _pytest.monkeypatch import MonkeyPatch
  from unittest.mock import Mock
  from rasa.shared.nlu.training_data.features import Features
  from rasa.shared.nlu.training_data.message import Message
  import rasa.shared.utils.io
  from rasa.shared.exceptions import FileNotFoundException, YamlSyntaxException, YamlException
  from rasa.core.actions.action import ACTION_LISTEN_NAME
  from rasa.core import training
  from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
  from rasa.core.featurizers.single_state_featurizer import SingleStateFeaturizer
  from rasa.utils.tensorflow.model_data_utils import _surface_attributes
  from rasa.shared.constants import INTENT_MESSAGE_PREFIX, LATEST_TRAINING_DATA_FORMAT_VERSION
  from rasa.shared.core.constants import RULE_SNIPPET_ACTION_NAME
  from rasa.shared.core.domain import Domain
  from rasa.shared.core.training_data import loading
  from rasa.shared.core.events import ActionExecuted, UserUttered, SlotSet, ActiveLoop
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import YAMLStoryReader, DEFAULT_VALUE_TEXT_SLOTS
  from rasa.shared.core.training_data.structures import StoryStep, RuleStep
  from rasa.shared.nlu.constants import ACTION_NAME, ENTITIES, ENTITY_ATTRIBUTE_END, ENTITY_ATTRIBUTE_START, ENTITY_ATTRIBUTE_TYPE, ENTITY_ATTRIBUTE_VALUE, FEATURE_TYPE_SENTENCE, INTENT, INTENT_NAME_KEY, INTENT_RANKING_KEY, PREDICTED_CONFIDENCE_KEY, TEXT, EXTRACTOR
  from tests.conftest import filter_expected_warnings
label_desc: Use image node_id 34 for calling a global function with example usage: test_visualize_training_data_graph(tmp_path, domain) without return types