Ë
    kQêjì  ã                   óà   — d dl Zd dlZd dlZd dlmZmZmZ d dlm	Z
 d dlZd dlZd dlZd dlmZ d dlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ erd dlZd dlZ ed«       G d„ de«      «       Zy)é    N)ÚTYPE_CHECKINGÚListÚUnion)Útqdm)ÚPrivateAttré   )Úattempt_import_or_raiseé   )ÚEmbeddingFunction)Úregister)ÚIMAGESÚurl_retrieveÚsiglipc                   óø  ‡ — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	e
ed<    e«       Z e«       Z e«       Z e«       Zˆ fd	„Zd
„ Zdeedf   deej*                     fd„Zdedej*                  fd„Zdedeee   ej*                  f   fd„Zdedeej*                     fd„Zdeee   ee   f   deej*                     fd„Zdeeedf   dej*                  fd„Zdddej*                  fd„Zdeeedf   fd„Zˆ xZ S )ÚSigLipEmbeddingszgoogle/siglip-base-patch16-224Ú
model_nameÚcpuÚdeviceé@   Ú
batch_sizeTÚ	normalizec                 óÆ  •— t        ‰| �  |i |¤Ž t        j                  dt        d¬«       t        d«      }t        d«      | _        |j                  j                  | j                  «      | _
        |j                  j                  | j                  «      | _        | j                  j                  | j                  «       | j                  j                  «        d | _        y )NzeSigLip embeddings are deprecated. Use CLIP embeddings via the 'open-clip' embedding function instead.é   )Ú
stacklevelÚtransformersÚtorch)ÚsuperÚ__init__ÚwarningsÚwarnÚDeprecationWarningr	   Ú_torchÚAutoProcessorÚfrom_pretrainedr   Ú
_processorÚSiglipModelÚ_modelÚtor   ÚevalÚ_ndims)ÚselfÚargsÚkwargsr   Ú	__class__s       €ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/embeddings/siglip.pyr   zSigLipEmbeddings.__init__'   s§   ø€ Ü‰Ñ˜$Ð) &Ò)Ü�‰ð6äØõ		
ô /¨~Ó>ˆÜ-¨gÓ6ˆŒà&×4Ñ4×DÑDÀTÇ_Á_ÓUˆŒØ"×.Ñ.×>Ñ>¸t¿¹ÓOˆŒØ�‰�‰�t—{‘{Ô#Ø�‰×ÑÔØˆ�ó    c                 óx   — | j                   €#| j                  d«      j                  d   | _         | j                   S )NÚfoor   )r*   Úgenerate_text_embeddingsÚshape)r+   s    r/   ÚndimszSigLipEmbeddings.ndims8   s3   € Ø�;‰;ÐØ×7Ñ7¸Ó>×DÑDÀQÑGˆDŒKØ�{‰{Ðr0   ÚqueryzPIL.Image.ImageÚreturnc                 óÄ   — t        |t        «      r| j                  |«      gS t        dd«      }t        ||j                  «      r| j                  |«      gS t        d«      ‚)Nú	PIL.ImageÚpillowz)SigLIP supports str or PIL Image as query)Ú
isinstanceÚstrr3   r	   ÚImageÚgenerate_image_embeddingÚ	TypeError)r+   r6   r,   r-   Ú	PIL_Images        r/   Úcompute_query_embeddingsz)SigLipEmbeddings.compute_query_embeddings=   s\   € ô �eœSÔ!Ø×1Ñ1°%Ó8Ð9Ð9ä/°¸XÓFˆIÜ˜% §¡Ô1Ø×5Ñ5°eÓ<Ð=Ð=äÐ KÓLÐLr0   Útextc                 ó¶  — | j                   }| j                  |dddd¬«      j                  | j                  «      } |j                  «       5   | j
                  j                  di |¤Ž}| j                  r||j                  dd¬«      z  }|j                  «       j                  «       j                  «       j                  «       cd d d «       S # 1 sw Y   y xY w)	NÚptÚ
max_lengthTr   )rB   Úreturn_tensorsÚpaddingÚ
truncationrE   éÿÿÿÿ©ÚdimÚkeepdim© )r"   r%   r(   r   Úno_gradr'   Úget_text_featuresr   Únormr   ÚdetachÚnumpyÚsqueeze)r+   rB   r   Útext_inputsÚtext_featuress        r/   r3   z)SigLipEmbeddings.generate_text_embeddingsI   sÇ   € Ø—‘ˆØ—o‘oØØØ ØØð &ó 
÷ ‰"ˆT�[‰[‹/ð 	ð ˆU�]‰]‹_ñ 	BØ9˜DŸK™K×9Ñ9ÑH¸KÑHˆMØ�~Š~Ø -°×0BÑ0BÀrÐSWÐ0BÓ0XÑ X�Ø ×$Ñ$Ó&×-Ñ-Ó/×5Ñ5Ó7×?Ñ?ÓA÷		B÷ 	Bò 	Bús   ÁA8CÃCÚimagesc                 ó  — t        |t        t        f«      r|g}|S t        |t        j                  «      r|j                  «       }|S t        |t        j                  «      r|j                  «       j                  «       }|S )N)r;   r<   ÚbytesÚpaÚArrayÚ	to_pylistÚChunkedArrayÚcombine_chunks)r+   rV   s     r/   Úsanitize_inputzSigLipEmbeddings.sanitize_inputY   so   € Ü�fœs¤E˜lÔ+Ø�XˆFð
 ˆô	 ˜¤§¡Ô)Ø×%Ñ%Ó'ˆFð ˆô ˜¤§¡Ô0Ø×*Ñ*Ó,×6Ñ6Ó8ˆFØˆr0   c                 ó  — | j                  |«      }g }t        dt        |«      | j                  «      D ]I  }t	        || j                  z   t        |«      «      }||| }|j                  | j                  |«      «       ŒK |S )Nr   )r^   ÚrangeÚlenr   ÚminÚextendÚ_parallel_get)r+   rV   r,   r-   Ú
embeddingsÚiÚjÚbatchs           r/   Úcompute_source_embeddingsz*SigLipEmbeddings.compute_source_embeddingsb   s~   € ð ×$Ñ$ VÓ,ˆØˆ
ä�qœ#˜f›+ t§¡Ó7ò 	9ˆAÜ�A˜Ÿ™Ñ'¬¨V«Ó5ˆAØ˜1˜Q�KˆEØ×Ñ˜d×0Ñ0°Ó7Õ8ð	9ð Ðr0   c                 ó"  — t         j                  j                  «       5 }|D �cg c]  }|j                  | j                  |«      ‘Œ  }}t        |d¬«      D �cg c]  }|j                  «       ‘Œ c}cd d d «       S c c}w c c}w # 1 sw Y   y xY w)NzSigLIP Embedding)Údesc)Ú
concurrentÚfuturesÚThreadPoolExecutorÚsubmitr>   r   Úresult)r+   rV   ÚexecutorÚimagerm   Úfs         r/   rd   zSigLipEmbeddings._parallel_getn   sŽ   € Ü×Ñ×2Ñ2Ó4ð 	P¸ð $öàð —‘ × =Ñ =¸uÕEðˆGð ô )-¨WÐ;MÔ(NÖO 1�A—H‘H•JÒO÷	Pñ 	Pùòùò P÷	Pð 	Pús(   ŸB¤#A;ÁBÁB Á/BÁ;
BÂBrr   c                 ór   — | j                  |«      }| j                  |d¬«      d   }| j                  |«      S )NrD   )rV   rF   Úpixel_values)Ú_to_pilr%   Ú_encode_and_normalize_image)r+   rr   s     r/   r>   z)SigLipEmbeddings.generate_image_embeddingv   s:   € ð —‘˜UÓ#ˆØ—‘ u¸T�ÓBÀ>ÑRˆØ×/Ñ/°Ó6Ð6r0   Úimage_tensorztorch.Tensorc                 óˆ  — | j                   } |j                  «       5  | j                  j                  |j	                  | j
                  «      «      }| j                  r||j                  dd¬«      z  }|j                  «       j                  «       j                  «       j                  «       cd d d «       S # 1 sw Y   y xY w)NrI   TrJ   )r"   rN   r'   Úget_image_featuresr(   r   r   rP   r   rQ   rR   rS   )r+   rx   r   Úimage_featuress       r/   rw   z,SigLipEmbeddings._encode_and_normalize_image}   s§   € Ø—‘ˆØˆU�]‰]‹_ñ 	CØ!Ÿ[™[×;Ñ;Ø—‘ §¡Ó,óˆNð �~Š~Ø!/°.×2EÑ2EØ Dð 3Fó 3ñ "�ð "×%Ñ%Ó'×.Ñ.Ó0×6Ñ6Ó8×@Ñ@ÓB÷	C÷ 	Cò 	Cús   žBB8Â8Cc                 ód  — t        dd«      }t        ||j                  «      r"|j                  dk7  r|j	                  d«      S |S t        |t
        «      r3|j                  t        j                  |«      «      j	                  d«      S t        |t        «      �rt        j                  |«      }|j                  dk(  r*|j                  |j                  «      j	                  d«      S |j                  dk(  rAt        j                  dk(  r|n|j                  }|j                  |«      j	                  d«      S |j                  j                  d«      r>t!        |«      }|j                  t        j                  |«      «      j	                  d«      S t#        d«      ‚t%        d	t'        |«      › �«      ‚)
Nr9   r:   ÚRGBÚfileÚ ÚntÚhttpz)Only local and http(s) urls are supportedzUnsupported image type: )r	   r;   r=   ÚmodeÚconvertrX   ÚopenÚioÚBytesIOr<   ÚurlparseÚschemeÚpathÚosÚnameÚ
startswithr   ÚNotImplementedErrorÚ
ValueErrorÚtype)r+   rr   r@   Úparsedr‰   Úimage_bytess         r/   rv   zSigLipEmbeddings._to_pil‰   sI  € Ü+¨K¸ÓBˆ	Ü�e˜YŸ_™_Ô-Ø+0¯:©:¸Ò+>�5—=‘= Ó'ÐIÀEÐIÜ˜œuÔ%Ø—>‘>¤"§*¡*¨UÓ"3Ó4×<Ñ<¸UÓCÐCÜ˜œsÕ#Ü×&Ñ& uÓ-ˆFØ�}‰} Ò&Ø —~‘~ f§k¡kÓ2×:Ñ:¸5ÓAÐAØ—‘ "Ò$Ü "§¡¨4¢‘u°V·[±[�Ø —~‘~ dÓ+×3Ñ3°EÓ:Ð:Ø—‘×)Ñ)¨&Ô1Ü*¨5Ó1�Ø —~‘~¤b§j¡j°Ó&=Ó>×FÑFÀuÓMÐMä)Ð*UÓVÐVäÐ7¼¸U»°}ÐEÓFÐFr0   )!Ú__name__Ú
__module__Ú__qualname__r   r<   Ú__annotations__r   r   Úintr   Úboolr   r'   r%   Ú
_tokenizerr"   r   r5   r   r   ÚnpÚndarrayrA   r3   r   rX   r^   ri   rd   r>   rw   rv   Ú__classcell__)r.   s   @r/   r   r      sh  ø… ð 7€J�Ó6Ø€FˆCÓØ€J�ÓØ€IˆtÓá‹]€FÙ“€JÙ“€JÙ‹]€Fôò"ð

MØ˜3Ð 1Ð1Ñ2ð
Mà	ˆb�j‰jÑ	ó
MðB¨Sð B°R·Z±Zó Bð  Vð °°d¸5±kÀ2Ç:Á:Ð6MÑ0Nó ð
Øð
à	ˆb�j‰jÑ	ó
ðP E¨$¨s©)°T¸%±[Ð*@Ñ$Að PÀdÈ2Ï:É:ÑFVó Pð7Ø˜3 Ð'8Ð8Ñ9ð7à	�‰ó7ð
C¸ð 
CÈ2Ï:É:ó 
CðG˜U 3¨Ð/@Ð#@ÑA÷ Gr0   r   )Úconcurrent.futuresrl   r…   rŠ   Útypingr   r   r   Úurllib.parseÚparser‡   r   rR   r™   ÚpyarrowrY   r   Úpydanticr   Úutilr	   Úbaser   Úregistryr   Úutilsr   r   ÚPILr   r   rM   r0   r/   ú<module>r§      sd   ðó Û 	Û 	ß -Ñ -Ý Û ã Û Ý Ý  å *Ý #Ý ß 'áÛÛñ 
ˆ(ÓôAGÐ(ó AGó ñAGr0   