o
    in                     @   s  d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ d dl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 dd
lmZ ddlmZmZ ddlm Z  		d&dedddee! dee! dee" dede#de	ee ef fddZ$de	ee ef dee de%deeef fddZ&		d&dede	ee ef deee  dee de	ee ef f
ddZ'd e
de!fd!d"Z(d e
de!d#ee" dee fd$d%Z)dS )'    N)CallableListOptionalSequenceTuplecast)ModelOpsregistry)glorot_uniform_init)Floats1dFloats2dInts1dRagged)partial   )ORTH)ErrorsWarnings)Doc)ModeVectors)Vocabr   )dropoutinit_Wkey_attrnOnMr   r   r   returnc             	   C   s@   |dkrt tjt tdttt|ddi||d| |ddS )zEmbed Doc objects with their vocab's vectors table, applying a learned
    linear projection to control the dimensionality. If a dropout rate is
    specified, the dropout is applied per dimension over the whole batch.
    r   static_vectorsWN)r   dropout_rate)r   r   )initparamsattrsdims)	warningswarnr   W125DeprecationWarningr   forwardr   r"   )r   r   r   r   r    r+   J/home/ubuntu/.local/lib/python3.10/site-packages/spacy/ml/staticvectors.pyStaticVectors   s   r-   modeldocsis_trainc                    s  t dd |D }|stjdS |d j}t|jdtjfdd|D }t	t
jd}t|jtr^|jjtjkr^j|jj |jj|d	}j |  n2t|jtrx|jjtjkrx|j| j  nt|jd
r|j| j  nttjzjj |dd}W n ty   ttjw t|jtr|jjtjkrd||dk < t|jdd |D }	d |rtj|j d j!"dd ur|	 j9  _dtdt#t$ f fdd}
|	|
fS )Nc                 s   s    | ]}t |V  qd S Nlen.0docr+   r+   r,   	<genexpr>+   s    zforward.<locals>.<genexpr>r   r   attrc                    s   g | ]
}t t| qS r+   )r   r   to_arrayr4   )r   r+   r,   
<listcomp>0   s    zforward.<locals>.<listcomp>r    )keys	get_batchT)trans2c                 S   s   g | ]}t |qS r+   r2   r4   r+   r+   r,   r:   F   s    r!   d_outputr   c              
      sJ   d ur|  j 9  _ djjtt| j ttj dd g S )Nr    T)trans1)datainc_gradopsgemmr   r   	as_contig)r>   )Vmaskr.   r+   r,   backpropM   s   
zforward.<locals>.backprop)%sum_handle_emptyrB   get_dimvocabgetattrvectorsr   flattenr   r   rD   	get_param
isinstancer   moder   defaultasarrayr@   findfloretr<   hasattrRuntimeErrorr   E896rC   
ValueErrorr   	asarray1i_get_drop_maskshaper$   getr   r   )r.   r/   r0   token_countrK   r;   r    rowsvectors_dataoutputrG   r+   )rE   r   rF   r.   r,   r*   (   sB   


r*   XYc                 C   s   | dr
|dnd }| dr|dnd }|d ur)t|r)|d jjjd }|d ur3|jjd }|d u r<ttj	|d u rEttj
|d| |d| |d| |j||f |S )Nr   r   r      r    )has_dimrJ   r3   rK   rM   r\   r@   rY   r   E905E904set_dim	set_paramrB   )r   r.   rb   rc   r   r   r+   r+   r,   r"   ]   s   

r"   rB   c                 C   s    t | d|| ddd fS )Nr   c                 S   s   g S r1   r+   )d_raggedr+   r+   r,   <lambda>u   s    z_handle_empty.<locals>.<lambda>)r   alloc2falloc1i)rB   r   r+   r+   r,   rI   t   s    rI   ratec                 C   s   |d ur|  |f|}|S d S r1   )get_dropout_mask)rB   r   rn   rF   r+   r+   r,   r[   x   s   r[   )NN)*r&   typingr   r   r   r   r   r   	thinc.apir   r	   r
   thinc.initializersr   thinc.typesr   r   r   r   
thinc.utilr   r$   r   errorsr   r   tokensr   rM   r   r   rK   r   intfloatstrr-   boolr*   r"   rI   r[   r+   r+   r+   r,   <module>   sl     


8

&