o
    
ih                     @   sx  d dl mZmZmZmZmZ d dlmZ d dl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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 )$    )ListTupleCallableOptionalcast)partial)RaggedFloats2dFloats1d)ModelOps)glorot_uniform_init)Doc)Errors)registryNORTH)dropoutinit_Wkey_attrnOnMr   r   r   returnc             	   C   s*   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.
    static_vectorsWN)r   dropout_rate)r   r   )initparamsattrsdims)r   forwardr   r   )r   r   r   r   r    r    X/home/ubuntu/.local/lib/python3.10/site-packages/spacy_legacy/layers/staticvectors_v1.pyStaticVectors_v1   s   r"   modeldocsis_trainc                    s2  t dd |D stjdS jd ttjd}tt|d j	j
j jfdd|D zjjj  |d	d
}W n tyW   ttjw t|jjdd |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   r   r   c                    s"   g | ]}|j jj| d qS ))keys)vocabvectorsfindto_arrayr)   )r   r    r!   
<listcomp>*   s   " zforward.<locals>.<listcomp>T)trans2c                 S   s   g | ]}t |qS r    r'   r)   r    r    r!   r2   1   s    i)dtyper   d_outputr   c              	      sB   d ur|  j 9  _ djj| j j  dd g S )Nr   T)trans1)datainc_gradopsgemm	as_contig)r6   )Vmaskr#   rowsr    r!   backprop9   s   zforward.<locals>.backprop)sum_handle_emptyr:   get_dimr   r   r	   r<   	get_paramr.   r/   r8   flattenr;   
ValueErrorRuntimeErrorr   E896r   asarray_get_drop_maskshapegetr   r   )r#   r$   r%   r   vectors_dataoutputr@   r    )r=   r   r>   r#   r?   r!   r   !   s.   
"
 	r   XYc                 C   s   | dr
|dnd }| dr|dnd }|d ur*t|r*|d jjjjd }|d ur4|jjd }|d u r=ttj	|d u rFttj
|d| |d| |d| |j||f |S )Nr   r   r      r   )has_dimrC   r(   r.   r/   r8   rK   rF   r   E905E904set_dim	set_paramr:   )r   r#   rO   rP   r   r   r    r    r!   r   E   s   

r   r:   c                 C   s    t | d|| ddd fS )Nr   c                 S   s   g S r&   r    )d_raggedr    r    r!   <lambda>]   s    z_handle_empty.<locals>.<lambda>)r   alloc2falloc1i)r:   r   r    r    r!   rB   \   s    rB   ratec                 C   s   |d ur|  |f|S d S r&   )get_dropout_mask)r:   r   r[   r    r    r!   rJ   `   s   rJ   )NN) typingr   r   r   r   r   
thinc.utilr   thinc.typesr   r	   r
   	thinc.apir   r   thinc.initializersr   spacy.tokensr   spacy.errorsr   
spacy.utilr   intfloatstrr"   boolr   r   rB   rJ   r    r    r    r!   <module>   sf    


'

&