o
    i                  	   @   s  d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ dd	lm Z  dd
l!m"Z" ddl#m#Z# 	d%dedee$ deee ef fddZ%d&de$defddZ&dee deeef fddZ'dedee"gef fddZ(dee"e$gef fddZ)de$dee"gef fdd Z*deeegee f fd!d"Z+deeee geee  f fd#d$Z,dS )'    )Path)CallableIterableListOptionalTuple)	LinearMaxoutModelRaggedchainlist2raggedreduce_meanresidualtuplify)Floats2d   )Errors)	CandidateInMemoryLookupKBKnowledgeBaseget_candidatesget_candidates_batch)DocSpan)registryVocab   )extract_spansNtok2vecnOreturnc              	   C   s   t ttd9 | d}t||d}| t ? t @ t ? t	 ? t
t||ddd? |? }|d| |d|  W d    n1 sDw   Y  d	|jd
< |S )N)z>>&r!   )r!   nIr   g        )r!   r$   nPdropoutoutput_layerr    Tinclude_span_maker)r
   define_operatorsr   r   maybe_get_dimr   r   build_span_makerr   r   r   r	   set_refattrs)r    r!   token_widthr'   model r0   Q/home/ubuntu/.local/lib/python3.10/site-packages/spacy/ml/models/entity_linker.pybuild_nel_encoder   s$   

r2   n_sentsc                 C   s   t dtd}| |jd< |S )N
span_maker)forwardr3   )r
   span_maker_forwardr-   )r3   r/   r0   r0   r1   r+   3      
r+   docsc              
   C   s0  | j }| jd }g }|D ]q}g }z
dd |jD }W n ty5   |D ]}	|	jdk|	_q#|d d  g}Y nw |jD ];}
z||
j}W n t	yP   t
tjd w td|| }tt|d || }|| j}|| j}|||f q9||| q| j dd |D }t| j ||}|dd fS )	Nr3   c                 S   s   g | ]}|qS r0   r0   ).0sr0   r0   r1   
<listcomp>@   s    z&span_maker_forward.<locals>.<listcomp>r      c                 S   s   g | ]}t |qS r0   )len)r9   candsr0   r0   r1   r;   X   s    c                 S   s   g S Nr0   )xr0   r0   r1   <lambda>[   s    z$span_maker_forward.<locals>.<lambda>)opsr-   sents
ValueErroriis_sent_startentsindexsentAttributeErrorRuntimeErrorr   E030maxminr=   startendappend	asarray2i	asarray1ir   flatten)r/   r8   is_trainrB   r3   
candidatesdocr>   	sentencestokent
sent_indexstart_sentenceend_sentencestart_token	end_tokenlengthsoutr0   r0   r1   r6   9   s6   



r6   kb_pathc                       dt f fdd}|S )Nvocabc                    s   t | dd}|  |S )Nr<   entity_vector_length)r   	from_disk)rd   kbrb   r0   r1   kb_from_filea   r7   zload_kb.<locals>.kb_from_filer   )rb   rj   r0   ri   r1   load_kb^   s   rk   c                  C   s   dt dtfdd} | S )Nrd   rf   c                 S   s   t | |dS Nrd   rf   r   rm   r0   r0   r1   empty_kb_factoryj      z-empty_kb_for_config.<locals>.empty_kb_factory)r   int)ro   r0   r0   r1   empty_kb_for_configi   s   rr   rf   c                    rc   )Nrd   c                    s   t |  dS rl   rn   )rd   re   r0   r1   ro   s   rp   z"empty_kb.<locals>.empty_kb_factoryr   )rf   ro   r0   re   r1   empty_kbp   s   rs   c                   C      t S r?   )r   r0   r0   r0   r1   create_candidatesy   s   ru   c                   C   rt   r?   )r   r0   r0   r0   r1   create_candidates_batch}   s   rv   r?   )r   )-pathlibr   typingr   r   r   r   r   	thinc.apir   r	   r
   r   r   r   r   r   r   thinc.typesr   errorsr   rh   r   r   r   r   r   tokensr   r   utilr   rd   r   r   rq   r2   r+   r6   rk   rr   rs   ru   rv   r0   r0   r0   r1   <module>   sF    ,
%

	