
    i              
       &   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 eeef   Ze
Z ej                   d      dd	ee   d
eeef   fd       Zdeeef   deded
eeef   fdZ	 ddeeef   dee   dee   d
dfdZded
eeef   fdZy)    )CallableOptionalTuplecast   )registry)Model)Floats1dFloats2d)	get_widthzCauchySimilarity.v1NnIreturnc                 <    t        dt        t        | ddddi      S )zCompare input vectors according to the Cauchy similarity function proposed by
    Chen (2013). Primarily used within Siamese neural networks.
    cauchy_similarity   )r   nOWN)initdimsparams)r	   forwardr   )r   s    n/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/cauchysimilarity.pyCauchySimilarityr      s)    
 a T{     modelX1_X2is_trainc                     	
 |\  }}t        t         j                  d            ||z
  

dz  z  j                  d      }t	        |      \  }	dt
        dt        f	
 fd}||fS )Nr   r   r   axisd_simr   c                      |       }j                   j                  |dd      }j                  d|z  j                  d             |z  }d|z  z  }|| fS )Nr   r   r   r   r   )ops	reshape2finc_gradsum)	r!   d_totald_square_diffd_diffr   bp_simdiffr   square_diffs	       r   backpropzforward.<locals>.backprop$   sj    -))%%gr15sW{277Q7?@G]"T)  r   )r   r   	get_paramr'   inverseOutTInT)r   r   r   X1X2totalsimr.   r   r+   r,   r-   s   `       @@@@r   r   r      s}     FBXus+,A7D'K_!!q!)E%.KC! ! ! ! =r   XYc                     || j                  dt        |d                | j                  j                  | j	                  d            }|dz  }| j                  d|       y )Nr   r   r   r   )set_dimr   r$   alloc1fget_dim	set_param)r   r7   r8   r   s       r   r   r   /   sS     	}dIadO,		%---.AFA	OOCr   r5   c                 @     dd z   z  }dt         dt         f fd}||fS )Ng      ?r   	d_inverser   c                      | ddz   dz  z  z  S )Nr#   r   r    )r?   r5   s    r   backwardzinverse.<locals>.backward=   s    B%!)!1122r   )r1   )r5   invrB   s   `  r   r0   r0   :   s0    
U
C3D 3T 3 =r   )N)NN)typingr   r   r   r   configr   r   r	   typesr
   r   utilr   r2   r1   layersintr   boolr   r   r0   rA   r   r   <module>rK      s    2 2   & Hh &'
# 
%T	2B 
 (
d$'37
4>, KOd (9A$	4 E$.1 r   