
    Wi                     j    d dl Zd dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ  G d de      Zy)	    N)tqdm)UnionList)Sentence)DocumentEmbeddingsTokenEmbeddingsDocumentPoolEmbeddings)BaseEmbedderc                   b     e Zd ZdZdeeef   f fdZddee	   de
dej                  fdZ xZS )	FlairBackenda[  Flair Embedding Model.

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

    Arguments:
        embedding_model: A Flair embedding model

    Examples:
    ```python
    from bertopic.backend import FlairBackend
    from flair.embeddings import WordEmbeddings, DocumentPoolEmbeddings

    # Create a Flair Embedding model
    glove_embedding = WordEmbeddings('crawl')
    document_glove_embeddings = DocumentPoolEmbeddings([glove_embedding])

    # Pass the Flair model to create a new backend
    flair_embedder = FlairBackend(document_glove_embeddings)
    ```
    embedding_modelc                     t         |           t        |t              rt	        |g      | _        y t        |t              rd|j                  v rd|_        || _        y t        d      )N	fine_tuneFzPlease select a correct Flair model by either using preparing a token or document embedding model: 
`from flair.embeddings import TransformerDocumentEmbeddings` 
`roberta = TransformerDocumentEmbeddings('roberta-base')`)
super__init__
isinstancer   r	   r   r   __dict__r   
ValueError)selfr   	__class__s     c/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/backend/_flair.pyr   zFlairBackend.__init__!   sj     o7#9?:K#LD  );<o666,1)#2D  L     	documentsverbosereturnc                    g }t        ||       D ]}  }	 |rt        |      n
t        d      }| j                  j                  |       |j
                  j                         j                         j                         }|j                  |        t        j                  |      }|S # t        $ r) t        d      }| j                  j                  |       Y w xY 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`
        )disablezan empty document)r   r   r   embedRuntimeError	embeddingdetachcpunumpyappendnpasarray)r   r   r   
embeddingsdocumentsentencer    s          r   r   zFlairBackend.embed7   s     
YG< 	)H5198H-xH[?\$$**84 !**113779??AIi(	) ZZ
+
   5#$78$$**845s   3B((/CC)F)__name__
__module____qualname____doc__r   r   r   r   r   strboolr%   ndarrayr   __classcell__)r   s   @r   r   r   
   sA    ,o?Q.Q(R ,tCy 4 BJJ r   r   )r#   r%   r   typingr   r   
flair.datar   flair.embeddingsr   r   r	   bertopic.backendr
   r    r   r   <module>r7      s(        X X )D< Dr   