code: def factory(
      cls, db: EvaDBDatabase, table: TableCatalogEntry
  ) -> AbstractStorageEngine:
      cls._lazy_initialize_storages(db)
      if table is None:
          raise ValueError("Expected TableCatalogEntry, got None")
      if table.table_type in cls.storages:
          return cls.storages[table.table_type](db)
  
      raise RuntimeError(f"Invalid table type {table.table_type}")
  
file_path: evadb/evadb/storage/storage_engine.py
imports: from evadb.catalog.catalog_type import TableType
  from evadb.catalog.models.table_catalog import TableCatalogEntry
  from evadb.database import EvaDBDatabase
  from evadb.storage.abstract_storage_engine import AbstractStorageEngine
  from evadb.storage.document_storage_engine import DocumentStorageEngine
  from evadb.storage.image_storage_engine import ImageStorageEngine
  from evadb.storage.native_storage_engine import NativeStorageEngine
  from evadb.storage.pdf_storage_engine import PDFStorageEngine
  from evadb.storage.sqlite_storage_engine import SQLStorageEngine
  from evadb.storage.video_storage_engine import DecordStorageEngine
label_desc: Use image node_id 2 for calling the StorageEngine obj's underlying member method code with example usage: obj.factory(cls, db, table) and returns: cls