from typing import Optional, overload, TYPE_CHECKING, Dict, Union from .base import BaseDocumentArray from .mixins import AllMixins if TYPE_CHECKING: from ..types import DocumentArraySourceType from .memory import DocumentArrayInMemory from .sqlite import DocumentArraySqlite from .annlite import DocumentArrayAnnlite from .weaviate import DocumentArrayWeaviate from .storage.sqlite import SqliteConfig from .storage.annlite import AnnliteConfig from .storage.weaviate import WeaviateConfig class DocumentArray(AllMixins, BaseDocumentArray): @overload def __new__( cls, _docs: Optional['DocumentArraySourceType'] = None, copy: bool = False ) -> 'DocumentArrayInMemory': """Create an in-memory DocumentArray object.""" ... @overload def __new__( cls, _docs: Optional['DocumentArraySourceType'] = None, storage: str = 'sqlite', config: Optional[Union['SqliteConfig', Dict]] = None, ) -> 'DocumentArraySqlite': """Create a SQLite-powered DocumentArray object.""" ... @overload def __new__( cls, _docs: Optional['DocumentArraySourceType'] = None, storage: str = 'weaviate', config: Optional[Union['WeaviateConfig', Dict]] = None, ) -> 'DocumentArrayWeaviate': """Create a Weaviate-powered DocumentArray object.""" ... @overload def __new__( cls, _docs: Optional['DocumentArraySourceType'] = None, storage: str = 'annlite', config: Optional[Union['AnnliteConfig', Dict]] = None, ) -> 'DocumentArrayAnnlite': """Create a AnnLite-powered DocumentArray object.""" ... def __new__(cls, *args, storage: str = 'memory', **kwargs): if cls is DocumentArray: if storage == 'memory': from .memory import DocumentArrayInMemory instance = super().__new__(DocumentArrayInMemory) elif storage == 'sqlite': from .sqlite import DocumentArraySqlite instance = super().__new__(DocumentArraySqlite) elif storage == 'annlite': from .annlite import DocumentArrayAnnlite instance = super().__new__(DocumentArrayAnnlite) elif storage == 'weaviate': from .weaviate import DocumentArrayWeaviate instance = super().__new__(DocumentArrayWeaviate) elif storage == 'qdrant': from .qdrant import DocumentArrayQdrant instance = super().__new__(DocumentArrayQdrant) else: raise ValueError(f'storage=`{storage}` is not supported.') else: instance = super().__new__(cls) return instance