code: def _get_stream_identifier(
      prefix, event_name, stream_name, stream_index
  ) -> str:
      if not stream_name or utils.is_uuid4(stream_name):
          if event_name is not None and event_name != "":
              return "{}_{}_{}".format(prefix, event_name, stream_index)
          else:
              return prefix + str(stream_index)
      else:
          return "{}{}_{}".format(
              prefix,
              stream_index,
              utils.str2identifier(stream_name)[:8],
          )
  
file_path: tensorwatch/tensorwatch/notebook_maker.py
imports: import nbformat
  from nbformat.v4 import new_code_cell, new_markdown_cell, new_notebook
  from nbformat import v3, v4
  import codecs
  from os import linesep, path
  import uuid
  from .None import utils
  import re
  from typing import List
  from .lv_types import VisArgs
label_desc: Use image node_id 3 for calling the NotebookMaker obj's underlying member method code with example usage: obj._get_stream_identifier(prefix, event_name, stream_name, stream_index) and returns: str, str, unknown