
    WiN	                     R    d dl Zd dlmZ d dlmZ d dlmZ d dlmZ  G d de      Z	y)    N)tqdm)List)BaseEmbedder)Word2VecKeyedVectorsc                   X     e Zd ZdZdef fdZddee   dede	j                  fdZ xZS )	GensimBackenda  Gensim Embedding Model.

    The Gensim embedding model is typically used for word embeddings with
    GloVe, Word2Vec or FastText.

    Arguments:
        embedding_model: A Gensim embedding model

    Examples:
    ```python
    from bertopic.backend import GensimBackend
    import gensim.downloader as api

    ft = api.load('fasttext-wiki-news-subwords-300')
    ft_embedder = GensimBackend(ft)
    ```
    embedding_modelc                 f    t         |           t        |t              r|| _        y t        d      )Nz|Please select a correct Gensim model: 
`import gensim.downloader as api` 
`ft = api.load('fasttext-wiki-news-subwords-300')`)super__init__
isinstancer   r	   
ValueError)selfr	   	__class__s     d/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/backend/_gensim.pyr   zGensimBackend.__init__   s4    o';<#2D E     	documentsverbosereturnc                 V   | j                   j                  t        t        | j                   j                                    j
                  d   }t        j                  |      }g }t        || dd      D ]  }|j                         D cg c]5  }|| j                   j                  v r| j                   j                  |      7 }}t        |      dkD  r'|j                  t        j                  |d             |j                  |        t        j                  |      }|S c c}w )a  Embed a list of n documents/words into an n-dimensional
        matrix of embeddings.

        Arguments:
            documents: A list of documents or words to be embedded
            verbose: Controls the verbosity of the process

        Returns:
            Document/words embeddings with shape (n, m) with `n` documents/words
            that each have an embeddings size of `m`
        r   T)disablepositionleave)axis)r	   
get_vectornextiterindex_to_keyshapenpzerosr   splitkey_to_indexlenappendmeanarray)	r   r   r   vector_shapeempty_vector
embeddingsdocword	embeddings	            r   embedzGensimBackend.embed'   s    ++66tDAUAUAbAb<c7dekklmnxx- 
	w;$O 
	0C  IIK4//<<< $$//5I  9~!!!"'')!"<=!!,/
	0 XXj)
s   :D&)F)__name__
__module____qualname____doc__r   r   r   strboolr    ndarrayr.   __classcell__)r   s   @r   r   r      s7    $
(< 
tCy 4 BJJ r   r   )
numpyr    r   typingr   bertopic.backendr   gensim.models.keyedvectorsr   r    r   r   <module>r<      s        ) ;=L =r   