
    WiK                     F    d dl 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)BaseEmbedderc                   R     e Zd ZdZ fdZddee   dedej                  fdZ
 xZS )SpacyBackenda  Spacy embedding model.

    The Spacy embedding model used for generating document and
    word embeddings.

    Arguments:
        embedding_model: A spacy embedding model

    Examples:
    To create a Spacy backend, you need to create an nlp object and
    pass it through this backend:

    ```python
    import spacy
    from bertopic.backend import SpacyBackend

    nlp = spacy.load("en_core_web_md", exclude=['tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer'])
    spacy_model = SpacyBackend(nlp)
    ```

    To load in a transformer model use the following:

    ```python
    import spacy
    from thinc.api import set_gpu_allocator, require_gpu
    from bertopic.backend import SpacyBackend

    nlp = spacy.load("en_core_web_trf", exclude=['tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer'])
    set_gpu_allocator("pytorch")
    require_gpu(0)
    spacy_model = SpacyBackend(nlp)
    ```

    If you run into gpu/memory-issues, please use:

    ```python
    import spacy
    from bertopic.backend import SpacyBackend

    spacy.prefer_gpu()
    nlp = spacy.load("en_core_web_trf", exclude=['tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer'])
    spacy_model = SpacyBackend(nlp)
    ```
    c                 r    t         |           dt        t        |            v r|| _        y t        d      )NspacyzPlease select a correct Spacy model by either using a string such as 'en_core_web_md' or create a nlp model using: `nlp = spacy.load('en_core_web_md'))super__init__strtypeembedding_model
ValueError)selfr   	__class__s     c/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/backend/_spacy.pyr   zSpacyBackend.__init__5   s;    c$/00#2D S     	documentsverbosereturnc                    d}g }t        |dd|       D ]  }| j                  |xs |      }|j                  r|j                  }n&|j                  j
                  j                  d   d   }t        |t        j                        st        |d      r|j                         }|j                  |        t        j                  |      S )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)positionleavedisableget)r   r   
has_vectorvector_trf_datatensors
isinstancenpndarrayhasattrr   appendarray)r   r   r   empty_document
embeddingsdoc	embeddings          r   embedzSpacyBackend.embed@   s      
	ATw;O 
	)C,,S-BNCI##%,,	%KK0088<Q?	i4E9R%MMO	i(
	) xx
##r   )F)__name__
__module____qualname____doc__r   r   r   boolr$   r%   r-   __classcell__)r   s   @r   r   r      s0    +Z	$tCy $4 $BJJ $r   r   )numpyr$   r   typingr   bertopic.backendr   r    r   r   <module>r8      s       )W$< W$r   