Ë
    kQêju0  ã            
      óò  — U d Z ddlmZ ddlmZmZ ddlmZ ddlmZm	Z	 ddl
ZddlmZmZmZmZ g d¢Zi d	 ej$                  «       “d
 ej$                  «       “d ej&                  «       “d ej(                  «       “d ej*                  «       “d ej,                  «       “d ej.                  «       “d ej0                  «       “d ej2                  «       “d ej4                  «       “d ej6                  «       “d ej8                  «       “d ej8                  «       “d ej:                  «       “d ej:                  «       “d ej<                  «       “d ej<                  «       “ ej<                  «        ej>                  «        ej>                  «        ej@                  «        ej@                  «        ejB                  «       dœ¥Z"de#d<   d#d„Z$e	de%e&e'e(e)eeef	   Z* G d„ d«      Z+d$d „Z,d%d!„Z-d&d"„Z.y)'a¿  Type-safe expression builder for filters and projections.

Instead of writing raw SQL strings you can build expressions with Python
operators::

    from lancedb.expr import col, lit

    # filter: age > 18 AND status = 'active'
    filt = (col("age") > lit(18)) & (col("status") == lit("active"))

    # projection: compute a derived column
    proj = {"score": col("raw_score") * lit(1.5)}

    table.search().where(filt).select(proj).to_list()
é    )Úannotations)ÚdateÚdatetime)ÚDecimal)ÚIterableÚUnionN)ÚPyExprÚexpr_colÚexpr_litÚ	expr_func)ÚExprÚcolÚlitÚfuncÚboolÚbooleanÚint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64Úfloat16Úfloat32ÚfloatÚfloat64ÚdoubleÚstringÚutf8)ÚstrÚlarge_stringÚ
large_utf8Údate32r   Údate64ÚdictÚ_STR_TO_PA_TYPEc                ó<   — t        | t        «      r| S t        | «      S )z_Return *value* as an :class:`Expr`, wrapping plain Python values via
    :func:`lit` if needed.)Ú
isinstancer   r   ©Úvalues    úQ/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/expr.pyÚ_coercer.   ;   s   € ô �%œÔØˆÜˆu‹:Ðó    r   c                  óB  — e Zd ZdZdZddœ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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d-d„Zd.d„Zd/d„Zd0d„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&d1d&„Z'd2d'„Z(d2d(„Z)y)3r   a³  A type-safe expression node.

    Construct instances with :func:`col` and :func:`lit`, then combine them
    using Python operators or the named methods below.

    Examples
    --------
    >>> from lancedb.expr import col, lit
    >>> filt = (col("age") > lit(18)) & (col("name").lower() == lit("alice"))
    >>> proj = {"double": col("x") * lit(2)}

    Notes
    -----
    An ``Expr`` has no Python truth value: ``bool(expr)`` raises ``TypeError``.
    Combine expressions with ``&``, ``|`` and ``~`` (wrapping each comparison in
    parentheses) instead of ``and``, ``or`` and ``not``, and write a range as
    ``(col("x") > 1) & (col("x") < 5)`` rather than ``1 < col("x") < 5``.
    N©Úcolumn_pathc               ó    — || _         || _        y )N)Ú_innerÚ_column_path)ÚselfÚinnerr2   s      r-   Ú__init__zExpr.__init___   s   € ØˆŒØ'ˆÕr/   c                ó   — t        d«      ‚)Na(  The truth value of an Expr is ambiguous. Combine expressions with '&' (and), '|' (or) and '~' (not), and wrap each comparison in parentheses, e.g. (col('x') > 1) & (col('x') < 5). Do not use 'and', 'or', 'not', 'in' or chained comparisons such as 1 < col('x') < 5; use Expr.isin() for membership.)Ú	TypeError©r6   s    r-   Ú__bool__zExpr.__bool__c   s   € ô
 ð@ó
ð 	
r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zEqual to (``col("x") == 1``).)r   r4   Úeqr.   ©r6   Úothers     r-   Ú__eq__zExpr.__eq__r   ó$   € ä�D—K‘K—N‘N¤7¨5£>×#8Ñ#8Ó9Ó:Ð:r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z!Not equal to (``col("x") != 1``).)r   r4   Úner.   r?   s     r-   Ú__ne__zExpr.__ne__v   rB   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zLess than (``col("x") < 1``).)r   r4   Últr.   r?   s     r-   Ú__lt__zExpr.__lt__z   rB   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z*Less than or equal to (``col("x") <= 1``).)r   r4   Últer.   r?   s     r-   Ú__le__zExpr.__le__~   ó$   € ä�D—K‘K—O‘O¤G¨E£N×$9Ñ$9Ó:Ó;Ð;r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z Greater than (``col("x") > 1``).)r   r4   Úgtr.   r?   s     r-   Ú__gt__zExpr.__gt__‚   rB   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z-Greater than or equal to (``col("x") >= 1``).)r   r4   Úgter.   r?   s     r-   Ú__ge__zExpr.__ge__†   rL   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z"Logical AND (``expr_a & expr_b``).)r   r4   Úand_r.   r?   s     r-   Ú__and__zExpr.__and__Œ   s&   € ä�D—K‘K×$Ñ$¤W¨U£^×%:Ñ%:Ó;Ó<Ð<r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z)Right-hand logical AND (``True & expr``).)r   r.   r4   rT   r?   s     r-   Ú__rand__zExpr.__rand__�   s&   € ä”G˜E“N×)Ñ)×.Ñ.¨t¯{©{Ó;Ó<Ð<r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z!Logical OR (``expr_a | expr_b``).)r   r4   Úor_r.   r?   s     r-   Ú__or__zExpr.__or__”   rL   r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z)Right-hand logical OR (``False | expr``).)r   r.   r4   rY   r?   s     r-   Ú__ror__zExpr.__ror__˜   ó&   € ä”G˜E“N×)Ñ)×-Ñ-¨d¯k©kÓ:Ó;Ð;r/   c                óH   — t        | j                  j                  «       «      S )zLogical NOT (``~expr``).)r   r4   Únot_r;   s    r-   Ú
__invert__zExpr.__invert__œ   s   € ä�D—K‘K×$Ñ$Ó&Ó'Ð'r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zAdd (``col("x") + 1``).)r   r4   Úaddr.   r?   s     r-   Ú__add__zExpr.__add__¢   rL   r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z"Right-hand add (``1 + col("x")``).)r   r.   r4   rb   r?   s     r-   Ú__radd__zExpr.__radd__¦   r]   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zSubtract (``col("x") - 1``).)r   r4   Úsubr.   r?   s     r-   Ú__sub__zExpr.__sub__ª   rL   r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z'Right-hand subtract (``1 - col("x")``).)r   r.   r4   rg   r?   s     r-   Ú__rsub__zExpr.__rsub__®   r]   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zMultiply (``col("x") * 2``).)r   r4   Úmulr.   r?   s     r-   Ú__mul__zExpr.__mul__²   rL   r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z'Right-hand multiply (``2 * col("x")``).)r   r.   r4   rl   r?   s     r-   Ú__rmul__zExpr.__rmul__¶   r]   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )zDivide (``col("x") / 2``).)r   r4   Údivr.   r?   s     r-   Ú__truediv__zExpr.__truediv__º   rL   r/   c                óp   — t        t        |«      j                  j                  | j                  «      «      S )z%Right-hand divide (``1 / col("x")``).)r   r.   r4   rq   r?   s     r-   Ú__rtruediv__zExpr.__rtruediv__¾   r]   r/   c                óH   — t        | j                  j                  «       «      S )z*Convert string column values to lowercase.)r   r4   Úlowerr;   s    r-   rv   z
Expr.lowerÄ   ó   € ä�D—K‘K×%Ñ%Ó'Ó(Ð(r/   c                óH   — t        | j                  j                  «       «      S )z*Convert string column values to uppercase.)r   r4   Úupperr;   s    r-   ry   z
Expr.upperÈ   rw   r/   c                óp   — t        | j                  j                  t        |«      j                  «      «      S )z/Return True where the string contains *substr*.)r   r4   Úcontainsr.   )r6   Úsubstrs     r-   r{   zExpr.containsÌ   s&   € ä�D—K‘K×(Ñ(¬°«×)?Ñ)?Ó@ÓAÐAr/   c                ó˜   — |D �cg c]  }t        |«      j                  ‘Œ }}t        | j                  j                  |«      «      S c c}w )z<Return True where the value is one of *values* (SQL ``IN``).)r.   r4   r   Úisin)r6   ÚvaluesÚvr7   s       r-   r~   z	Expr.isinÐ   s>   € à,2Ö3 q”˜“×"Ó"Ð3ˆÐ3Ü�D—K‘K×$Ñ$ UÓ+Ó,Ð,ùò 4s   …Ac           	     óà   — t        |t        «      r
	 t        |   }t        | j                  j                  |«      «      S # t        $ r% t	        d|› ddj                  t        «      › �«      ‚w xY w)u  Cast values to *data_type*.

        Parameters
        ----------
        data_type:
            A PyArrow ``DataType`` (e.g. ``pa.int32()``) or one of the type
            name strings: ``"bool"``, ``"int8"``, ``"int16"``, ``"int32"``,
            ``"int64"``, ``"uint8"``â€“``"uint64"``, ``"float32"``,
            ``"float64"``, ``"string"``, ``"date32"``, ``"date64"``.
        zunsupported data type: 'z'. Supported: z, )	r*   r"   r(   ÚKeyErrorÚ
ValueErrorÚjoinr   r4   Úcast)r6   Ú	data_types     r-   r…   z	Expr.cast×   st   € ô �i¤Ô%ðÜ+¨IÑ6�	ô �D—K‘K×$Ñ$ YÓ/Ó0Ð0øô ò Ü Ø.¨y¨k¸Ø—y‘y¤Ó1Ð2ð4óð ðús	   ’	? ¿.A-c                ó$   — | j                  |«      S )z	Equal to.)rA   r?   s     r-   r>   zExpr.eqî   ó   € à�{‰{˜5Ó!Ð!r/   c                ó$   — | j                  |«      S )zNot equal to.)rE   r?   s     r-   rD   zExpr.neò   rˆ   r/   c                ó$   — | j                  |«      S )z
Less than.)rH   r?   s     r-   rG   zExpr.ltö   rˆ   r/   c                ó$   — | j                  |«      S )zLess than or equal to.)rK   r?   s     r-   rJ   zExpr.lteú   rˆ   r/   c                ó$   — | j                  |«      S )zGreater than.)rO   r?   s     r-   rN   zExpr.gtþ   rˆ   r/   c                ó$   — | j                  |«      S )zGreater than or equal to.)rR   r?   s     r-   rQ   zExpr.gte  rˆ   r/   c                ó$   — | j                  |«      S )zLogical AND.)rU   r?   s     r-   rT   z	Expr.and_  s   € à�|‰|˜EÓ"Ð"r/   c                ó$   — | j                  |«      S )zLogical OR.)rZ   r?   s     r-   rY   zExpr.or_
  rˆ   r/   c                ó6   — | j                   j                  «       S )z=Return the source name when this is a bare column expression.)r4   Úcolumn_namer;   s    r-   Ú_column_namezExpr._column_name  s   € à�{‰{×&Ñ&Ó(Ð(r/   c                ó6   — | j                   j                  «       S )z=Render the expression as a SQL string (useful for debugging).©r4   Úto_sqlr;   s    r-   r•   zExpr.to_sql  s   € à�{‰{×!Ñ!Ó#Ð#r/   c                ó>   — d| j                   j                  «       › d�S )NzExpr(ú)r”   r;   s    r-   Ú__repr__zExpr.__repr__  s   € Ø�t—{‘{×)Ñ)Ó+Ð,¨AÐ.Ð.r/   )r7   r	   r2   ú
str | NoneÚreturnÚNone)rš   r   )r@   ÚExprLikerš   ú'Expr')r@   r�   rš   r�   )rš   r�   )r|   ú
'ExprLike'rš   r�   )r   z'Iterable[ExprLike]'rš   r�   )r†   zUnion[str, 'pa.DataType']rš   r�   )rš   r™   )rš   r"   )*Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__hash__r8   r<   rA   rE   rH   rK   rO   rR   rU   rW   rZ   r\   r`   rc   re   rh   rj   rm   ro   rr   rt   rv   ry   r{   r~   r…   r>   rD   rG   rJ   rN   rQ   rT   rY   r’   r•   r˜   © r/   r-   r   r   G   sË   „ ñð* €HàCGõ (ó
ó;ó;ó;ó<ó;ó<ó=ó=ó<ó<ó(ó<ó<ó<ó<ó<ó<ó<ó<ó)ó)óBó-ó1ó."ó"ó"ó"ó"ó"ó#ó"ó)ó$ô/r/   c                ó.   — t        t        | «      | ¬«      S )zßReference a table column by name.

    Parameters
    ----------
    name:
        The column name.

    Examples
    --------
    >>> from lancedb.expr import col, lit
    >>> col("age") > lit(18)
    Expr((age > 18))
    r1   )r   r
   )Únames    r-   r   r     s   € ô ”˜“¨DÔ1Ð1r/   c                óÔ   — t        | t        t        t        t        t
        t        t        t        f«      s!t        dt        | «      j                  › �«      ‚t        t        | «      «      S )aL  Create a literal (constant) value expression.

    Parameters
    ----------
    value:
        A Python ``bool``, ``int``, ``float``, ``str``, ``bytes``, ``date``,
        ``datetime``, or ``Decimal``.

    Examples
    --------
    >>> from lancedb.expr import col, lit
    >>> col("price") * lit(1.1)
    Expr((price * 1.1))
    zUnsupported literal type: )r*   r   Úintr   r"   Úbytesr   r   r   r:   ÚtyperŸ   r   r   r+   s    r-   r   r   0  sL   € ô �eœd¤C¬´´U¼DÄ(ÌGÐTÔUÜÐ4´T¸%³[×5IÑ5IÐ4JÐKÓLÐLä”˜“Ó Ð r/   c                óz   — |D �cg c]  }t        |«      j                  ‘Œ }}t        t        | |«      «      S c c}w )aj  Call an arbitrary SQL function by name.

    Parameters
    ----------
    name:
        The SQL function name (e.g. ``"lower"``, ``"upper"``).
    *args:
        The function arguments as :class:`Expr` or plain Python literals.

    Examples
    --------
    >>> from lancedb.expr import col, func
    >>> func("lower", col("name"))
    Expr(lower(`name`))
    )r.   r4   r   r   )r¦   ÚargsÚaÚ
inner_argss       r-   r   r   E  s8   € ð  .2Ö2¨”'˜!“*×#Ó#Ð2€JÐ2Ü”	˜$ 
Ó+Ó,Ð,ùò 3s   …8)r,   rž   rš   r�   )r¦   r"   rš   r   )r,   z<Union[bool, int, float, str, bytes, date, datetime, Decimal]rš   r   )r¦   r"   r¬   rœ   rš   r   )/r¢   Ú
__future__r   r   r   Údecimalr   Útypingr   r   ÚpyarrowÚpaÚlancedb._lancedbr	   r
   r   r   Ú__all__Úbool_r   r   r   r   r   r   r   r   r   r   r   r    r$   r%   r&   r(   Ú__annotations__r.   r   r¨   r   r"   r©   rœ   r   r   r   r   r¤   r/   r-   ú<module>r¸      s  ðòõ  #ç #Ý ß "ã ç BÓ Bâ
(€ðØ
ˆHˆB�H‰H‹Jðàˆxˆr�x‰x‹zðð ˆGˆB�G‰G‹Iðð ˆXˆR�X‰X‹Zð	ð
 ˆXˆR�X‰X‹Zðð ˆXˆR�X‰X‹Zðð ˆXˆR�X‰X‹Zðð ˆiˆb�i‰i‹kðð ˆiˆb�i‰i‹kðð ˆiˆb�i‰i‹kðð ˆzˆr�z‰z‹|ðð ˆzˆr�z‰z‹|ðð ˆZˆR�Z‰Z‹\ðð ˆzˆr�z‰z‹|ðð ˆjˆb�j‰j‹lðð  ˆiˆb�i‰i‹kð!ð" ˆIˆB�I‰I‹Kð#ð$ ˆ2�9‰9‹;Ø!�B—M‘M“OØ�"—-‘-“/Øˆb�i‰i‹kØˆB�I‰I‹KØˆb�i‰i‹kò/€�ó ó6ð �˜˜s E¨3°°t¸XÀwÐNÑO€÷R/ñ R/óp2ó"!ô*-r/   