code: def create_dialog(obj, obj_name):
      
      # Local import
      from spyder_kernels.utils.nsview import (ndarray, FakeObject,
                                               Image, is_known_type, DataFrame,
                                               Series)
      from spyder.plugins.variableexplorer.widgets.texteditor import TextEditor
      from spyder.plugins.variableexplorer.widgets.collectionseditor import (
              CollectionsEditor)
      from spyder.plugins.variableexplorer.widgets.arrayeditor import (
              ArrayEditor)
      if DataFrame is not FakeObject:
          from spyder.plugins.variableexplorer.widgets.dataframeeditor import (
                  DataFrameEditor)
  
      conv_func = lambda data: data
      readonly = not is_known_type(obj)
      if isinstance(obj, ndarray) and ndarray is not FakeObject:
          dialog = ArrayEditor()
          if not dialog.setup_and_check(obj, title=obj_name,
                                        readonly=readonly):
              return
      elif isinstance(obj, Image) and Image is not FakeObject \
        and ndarray is not FakeObject:
          dialog = ArrayEditor()
          import numpy as np
          data = np.array(obj)
          if not dialog.setup_and_check(data, title=obj_name,
                                        readonly=readonly):
              return
          from spyder.pil_patch import Image
          conv_func = lambda data: Image.fromarray(data, mode=obj.mode)
      elif isinstance(obj, (DataFrame, Series)) and DataFrame is not FakeObject:
          dialog = DataFrameEditor()
          if not dialog.setup_and_check(obj):
              return
      elif is_text_string(obj):
          dialog = TextEditor(obj, title=obj_name, readonly=readonly)
      else:
          dialog = CollectionsEditor()
          dialog.setup(obj, title=obj_name, readonly=readonly)
  
      def end_func(dialog):
          return conv_func(dialog.get_value())
  
      return dialog, end_func
docs: Creates the editor dialog and returns a tuple (dialog, func) where func
      is the function to be called with the dialog instance as argument, after 
      quitting the dialog box
      
      The role of this intermediate function is to allow easy monkey-patching.
      (uschmitt suggested this indirection here so that he can monkey patch 
      oedit to show eMZed related data)