Ë
    jQêjçR  ã                  óN  — d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZmZmZ ddlZddlmZ ddlmZmZ dd	lmZmZmZ erdd
lmZ ddddœZdZeeee   gej@                  ejB                  z  f   Z"eeee   geej@                  ejB                  z     f   Z#d„ Z$ G d„ dejJ                  «      Z&d1d„Z'	 	 	 	 	 	 d2d„Z(	 	 	 	 	 	 d3d„Z)	 	 	 	 	 	 	 	 d4d„Z*	 	 	 	 	 	 d5d„Z+	 	 	 	 	 	 d6d„Z,	 	 	 	 	 	 	 	 d7d„Z-	 	 	 	 	 	 	 	 d8d„Z.ddœ	 	 	 	 	 	 	 	 	 d9d„Z/	 	 	 	 	 	 	 	 d:d„Z0	 	 	 	 	 	 	 	 d;d„Z1	 	 	 	 	 	 d<d„Z2d=d „Z3d>d!„Z4d?d"„Z5d@d#„Z6dAd$„Z7	 	 	 	 dBd%„Z8dCd&„Z9	 	 	 	 	 	 	 	 dDd'„Z:dEd(„Z;d>d)„Z<	 	 	 	 	 	 	 	 	 	 dFd*„Z=	 	 	 	 	 	 	 	 	 	 dGd+„Z>dHd,„Z?dId-„Z@	 	 	 	 	 	 dJd.„ZA	 	 	 	 	 	 dKd/„ZBdLd0„ZCy)Mz)Blob fetch API and v2 projection helpers.é    )ÚannotationsN)Ú	AwaitableÚCallableÚIterableÚMapping)ÚTYPE_CHECKINGÚOptionalÚUnioné   )ÚExpr)Úblob_column_pathsÚrow_addressable_blob_v2_paths)ÚBlobModeÚQueryProjectionÚQueryProjectionSpec)ÚWriteableBufferÚblobs_descriptionsÚ
all_binary)ÚlazyÚbytesÚdescriptionsÚ_lance_row_idc                ó¨   — t        | t        j                  «      r| j                  «       } | €y t        | t        «      st        d«      ‚t        | «      S )NzBblob descriptor must be a mapping, an Arrow struct scalar, or None)Ú
isinstanceÚpaÚScalarÚas_pyr   Ú	TypeErrorÚdict)Úvalues    úR/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/_blob.pyÚ_normalize_blob_descriptorr"   "   sI   € Ü�%œŸ™Ô#Ø—‘“ˆØ€}ØÜ�eœWÔ%ÜØPó
ð 	
ô �‹;Ðó    c                  óÂ   ‡ — e Zd ZdZdd„Zdd„Zdd„Zedd„«       Zdd„Z	dd„Z
ej                  fdd„Zdd	„Zdd
„Zdd„Zddˆ fd„Zddd„Zdd„Zdd„Zdd„Zdd„Zˆ xZS )ÚBlobFilea  Seekable lazy handle from :meth:`~lancedb.table.Table.fetch_blob_files`.

    Bytes load on ``read``, ``read1``, ``read_range``, or ``read_ranges``, not
    when the handle is opened. Range reads leave the cursor unchanged. Use
    :meth:`aread` from async code.
    c                ó   — || _         y ©N)Ú_inner)ÚselfÚinners     r!   Ú__init__zBlobFile.__init__6   s	   € Øˆ�r#   c              ƒ  ó€   K  — | j                   rt        d«      ‚| j                  j                  «       ƒ d {  –—† S 7 Œ­w©Núread of closed file)ÚclosedÚ
ValueErrorr(   Úread©r)   s    r!   ÚareadzBlobFile.aread9   s2   è ø€ Ø�;Š;ÜÐ2Ó3Ð3Ø—[‘[×%Ñ%Ó'×'Ð'Ð'ús   ‚5>·<¸>c                ó8   — | j                   j                  «        y r'   )r(   Úcloser2   s    r!   r5   zBlobFile.close>   s   € Ø�‰×ÑÕr#   c                ó6   — | j                   j                  «       S r'   )r(   Ú	is_closedr2   s    r!   r/   zBlobFile.closedA   s   € à�{‰{×$Ñ$Ó&Ð&r#   c                 ó   — y©NT© r2   s    r!   ÚreadablezBlobFile.readableE   ó   € Ør#   c                 ó   — yr9   r:   r2   s    r!   ÚseekablezBlobFile.seekableH   r<   r#   c                óž  — |t         j                  k(  r|}np|t         j                  k(  r| j                  j	                  «       |z   }n?|t         j
                  k(  r| j                  j                  «       |z   }nt        d|› �«      ‚|dk  rt        d|› �«      ‚| j                  j                  |«       | j                  j	                  «       S )Nzinvalid whence: r   znegative seek value )	ÚioÚSEEK_SETÚSEEK_CURr(   ÚtellÚSEEK_ENDÚsizer0   Úseek)r)   ÚoffsetÚwhenceÚpositions       r!   rF   zBlobFile.seekK   s«   € Ø”R—[‘[Ò Ø‰HØ”r—{‘{Ò"Ø—{‘{×'Ñ'Ó)¨FÑ2‰HØ”r—{‘{Ò"Ø—{‘{×'Ñ'Ó)¨FÑ2‰HäÐ/°¨xÐ8Ó9Ð9Ø�aŠ<ÜÐ3°H°:Ð>Ó?Ð?Ø�‰×Ñ˜Ô"Ø�{‰{×ÑÓ!Ð!r#   c                ó6   — | j                   j                  «       S r'   )r(   rC   r2   s    r!   rC   zBlobFile.tellY   ó   € Ø�{‰{×ÑÓ!Ð!r#   c                ó6   — | j                   j                  «       S r'   )r(   rE   r2   s    r!   rE   zBlobFile.size\   rK   r#   c                ód   — | j                   rt        d«      ‚| j                  j                  «       S r-   )r/   r0   r(   Ú
read_bytesr2   s    r!   ÚreadallzBlobFile.readall_   s(   € Ø�;Š;ÜÐ2Ó3Ð3Ø�{‰{×%Ñ%Ó'Ð'r#   c                ó’   •— | j                   rt        d«      ‚|�|dk  r| j                  j                  «       S t        ‰| �  |«      S )Nr.   r   )r/   r0   r(   rN   Úsuperr1   )r)   rE   Ú	__class__s     €r!   r1   zBlobFile.readd   sC   ø€ Ø�;Š;ÜÐ2Ó3Ð3Øˆ<˜4 !š8Ø—;‘;×)Ñ)Ó+Ð+Ü‰w‰|˜DÓ!Ð!r#   c                ó”   — | j                   rt        d«      ‚|�|dk  rt        j                  }| j                  j                  |«      S )z3Read up to ``size`` bytes with one underlying read.r.   r   )r/   r0   r@   ÚDEFAULT_BUFFER_SIZEr(   Ú
read_up_to)r)   rE   s     r!   Úread1zBlobFile.read1k   s@   € à�;Š;ÜÐ2Ó3Ð3Øˆ<˜4 !š8Ü×)Ñ)ˆDØ�{‰{×%Ñ% dÓ+Ð+r#   c                óh   — | j                   rt        d«      ‚| j                  j                  ||«      S r-   )r/   r0   r(   Ú
read_range)r)   rG   Úlengths      r!   rX   zBlobFile.read_ranges   s,   € Ø�;Š;ÜÐ2Ó3Ð3Ø�{‰{×%Ñ% f¨fÓ5Ð5r#   c                óf   — | j                   rt        d«      ‚| j                  j                  |«      S )z:Read ``(offset, length)`` pairs without moving the cursor.r.   )r/   r0   r(   Úread_ranges)r)   Úrangess     r!   r[   zBlobFile.read_rangesx   s*   € à�;Š;ÜÐ2Ó3Ð3Ø�{‰{×&Ñ& vÓ.Ð.r#   c                óÞ   — | j                   rt        d«      ‚t        |«      j                  d«      }| j                  j                  t        |«      «      }||d t        |«       t        |«      S )Nzreadinto of closed fileÚB)r/   r0   Ú
memoryviewÚcastr(   rU   Úlen)r)   ÚbÚviewÚchunks       r!   ÚreadintozBlobFile.readinto~   s[   € Ø�;Š;ÜÐ6Ó7Ð7Ü˜!‹}×!Ñ! #Ó&ˆØ—‘×&Ñ&¤s¨4£yÓ1ˆØ"ˆˆ\Œs�5‹zÐÜ�5‹zÐr#   c                ó*   — d| j                  «       › d�S )Nz<BlobFile size=ú>)rE   r2   s    r!   Ú__repr__zBlobFile.__repr__†   s   € Ø  §¡£ ¨QÐ/Ð/r#   )ÚreturnÚNone)ri   r   )ri   Úbool)rG   ÚintrH   rl   ri   rl   )ri   rl   )éÿÿÿÿ)rE   zOptional[int]ri   r   )rG   rl   rY   rl   ri   r   )r\   zlist[tuple[int, int]]ri   zlist[bytes])rb   r   ri   rl   )ri   Ústr)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r3   r5   Úpropertyr/   r;   r>   r@   rA   rF   rC   rE   rO   r1   rV   rX   r[   re   rh   Ú__classcell__)rR   s   @r!   r%   r%   .   sp   ø„ ñóó(ó
ð ò'ó ð'óóð /1¯k©kô "ó"ó"ó(ö
"ô,ó6ó
/ó÷0r#   r%   c                ón   — | t         vr-dj                  d„ t         D «       «      }t        d|› d| ›�«      ‚y )Nz, c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr'   )Úrepr)Ú.0Úmodes     r!   ú	<genexpr>z%validate_blob_mode.<locals>.<genexpr>Œ   s   è ø€ ÒG¨œ$˜tŸ*ÑGùs   ‚zblob_mode must be one of z, got )ÚBLOB_MODE_TO_HANDLINGÚjoinr0   )Ú	blob_modeÚmodess     r!   Úvalidate_blob_moder   Š   s>   € ØÔ-Ñ-Ø—	‘	ÑGÔ1FÔGÓGˆÜÐ4°U°G¸6À)ÀÐOÓPÐPð .r#   c                ó‚   ‡— t        |«      }|sy| syt        | «      D ]  \  }Š||v st        ˆfd„|D «       «      sŒ y y)NFTc              3  óT   •K  — | ]  }|‰k(  xs |j                  ‰› d �«      –— Œ! y­w)ú.N)Ú
startswith)rx   ÚcolumnÚsources     €r!   rz   z2projection_includes_blob_column.<locals>.<genexpr>š   s4   øè ø€ ò $
ØDJˆF�fÑÒ? × 1Ñ 1°V°H¸A°,Ó ?Ó?ñ$
ùs   ƒ%()ÚsetÚ_iter_projection_pairsÚany)Ú
projectionÚblob_columnsÚcolumnsÚoutputr…   s       @r!   Úprojection_includes_blob_columnr�   �   sY   ø€ ô �,Ó€GÙØÙØÜ0°Ó<ò ‰ˆ�Ø�WÑ¤ó $
ØNUô$
õ !
ñ ð	ð
 r#   c                ó,   — t        t        | «      |«      S r'   )Ú_project_blob_pathsr   )Úschemar‰   s     r!   Úblob_v2_projection_sourcesr‘   ¡   s   € ô Ô<¸VÓDÀjÓQÐQr#   c                ó|   — t        t        | «      |«      D �cg c]  }||vr|‘Œ
 }}|rt        d|› d�«      ‚y c c}w )Nz,blob_mode='bytes' cannot fetch blob columns zÎ. Bytes are fetched by row id, which covers blob v2 columns with one blob per row but not legacy blob columns or blobs inside lists. Use blob_mode='descriptions' or remove these columns from the projection.)r�   r   r0   )r�   r‰   Úblob_sourcesrŒ   Úunfetchables        r!   Úreject_unfetchable_blob_columnsr•   ¨   sf   € ô *Ô*;¸FÓ*CÀZÓPöàØ˜Ñ%ò 	ð€Kð ñ
 ÜØ:¸;¸-ð HTð Tó
ð 	
ð ùòs   ˜9c                ój   — t        | «      D �cg c]	  }||vsŒ|‘Œ }}|rt        d|› d�«      ‚y c c}w )Nz1blob_mode='bytes' could not match result columns zj to a blob column of the table. Select blob columns by their plain names, or use blob_mode='descriptions'.)r   r0   )Úoutput_schemar“   ÚpathÚ	unmatcheds       r!   Úreject_unmatched_blob_outputsrš   º   sX   € ô +¨=Ó9öØ¸TÈÒ=UŠð€Ið ñ ÜØ?À	¸{ð K,ð ,ó
ð 	
ð ùòs   Ž	0˜0c                ó  — |s| D �ci c]  }||“Œ c}S i }i }t        |«      D ]b  \  }}| D ]X  }||k(  r|}n(|j                  |› d�«      r|› |t        |«      d › �}nŒ3||v rt        d||   ›d|›d|› d�«      ‚|||<   |||<   ŒZ Œd |S c c}w )z@Map each projected output path to the blob column path it reads.r‚   Nzprojection entries z and z both produce blob column 'z6'. Rename one of them or drop the redundant selection.)r‡   rƒ   ra   r0   )rŠ   r‰   r„   ÚsourcesÚentriesrŒ   r…   r˜   s           r!   r�   r�   Ê   sæ   € ñ
 Ø-9Ö: 6�˜‘Ò:Ð:Ø €GØ €GÜ0°Ó<ò #‰ˆ�Ø"ò 	#ˆFØ˜ÒØ‘Ø×"Ñ" f X¨Q <Ô0Ø ˜ &¬¨V«¨Ð"7Ð!8Ð9‘àØ�w‰Ü Ø)¨'°$©-Ð):¸%À¸zð J,Ø,0¨6ð 2/ð/óð ð
 #ˆG�D‰MØ"ˆG�DŠMñ	#ð#ð  €Nùò' ;s   ‡
B
c               ó2   — |ryt        |t        | «      «      S )NF)r�   r   ©r�   r‰   Úwith_row_ids      r!   Úv2_projection_needs_row_idr¡   æ   s"   € ñ ØÜ*ØÔ1°&Ó9óð r#   c               ó$   — |�yt        | |d¬«      S )zDAuto row-id only applies when the caller said nothing about row ids.F)r    )r¡   rŸ   s      r!   Úblob_auto_row_id_for_scanr£   ó   s   € ð ÐØÜ% f¨jÀeÔLÐLr#   r:   )Ú
blob_pathsc               óF   — |s|s| S d| j                   vr| S t        | |«      S )NÚ_rowid)Úcolumn_namesÚstash_auto_row_ids)ÚtblÚuser_requested_row_idÚblob_auto_row_idr¤   s       r!   Úfinalize_blob_query_tabler¬   ÿ   s1   € ñ Ñ$4Øˆ
Ø�s×'Ñ'Ñ'ð ˆ
Ü˜c :Ó.Ð.r#   c           
   ƒ  ó  K  — t        | |«      }|s| S t        | |«      }|j                  «       D ]L  \  }}t        | ||r |||«      ƒ d {  –—† n(t	        j
                  g t	        j                  «       ¬«      «      } ŒN | S 7 Œ5­w©N)Útype©Ú_present_blob_sourcesÚ_hit_row_idsÚitemsÚ_set_blob_columnr   ÚarrayÚlarge_binary©r©   r“   Úfetch_blobsÚpresentÚrow_idsÚoutput_nameÚsource_names          r!   Ú"replace_v2_blob_columns_with_bytesr½     sˆ   è ø€ ô
 $ C¨Ó6€GÙØˆ
Ü˜3 Ó(€GØ$+§M¡M£Oò 
Ñ ˆ�[ÜØØáñ ˜k¨7Ó3×3Ð3ä—‘˜"¤2§?¡?Ó#4Ô5ó
‰ð
ð €Jð	 4ús   ‚ABÁ
B Á6Bc           
     óì   — t        | |«      }|s| S t        | |«      }|j                  «       D ]D  \  }}t        | ||r	 |||«      n(t	        j
                  g t	        j                  «       ¬«      «      } ŒF | S r®   r°   r·   s          r!   Ú'replace_v2_blob_columns_with_bytes_syncr¿   $  sy   € ô
 $ C¨Ó6€GÙØˆ
Ü˜3 Ó(€GØ$+§M¡M£Oò 
Ñ ˆ�[ÜØØáñ ˜ WÔ-ä—‘˜"¤2§?¡?Ó#4Ô5ó
‰ð
ð €Jr#   c                ó‚   — |j                  «       D ��ci c]  \  }}t        | j                  |«      r||“Œ  c}}S c c}}w r'   )r³   Ú_has_column_pathr�   )r©   r“   rŒ   r…   s       r!   r±   r±   8  sC   € ð
 +×0Ñ0Ó2÷áˆF�FÜ˜CŸJ™J¨Ô/ð 	�‰óð ùó s   ”#;c                ó~  — d| j                   v r| d   j                  «       S |D ]y  }t        | |«      }t        j                  j                  |j                  «      sŒ9t        |j                  j                  v sŒV|j                  t        «      j                  «       c S  t        dt        › dt        |«      › d�«      ‚)zaRead row ids before replacing columns, since a swapped alias can overwrite
    the lookup source.r¦   ú,query result has no '_rowid' column and no 'z' field on blob columns z=. Call .with_row_id(True) to fetch blob bytes for this query.)r§   Ú	to_pylistÚ_leaf_struct_columnr   ÚtypesÚ	is_structr¯   ÚROW_ID_FIELD_NAMEÚnamesÚfieldr0   Úlist)r©   r“   rŒ   Ú
descriptors       r!   r²   r²   B  s¸   € ð �3×#Ñ#Ñ#Ø�8‰}×&Ñ&Ó(Ð(Øò CˆÜ(¨¨fÓ5ˆ
Ü�8‰8×Ñ˜jŸo™oÕ.Ü §¡×!6Ñ!6Ò6à×#Ñ#Ô$5Ó6×@Ñ@ÓBÒBðCô Ø
6Ô7HÐ6Ið J!Ü!% lÓ!3Ð 4ð 5.ð	.óð r#   c                ó”  — d| j                   vrt        d«      ‚|D �cg c]  }t        | j                  |«      sŒ|‘Œ }}|st        d«      ‚| d   }t	        |t
        j                  «      r|j                  «       }|j                  t        j                  «       «      }|D ]  }t        | ||«      } Œ | j                  dg«      S c c}w )Nr¦   z+query result has no '_rowid' column to hidez4query result has no blob v2 column to carry a row id)r§   r0   rÁ   r�   r   r   ÚChunkedArrayÚcombine_chunksr`   Úuint64Ú_embed_row_id_in_columnÚdrop_columns)r©   r¤   ÚpÚpresent_pathsrº   r˜   s         r!   r¨   r¨   T  s»   € Ø�s×'Ñ'Ñ'ÜÐFÓGÐGà *ÖN˜1Ô.>¸s¿z¹zÈ1Õ.M’QÐN€MÐNÙÜÐOÓPÐPà�(‰m€GÜ�'œ2Ÿ?™?Ô+Ø×(Ñ(Ó*ˆØ�l‰lœ2Ÿ9™9›;Ó'€Gàò :ˆÜ% c¨4°Ó9‰ð:à×Ñ˜X˜JÓ'Ð'ùò Os
   žCºCc                ó–  — d| j                   v r| d   j                  «       S 	 t        | |«      }t        j                  j                  |j                  «      r?t        |j                  j                  v r#|j                  t        «      j                  «       S t        | «      }|�|S t        dt        › d|› d�«      ‚# t        $ r Y Œ0w xY w)Nr¦   rÃ   z' field on blob column 'zU'. Pass fresh blob query results, call .with_row_id(True), or pass a list of row ids.)r§   rÄ   rÅ   r   rÆ   rÇ   r¯   rÈ   rÉ   rÊ   ÚKeyErrorÚ_find_row_id_in_any_columnr0   )ÚhitsÚblob_columnÚleafrº   s       r!   Úread_row_ids_from_hitsrÛ   f  sË   € Ø�4×$Ñ$Ñ$Ø�H‰~×'Ñ'Ó)Ð)ðÜ" 4¨Ó5ˆÜ�8‰8×Ñ˜dŸi™iÔ(Ô->À$Ç)Á)Ç/Á/Ñ-QØ—:‘:Ô/Ó0×:Ñ:Ó<Ð<ô
 )¨Ó.€GØÐØˆä
Ø
6Ô7HÐ6Ið J!Ø!, ð .Gð	Góð øô ò Ùðús   £A3B< Â<	CÃCc                ó¾   — | j                   D ]N  }| j                  |«      }t        |t        j                  «      r|j                  «       }t        |«      }|€ŒL|c S  y r'   )r§   r„   r   r   rÎ   rÏ   Ú_find_row_id_in_struct)r©   Únamer„   rº   s       r!   r×   r×   }  s[   € Ø× Ñ ò ˆØ—‘˜DÓ!ˆÜ�fœbŸo™oÔ.Ø×*Ñ*Ó,ˆFÜ(¨Ó0ˆØÑØŠNðð r#   c                ó^  — t         j                  j                  | j                  «      sy t        | j                  j
                  v r#| j                  t        «      j                  «       S t        | j                  j                  «      D ]"  }t        | j                  |«      «      }|€Œ |c S  y r'   )r   rÆ   rÇ   r¯   rÈ   rÉ   rÊ   rÄ   ÚrangeÚ
num_fieldsrÝ   )rµ   Úirº   s      r!   rÝ   rÝ   ˆ  s†   € Ü�8‰8×Ñ˜eŸj™jÔ)ØÜ˜EŸJ™J×,Ñ,Ñ,Ø�{‰{Ô,Ó-×7Ñ7Ó9Ð9Ü�5—:‘:×(Ñ(Ó)ò ˆÜ(¨¯©°Q«Ó8ˆØÑØŠNðð r#   c              #  ó$  K  — t        | t        «      ri| j                  «       D ]U  \  }}t        |t        «      r||f–— Œt        |t        «      sŒ.|j                  «       }||�|n|j                  «       f–— ŒW y | D ]Ž  }t        |t        «      r||f–— Œt        |t        «      sŒ+t        |«      dk(  sŒ:|\  }}t        |t        «      r||f–— ŒVt        |t        «      sŒg|j                  «       }||�|n|j                  «       f–— Œ� y ­w)Né   )	r   r   r³   rn   r   Ú_column_nameÚto_sqlÚtuplera   )r‰   rÞ   Úexprr…   r„   s        r!   r‡   r‡   ”  s   è ø€ ô �*œdÔ#Ø$×*Ñ*Ó,ò 	L‰JˆD�$Ü˜$¤Ô$Ø˜D�jÓ Ü˜D¤$Õ'Ø×*Ñ*Ó,�Ø fÐ&8™F¸d¿k¹k»mÐKÓKð	Lð 	Øò 	LˆÜ�fœcÔ"Ø˜&�.Ó Ü˜¤Õ&¬3¨v«;¸!Ó+;Ø‰JˆD�$Ü˜$¤Ô$Ø˜D�jÓ Ü˜D¤$Õ'Ø×*Ñ*Ó,�Ø fÐ&8™F¸d¿k¹k»mÐKÓKñ	Lùs   ‚ADÁADÂ)DÂ8,DÃ%+Dc                óž   — t        | |«      \  }}| j                  |«      }|dk\  xr' t        | j                  |«      j                  |«      d uS ©Nr   )Ú_split_column_pathÚget_field_indexÚ_walk_struct_fieldsrÊ   r¯   )r�   r˜   Útop_nameÚrestÚindexs        r!   rÁ   rÁ   «  sP   € Ü'¨°Ó5�N€HˆdØ×"Ñ" 8Ó,€Eà�‰
ÒVÔ*¨6¯<©<¸Ó+>×+CÑ+CÀTÓJÐRVÐVðr#   c                óh  ‡‡‡— t        | j                  ‰«      \  }}|sM| j                  j                  |«      }| j                  |t	        j
                  |‰j                  «      ‰g«      S |d   Št        ‰t        j                  «      r‰j                  «       Šdˆˆˆfd„}t        | ||d d |«      S )Nrm   c                óØ   •— t        |«      D ]J  \  }}|j                  ‰k(  sŒ‰| |<   t        j                  ‰‰j                  |j
                  ¬«      ||<    y  t        d‰› d‰› d�«      ‚)N©ÚnullablezBlob field 'z' not found in 'ú')Ú	enumeraterÞ   r   rÊ   r¯   rô   rÖ   )ÚchildrenÚchild_fieldsrâ   rÊ   ÚblobsÚ	leaf_namer»   s       €€€r!   Úreplace_blobz&_set_blob_column.<locals>.replace_blob¿  ss   ø€ Ü! ,Ó/ò 	‰HˆAˆuØ�z‰z˜YÓ&Ø#�˜‘Ü"$§(¡(Ø˜uŸz™z°E·N±Nô#�˜Q‘ñ ð	ô ˜ i [Ð0@ÀÀÈQÐOÓPÐPr#   ©r÷   rË   rø   rË   ri   rj   )rë   r�   rì   Ú
set_columnr   rÊ   r¯   r   rÎ   rÏ   Ú_transform_struct_column)r©   r»   rù   rî   rï   rð   rû   rú   s    ``    @r!   r´   r´   ³  s˜   ú€ ô (¨¯
©
°KÓ@�N€HˆdÙØ—
‘
×*Ñ*¨8Ó4ˆØ�~‰~˜e¤R§X¡X¨h¸¿
¹
Ó%CÀeÀWÓMÐMà�R‘€IÜ�%œŸ™Ô)Ø×$Ñ$Ó&ˆ÷Qô $ C¨°4¸¸°9¸lÓKÐKr#   c                óT   ‡— dˆfd„}t        | gt        | j                  |«      ¢|‘­Ž S )Nc                ó¢   •— | j                  ‰«       |j                  t        j                  t        t        j                  «       d¬«      «       y )NFró   )Úappendr   rÊ   rÈ   rÐ   )r÷   rø   rº   s     €r!   Ú
add_row_idz+_embed_row_id_in_column.<locals>.add_row_idÍ  s1   ø€ Ø�‰˜Ô Ø×ÑœBŸH™HÔ%6¼¿	¹	»ÈeÔTÕUr#   rü   )rþ   rë   r�   )r©   r˜   rº   r  s     ` r!   rÑ   rÑ   Ì  s6   ø€ õVô $ØðÜ  §¡¨TÓ2ðØ4>òð r#   c                óŽ   — dd„}|D ];  }t        | j                  |«      sŒt        | gt        | j                  |«      ¢|‘­Ž } Œ= | S )zÆRemove any `_lance_row_id` field embedded in blob descriptor structs.

    For read-only descriptor views (`blob_mode="descriptions"`) that never
    fetch bytes, so have no use for the row id.
    c                ó`   — t        |«      D ]   \  }}|j                  t        k(  sŒ| |= ||=  y  y r'   )rö   rÞ   rÈ   )r÷   rø   râ   rÊ   s       r!   Údrop_row_idz'strip_auto_row_ids.<locals>.drop_row_idÝ  s7   € Ü! ,Ó/ò 	‰HˆAˆuØ�z‰zÔ.Ó.Ø˜Q�K ¨a Ùñ	r#   rü   )rÁ   r�   rþ   rë   )r©   r¤   r  r˜   s       r!   Ústrip_auto_row_idsr  Ö  sX   € óð ò 
ˆÜ §
¡
¨DÔ1ØÜ&Øð
Ü$ S§Z¡Z°Ó6ð
Ø8Cò
‰ð
ð €Jr#   c                ó,  — | j                   j                  |«      }| j                   j                  |«      }| j                  |«      }t	        |t
        j                  «      r|j                  «       }t        ||||«      \  }}| j                  |||«      S r'   )
r�   rì   rÊ   r„   r   r   rÎ   rÏ   Ú_rebuild_structrý   )	r©   rî   rï   Úleaf_transformÚ	top_indexÚ	top_fieldÚ	top_arrayÚ	new_arrayÚ	new_fields	            r!   rþ   rþ   ì  s~   € ð —
‘
×*Ñ*¨8Ó4€IØ—
‘
× Ñ  Ó+€IØ—
‘
˜8Ó$€IÜ�)œRŸ_™_Ô-Ø×,Ñ,Ó.ˆ	ä*¨9°iÀÀ~ÓVÑ€IˆyØ�>‰>˜) Y°	Ó:Ð:r#   c                ó  — | j                  «       }|s}t        | j                  j                  «      D �cg c]  }| j	                  |«      ‘Œ }}t        | j                  «      } |||«       t        j                  j                  |||¬«      }�n(|d   }	| j                  j                  |	«      }
| j	                  |
«      }| j                  j	                  |
«      }t        |||dd  |«      \  }}g }g }t        | j                  j                  «      D ]€  }| j                  j	                  |«      }|j                  |	k(  r#|j                  |«       |j                  |«       ŒP|j                  | j	                  |«      «       |j                  |«       Œ‚ t        j                  j                  |||¬«      }t        j                  |j                  |j                  |j                  |j                  ¬«      }||fS c c}w )N)ÚfieldsÚmaskr   r   )rô   Úmetadata)Úis_nullrà   r¯   rá   rÊ   rË   r   ÚStructArrayÚfrom_arraysrì   r  rÞ   r  rô   r  )Ústruct_arrayÚstruct_fieldÚremaining_pathr	  Ú	null_maskrâ   r÷   rø   r  Ú
child_nameÚchild_indexÚchild_arrayÚchild_fieldÚnew_child_arrayÚnew_child_fieldrÊ   r  s                    r!   r  r  ü  sÚ  € ð ×$Ñ$Ó&€IÙÜ38¸×9JÑ9J×9UÑ9UÓ3VÖW¨a�L×&Ñ& qÕ)ÐWˆÐWÜ˜L×-Ñ-Ó.ˆÙ�x Ô.Ü—N‘N×.Ñ.Ø˜\°	ð /ó 
Š	ð $ AÑ&ˆ
Ø"×'Ñ'×7Ñ7¸
ÓCˆØ"×(Ñ(¨Ó5ˆØ"×'Ñ'×-Ñ-¨kÓ:ˆÜ+:Ø˜ n°Q°RÐ&8¸.ó,
Ñ(ˆ˜ð ˆØˆÜ�|×(Ñ(×3Ñ3Ó4ò 	+ˆAØ ×%Ñ%×+Ñ+¨AÓ.ˆEØ�z‰z˜ZÒ'Ø—‘ Ô0Ø×#Ñ# OÕ4à—‘ × 2Ñ 2°1Ó 5Ô6Ø×#Ñ# EÕ*ð	+ô —N‘N×.Ñ.Ø˜\°	ð /ó 
ˆ	ô —‘Ø×ÑØ�‰Ø×&Ñ&Ø×&Ñ&ô	€Ið �iÐÐùòG Xs   ´G=c                óN  — t        | j                  |«      \  }}| j                  |«      }t        |t        j
                  «      r|j                  «       }|D ]K  }t        j                  j                  |j                  «      st        d|› d�«      ‚|j                  |«      }ŒM |S )Nzblob path 'z' crosses non-struct column)rë   r�   r„   r   r   rÎ   rÏ   rÆ   rÇ   r¯   rÖ   rÊ   )r©   r˜   rî   rï   r„   Úparts         r!   rÅ   rÅ   *  s�   € Ü'¨¯
©
°DÓ9�N€HˆdØ�Z‰Z˜Ó!€FÜ�&œ"Ÿ/™/Ô*Ø×&Ñ&Ó(ˆØò $ˆÜ�x‰x×!Ñ! &§+¡+Ô.Ü˜[¨¨Ð.IÐJÓKÐKØ—‘˜dÓ#‰ð$ð €Mr#   c                ó„  — |j                  d«      }d}t        t        |«      dd«      D ]‡  }dj                  |d| «      ||d }}| j	                  |«      }|dk  rŒ3t        | j                  |«      j                  |«      }|€Œ[t        j                  j                  |«      r||fc S |xs ||f}Œ‰ |xs
 |d   |dd fS )zWPrefer a path ending in a struct, since a flat alias can shadow a nested
    blob path.r‚   Nr   rm   r   )Úsplitrà   ra   r|   rì   rí   rÊ   r¯   r   rÆ   rÇ   )	r�   r˜   ÚpartsÚfallbackÚcutrî   rï   rð   Ú	leaf_types	            r!   rë   rë   6  sÕ   € ð �J‰J�s‹O€EØ€HÜ”S˜“Z  BÓ'ò 
0ˆØŸ™ %¨¨ +Ó.°°c°d°�$ˆØ×&Ñ& xÓ0ˆØ�1Š9ØÜ'¨¯©°UÓ(;×(@Ñ(@À$ÓGˆ	ØÐØÜ�8‰8×Ñ˜iÔ(Ø˜T�>Ò!ØÒ/ ¨$Ð/‰ð
0ð Ò,˜˜a™ %¨¨ )Ð,Ð,r#   c                ó¼   — |D ]V  }t         j                  j                  | «      s y | j                  |«      }|dk  r y | j	                  |«      j
                  } ŒX | S rê   )r   rÆ   rÇ   rì   rÊ   r¯   )Ú	data_typerÉ   rÞ   rð   s       r!   rí   rí   I  s^   € ð ò 0ˆÜ�x‰x×!Ñ! )Ô,ÙØ×)Ñ)¨$Ó/ˆØ�1Š9ÙØ—O‘O EÓ*×/Ñ/‰	ð0ð Ðr#   c                ó  — t        | t        j                  «      rt        | |«      }nzt        | t        j                  t        j
                  f«      rEt        j                  j                  | j                  «      st        d«      ‚| j                  «       }nt        | «      }g }|D ]9  }	 t        j                  |«      }|dk  rt        d«      ‚|j                  |«       Œ; |S # t        $ r}t        d«      |‚d }~ww xY w)Nzkrow id arrays must have an integer type; pass a query table with _rowid when using a blob descriptor columnz&row ids must be integers without nullsr   zrow ids must be non-negative)r   r   ÚTablerÛ   ÚArrayrÎ   rÆ   Ú
is_integerr¯   r0   rÄ   rË   Úoperatorrð   r   r  )rº   rÙ   ÚvaluesÚ
normalizedr    Úrow_idÚexcs          r!   Ú_normalize_blob_row_idsr3  V  së   € ô �'œ2Ÿ8™8Ô$Ü'¨°Ó=‰Ü	�GœbŸh™h¬¯©Ð8Ô	9Ü�x‰x×"Ñ" 7§<¡<Ô0Üð=óð ð ×"Ñ"Ó$‰ä�g“ˆà€JØò "ˆð	PÜ—^‘^ EÓ*ˆFð �AŠ:ÜÐ;Ó<Ð<Ø×Ñ˜&Õ!ð"ð Ðøô ò 	PÜÐEÓFÈCÐOûð	Pús   Â*C$Ã$	C>Ã-C9Ã9C>c                óF   — | D �cg c]  }|�t        |«      nd ‘Œ c}S c c}w r'   )r%   )ÚhandlesÚhandles     r!   Ú_wrap_blob_filesr7  q  s%   € ØKRÖSÀ Ð 2ŒH�VÔ¸Ñ<ÒSÐSùÒSs   …)r}   r   ri   rj   )r‰   r   rŠ   úIterable[str]ri   rk   )r�   ú	pa.Schemar‰   r   ri   údict[str, str])r�   r9  r‰   r   r“   r:  ri   rj   )r—   r9  r“   r:  ri   rj   )rŠ   ú	list[str]r‰   r   ri   r:  )r�   r9  r‰   r   r    rk   ri   rk   )r�   r9  r‰   r   r    zbool | Noneri   rk   )
r©   úpa.Tablerª   rk   r«   rk   r¤   r8  ri   r<  )r©   r<  r“   r:  r¸   ÚFetchBlobsAsyncri   r<  )r©   r<  r“   r:  r¸   ÚFetchBlobsSyncri   r<  )r©   r<  r“   r:  ri   r:  )r©   r<  r“   r:  ri   ú	list[int])r©   r<  r¤   r8  ri   r<  )rØ   r<  rÙ   rn   ri   r?  )r©   r<  ri   úOptional[list[int]])rµ   úpa.Arrayri   r@  )r‰   r   ri   zIterable[tuple[str, str]])r�   r9  r˜   rn   ri   rk   )r©   r<  r»   rn   rù   zpa.Array | pa.ChunkedArrayri   r<  )r©   r<  r˜   rn   rº   rA  ri   r<  )
r©   r<  rî   rn   rï   r;  r	  úCallable[[list, list], None]ri   r<  )
r  úpa.StructArrayr  zpa.Fieldr  r;  r	  rB  ri   ztuple[pa.StructArray, pa.Field])r©   r<  r˜   rn   ri   rC  )r�   r9  r˜   rn   ri   ztuple[str, list[str]])r)  zpa.DataTyperÉ   r;  ri   zOptional[pa.DataType])rº   z5Union[list[int], pa.Array, pa.ChunkedArray, pa.Table]rÙ   rn   ri   r?  )r5  zIterable[object]ri   zlist[Optional[BlobFile]])Drr   Ú
__future__r   r@   r.  Úcollections.abcr   r   r   r   Útypingr   r	   r
   Úpyarrowr   rè   r   r�   r   r   rÆ   r   r   r   Ú	_typeshedr   r{   rÈ   rn   rË   rl   r,  rÎ   r>  r=  r"   Ú	RawIOBaser%   r   r�   r‘   r•   rš   r�   r¡   r£   r¬   r½   r¿   r±   r²   r¨   rÛ   r×   rÝ   r‡   rÁ   r´   rÑ   r  rþ   r  rÅ   rë   rí   r3  r7  r:   r#   r!   ú<module>rJ     sx  ðñ 0å "ã 	Û ß BÓ Bß 1Ñ 1ã å ß Dß AÑ AáÝ)ð !ØØ(ñÐ ð $Ð à˜3  S¡	Ð*¨B¯H©H°r·±Ñ,FÐFÑG€Ø˜C  c¡Ð+¨Y°r·x±xÀ"Ç/Á/Ñ7QÑ-RÐRÑS€ò	ôY0ˆr�|‰|ô Y0óxQðØðàðð 
óð"RØðRàðRð óRð
Øð
Ø#2ð
ØBPð
à	ó
ð$
Øð
Ø,:ð
à	ó
ð ØðØ)8ðàóð8
Øð
àð
ð ð	
ð
 
ó
ð	MØð	Màð	Mð ð		Mð
 
ó	Mð" !#ñ/Ø	ð/ð  ð/ð ð	/ð
 ð/ð ó/ð"Ø	ðà ðð !ðð ó	ð(Ø	ðà ðð  ðð ó	ð(Ø	ðØ!/ðàóóó$(ó$ó.ó	ðLØ#ðLàóLó.ðLØ	ðLØ #ðLØ,FðLàóLó2óð,;Ø	ð;àð;ð ð;ð 1ð	;ð
 ó;ð + Ø ð+ àð+ ð ð+ ð 1ð	+ ð
 %ó+ ó\	ó-ð&
Øð
Ø#,ð
àó
ðØBðØQTðàóô6Tr#   