o
    iN                  
   @   s  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
 ddlmZ edZedZeeef Zed	e
d
Zeddeeef deeeef ef deeef fddZdeeef dededeeef fddZ	ddeeef dee dee ddfddZdS )    )CallableOptionalTupleTypeVar   )registry)Model)ArrayXd)	get_widthLayerTSimTOutT)boundz
siamese.v1layer
similarityreturnc              	   C   s:   t d| j d|j dtt| |g| d|dddS )Nzsiamese(z, )nInO)r   r   )initlayersdims)r   nameforwardr   get_dim)r   r    r   H/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/siamese.pysiamese   s   r   modelX1_X2is_trainc           	         sj   |\}}| j d ||\}| j d ||\}| j d ||f|\} dtdtf fdd}||fS )Nr      d_outputr   c                    s$    | \}}|}|}||fS )Nr   )r"   d_vec1d_vec2d_input1d_input2	bp_outputbp_vec1bp_vec2r   r   finish_update#   s   zforward.<locals>.finish_update)r   r   InT)	r   r   r    X1X2vec1vec2outputr+   r   r'   r   r      s   r   NXYc                 C   s   |d ur0| j d dt|d  | j d j|d d | j d |d | j d |d f}| j d j||d | d| j d d | d| j d d d S )Nr   r   r!   )r2   )r2   r3   r   )r   set_dimr
   
initializepredictr   )r   r2   r3   r   r   r   r   ,   s   (r   )NN)typingr   r   r   r   configr   r   r   typesr	   utilr
   r   r   r,   r   r   r   boolr   r   r   r   r   r   <module>   sH    





