Ë
    kQêj*K  ã            
       ó¾  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d dlZd dlZd dlmZ ddlmZ d	„ Z e«       Zd
ee ejB                  f   de fd„Z"d
ee ejB                  f   de fd„Z#d
e deejH                  e f   fd„Z%dee ejB                  f   de de fd„Z&dFde fd„Z'dFdejP                  deee)e*f      fd„Z+dee    de fd„Z,	 dFdejZ                  dee    dee)   dee    fd„Z.dFdej^                  dee)   de fd„Z0dejb                  de*fd„Z2dejb                  dee)   fd „Z3d!eddfd"„Z4d!ee   dee)   fd#„Z5dej^                  d$e d!ee   d%ee    fd&„Z6ed'„ «       Z7e7jq                  e «      d(e fd)„«       Z9e7jq                  e:«      d(e:fd*„«       Z9e7jq                  e)«      d(e)fd+„«       Z9e7jq                  e;«      d(e;fd,„«       Z9e7jq                  e
«      d(e
fd-„«       Z9e7jq                  e*«      d(e*fd.„«       Z9e7jq                   e<d«      «      d( e<d«      fd/„«       Z9e7jq                  e«      d(efd0„«       Z9e7jq                  e«      d(efd1„«       Z9e7jq                  e=«      e7jq                  e>«      d(ee=e>f   fd2„«       «       Z9e7jq                  e?«      d(e?fd3„«       Z9e7jq                  ej€                  «      d(ej€                  fd4„«       Z9e7jq                  ej‚                  «      d(ej‚                  fd5„«       Z9e7jq                  ej„                  «      d(ej„                  fd6„«       Z9e7jq                  ej†                  «      d(ej†                  fd7„«       Z9e7jq                  ejˆ                  «      d(ejˆ                  fd8„«       Z9e7jq                  ejŠ                  «      d(ejŠ                  fd9„«       Z9e7jq                  ejŒ                  «      d(ejŒ                  fd:„«       Z9d;„ ZGd<e fd=„Zd>eHd?e fd@„ZIdejP                  fdA„ZJdBej–                  fdC„ZLdBej–                  fdD„ZMdBej–                  fdE„ZNy)Gé    N)ÚdateÚdatetime)ÚDecimal)Úsingledispatch)ÚTupleÚUnionÚOptionalÚAnyÚList)Úurlparseé   )Úvalidate_table_namec                  ó.   — 	 dd l } | S # t        $ r Y y w xY w)Nr   )ÚadlfsÚImportError)r   s    úQ/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/util.pyÚsafe_import_adlfsr      s!   € ðÛàˆøÜò Ùðús   ‚ ˆ	“ÚuriÚreturnc                 ó‚   — t        t        | «      «      }|j                  }|sd}|S |dv rd}|S t        |«      dk(  rd}|S )zî
    Get the scheme of a URI. If the URI does not have a scheme, assume it is a file URI.

    Parameters
    ----------
    uri : str or pathlib.Path
        The URI to parse.

    Returns
    -------
    str: The scheme of the URI.
    Úfile)Ús3aÚs3nÚs3r   )r   ÚstrÚschemeÚlen)r   Úparsedr   s      r   Úget_uri_schemer   %   sZ   € ô ”c˜#“hÓ€FØ�]‰]€FÙØˆð €Mð 
�>Ñ	!Øˆð €Mô 
ˆV‹˜Ò	ð ˆØ€Mó    c                 óÄ   — t        | «      }t        |«      }t        |j                  «      dk(  r|S |j                  s|j
                  S |j                  |j
                  z   S )zÿ
    Get the location of a URI. If the parameter is not a url, assumes it is just a path

    Parameters
    ----------
    uri : str or pathlib.Path
        The URI to parse.

    Returns
    -------
    str: Location part of the URL, without scheme
    r   )r   r   r   r   ÚnetlocÚpath)r   Úuri_strr   s      r   Úget_uri_locationr%   @   sS   € ô �#‹h€GÜ�gÓ€FÜ
ˆ6�=‰=Ó˜QÒð ˆà�=Š=Ø�{‰{Ðà�}‰}˜vŸ{™{Ñ*Ð*r    c                 ó  — t        | «      dk(  rDt        j                  t        j                  j                  d«      dd¬«      }t        | «      }||fS t        | «      dk(  rŽt        �ˆt        j                  t        j                  j                  d«      t        j                  j                  d«      ¬«      }t        j                  t        j                  |«      «      }t        | «      }||fS t        j                  j                  | «      S )	zT
    Get a PyArrow FileSystem from a URI, handling extra environment variables.
    r   ÚAWS_ENDPOINTé   )Úendpoint_overrideÚrequest_timeoutÚconnect_timeoutÚazÚAZURE_STORAGE_ACCOUNT_NAMEÚAZURE_STORAGE_ACCOUNT_KEY)Úaccount_nameÚaccount_key)r   Úpa_fsÚS3FileSystemÚosÚenvironÚgetr%   r   ÚAzureBlobFileSystemÚPyFileSystemÚFSSpecHandlerÚ
FileSystemÚfrom_uri)r   Úfsr#   Ú
az_blob_fss       r   Úfs_from_urir=   [   sÜ   € ô �cÓ˜dÒ"Ü×ÑÜ Ÿj™jŸn™n¨^Ó<ØØô
ˆô
   Ó$ˆØ�4ˆxˆä	˜Ó	 Ò	$¬Ð):Ü×.Ñ.ÜŸ™Ÿ™Ð(DÓEÜŸ
™
Ÿ™Ð'BÓCð /ó 
ˆ
ô
 ×Ñ¤× 3Ñ 3°JÓ ?Ó@ˆä Ó$ˆØ�4ˆxˆä×Ñ×$Ñ$ SÓ)Ð)r    ÚbaseÚpartsc                 óš  — t        | t        j                  «      r | j                  |Ž S t	        | «      } t        | «      dk(  rt	        t        j                  | g|¢­Ž «      S t        | «      }dj                  |j                  g|¢D �cg c]  }|j                  d«      ‘Œ c}«      }|j                  |¬«      j                  «       S c c}w )a  
    Join a URI with multiple parts, handles both local and remote paths

    Parameters
    ----------
    base : str
        The base URI
    parts : str
        The parts to join to the base URI, each separated by the
        appropriate path separator for the URI scheme and OS
    r   ú/)r#   )Ú
isinstanceÚpathlibÚPathÚjoinpathr   r   r   Újoinr#   ÚrstripÚ_replaceÚgeturl)r>   r?   ÚurlÚpÚnew_paths        r   Újoin_urirM   v   s¬   € ô �$œŸ™Ô%Øˆt�}‰}˜eÐ$Ð$Üˆt‹9€DÜ�dÓ˜vÒ%ô ”7—<‘< Ð- uÒ-Ó.Ð.ô �t‹nˆØ—8‘8°S·X±XÐ4FÀÐ4FÖG¨q˜QŸX™X c�]ÒGÓHˆØ�|‰| ˆ|Ó*×1Ñ1Ó3Ð3ùò Hs   Â	CÚmodulec                 ól   — 	 t        j                  | «      S # t        $ r t        d|xs | › �«      ‚w xY w)ac  
    Import the specified module. If the module is not installed,
    raise an ImportError with a helpful message.

    Parameters
    ----------
    module : str
        The name of the module to import
    mitigation : Optional[str]
        The package(s) to install to mitigate the error.
        If not provided then the module name will be used.
    zPlease install )Ú	importlibÚimport_moduler   )rN   Ú
mitigations     r   Úattempt_import_or_raiserS   �   sB   € ðDÜ×&Ñ& vÓ.Ð.øÜò DÜ˜O¨JÒ,@¸&Ð+AÐBÓCÐCðDús   ‚ —3ÚtblÚflattenc                 ó  — |du r1	 | j                  «       } t        d„ | j                  D «       «      rŒ.	 | S t        |t        «      r@t        |t
        «      s0|dk  rt        d«      ‚|dkD  r| j                  «       } |dz  }|dkD  rŒ| S )aJ  
    Flatten all struct columns in a table.

    Parameters
    ----------
    flatten: Optional[Union[int, bool]]
        If flatten is True, flatten all nested columns.
        If flatten is an integer, flatten the nested columns up to the
        specified depth.
        If unspecified, do not flatten the nested columns.
    Tc              3   ón   K  — | ]-  }t         j                  j                  |j                  «      –— Œ/ y ­w©N)ÚpaÚtypesÚ	is_structÚtype)Ú.0Úcols     r   ú	<genexpr>z"flatten_columns.<locals>.<genexpr>³   s#   è ø€ ÒF°C”2—8‘8×%Ñ% c§h¡h×/ÑFùs   ‚35r   zIPlease specify a positive integer for flatten or the boolean value `True`r   )rU   ÚanyÚschemarB   ÚintÚboolÚ
ValueError)rT   rU   s     r   Úflatten_columnsre   £   s“   € ð �$�ØØ—+‘+“-ˆCäÑF¸3¿:¹:ÔFÔFØàð €Jô 
�GœSÔ	!¬*°W¼dÔ*CØ�aŠ<Üðóð ð ˜ŠkØ—+‘+“-ˆCØ�q‰LˆGð ˜‹kð €Jr    r#   c                 óX   ‡— dt         dt         fd„Šdj                  ˆfd„| D «       «      S )NÚsegmentr   c                 óV   — t        d„ | D «       «      r| S d| j                  dd«      › d�S )Nc              3   óJ   K  — | ]  }|j                  «       xs |d k(  –— Œ y­w)Ú_N)Úisalnum)r]   Úchars     r   r_   z=_format_field_path.<locals>.format_segment.<locals>.<genexpr>È   s"   è ø€ ÒA°ˆt�|‰|‹~Ò, ¨¡Ó,ÑAùs   ‚!#ú`z``)ÚallÚreplace)rg   s    r   Úformat_segmentz*_format_field_path.<locals>.format_segmentÇ   s0   € ÜÑA¸ÔAÔAØˆNØ�7—?‘? 3¨Ó-Ð.¨aÐ0Ð0r    ú.c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrX   © )r]   rg   rp   s     €r   r_   z%_format_field_path.<locals>.<genexpr>Ì   s   øè ø€ Ò@°‘N 7×+Ñ@ùs   ƒ)r   rF   )r#   rp   s    @r   Ú_format_field_pathrt   Æ   s-   ø€ ð1¤ð 1¬ó 1ð
 �8‰8Ó@¸4Ô@Ó@Ð@r    ÚfieldÚdimc                 ó°  — g |¢| j                   ‘}t        | j                  «      r*t        | j                  «      }|�||k(  rt	        |«      gS g S t
        j                  j                  | j                  «      r]g }t        | j                  j                  «      D ]7  }|j                  t        | j                  j                  |«      ||«      «       Œ9 |S g S rX   )ÚnameÚis_vector_columnr\   Úinfer_vector_column_dimrt   rY   rZ   r[   ÚrangeÚ
num_fieldsÚextendÚ_iter_vector_columnsru   )ru   r#   rv   Ú
field_pathÚ
vector_dimÚcolumnsÚidxs          r   r~   r~   Ï   s»   € ð %�4Ð$˜Ÿ™Ð$€JÜ˜Ÿ
™
Ô#Ü,¨U¯Z©ZÓ8ˆ
Øˆ;˜*¨Ò+Ü& zÓ2Ð3Ð3Øˆ	Ü	‡x�x×Ñ˜%Ÿ*™*Ô%ØˆÜ˜Ÿ™×.Ñ.Ó/ò 	YˆCØ�N‰NÔ/°·
±
×0@Ñ0@ÀÓ0EÀzÐSVÓWÕXð	YàˆØ€Ir    ra   c                 óR  — g }| D ]  }|j                  t        |g |«      «       Œ  t        |«      dk(  r;|�9g }| D ]  }|j                  t        |g «      «       Œ t        |«      dk(  r|d   S |}t        |«      dkD  rt        d|› �«      ‚t        |«      dk(  rt        d«      ‚|d   S )z½
    Get the vector column name

    Parameters
    ----------
    schema : pa.Schema
        The schema of the vector column.

    Returns
    -------
    str: the vector column name.
    r   r   zmSchema has more than one vector column. Please specify the vector column name for vector search. Candidates: z^There is no vector column in the data. Please specify the vector column name for vector search)r}   r~   r   rd   )ra   rv   Úvector_col_namesru   Ú
unfiltereds        r   Úinf_vector_column_queryr†   à   së   € ð ÐØò FˆØ×ÑÔ 4°U¸BÀÓ DÕEðFô ÐÓ Ò! c oð
 ˆ
Øò 	?ˆEØ×ÑÔ2°5¸"Ó=Õ>ð	?äˆz‹?˜aÒØ˜a‘=Ð Ø%Ðä
ÐÓ˜qÒ Üð.à.>Ð-?ðAó
ð 	
ô
 ÐÓ Ò!ÜðFó
ð 	
ð ˜AÑÐr    Ú	data_typec                 óP  — t         j                  j                  | «      rSt         j                  j                  | j                  «      s)t         j                  j                  | j                  «      ryt         j                  j                  | «      rt        | j                  «      S y)zÛ
    Check if the column is a vector column.

    Parameters
    ----------
    data_type : pa.DataType
        The data type of the column.

    Returns
    -------
    bool: True if the column is a vector column.
    TF)rY   rZ   Úis_fixed_size_listÚis_floatingÚ
value_typeÚis_uint8Úis_listry   ©r‡   s    r   ry   ry     so   € ô 
‡x�x×"Ñ" 9Ô-Ü
�‰×Ñ˜Y×1Ñ1Ô2Ü�8‰8×Ñ˜Y×1Ñ1Ô2àÜ	�‰×	Ñ	˜)Ô	$Ü 	× 4Ñ 4Ó5Ð5Ør    c                 óÂ   — t         j                  j                  | «      r| j                  S t         j                  j	                  | «      rt        | j                  «      S y rX   )rY   rZ   r‰   Ú	list_sizer�   rz   r‹   rŽ   s    r   rz   rz   "  sF   € Ü	‡x�x×"Ñ" 9Ô-Ø×"Ñ"Ð"Ü	‡x�x×Ñ˜	Ô"Ü& y×';Ñ';Ó<Ð<Ør    Úqueryc                 ó’   — t        | t        «      r| r)t        | t        j                  «      r| j                  dk(  rt        d«      ‚yy)zGReject empty vector inputs before vector-column inference or execution.r   zQuery vector must not be emptyN)rB   ÚlistÚnpÚndarrayÚsizerd   )r‘   s    r   Ú_validate_query_vectorr—   *  s:   € ä�5œ$Ô©Ü�5œ"Ÿ*™*Ô%¨%¯*©*¸ª/äÐ9Ó:Ð:ð +:Ð%r    c                 ó  — | €y t        | t        j                  «      r| j                  dk(  ry | j                  d   S t        | t
        j                  t
        j                  f«      rÍt        | «      dk(  ry t
        j                  j                  | j                  «      r| j                  j                  S t
        j                  j                  | j                  «      s)t
        j                  j                  | j                  «      r"| d   j                  «       }|�t        |«      S d S t        | «      S t        | t         t"        f«      rB| r@| d   }t        |t         t"        t        j                  f«      rt        |«      S t        | «      S y )Nr   éÿÿÿÿ)rB   r”   r•   ÚndimÚshaperY   ÚArrayÚChunkedArrayr   rZ   r‰   r\   r�   r�   Úis_large_listÚas_pyr“   Útuple)r‘   Úfirsts     r   Ú_query_vector_dimr¢   2  s  € Ø€}ØÜ�%œŸ™Ô$Ø�:‰:˜Š?ØØ�{‰{˜2‰ÐÜ�%œ"Ÿ(™(¤B§O¡OÐ4Ô5Üˆu‹:˜Š?ØÜ�8‰8×&Ñ& u§z¡zÔ2Ø—:‘:×'Ñ'Ð'Ü�8‰8×Ñ˜EŸJ™JÔ'¬2¯8©8×+AÑ+AÀ%Ç*Á*Ô+MØ˜!‘H—N‘NÓ$ˆEØ!&Ð!2”3�u“:Ð<¸Ð<Ü�5‹zÐÜ�%œ$¤˜Ô'©EØ�a‘ˆÜ�eœd¤E¬2¯:©:Ð6Ô7Ü�u“:ÐÜ�5‹zÐØr    Ú
query_typeÚvector_column_namec                 ó�   — |dk7  rt        |«       |�|S |dk(  ry |€|dk7  ry t        | t        |«      ¬«      }|€t        d«      ‚|S )NÚftsÚhybrid©rv   z~No vector column found in the schema. Please specify the vector column name explicitly via the `vector_column_name` parameter.)r—   r†   r¢   rd   )ra   r£   r‘   r¤   s       r   Úinfer_vector_column_namer©   J  so   € ð �UÒÜ˜uÔ%àÐ%Ø!Ð!à�UÒàà€}˜ xÒ/ð ä0°Ô=NÈuÓ=UÔVÐàÐ!Üðó
ð 	
ð Ðr    c                 ó   — t        d«      ‚)Nz/SQL conversion is not implemented for this type)ÚNotImplementedError©Úvalues    r   Úvalue_to_sqlr®   k  s   € ä
ÐOÓ
PÐPr    r­   c                 ó2   — | j                  dd«      } d| › d�S )Nú'z'')ro   r¬   s    r   rj   rj   p  s    € à�M‰M˜#˜tÓ$€EØˆuˆg�Qˆ<Ðr    c                 óP   — dt        j                  | «      j                  «       › d�S )z~Convert bytes to a hex string literal.

    See https://datafusion.apache.org/user-guide/sql/data_types.html#binary-types
    zX'r°   )ÚbinasciiÚhexlifyÚdecoder¬   s    r   rj   rj   v  s(   € ð ”× Ñ  Ó'×.Ñ.Ó0Ð1°Ð3Ð3r    c                 ó   — t        | «      S rX   )r   r¬   s    r   rj   rj     s   € äˆu‹:Ðr    c                 ó€   — t        j                  | «      ryt        j                  | «      r	| dkD  rdS dS t        | «      S )NzCAST('NaN' AS DOUBLE)r   zCAST('Infinity' AS DOUBLE)zCAST('-Infinity' AS DOUBLE))ÚmathÚisnanÚisinfr   r¬   s    r   rj   rj   „  sB   € ô ‡z�z�%ÔØ&Ü‡z�z�%Ôà,1°AªIÐ(ð	
Ø;Xð	
ô ˆu‹:Ðr    c                 ób   — | j                  «       st        d«      ‚t        t        | d«      «      S )Nz4Non-finite Decimal values cannot be converted to SQLÚf)Ú	is_finiterd   r®   Úformatr¬   s    r   rj   rj   �  s*   € à�?‰?ÔÜÐOÓPÐPäœ˜u cÓ*Ó+Ð+r    c                 ó4   — t        | «      j                  «       S rX   )r   Úupperr¬   s    r   rj   rj   ˜  s   € äˆu‹:×ÑÓÐr    c                  ó   — y)NÚNULLrs   r¬   s    r   rj   rj   �  s   € àr    c                 ó*   — d| j                  «       › d�S ©Nr°   ©Ú	isoformatr¬   s    r   rj   rj   ¢  ó   € àˆu�‰Ó Ð! Ð#Ð#r    c                 ó*   — d| j                  «       › d�S rÃ   rÄ   r¬   s    r   rj   rj   §  rÆ   r    c                 óL   — ddj                  t        t        | «      «      z   dz   S )Nú[ú, ú])rF   Úmapr®   r¬   s    r   rj   rj   ¬  s$   € ð �—‘œ3œ|¨UÓ3Ó4Ñ4°sÑ:Ð:r    c                 óZ   — ddj                  d„ | j                  «       D «       «      z   dz   S )Nznamed_struct(rÊ   c              3   óf   K  — | ])  \  }}t        t        |«      «      › d t        |«      › �–— Œ+ y­w)rÊ   N)r®   r   )r]   ÚkÚvs      r   r_   z_.<locals>.<genexpr>»  s3   è ø€ ò 
Ù=A¸QÀŒ|œC ›FÓ#Ð$ B¤|°A£Ð&7Ô8ñ
ùs   ‚/1ú))rF   Úitemsr¬   s    r   rj   rj   ²  s:   € ð 	Ø
�)‰)ñ 
ØEJÇ[Á[Ã]ô
ó 
ñ	
ð ñ		ðr    c                 ó4   — t        | j                  «       «      S rX   )r®   rŸ   r¬   s    r   rj   rj   Â  s   € ä˜Ÿ™›Ó&Ð&r    c                 óö   — | j                   st        d «      S t        t        | j                  j	                  d«      «      «      }t        t        | j                  j	                  d«      «      «      }d|› d|› d�S )Nr   r   zmap(rÊ   rÑ   )Úis_validr®   r“   Úvaluesru   )r­   ÚkeysrÖ   s      r   rj   rj   Ç  se   € à�>Š>Ü˜DÓ!Ð!Üœ˜UŸ\™\×/Ñ/°Ó2Ó3Ó4€DÜœ$˜uŸ|™|×1Ñ1°!Ó4Ó5Ó6€FØ�$��r˜&˜ Ð#Ð#r    c                 ó4   — t        | j                  «       «      S rX   )r®   Útolistr¬   s    r   rj   rj   Ð  s   € ä˜Ÿ™›Ó'Ð'r    c                 ó*   — t        t        | «      «      S rX   )r®   rc   r¬   s    r   rj   rj   Õ  s   € äœ˜U›Ó$Ð$r    c                 ó*   — t        t        | «      «      S rX   )r®   rb   r¬   s    r   rj   rj   Ú  s   € äœ˜E›
Ó#Ð#r    c                 ó*   — t        t        | «      «      S rX   )r®   Úfloatr¬   s    r   rj   rj   ß  s   € äœ˜e›Ó%Ð%r    c           	      óô   — t        j                  | «      rt        d «      S t        j                  | j                  «      d   dv rt        d«      ‚t        t        t        j                  | dd¬«      «      «      S )Nr   )Úpsr;   Úasz7SQL timestamps cannot preserve sub-nanosecond precisionÚnsÚUTC)ÚunitÚtimezone)r”   Úisnatr®   Údatetime_dataÚdtyperd   r   Údatetime_as_stringr¬   s    r   rj   rj   ä  s`   € ä	‡x�x�„Ü˜DÓ!Ð!Ü	×Ñ˜Ÿ™Ó$ QÑ'Ð+=Ñ=ÜÐRÓSÐSÜœœB×1Ñ1°%¸dÈUÔSÓTÓUÐUr    c                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )z“This is a decorator which can be used to mark functions
    as deprecated. It will result in a warning being emitted
    when the function is used.c                  óÐ   •— t        j                  dt        «       t        j                  d‰j                  › d�t        d¬«       t        j                  dt        «        ‰| i |¤ŽS )NÚalwaysz	Function z6 is deprecated and will be removed in a future versioné   )ÚcategoryÚ
stacklevelÚdefault)ÚwarningsÚsimplefilterÚDeprecationWarningÚwarnÚ__name__)ÚargsÚkwargsÚfuncs     €r   Únew_funczdeprecated.<locals>.new_funcò  s`   ø€ ä×Ñ˜hÔ(:Ô;Ü�‰à˜DŸM™M˜?ð +.ð .ô (Øõ	
ô 	×Ñ˜iÔ);Ô<Ù�TÐ$˜VÑ$Ð$r    )Ú	functoolsÚwraps)r÷   rø   s   ` r   Ú
deprecatedrû   í  s'   ø€ ô
 ‡_�_�TÓó%ó ð%ð €Or    rx   c                 ó   — t        | «       y)zVerify the table name is valid.N)Únative_validate_table_name)rx   s    r   r   r     s
   € ä˜tÕ$r    Úbase_exceptionÚnotec                 óæ   — t        | d«      r| j                  |«       y t        | j                  d   t        «      r,| j                  d   dz   |z   g| j                  dd  ¢­| _        y t        d«      ‚)NÚadd_noter   ú
r   zCannot add note to exception)Úhasattrr  rB   rõ   r   rd   )rþ   rÿ   s     r   r  r    st   € Üˆ~˜zÔ*Ø×Ñ Õ%Ü	�N×'Ñ'¨Ñ*¬CÔ	0à×Ñ Ñ" TÑ)¨DÑ0ð
à× Ñ   Ð$ñ
ˆÕô
 Ð7Ó8Ð8r    c           
      óà   ‡— t        dd«      Šdt        j                  fˆfd„}‰j                  t	        | j
                  «      D �cg c]  } || j                  |«      «      ‘Œ c}«      S c c}w )a&  
    Convert a PyArrow Table to a PyTorch Tensor.

    Each column is converted to a tensor (using zero-copy via DLPack)
    and the columns are then stacked into a single tensor.

    Fails if torch is not installed.
    Fails if any column is more than one chunk.
    Fails if a column's data type is not supported by PyTorch.

    Parameters
    ----------
    tbl : pa.Table or pa.RecordBatch
        The table or record batch to convert to a tensor.

    Returns
    -------
    torch.Tensor: The tensor containing the columns of the table.
    Útorchr^   c                 óx   •— | j                   dkD  rt        d«      ‚‰j                  | j                  d«      «      S )Nr   z8Single batch was too large to fit into a one-chunk tabler   )Ú
num_chunksÚ	ExceptionÚfrom_dlpackÚchunk)r^   r  s    €r   Ú	to_tensorz tbl_to_tensor.<locals>.to_tensor*  s4   ø€ Ø�>‰>˜AÒÜÐVÓWÐWØ× Ñ  §¡¨1£Ó.Ð.r    )rS   rY   r�   Ústackr{   Únum_columnsÚcolumn)rT   r  Úir  s      @r   Útbl_to_tensorr    sV   ø€ ô( $ G¨WÓ5€Eð/”r—‘õ /ð
 �;‰;¼%ÀÇÁÓ:PÖQ°Q™	 #§*¡*¨Q£-Õ0ÒQÓRÐRùÒQs   ÁA+Úbatchc                 ó”   — t        dd«      }|j                  | j                  D �cg c]  }|j                  |«      ‘Œ c}«      S c c}w )að  
    Convert a PyArrow RecordBatch to a PyTorch Tensor.

    Each column is converted to a tensor (using zero-copy via DLPack)
    and the columns are then stacked into a single tensor.

    Fails if torch is not installed.
    Fails if a column's data type is not supported by PyTorch.

    Parameters
    ----------
    batch : pa.RecordBatch
        The record batch to convert to a tensor.

    Returns
    -------
    torch.Tensor: The tensor containing the columns of the record batch.
    r  )rS   r  r�   r	  )r  r  r^   s      r   Úbatch_to_tensorr  2  s<   € ô& $ G¨WÓ5€EØ�;‰;¸%¿-¹-ÖH°3˜×)Ñ)¨#Õ.ÒHÓIÐIùÒHs   ¦Ac                 ó  — t        dd«      }t        dd«      }| j                  D �cg c]  }|j                  d¬«      ‘Œ }}|j                  |j	                  |«      «      }t        |j                  d¬«      «      }|S c c}w )a‡  
    Convert a PyArrow RecordBatch to a list of PyTorch Tensor, one per row

    Each column is converted to a tensor (using zero-copy via DLPack)
    and the columns are then stacked into a single tensor.  The 2D tensor
    is then converted to a list of tensors, one per row

    Fails if torch or numpy is not installed.
    Fails if a column's data type is not supported by PyTorch.
    r  ÚnumpyF)Úzero_copy_onlyr   r¨   )rS   r�   Úto_numpyÚtensorÚcolumn_stackr“   Úunbind)r  r  r  r^   r�   ÚstackedÚrowss          r   Úbatch_to_tensor_rowsr  I  sw   € ô $ G¨WÓ5€EÜ# G¨WÓ5€EØ=B¿]¹]ÖK°cˆs�|‰|¨5ˆ|Õ1ÐK€GÐKØ�l‰l˜5×-Ñ-¨gÓ6Ó7€GÜ�—‘ 1�Ó%Ó&€DØ€Kùò Ls   §A?c                 óp  — t        dd«      }t        | j                  j                  | j                  «      D ��ci c]  \  }}||j                  |«      “Œ }}}t        | j                  «      D ���cg c])  }|j                  «       D ��ci c]  \  }}|||   “Œ c}}‘Œ+ c}}}S c c}}w c c}}w c c}}}w )a6  
    Convert a PyArrow RecordBatch to a list of per-row dicts of PyTorch Tensors.

    Each column is first converted to a 1-D tensor (zero-copy via DLPack), then
    sliced per row. The result is a list whose length is ``batch.num_rows`` and
    whose items are dicts keyed by column name. This shape composes directly
    with PyTorch's default ``DataLoader`` collate, which stacks the per-row
    dicts back into a dict of batched tensors.

    Fails if torch is not installed.
    Fails if a column's data type is not supported by PyTorch.

    Parameters
    ----------
    batch : pa.RecordBatch
        The record batch to convert.

    Returns
    -------
    list[dict[str, torch.Tensor]]
        One per-row dict per row in the batch. Each dict maps column name to a
        0-D tensor view into the column.
    r  )	rS   Úzipra   Únamesr�   r	  r{   Únum_rowsrÒ   )r  r  rx   r^   Útensorsr  r  s          r   Úbatch_to_tensor_dictr#  \  s¯   € ô0 $ G¨WÓ5€Eô ˜UŸ\™\×/Ñ/°·±Ó?÷áˆD�#ð 	ˆe×Ñ Ó$Ñ$ð€Gñ ô �u—~‘~Ó&÷ð àð .5¯]©]«_×=™\˜T 6ˆˆv�a‰y‰Õ=ôð ùó	ùó
 	>ùôs   ºB%Á2B1Â
B+ÂB1Â+B1rX   )Or²   rù   rP   r·   r3   rC   rð   r   r   Údecimalr   r   Útypingr   r   r	   r
   r   Úurllib.parser   r  r”   ÚpyarrowrY   Ú
pyarrow.fsr;   r1   Ú_lancedbr   rý   r   r   r   rD   r   r%   r9   r=   rM   rS   ÚTablerb   rc   re   rt   ÚFieldr~   ÚSchemar†   ÚDataTypery   rz   r—   r¢   r©   r®   Úregisterrj   ÚbytesrÝ   r\   r“   r    ÚdictÚScalarÚ	MapScalarr•   Úbool_ÚintegerÚfloatingÚ
datetime64rû   ÚBaseExceptionr  r  ÚRecordBatchr  r  r#  rs   r    r   ú<module>r9     s¡  ðó
 Û Û Û Û 	Û Û ß #Ý Ý $ß 4Õ 4Ý !ã Û Ý å Gòñ 	Ó€ð˜˜c 7§<¡<Ð/Ñ0ð °Só ð6+˜%  W§\¡\Ð 1Ñ2ð +°só +ð6*�Sð *˜U 5×#3Ñ#3°SÐ#8Ñ9ó *ð64�5˜˜gŸl™lÐ*Ñ+ð 4°Sð 4¸Só 4ñ4D Có Dñ& ˜Ÿ™ð  ¨H°U¸3À¸9Ñ5EÑ,Fó  ðFA˜T #™Yð A¨3ó Að <@ñØ�8‰8ðØ ™9ðØ+3°C©=ðà	ˆ#�Yóñ"( B§I¡Ið (°H¸S±Mð (ÈSó (ðV §¡ð °ó ð. r§{¡{ð °xÀ±}ó ð; #ð ;¨$ó ;ð˜X c™]ð ¨x¸©}ó ð0Ø�I‰Iðàðð �C‰=ðð ! ™ó	ðB ñQó ðQð ×Ñ�sÓðˆSò ó ðð
 ×Ñ�uÓð4ˆUò 4ó ð4ð ×Ñ�sÓðˆSò ó ðð ×Ñ�uÓðˆUò ó ðð ×Ñ�wÓð,ˆWò ,ó  ð,ð ×Ñ�tÓðˆTò ó ðð ×Ñ‘t˜D“zÓ"ð‰T�$‹Zò ó #ðð ×Ñ�xÓ ð$ˆXò $ó !ð$ð ×Ñ�tÓð$ˆTò $ó ð$ð ×Ñ�tÓØ×Ñ�uÓð;ˆU�4˜�;Ñò ;ó ó ð;ð ×Ñ�tÓðˆTò ó ðð ×Ñ�r—y‘yÓ!ð'ˆR�Y‰Yò 'ó "ð'ð ×Ñ�r—|‘|Ó$ð$ˆR�\‰\ò $ó %ð$ð ×Ñ�r—z‘zÓ"ð(ˆR�Z‰Zò (ó #ð(ð ×Ñ�r—x‘xÓ ð%ˆR�X‰Xò %ó !ð%ð ×Ñ�r—z‘zÓ"ð$ˆR�Z‰Zò $ó #ð$ð ×Ñ�r—{‘{Ó#ð&ˆR�[‰[ò &ó $ð&ð ×Ñ�r—}‘}Ó%ðVˆR�]‰]ò Vó &ðVòð,%˜có %ð
	9˜]ð 	9°#ó 	9ðS�r—x‘xó Sð<J˜2Ÿ>™>ó Jð. §¡ó ð&  §¡ô  r    