docstr: Mark the session corresponding to session_id for deletion and stop tracking
  it.
  
  Note that:
    * Calling delete on an ID corresponding to a nonexistent session is a no-op.
    * Calling delete on an ID should cause the given session to no longer be
      tracked by this SessionStorage, but exactly when and how the session's data
      is eventually cleaned up is a detail left up to the implementation.
  
  Parameters
  ----------
  session_id
      The unique ID of the session to delete.
  
  Raises
  ------
  SessionStorageError
      Raised if an error occurs while attempting to delete the session.
code: def delete(self, session_id: str) -> None:
      """Mark the session corresponding to session_id for deletion and stop tracking
      it.
  
      Note that:
        * Calling delete on an ID corresponding to a nonexistent session is a no-op.
        * Calling delete on an ID should cause the given session to no longer be
          tracked by this SessionStorage, but exactly when and how the session's data
          is eventually cleaned up is a detail left up to the implementation.
  
      Parameters
      ----------
      session_id
          The unique ID of the session to delete.
  
      Raises
      ------
      SessionStorageError
          Raised if an error occurs while attempting to delete the session.
      """
      raise NotImplementedError
  
imports: from abc import abstractmethod
  from dataclasses import dataclass
  from typing import Callable, Dict, List, Optional, cast
  from typing_extensions import Protocol
  from streamlit.proto.ForwardMsg_pb2 import ForwardMsg
  from streamlit.runtime.app_session import AppSession
  from streamlit.runtime.script_data import ScriptData
  from streamlit.runtime.scriptrunner.script_cache import ScriptCache
  from streamlit.runtime.uploaded_file_manager import UploadedFileManager
label_desc: Use image node_id 3 for calling the SessionStorage obj's underlying member method code with example usage: obj.delete(session_id) without return types