
    h              
       2   S SK JrJrJrJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJr  \\\4   r\
r\R                   " S5      SS	\\   S
\\\4   4S jj5       rS\\\4   S\S\S
\\\4   4S jr SS\\\4   S\\   S\\   S
S4S jjrS\S
\\\4   4S jrg)    )CallableOptionalTuplecast   )registry)Model)Floats1dFloats2d)	get_widthzCauchySimilarity.v1NnIreturnc                 6    [        S[        [        U SS.SS0S9$ )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    W/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/cauchysimilarity.pyCauchySimilarityr      s)    
 a T{     modelX1_X2is_trainc                    ^ ^^	^
^ Uu  p4[        [        T R                  S5      5      mX4-
  m
T
S-  mTT-  R                  SS9n[	        U5      u  nm	S[
        S[        4UU	U
U U4S jjnXg4$ )Nr   r   r   axisd_simr   c                    > T" U 5      nTR                   R                  USS5      nTR                  SUT-  R                  SS95        TU-  nSU-  T-  nX3* 4$ )Nr   r   r   r   r   )ops	reshape2finc_gradsum)	r!   d_totald_square_diffd_diffr   bp_simdiffr   square_diffs	       r   backpropforward.<locals>.backprop$   sh    -))%%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      sw     FBXus+,A7D'K_!!q!)E%.KC! ! ! ! =r   XYc                     Ub  U R                  S[        US   5      5        U R                  R                  U R	                  S5      5      nUS-  nU R                  SU5        g )Nr   r   r   r   )set_dimr   r$   alloc1fget_dim	set_param)r   r8   r9   r   s       r   r   r   /   sS     	}dIadO,		%---.AFA	OOCr   r6   c                 B   ^  SST -   -  nS[         S[         4U 4S jjnX4$ )Ng      ?r   	d_inverser   c                     > U STS-   S-  -  -  $ )Nr#   r   r    )r@   r6   s    r   backwardinverse.<locals>.backward=   s    B%!)!1122r   )r2   )r6   invrC   s   `  r   r1   r1   :   s.    
U
C3D 3T 3 =r   )N)NN)typingr   r   r   r   configr   r   r	   typesr
   r   utilr   r3   r2   layersintr   boolr   r   r1   rB   r   r   <module>rM      s    2 2   & Hh 
&'
# 
%T	2B 
 (
d$'37
4>, KOd (9A$	4 E$.1 r   