§
    æ˜ºh™
  ã                   ó0  — d Z ddlZddlmZmZmZmZ ddlZ ej	        e
¦  «        Zeeee                  eej                 ej        f         Zdededej        fd„Z	 	 ddeded	ee         d
ee         deeeeef                  ee         f         f
d„ZdS )zMath utils.é    N)ÚListÚOptionalÚTupleÚUnionÚXÚYÚreturnc                 óF  — t          | ¦  «        dk    st          |¦  «        dk    rt          j        g ¦  «        S t          j        | ¦  «        } t          j        |¦  «        }| j        d         |j        d         k    r t	          d| j        › d|j        › d�¦  «        ‚	 ddl}t          j        | t          j        ¬¦  «        } t          j        |t          j        ¬¦  «        }d|                     | |d¬	¦  «        z
  }t          |t          ¦  «        rt          j        |g¦  «        S |S # t          $ rë t                               d
¦  «         t          j                             | d¬¦  «        }t          j                             |d¬¦  «        }t          j        dd¬¦  «        5  t          j        | |j        ¦  «        t          j        ||¦  «        z  }ddd¦  «         n# 1 swxY w Y   d|t          j        |¦  «        t          j        |¦  «        z  <   |cY S w xY w)z<Row-wise cosine similarity between two equal-width matrices.r   é   z;Number of columns in X and Y must be the same. X has shape z and Y has shape ú.N)ÚdtypeÚcosine)ÚmetriczƒUnable to import simsimd, defaulting to NumPy implementation. If you want to use simsimd please install with `pip install simsimd`.©ÚaxisÚignore)ÚdivideÚinvalidg        )ÚlenÚnpÚarrayÚshapeÚ
ValueErrorÚsimsimdÚfloat32ÚcdistÚ
isinstanceÚfloatÚImportErrorÚloggerÚinfoÚlinalgÚnormÚerrstateÚdotÚTÚouterÚisnanÚisinf)r   r   ÚsimdÚZÚX_normÚY_normÚ
similaritys          úf/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/utils/math.pyÚcosine_similarityr0      sJ  € å
ˆ1�v„v�‚{€{•c˜!‘f”f ’k�kÝŒx˜‰|Œ|Ðå
Œ�‰Œ€AÝ
Œ�‰Œ€AØ„wˆq„z�Q”W˜Q”ZÒÐÝð*È!Ì'ð *ð *Ø œwð*ð *ð *ñ
ô 
ð 	
ðØÐÐÐåŒH�Q�bœjÐ)Ñ)Ô)ˆÝŒH�Q�bœjÐ)Ñ)Ô)ˆØ�—
’
˜1˜a¨�
Ñ1Ô1Ñ1ˆÝ�a�ÑÔð 	!Ý”8˜Q˜C‘=”=Ð ØˆøÝð ð ð Ý�ŠðHñ	
ô 	
ð 	
õ ”—’ ¨�Ñ*Ô*ˆÝ”—’ ¨�Ñ*Ô*ˆåŒ[ °(Ð;Ñ;Ô;ð 	Cð 	CÝœ  1¤3™œ­"¬(°6¸6Ñ*BÔ*BÑBˆJð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	CàBEˆ
•2”8˜JÑ'Ô'­"¬(°:Ñ*>Ô*>Ñ>Ñ?ØÐÐÐðøøøs>   Â BD+ Ä)D+ Ä+A<H Æ'1G$ÇH Ç$G(	Ç(H Ç+G(	Ç,1H ÈH é   Útop_kÚscore_thresholdc                 óf  — t          | ¦  «        dk    st          |¦  «        dk    rg g fS t          | |¦  «        }|pd}d|||k     <   t          |pt          |¦  «        t          j        |¦  «        ¦  «        }t          j        || d¬¦  «        | d…         }|t          j        |                     ¦   «         |         ¦  «                 ddd…         }t          j        ||j	        ¦  «        }|                     ¦   «         |          
                    ¦   «         }t          t          |Ž ¦  «        |fS )a¡  Row-wise cosine similarity with optional top-k and score threshold filtering.

    Args:
        X: Matrix.
        Y: Matrix, same width as X.
        top_k: Max number of results to return.
        score_threshold: Minimum cosine similarity of results.

    Returns:
        Tuple of two lists. First contains two-tuples of indices (X_idx, Y_idx),
            second contains corresponding cosine similarities.
    r   g      ð¿Nr   éÿÿÿÿ)r   r0   Úminr   Úcount_nonzeroÚargpartitionÚargsortÚravelÚunravel_indexr   ÚtolistÚlistÚzip)r   r   r2   r3   Úscore_arrayÚ
top_k_idxsÚret_idxsÚscoress           r/   Úcosine_similarity_top_krC   /   s  € õ$ ˆ1�v„v�‚{€{•c˜!‘f”f ’k�kØ�2ˆvˆÝ# A qÑ)Ô)€KØ%Ð-¨€OØ12€K�˜oÒ-Ñ.Ý�Ð)�˜[Ñ)Ô)­2Ô+;¸KÑ+HÔ+HÑIÔI€EÝ” ¨u¨f¸4Ð@Ñ@Ô@À%ÀÀÀÔI€JØ�BœJ {×'8Ò'8Ñ':Ô':¸:Ô'FÑGÔGÔHÈÈÈ2ÈÔN€JÝÔ 
¨KÔ,=Ñ>Ô>€HØ×ÒÑ Ô  Ô,×3Ò3Ñ5Ô5€FÝ•�X�ÑÔ Ð'Ð'ó    )r1   N)Ú__doc__ÚloggingÚtypingr   r   r   r   Únumpyr   Ú	getLoggerÚ__name__r    r   ÚndarrayÚMatrixr0   ÚintrC   © rD   r/   ú<module>rO      s!  ðØ Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€à	ˆt�D˜”KÔ  $ r¤zÔ"2°B´JÐ>Ô	?€ð ˜ð   Fð  ¨r¬zð  ð  ð  ð  ðL Ø'+ð	(ð (Øð(àð(ð �CŒ=ð(ð ˜e”_ð	(ð
 ˆ4��c˜3�h”Ô  $ u¤+Ð-Ô.ð(ð (ð (ð (ð (ð (rD   