Ë
    kQêj-%  ã                   ó@  — d Z ddlZddlZddlmZmZ ddlZddlZerddl	m
Z
 dZdZdZ ej                  d«      j                  Z ej"                   ej$                  d	 ej&                  «       d
¬«       ej$                  d ej(                  «       d
¬«       ej$                  d ej*                  «       d
¬«       ej$                  d ej*                  «       d
¬«      g«      Zda G d„ dej0                  «      Zdedefd„Zdedefd„Zdedefd„Zdej@                  defd„Z!dej@                  defd„Z"dejF                  de$e%eef      fd„Z&dejF                  de$e   fd„Z'dejF                  de$e   fd„Z(dejF                  de$e   fd„Z)dejF                  defd„Z*d ej0                  dejV                  fd!„Z,d"„ Z-	 d.dddd#œd$ed%ed&ee.   d'ee.   d(ee.   dej@                  fd)„Z/ ej`                  «       fd*e.d+ejV                  dejV                  fd,„Z1d$efd-„Z2y)/z&Schema helpers for Lance blob columns.é    N)ÚTYPE_CHECKINGÚOptional)ÚBlobTypezlance.blob.v2zlance-encoding:blobzARROW:extension:nameéÿÿÿÿÚdataT©ÚnullableÚuriÚpositionÚsizec                   ó\   — e Zd ZdZd
d„Zdefd„Zedej                  dedd fd„«       Z
d	„ Zy)Ú_FallbackBlobTypez@lance.blob.v2 extension type used when pylance is not installed.ÚreturnNc                 óV   — t         j                  j                  | t        t        «       y ©N)ÚpaÚExtensionTypeÚ__init__Ú_BLOB_V2_STORAGE_TYPEÚ_BLOB_EXTENSION_NAME©Úselfs    úS/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/schema.pyr   z_FallbackBlobType.__init__#   s   € Ü
×Ñ×!Ñ! $Ô(=Ô?SÕTó    c                  ó   — y)Nr   © r   s    r   Ú__arrow_ext_serialize__z)_FallbackBlobType.__arrow_ext_serialize__&   s   € Ør   Ústorage_typeÚ
serializedc                 ó   —  | «       S r   r   )Úclsr   r   s      r   Ú__arrow_ext_deserialize__z+_FallbackBlobType.__arrow_ext_deserialize__)   s   € ñ ‹uˆr   c                 ód   — t        | «      j                  | j                  | j                  «       ffS r   )Útyper"   r   r   r   s    r   Ú
__reduce__z_FallbackBlobType.__reduce__/   s3   € Ü�D‹z×3Ñ3Ø×ÑØ×(Ñ(Ó*ð6
ð 
ð 	
r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úbytesr   Úclassmethodr   ÚDataTyper"   r%   r   r   r   r   r       sL   „ ÙJóUð¨ó ð ðØŸ;™;ðØ49ðà	òó ðó

r   r   ÚmetadataÚkeyc                 óf   — | j                  |j                  «       «      xs | j                  |«      S r   )ÚgetÚencode)r-   r.   s     r   Ú_metadata_valuer2   6   s%   € Ø�<‰<˜Ÿ
™
›Ó%Ò:¨¯©°cÓ):Ð:r   r   c                 ó`   — | syt        | t        «      }|t        t        j                  «       fv S )NF)r2   Ú_ARROW_EXT_NAME_KEYr   r1   )r-   Úextension_names     r   Ú_metadata_marks_blob_v2r6   :   s0   € ÙØä$ XÔ/BÓC€NØÔ2Ô4H×4OÑ4OÓ4QÐRÐRÐRr   c                 ó,   — | syt        | t        «      dv S )NF)Útrues   true)r2   Ú_BLOB_V1_KEY)r-   s    r   Ú_metadata_marks_legacy_blobr:   B   s   € ÙØä˜8¤\Ó2Ð6GÐGÐGr   Úfieldc                 ó¨   — | j                   }t        |t        j                  «      r|j                  t
        k(  ryt        | j                  xs i «      S )z;Return True if `field` declares a blob v2 extension column.T)r$   Ú
isinstancer   r   r5   r   r6   r-   )r;   Ú
field_types     r   Úis_blob_v2_fieldr?   I   sA   € à—‘€Jä�:œr×/Ñ/Ô0Ø×%Ñ%Ô)=Ò=àÜ" 5§>¡>Ò#7°RÓ8Ð8r   c                 óN   — t        | «      xs t        | j                  xs i «      S )a,  Blob detection for ``to_pandas(blob_mode=...)`` and scanner paths only.

    Matches v2 extension fields on table schema, legacy ``lance-encoding:blob``
    storage columns, and v2 query descriptor fields (the engine tags those with
    the same metadata). Not used for fetch or auto ``_rowid``.
    )r?   r:   r-   )r;   s    r   Úis_blob_like_fieldrA   T   s$   € ô ˜EÓ"ÒWÔ&AÀ%Ç.Á.ÒBVÐTVÓ&WÐWr   Úschemac                 óP   ‡‡‡— g Šdt         dt        ddfˆˆˆfd„Š ‰| dd«       ‰S )zIWalk the schema and return (path, has_list_ancestor) for each blob field.ÚprefixÚhas_list_ancestorr   Nc                 ó@  •— | D �]  }|r|› d|j                   › �n|j                   } ‰|«      r‰j                  ||f«       Œ?t        j                  j	                  |j
                  «      r ‰|j
                  ||«       Œ}t        j                  j                  |j
                  «      sSt        j                  j                  |j
                  «      s*t        j                  j                  |j
                  «      sŒù ‰|j
                  j                  g|d«       �Œ y )Nú.T)
ÚnameÚappendr   ÚtypesÚ	is_structr$   Úis_listÚis_large_listÚis_fixed_size_listÚvalue_field)ÚfieldsrD   rE   r;   ÚpathÚis_blobÚpathsÚwalks        €€€r   rT   z!_collect_blob_paths.<locals>.walkb   sÉ   ø€ Øó 	;ˆEÙ/5�f�X˜Q˜uŸz™z˜lÑ+¸5¿:¹:ˆDÙ�uŒ~Ø—‘˜dÐ$5Ð6Õ7Ü—‘×#Ñ# E§J¡JÔ/Ù�U—Z‘Z Ð'8Õ9ä—‘× Ñ  §¡Ô,Ü—8‘8×)Ñ)¨%¯*©*Ô5Ü—8‘8×.Ñ.¨u¯z©zÕ:á�e—j‘j×,Ñ,Ð-¨t°TÖ:ñ	;r   Ú F)ÚstrÚbool)rB   rR   rS   rT   s    `@@r   Ú_collect_blob_pathsrX   ^   s5   ú€ à$&€Eð;œSð ;´Tð ;¸d÷ ;ñ 	ˆ��UÔØ€Lr   c                 óT   — t        | t        «      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )zDDotted paths of blob-like columns (v2 extension or legacy metadata).)rX   rA   ©rB   rQ   Ú_s      r   Úblob_column_pathsr\   t   s"   € ä 3°FÔ<NÓ O×P‘W�T˜1ŠDÓPÐPùÓPó   ”$c                 óT   — t        | t        «      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w r   ©rX   r?   rZ   s      r   Úblob_v2_column_pathsr`   y   s"   € Ü 3°FÔ<LÓ M×N‘W�T˜1ŠDÓNÐNùÓNr]   c                 óX   — t        | t        «      D ��cg c]	  \  }}|s|‘Œ c}}S c c}}w )a  Blob v2 paths with one blob addressable by table row id.

    ``fetch_blobs`` and the descriptor row-id ride-along address one blob per
    row, so a blob inside a list container has no row-id slot and no fetch
    path. Those columns still store and query as raw descriptors.
    r_   )rB   rQ   rE   s      r   Úrow_addressable_blob_v2_pathsrb   }   s4   € ô (;¸6ÔCSÓ'T÷á#ˆDÐ#Ù ò 	óð ùó s   ”&c                 ó*   — t        t        | «      «      S r   )rW   r\   )rB   s    r   Úschema_has_blob_fieldrd   ‹   s   € ÜÔ! &Ó)Ó*Ð*r   Úextension_typec                 óæ   — t        j                  t        j                  d| «      g«      }t         j                  j	                  |j                  «       «      }|j                  d«      j                  S )z;Return the type Arrow reconstructs for this extension name.Úvalue)r   rB   r;   ÚipcÚread_schemaÚ	serializer$   )re   rB   Úrestoreds      r   Ú_deserialize_registered_typerl   �   sP   € ä�Y‰YœŸ™ ¨.Ó9Ð:Ó;€FÜ�v‰v×!Ñ! &×"2Ñ"2Ó"4Ó5€HØ�>‰>˜'Ó"×'Ñ'Ð'r   c                  óò  — t         �t         S 	 t        j                  d«      } t        | dd«      }|�Qt	         |«       «      }t        |«      |ur0t        |«      }t        d|j                  › d|j                  › �«      ‚|a |S 	 t        j                  t        «       «       t        a t         S # t        $ r}|j                  dvr‚ Y d}~ŒGd}~ww xY w# t        j                  $ r}t        d«      |‚d}~ww xY w)zÇReturn the BlobType class this process should use.

    pylance's class when it owns the lance.blob.v2 registry entry,
    otherwise LanceDB's fallback. A different registered class is an error.
    Nú
lance.blobr   z'lance.blob.v2 is already registered by rG   )Úlancern   z>lance.blob.v2 is already registered by another extension class)Ú_resolved_blob_typeÚ	importlibÚimport_moduleÚgetattrrl   r$   Ú
ValueErrorr'   r(   ÚModuleNotFoundErrorrH   r   Úregister_extension_typer   ÚArrowKeyError)Úblob_moduleÚ	blob_typeÚregistered_typeÚregistered_clsÚerrs        r   Ú_resolve_blob_typer}   –   s  € ô Ð&Ü"Ð"ðÜ×-Ñ-¨lÓ;ˆô
 ˜K¨°TÓ:ˆ	ØÐ Ü:¹9»;ÓGˆOÜ�OÓ$¨IÑ5Ü!% oÓ!6�Ü Ø=Ø%×0Ñ0Ð1°°>×3NÑ3NÐ2OðQóð ð #,ÐØÐðÜ
×"Ñ"Ô#4Ó#6Ô7ô
 ,ÐÜÐøô- ò Ø�8‰8Ð2Ñ2Øô 3ûðûô" ×Ñò ÜØLó
àð	ûðús/   ŽB- ÂC Â-	CÂ6C
Ã
CÃC6Ã%C1Ã1C6)Úinline_size_thresholdÚdedicated_size_thresholdÚpack_file_size_thresholdrH   r	   r~   r   r€   c                óÎ  — i }d|ddfd|ddfd|ddffD ]”  \  }}}}	|€Œt        |t        «      st        |t        «      s#t        |› d	t	        |«      j
                  › �«      ‚|d
k  s|d
k(  r|s|rdnd}
t        |› d|
› �«      ‚|t        kD  rt        |› d�«      ‚t        |«      ||	<   Œ– t        «       }t        j                  |  |«       |¬«      }|r|j                  |«      S |S )aL  Create a Lance blob v2 column field.

    When pylance is installed this is ``lance.blob.BlobType``.

    Parameters
    ----------
    name:
        Field name.
    nullable:
        Whether the column accepts null values.
    inline_size_threshold:
        Maximum payload size in bytes to keep inline in the data file
        before using packed blob storage. Zero is allowed.
    dedicated_size_threshold:
        Maximum payload size in bytes to store in packed blob storage
        before using dedicated blob storage. Must be positive.
    pack_file_size_threshold:
        Maximum size in bytes of a single packed blob sidecar file before
        a new one is started. Must be positive.

    Thresholds are validated and stored as Arrow field metadata, with the
    same format as ``lance.blob_field``. They do not require pylance.
    r~   Tz)lance-encoding:blob-inline-size-thresholdr   Fz,lance-encoding:blob-dedicated-size-thresholdr€   z,lance-encoding:blob-pack-file-size-thresholdz must be an int, got r   znon-negativeÚpositivez	 must be z must fit in a Rust usizer   )r=   rW   ÚintÚ	TypeErrorr$   r&   rt   Ú_MAX_RUST_USIZEÚOverflowErrorrV   r}   r   r;   Úwith_metadata)rH   r	   r~   r   r€   r-   Ú	thresholdrg   Ú
allow_zeror.   Úboundry   r;   s                r   Úblobr‹   º   s'  € ð> €Hð $Ø!ØØ7ð		
ð 'Ø$ØØ:ð		
ð 'Ø$ØØ:ð		
ð.ò #Ñ)ˆ	�5˜* cð( ˆ=ØÜ�eœTÔ"¬*°U¼CÔ*@Ü˜y˜kÐ)>¼tÀE»{×?SÑ?SÐ>TÐUÓVÐVØ�1Š9˜ !š©JÙ&0‘N°jˆEÜ 	˜{¨)°E°7Ð;Ó<Ð<Ø”?Ò"Ü 9 +Ð-FÐ GÓHÐHÜ˜E›
ˆ�Šð;#ô> #Ó$€IÜ�H‰H�T™9›;°Ô:€EÙ,4ˆ5×Ñ˜xÓ(Ð?¸%Ð?r   Ú	dimensionÚ
value_typec                 ó.   — t        j                  || «      S )aÝ  A help function to create a vector type.

    Parameters
    ----------
    dimension: The dimension of the vector.
    value_type: pa.DataType, optional
        The type of the value in the vector.

    Returns
    -------
    A PyArrow DataType for vectors.

    Examples
    --------

    >>> import pyarrow as pa
    >>> import lancedb
    >>> schema = pa.schema([
    ...     pa.field("id", pa.int64()),
    ...     pa.field("vector", lancedb.vector(756)),
    ... ])
    )r   Úlist_)rŒ   r�   s     r   Úvectorr�   þ   s   € ô. �8‰8�J 	Ó*Ð*r   c                 óh   — | dk(  rt        «       }|t        «       d<   |S t        dt        ›d| ›�«      ‚)Nr   zmodule z has no attribute )r}   ÚglobalsÚAttributeErrorr&   )rH   ry   s     r   Ú__getattr__r”     s=   € ØˆzÒÜ&Ó(ˆ	Ø )Œ‹	�*ÑØÐÜ
˜7¤8 ,Ð.@ÀÀÐIÓ
JÐJr   )T)3r)   Úctypesrq   Útypingr   r   Úpyarrowr   Úpyarrow.ipcÚ
lance.blobr   r   r9   r4   Úc_size_trg   r…   Ústructr;   Úlarge_binaryÚutf8Úuint64r   rp   r   r   ÚdictrV   r2   rW   r6   r:   ÚFieldr?   rA   ÚSchemaÚlistÚtuplerX   r\   r`   rb   rd   r,   rl   r}   rƒ   r‹   Úfloat32r�   r”   r   r   r   ú<module>r¥      s¶  ðñ
 -ã Û ß *ã Û áÝ/à&Ð Ø$€Ø,Ð Ø!�&—/‘/ "Ó%×+Ñ+€Ø!˜Ÿ	™	àˆ�‰�˜˜Ÿ™Ó*°TÔ:Øˆ�‰�˜˜Ÿ™›	¨DÔ1Øˆ�‰�˜Y˜RŸY™Y›[°4Ô8Øˆ�‰�˜˜Ÿ™›¨tÔ4ð	óÐ ð Ð ô
˜×(Ñ(ô 
ð,;˜dð ;¨ó ;ðS dð S¨tó SðH¨$ð H°4ó Hð9˜BŸH™Hð 9¨ó 9ðX˜bŸh™hð X¨4ó Xð §	¡	ð °t¸EÀ#ÀtÀ)Ñ<LÑ7Mó ð,Q˜bŸi™ið Q¨D°©Ió Qð
O §¡ð O¨t°C©yó Oð¨"¯)©)ð ¸¸S¹	ó ð+ "§)¡)ð +°ó +ð(°×1AÑ1Að (ÀbÇkÁkó (ò!ðL ðA@ð ,0Ø.2Ø.2òA@Ø
ðA@àðA@ð $ C™=ð	A@ð
 ' s™mðA@ð ' s™mðA@ð ‡X�XóA@ðH 6@°R·Z±Z³\ñ +�cð + r§{¡{ð +ÀbÇkÁkó +ð4K�cô Kr   