class_docstr: StreamWrapper is introduced to wrap file handler generated by DataPipe operation like `FileOpener`.
  
  StreamWrapper would guarantee the wrapped file handler is closed when it's out of scope.
code: def __init__(self, file_obj, parent_stream=None, name=None):
      self.file_obj = file_obj
      self.child_counter = 0
      self.parent_stream = parent_stream
      self.close_on_last_child = False
      self.name = name
      self.closed = False
      if parent_stream is not None:
          if not isinstance(parent_stream, StreamWrapper):
              raise RuntimeError(
                  f"Parent stream should be StreamWrapper, {type(parent_stream)} was given"
              )
          parent_stream.child_counter += 1
          self.parent_stream = parent_stream
      if StreamWrapper.debug_unclosed_streams:
          StreamWrapper.session_streams[self] = 1
  
imports: import fnmatch
  import functools
  import inspect
  import os
  import warnings
  from io import IOBase
  from functools import partial
  from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Union
  from torch.utils.data._utils.serialization import DILL_AVAILABLE
label_desc: Use image node_id 1 to create a new StreamWrapper object  with example: obj = StreamWrapper(file_obj, parent_stream, name)