class_docstr: Node generator
class_docstr_tok: ["Node","generator"]
docstr: multi_m2v_node_generate
docstr_tok: ["multi_m2v_node_generate"]
code: def multi_m2v_node_generate(self):
      """multi_m2v_node_generate"""
      n_type_list = self.first_node_type.split(";")
      num_n_type = len(n_type_list)
      node_types = np.unique(self.graph.node_types).tolist()
  
      node_generators = {}
      for n_type in node_types:
          node_generators[n_type] = self.graph.node_batch_iter(
              self.batch_size, n_type=n_type
          )
  
      cc = 0
      while True:
          idx = cc % num_n_type
          n_type = n_type_list[idx]
          try:
              nodes = next(node_generators[n_type])
          except StopIteration as e:
              log.info(
                  "node type of %s iteration finished in one epoch"
                  % (n_type)
              )
              node_generators[n_type] = self.graph.node_batch_iter(
                  self.batch_size, n_type=n_type
              )
              break
          yield (nodes, idx)
          cc += 1
  
imports: from __future__ import division
  from __future__ import absolute_import
  from __future__ import print_function
  import time
  import io
  import os
  import numpy
  import random
  from pgl.utils.logger import log
  from pgl.sample import metapath_randomwalk
  from pgl.graph_kernel import skip_gram_gen_pair
  from pgl.graph_kernel import alias_sample_build_table
  from utils import load_config
  from graph import m2vGraph
  import mp_reader
label_desc: Use image node_id 4 for calling the NodeGenerator obj's underlying member method code with example usage: obj.multi_m2v_node_generate() without return types