Ë
    ›¾jÌ  ã            
       ó&  — 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 )z’Compare 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    úg/home/spazio/kingdom_calls/work5/transenv/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 )Néÿÿÿÿr   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   ø€ Ù˜“-ˆØ—)‘)×%Ñ% g¨r°1Ó5ˆØ�‰�s˜W {Ñ2×7Ñ7¸QÐ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}   ü€ ð �F€BˆÜŒX�u—‘ sÓ+Ó,€AØ�‰7€DØ˜‘'€KØ�‰_×!Ñ! qÐ!Ó)€EÜ˜%“.�K€Cˆð!œð !¤÷ !ñ !ð �ˆ=Ð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   € ð 	€}Ø�‰�dœI a¨¡d›OÔ,à�	‰	×Ñ˜%Ÿ-™-¨Ó-Ó.€AØˆ�F€AØ	‡O�O�C˜Õ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ð3œDð 3¤Tõ 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å Ý ß &Ý àˆH�hÐÑ€Ø€ð €‡�Ð&Ó'ñ
˜ #™ð 
°%¸¸T¸	Ñ2Bò 
ó (ð
ðØ��d�ÑðØ$'ðØ37ðà
ˆ4�ˆ>Ñóð, KOñØ��d�ÑðØ (¨¡ðØ9AÀ$¹ðà	óð�4ð ˜E $¨ .Ñ1ô r   