Ë
    kQêj®K  ã                  ó   — d Z ddlm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
m	Z	 ddlmZ ddlmZmZmZmZmZmZmZ ddlZddlZddlmZmZ erdd	lmZ d
dlmZ  G d„ de«      Z ej@                  «       fd$d„Z! ej@                  «       df	 	 	 	 	 	 	 d%d„Z"d„ Z# e$e"de#«        ej@                  «       df	 	 	 	 	 	 	 d&d„Z%d'd„Z&d(d„Z'd)d„Z(d*d„Z)d+d„Z*d,d„Z+d-d„Z,d.d„Z-d.d„Z.d/d„Z/d0d„Z0 G d„ d ejb                  «      Z2d1d!„Z3d2d"„Z4d3d#„Z5y)4zPydantic adapter for LanceDB.é    )ÚannotationsN)ÚABCÚabstractmethod)ÚdateÚdatetime)ÚEnum)ÚTYPE_CHECKINGÚAnyÚListÚTypeÚUnionÚ_GenericAliasÚGenericAlias)Ú
CoreSchemaÚcore_schema)Ú	FieldInfoé   ©ÚEmbeddingFunctionConfigc                  óD   — e Zd Zeedd„«       «       Zeedd„«       «       Zy)ÚFixedSizeListMixinc                 ó   — t         ‚©N©ÚNotImplementedError© ó    úU/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/pydantic.pyÚdimzFixedSizeListMixin.dim#   ó
   € ô "Ð!r   c                 ó   — t         ‚r   r   r   r   r   Úvalue_arrow_typez#FixedSizeListMixin.value_arrow_type(   r    r   N©ÚreturnÚint©r$   úpa.DataType)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r"   r   r   r   r   r   "   s8   „ ØØò"ó ó ð"ð Øò"ó ó ñ"r   r   c                ó@   — ddl m}  |dt        «       t        | |«      S )Nr   )Úwarnz|lancedb.pydantic.vector() is deprecated, use lancedb.pydantic.Vector instead.This function will be removed in future release)Úwarningsr-   ÚDeprecationWarningÚVector)r   Ú
value_typer-   s      r   Úvectorr2   .   s$   € åáð	:äôô
 �#�zÓ"Ð"r   Tc                ó<   ‡ ‡‡—  G ˆ ˆˆfd„dt         t        «      }|S )aò  Pydantic Vector Type.

    !!! warning
        Experimental feature.

    Parameters
    ----------
    dim : int
        The dimension of the vector.
    value_type : pyarrow.DataType, optional
        The value type of the vector, by default pa.float32()
    nullable : bool, optional
        Whether the vector is nullable, by default it is True.

    Examples
    --------

    >>> import pydantic
    >>> from lancedb.pydantic import Vector
    ...
    >>> class MyModel(pydantic.BaseModel):
    ...     id: int
    ...     url: str
    ...     embeddings: Vector(768)
    >>> schema = pydantic_to_schema(MyModel)
    >>> assert schema == pa.schema([
    ...     pa.field("id", pa.int64(), False),
    ...     pa.field("url", pa.utf8(), False),
    ...     pa.field("embeddings", pa.list_(pa.float32(), 768))
    ... ])

    Notes
    -----
    ``Vector`` creates a type dynamically, so calls such as ``Vector(768)`` are
    not valid static type annotations. For an embedding field, use the standard
    ``list[float]`` annotation when running mypy; ``VectorField`` supplies the
    fixed dimension to LanceDB::

        class MyModel(LanceModel):
            text: str = embeddings.SourceField()
            vector: list[float] = embeddings.VectorField()
    c                  ó~   •— e Zd Zˆ fd„Zedˆfd„«       Zedˆ fd„«       Zed	ˆfd„«       Ze	 	 	 	 	 	 d
ˆ ˆfd„«       Z	y)úVector.<locals>.FixedSizeListc                ó   •— d‰› d�S )NzFixedSizeList(dim=ú)r   ©Úselfr   s    €r   Ú__repr__z&Vector.<locals>.FixedSizeList.__repr__j   s   ø€ Ø'¨ u¨AÐ.Ð.r   c                 ó   •— ‰ S r   r   ©Únullables   €r   r=   z&Vector.<locals>.FixedSizeList.nullablem   ó   ø€ àˆOr   c                 ó   •— ‰ S r   r   ©r   s   €r   r   z!Vector.<locals>.FixedSizeList.dimq   ó   ø€ àˆJr   c                 ó   •— ‰ S r   r   ©r1   s   €r   r"   z.Vector.<locals>.FixedSizeList.value_arrow_typeu   ó	   ø€ àÐr   c           
     óø   •— t        j                  | t        j                  ‰‰t        j                  j                  ‰«      rt        j                  «       ¬«      «      S t        j                  «       ¬«      «      S )N©Ú
min_lengthÚ
max_lengthÚitems_schema©r   Ú no_info_after_validator_functionÚlist_schemaÚpaÚtypesÚ
is_integerÚ
int_schemaÚfloat_schema©ÚclsÚ_source_typeÚ_handlerr   r1   s      €€r   Ú__get_pydantic_core_schema__z:Vector.<locals>.FixedSizeList.__get_pydantic_core_schema__y   sn   ø€ ô ×?Ñ?ØÜ×'Ñ'Ø"Ø"ô Ÿ8™8×.Ñ.¨zÔ:ô $×.Ñ.Ó0ô	óð ô )×5Ñ5Ó7ôóð r   N©r$   Úboolr#   r&   ©rT   r
   rU   zpydantic.GetCoreSchemaHandlerr$   r   )
r(   r)   r*   r:   r+   r=   r   r"   ÚclassmethodrV   ©r   r=   r1   s   €€€r   ÚFixedSizeListr5   i   sp   ø„ ô	/ð 
ô	ó 
ð	ð 
ô	ó 
ð	ð 
ô	ó 
ð	ð 
ð	Ø"ð	Ø.Kð	àõ	ó 
ñ	r   r\   ©Úlistr   )r   r1   r=   r\   s   ``` r   r0   r0   :   s!   ú€ ÷^ð œÔ0ô ðB Ðr   c                 ó   — t        d«      ‚)Nz@Vector must be parameterized with a dimension, e.g. Vector(128).)Ú	TypeError)Ú_argss    r   Ú_raise_bare_vector_errorrb   �   s   € Ü
ÐVÓ
WÐWr   rV   c                ó<   ‡ ‡‡—  G ˆ ˆˆfd„dt         t        «      }|S )a  Pydantic MultiVector Type for multi-vector embeddings.

    This type represents a list of vectors, each with the same dimension.
    Useful for models that produce multiple embeddings per input, like ColPali.

    Parameters
    ----------
    dim : int
        The dimension of each vector in the multi-vector.
    value_type : pyarrow.DataType, optional
        The value type of the vectors, by default pa.float32()
    nullable : bool, optional
        Whether the multi-vector is nullable, by default it is True.

    Examples
    --------

    >>> import pydantic
    >>> from lancedb.pydantic import MultiVector
    ...
    >>> class MyModel(pydantic.BaseModel):
    ...     id: int
    ...     text: str
    ...     embeddings: MultiVector(128)  # List of 128-dimensional vectors
    >>> schema = pydantic_to_schema(MyModel)
    >>> assert schema == pa.schema([
    ...     pa.field("id", pa.int64(), False),
    ...     pa.field("text", pa.utf8(), False),
    ...     pa.field("embeddings", pa.list_(pa.list_(pa.float32(), 128)))
    ... ])
    c                  ó�   •— e Zd Zˆ fd„Zedˆfd„«       Zed	ˆ fd„«       Zed
ˆfd„«       Zedd„«       Ze		 	 	 	 	 	 dˆ ˆfd„«       Z
y)ú$MultiVector.<locals>.MultiVectorListc                ó   •— d‰› d�S )NzMultiVector(dim=r7   r   r8   s    €r   r:   z-MultiVector.<locals>.MultiVectorList.__repr__º   s   ø€ Ø% c U¨!Ð,Ð,r   c                 ó   •— ‰ S r   r   r<   s   €r   r=   z-MultiVector.<locals>.MultiVectorList.nullable½   r>   r   c                 ó   •— ‰ S r   r   r@   s   €r   r   z(MultiVector.<locals>.MultiVectorList.dimÁ   rA   r   c                 ó   •— ‰ S r   r   rC   s   €r   r"   z5MultiVector.<locals>.MultiVectorList.value_arrow_typeÅ   rD   r   c                  ó   — y©NTr   r   r   r   Úis_multi_vectorz4MultiVector.<locals>.MultiVectorList.is_multi_vectorÉ   s   € àr   c                ó  •— t        j                  | t        j                  t        j                  ‰‰t        j                  j                  ‰«      rt        j                  «       nt        j                  «       ¬«      ¬«      «      S )NrF   )rI   rJ   rR   s      €€r   rV   zAMultiVector.<locals>.MultiVectorList.__get_pydantic_core_schema__Í   sk   ø€ ô ×?Ñ?ØÜ×'Ñ'Ü!,×!8Ñ!8Ø#&Ø#&ô  "Ÿx™x×2Ñ2°:Ô>ô (×2Ñ2Ô4ä!,×!9Ñ!9Ó!;ô"ô
óð r   NrW   r#   r&   rY   )r(   r)   r*   r:   r+   r=   r   r"   rl   rZ   rV   r[   s   €€€r   ÚMultiVectorListre   ¹   s„   ø„ ô	-ð 
ô	ó 
ð	ð 
ô	ó 
ð	ð 
ô	ó 
ð	ð 
ò	ó 
ð	ð 
ð	Ø"ð	Ø.Kð	àõ	ó 
ñ	r   rn   r]   )r   r1   r=   rn   s   ``` r   ÚMultiVectorro   –   s!   ú€ ÷F%ð %œ$Ô 2ô %ðN Ðr   c                óÊ  — | t         u rt        j                  «       S | t        u rt        j                  «       S | t
        u rt        j                  «       S | t        u rt        j                  «       S | t        u rt        j                  «       S | t        u rt        j                  «       S | t        u r#t        |d«      }t        j                  d|¬«      S t!        | dd«      t"        t$        fv rdt!        | dd«      }|st'        d| › d�«      ‚|D �ch c]  }|t(        usŒ|’Œ }}t+        |«      d	kD  rt'        d| › d
�«      ‚|d   }t-        ||«      S t'        d| › d�«      ‚c c}w )z‹Convert a field with native Python type to Arrow data type.

    Raises
    ------
    TypeError
        If the type is not supported.
    ÚtzÚus)rq   Ú
__origin__NÚ__args__z9Converting Pydantic type to Arrow Type: unsupported type zB. Specify the element type, e.g. List[int] instead of a bare List.r   zu. All tuple elements must have the same type; use a nested LanceModel for a fixed set of fields with different types.r   ú.)r%   rM   Úint64ÚfloatÚfloat64ÚstrÚutf8rX   Úbool_ÚbytesÚbinaryr   Údate32r   Ú
get_extrasÚ	timestampÚgetattrr^   Útupler`   ÚEllipsisÚlenÚ_pydantic_list_child_to_arrow)Úpy_typeÚfieldrq   ÚargsÚargÚelement_typesÚchilds          r   Ú_py_type_to_arrow_typerŒ   ã   se  € ð ”#�~Ü�x‰x‹zÐØ	”EÑ	Ü�z‰z‹|ÐØ	”C‰Ü�w‰w‹yÐØ	”D‰Ü�x‰x‹zÐØ	”EÑ	Ü�y‰y‹{ÐØ	”D‰Ü�y‰y‹{ÐØ	”HÑ	Ü˜˜tÓ$ˆÜ�|‰|˜D RÔ(Ð(Ü	�˜,¨Ó	-´$¼°Ñ	>ô
 �w 
¨DÓ1ˆÙÜØKØ�)ð "ð"óð ð )-ÖD °¼8Ò0CšÐDˆÐDÜˆ}Ó Ò!ÜØKØ�)ð TðTóð ð
 �Q‘ˆÜ,¨U°EÓ:Ð:Ü
Ø
CÀGÀ9ÈAÐNóð ùò Es   ÄE ÄE c                ó˜   — | j                   j                  «       D ��cg c]  \  }}|j                  durt        ||«      ‘Œ! c}}S c c}}w rk   )Úmodel_fieldsÚitemsÚexcludeÚ_pydantic_to_field)ÚmodelÚnamer‡   s      r   Ú_pydantic_model_to_fieldsr”     sJ   € ð !×-Ñ-×3Ñ3Ó5÷áˆD�%Ø�=‰= Ñ$ô 	˜4 Õ'óð ùó s   ž$Ac                óR  — dd„}t        j                  | «      �r} || t        j                  «      r t	        | «      }t        j                  |«      S  || t        «      rŠ t        | dd„ «      «       rEt        j                  t        j                  | j                  «       | j                  «       «      «      S t        j                  | j                  «       | j                  «       «      S  || t        «      r¢| D �ch c]  }t        |j                  «      ’Œ }}t        |«      dk(  r^|j!                  «       }|t"        u r:t        j$                  t        j&                  «       t        j(                  «       «      S t+        ||«      S t        j(                  «       S t+        | |«      S c c}w )Nc                ó:   — 	 t        | |«      S # t        $ r Y yw xY w©NF)Ú
issubclassr`   )Ú	candidateÚbases     r   Ú_safe_issubclassz6_pydantic_type_to_arrow_type.<locals>._safe_issubclass  s&   € ð	Ü˜i¨Ó.Ð.øÜò 	Ùð	ús   ‚ Ž	™rl   c                  ó   — yr—   r   r   r   r   ú<lambda>z._pydantic_type_to_arrow_type.<locals>.<lambda>+  s   � r   r   )r™   r
   rš   Útyper$   rX   )ÚinspectÚisclassÚpydanticÚ	BaseModelr”   rM   Ústructr   r�   Úlist_r"   r   r   rž   Úvaluer„   Úpopry   Ú
dictionaryÚint32rz   rŒ   )Útpr‡   r›   ÚfieldsÚmÚvalue_typesr1   s          r   Ú_pydantic_type_to_arrow_typer­     s4  € óô ‡��rÕÙ˜B¤× 2Ñ 2Ô3ä.¨rÓ2ˆFÜ—9‘9˜VÓ$Ð$Ù˜BÔ 2Ô3Ø<Œw�rÐ,©mÓ<Ô>Ü—x‘x¤§¡¨×)<Ñ)<Ó)>ÀÇÁÃÓ IÓJÐJä—8‘8˜B×/Ñ/Ó1°2·6±6³8Ó<Ð<Ù˜B¤Ô%ð
 35Ö5¨Qœ4 §¡�=Ð5ˆKÐ5Ü�;Ó 1Ò$Ø(Ÿ_™_Ó.�
Ø¤Ñ$äŸ=™=¬¯©«´R·W±W³YÓ?Ð?Ü-¨j¸%Ó@Ð@Ü—7‘7“9ÐÜ! " eÓ,Ð,ùò 6s   Ã:F$c           	     óÂ   — t        | «      }|�4t        j                  t        j                  dt	        ||«      d«      «      S t        j                  t	        | |«      «      S )NÚitemT)Ú_unwrap_optional_annotationrM   r¤   r‡   r­   )r‹   r‡   Ú	unwrappeds      r   r…   r…   ?  sT   € Ü+¨EÓ2€IØÐÜ�x‰xÜ�H‰H�VÔ9¸)ÀUÓKÈTÓRó
ð 	
ô �8‰8Ô0°¸Ó>Ó?Ð?r   c                ó  — t        | t        t        f«      ri| j                  }| j                  }|t
        k(  rG|D �cg c]  }|t        d «      usŒ|‘Œ }}t        |«      dk(  rt        |«      t        |«      k7  r|d   S y t        j                  dk\  rmt        | t        j                  «      rS| j                  }|D �cg c]  }|t        d «      usŒ|‘Œ }}t        |«      dk(  rt        |«      t        |«      k7  r|d   S y c c}w c c}w )Nr   r   ©é   é
   )Ú
isinstancer   r   rs   rt   r   rž   r„   ÚsysÚversion_inforN   Ú	UnionType)Ú
annotationÚoriginrˆ   r‰   Únon_nones        r   r°   r°   H  sð   € Ü�*œ}¬lÐ;Ô<Ø×&Ñ&ˆØ×"Ñ"ˆØ”UŠ?Ø'+ÖE ¨s¼$¸t»*Ò/DšÐEˆHÐEÜ�8‹} Ò!¤c¨(£m´s¸4³yÒ&@Ø ‘{Ð"ð ô 
×	Ñ	˜WÒ	$¬°JÄÇÁÔ)PØ×"Ñ"ˆØ#'ÖA˜C¨3´d¸4³jÒ+@’CÐAˆÐAÜˆx‹=˜AÒ¤# h£-´3°t³9Ò"<Ø˜A‘;ÐØùò Fùò
 Bs   ¼DÁDÂ=DÃDc                ó\  — t        | «      }|�|S t        | j                  «      }|�t        || «      S t	        | j                  t
        t        f«      rE| j                  j                  }| j                  j                  }|t        u r|d   }t        || «      S t        | j                  | «      S )z.Convert a Pydantic FieldInfo to Arrow DataTyper   )Ú_embedding_vector_to_arrow_typer°   rº   r­   r¶   r   r   rs   rt   r^   r…   )r‡   Úembedding_vector_typer±   r»   rˆ   r‹   s         r   Ú_pydantic_to_arrow_typerÀ   X  s£   € ä;¸EÓBÐØÐ(Ø$Ð$ä+¨E×,<Ñ,<Ó=€IØÐÜ+¨I°uÓ=Ð=Ü�%×"Ñ"¤]´LÐ$AÔBØ×!Ñ!×,Ñ,ˆØ×Ñ×(Ñ(ˆà”T‰>Ø˜‘GˆEÜ0°¸Ó>Ð>Ü'¨×(8Ñ(8¸%Ó@Ð@r   c                óž   — t        | «      syt        | d«      }t        j                  t        j                  «       |j                  «       «      S )z=Infer a fixed-size vector type from ``VectorField`` metadata.NÚvector_column_for)Ú_is_embedding_vector_annotationr   rM   r¤   Úfloat32Úndims)r‡   Úfunctions     r   r¾   r¾   k  s8   € ä*¨5Ô1Øä˜%Ð!4Ó5€HÜ�8‰8”B—J‘J“L (§.¡.Ó"2Ó3Ð3r   c                ó¾   — t        | d«      €yt        | j                  «      }|€| j                  }t        |dd «      }t        |dd«      }|t        u xr
 |t
        fk(  S )NrÂ   Frs   rt   r   )r   r°   rº   r�   r^   rw   )r‡   rº   r»   rˆ   s       r   rÃ   rÃ   t  sf   € Ü�%Ð,Ó-Ð5Øä,¨U×-=Ñ-=Ó>€JØÐØ×%Ñ%ˆ
ä�Z ¨tÓ4€FÜ�:˜z¨2Ó.€DØ”Tˆ>Ò.˜d¤u hÑ.Ð.r   c                ó¬  — t        | «      ryt        | j                  «      �yt        | j                  t        t
        f«      rI| j                  j                  }| j                  j                  }|t        k(  rt        d„ |D «       «      ryyt        j                  dk\  rQt        | j                  t        j                  «      r-| j                  j                  }|D ]  }|t        d«      u sŒ y yt        j                   | j                  «      r7	 t#        | j                  t$        «      r| j                  j'                  «       S 	 yy# t(        $ r Y yw xY w)z*Check if a Pydantic FieldInfo is nullable.TNc              3  ó6   K  — | ]  }|t        d «      u –— Œ y ­wr   )rž   )Ú.0Útyps     r   ú	<genexpr>zis_nullable.<locals>.<genexpr>‹  s   è ø€ Ò5¨�3œ$˜t›*Ô$Ñ5ùs   ‚r³   F)rÃ   r°   rº   r¶   r   r   rs   rt   r   Úanyr·   r¸   rN   r¹   rž   rŸ   r    r˜   r   r=   r`   )r‡   r»   rˆ   rË   s       r   Úis_nullablerÎ   �  s*  € ä& uÔ-ØÜ" 5×#3Ñ#3Ó4Ð@ØÜ�%×"Ñ"¤]´LÐ$AÔBØ×!Ñ!×,Ñ,ˆØ×Ñ×(Ñ(ˆØ”UŠ?ÜÑ5°Ô5Ô5Øð ô 
×	Ñ	˜WÒ	$¬°E×4DÑ4DÄeÇoÁoÔ)VØ×Ñ×(Ñ(ˆØò 	ˆCØ”d˜4“jÒ Ùð	ð ô 
�‰˜×)Ñ)Ô	*ð	Ü˜%×*Ñ*Ô,>Ô?Ø×'Ñ'×0Ñ0Ó2Ð2ð @ñ øô ò 	Ùð	ús   Ä3E Å	EÅEc                óX   — t        |«      }t        j                  | |t        |«      «      S )z,Convert a Pydantic field to a PyArrow Field.)rÀ   rM   r‡   rÎ   )r“   r‡   Údts      r   r‘   r‘   ›  s$   € ä	  Ó	'€BÜ�8‰8�D˜"œk¨%Ó0Ó1Ð1r   c                óB   — t        | «      }t        j                  |«      S )a7  Convert a [Pydantic Model][pydantic.BaseModel] to a
       [PyArrow Schema][pyarrow.Schema].

    Parameters
    ----------
    model : Type[pydantic.BaseModel]
        The Pydantic BaseModel to convert to Arrow Schema.

    Returns
    -------
    pyarrow.Schema
        The Arrow Schema

    Raises
    ------
    TypeError
        If a field has a type with no Arrow equivalent. A ``Tuple`` field becomes
        an Arrow list, so all its elements must have the same type, as in
        ``Tuple[int, int]`` or ``Tuple[float, ...]``; for a fixed set of fields
        with different types, such as ``Tuple[int, str]``, use a nested
        ``LanceModel`` (an Arrow struct) instead.

    Examples
    --------

    >>> from typing import List, Optional
    >>> import pydantic
    >>> from lancedb.pydantic import pydantic_to_schema, Vector
    >>> class FooModel(pydantic.BaseModel):
    ...     id: int
    ...     s: str
    ...     vec: Vector(1536)  # fixed_size_list<item: float32>[1536]
    ...     li: List[int]
    ...
    >>> schema = pydantic_to_schema(FooModel)
    >>> assert schema == pa.schema([
    ...     pa.field("id", pa.int64(), False),
    ...     pa.field("s", pa.utf8(), False),
    ...     pa.field("vec", pa.list_(pa.float32(), 1536)),
    ...     pa.field("li", pa.list_(pa.int64()), False),
    ... ])
    )r”   rM   Úschema)r’   rª   s     r   Úpydantic_to_schemarÓ   ¡  s   € ôV ' uÓ-€FÜ�9‰9�VÓÐr   c                  óT   — e Zd ZdZed„ «       Zedd„«       Zed„ «       Zedd„«       Zy)	Ú
LanceModelam  
    A Pydantic Model base class that can be converted to a LanceDB Table.

    Examples
    --------
    >>> import lancedb
    >>> from lancedb.pydantic import LanceModel, Vector
    >>>
    >>> class TestModel(LanceModel):
    ...     name: str
    ...     vector: Vector(2)
    ...
    >>> db = lancedb.connect("./example")
    >>> table = db.create_table("test", schema=TestModel)
    >>> table.add([
    ...     TestModel(name="test", vector=[1.0, 2.0])
    ... ])
    AddResult(version=2)
    >>> table.search([0., 0.]).limit(1).to_pydantic(TestModel)
    [TestModel(name='test', vector=FixedSizeList(dim=2))]
    c                óÄ   — t        | «      }| j                  «       }t        |«      dkD  r6ddlm} |j                  «       j                  |«      }|j                  |«      }|S )z6
        Get the Arrow Schema for this model.
        r   r   )ÚEmbeddingFunctionRegistry)rÓ   Úparse_embedding_functionsr„   Ú
embeddingsr×   Úget_instanceÚget_table_metadataÚwith_metadata)rS   rÒ   Ú	functionsr×   Úmetadatas        r   Úto_arrow_schemazLanceModel.to_arrow_schemaç  s^   € ô
 $ CÓ(ˆØ×1Ñ1Ó3ˆ	Üˆy‹>˜AÒå=à0×=Ñ=Ó?×RÑRØóˆHð ×)Ñ)¨(Ó3ˆFØˆr   c                óP   — t        | j                  «       j                  «       «      S )z4
        Get the field names of this model.
        )r^   Úsafe_get_fieldsÚkeys©rS   s    r   Úfield_nameszLanceModel.field_namesø  s!   € ô
 �C×'Ñ'Ó)×.Ñ.Ó0Ó1Ð1r   c                ó   — | j                   S r   )rŽ   rã   s    r   rá   zLanceModel.safe_get_fieldsÿ  s   € à×ÑÐr   c           	     óœ  — ddl m} g }| j                  «       j                  «       D ]6  \  }}|j                  du rŒt        |d«      }|€Œ$|j                  ||g«       Œ8 g }|D ]e  \  }}| j                  «       j                  «       D ]?  \  }}|j                  du rŒt        |d«      }	|	|u sŒ&|j                   ||||¬«      «       ŒA Œg |S )z@
        Parse the embedding functions from this model.
        r   r   TrÂ   Úsource_column_for)Úsource_columnÚvector_columnrÆ   )rÙ   r   rá   r�   r�   r   Úappend)
rS   r   Úvec_and_functionr“   Ú
field_infoÚfuncÚconfigsÚvecÚsourceÚsrc_funcs
             r   rØ   z$LanceModel.parse_embedding_functions  só   € õ
 	8àÐØ #× 3Ñ 3Ó 5× ;Ñ ;Ó =ò 	6ÑˆD�*Ø×!Ñ! TÑ)Øä˜jÐ*=Ó>ˆDØÑØ ×'Ñ'¨¨t¨Õ5ð	6ð ˆØ)ò 	‰IˆC�Ø&)×&9Ñ&9Ó&;×&AÑ&AÓ&Cò Ñ"�˜
Ø×%Ñ%¨Ñ-ØÜ% jÐ2EÓF�Ø˜tÒ#ð —N‘NÙ/Ø*0ÀÈdôõñð	ð  ˆr   N)r$   z	List[str])r$   zList['EmbeddingFunctionConfig'])	r(   r)   r*   Ú__doc__rZ   rß   rä   rá   rØ   r   r   r   rÕ   rÕ   Ð  sW   „ ñð, ñó ðð  ò2ó ð2ð ñ ó ð ð ò ó ñ r   rÕ   c                ó@   — | j                   xs i j                  |«      S )z;
    Get the extra metadata from a Pydantic FieldInfo.
    )Újson_schema_extraÚget)rì   Úkeys     r   r   r   '  s    € ð ×(Ñ(Ò.¨B×3Ñ3°CÓ8Ð8r   c                ó4   — t        | j                  «       «      S )z)Convert a Pydantic model to a dictionary.)Ú_enum_members_to_valuesÚ
model_dump)r’   s    r   Úmodel_to_dictrú   .  s   € ä" 5×#3Ñ#3Ó#5Ó6Ð6r   c                óz  — t        | t        «      r| j                  S t        | t        «      r-| j	                  «       D ��ci c]  \  }}|t        |«      “Œ c}}S t        | t        t        f«      r@| r>t        | d   t        t        t        t        f«      r| S | D �cg c]  }t        |«      ‘Œ c}S | S c c}}w c c}w )Nr   )r¶   r   r¥   Údictr�   rø   r^   r‚   r%   rw   ry   r|   )r¥   ÚkÚvs      r   rø   rø   3  s›   € ô �%œÔØ�{‰{ÐÜ�%œÔØ:?¿+¹+»-×H±$°!°Q�Ô*¨1Ó-Ñ-ÓHÐHÜ�%œ$¤˜Ô'©Eä�e˜A‘h¤¤e¬S´%Ð 8Ô9ØˆLØ49Ö:¨qÔ'¨Õ*Ò:Ð:Ø€Lùó Iùò
 ;s   Á B2ÂB8)r   r%   r1   r'   )r   r%   r1   r'   r=   rX   r$   zType[FixedSizeListMixin])r   r%   r1   r'   r=   rX   r$   r   )r†   z	Type[Any]r‡   r   r$   r'   )r’   úpydantic.BaseModelr$   zList[pa.Field])r©   r
   r‡   r   r$   r'   )r‹   r
   r‡   r   r$   r'   )rº   r
   r$   z
Any | None)r‡   r   r$   r'   )r‡   r   r$   zpa.DataType | None)r‡   r   r$   rX   )r“   ry   r‡   r   r$   zpa.Field)r’   zType[pydantic.BaseModel]r$   z	pa.Schema)rì   r   rö   ry   r$   r
   )r’   rÿ   r$   zdict[str, Any])r¥   r
   r$   r
   )6rò   Ú
__future__r   rŸ   r·   rN   Úabcr   r   r   r   Úenumr   Útypingr	   r
   r   r   r   r   r   ÚpyarrowrM   r¡   Úpydantic_corer   r   Úpydantic.fieldsr   rÙ   r   r   rÄ   r2   r0   rb   Úsetattrro   rŒ   r”   r­   r…   r°   rÀ   r¾   rÃ   rÎ   r‘   rÓ   r¢   rÕ   r   rú   rø   r   r   r   ú<module>r     sJ  ðñ $å "ã Û 
Û ß #ß #Ý ÷÷ ñ ó Û ß 1áÝ)å3ô	"˜ô 	"ð 0:¨r¯z©z«|ô 	#ð )3¨¯
©
«ÀtðPØ	ðPØ%ðPØ@DðPàóPòfXñ ˆÐ.Ð0HÔ Ið )3¨¯
©
«ÀtðJØ	ðJØ%ðJØ@DðJà	óJóZ0ófó-óB@óó Aó&4ó
/óó42ó,ô^T�×#Ñ#ô Tón9ó7ô
r   