code: def generate_heterogeneous_signal(
      snapshot_count, n_count, feature_count, *additional_features_keys
  ):
      edge_index_dicts = [
          {("author", "writes", "paper"): get_edge_array(n_count)}
          for _ in range(snapshot_count)
      ]
      edge_weight_dicts = [
          {
              ("author", "writes", "paper"): np.ones(
                  edge_index_dicts[t][
                      ("author", "writes", "paper")
                  ].shape[1]
              )
          }
          for t in range(snapshot_count)
      ]
      feature_dicts = [
          {
              "author": np.random.uniform(
                  0, 1, (n_count, feature_count)
              ),
              "paper": np.random.uniform(
                  0, 1, (n_count, feature_count)
              ),
          }
          for _ in range(snapshot_count)
      ]
  
      target_dicts = [
          {
              "author": np.random.uniform(0, 10, (n_count,)),
              "paper": np.random.uniform(0, 10, (n_count,)),
          }
          for _ in range(snapshot_count)
      ]
  
      if additional_features_keys:
          additional_features = {
              key: [
                  {
                      "author": np.random.uniform(
                          0, 1, (n_count, feature_count)
                      ),
                      "paper": np.random.uniform(
                          0, 1, (n_count, feature_count)
                      ),
                  }
                  for _ in range(snapshot_count)
              ]
              for key in additional_features_keys
          }
          return (
              edge_index_dicts,
              edge_weight_dicts,
              feature_dicts,
              target_dicts,
              additional_features,
          )
  
      return (
          edge_index_dicts,
          edge_weight_dicts,
          feature_dicts,
          target_dicts,
      )
  
imports: import numpy
  import networkx
  from torch_geometric_temporal.signal import temporal_signal_split
  from torch_geometric_temporal.signal import StaticGraphTemporalSignal
  from torch_geometric_temporal.signal import DynamicGraphTemporalSignal
  from torch_geometric_temporal.signal import DynamicGraphStaticSignal
  from torch_geometric_temporal.signal import StaticHeteroGraphTemporalSignal
  from torch_geometric_temporal.signal import DynamicHeteroGraphTemporalSignal
  from torch_geometric_temporal.signal import DynamicHeteroGraphStaticSignal
  from torch_geometric_temporal.dataset import METRLADatasetLoader, PemsBayDatasetLoader
  from torch_geometric_temporal.dataset import ChickenpoxDatasetLoader, PedalMeDatasetLoader, WikiMathsDatasetLoader, EnglandCovidDatasetLoader
  from torch_geometric_temporal.dataset import TwitterTennisDatasetLoader, MontevideoBusDatasetLoader, MTMDatasetLoader
  from torch_geometric_temporal.dataset import WindmillOutputLargeDatasetLoader, WindmillOutputMediumDatasetLoader, WindmillOutputSmallDatasetLoader
label_desc: Use image node_id 3 for calling a global function with example usage: generate_heterogeneous_signal(snapshot_count, n_count, feature_count) and returns: edge_index_dicts,  edge_weight_dicts,  feature_dicts,  target_dicts, edge_index_dicts,  edge_weight_dicts,  feature_dicts,  target_dicts,  additional_features