Ë
    lQêjŽ%  ã                   óÒ   — d dl mZmZ d dlmZmZmZmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZ e G d„ d«      «       Ze G d„ d«      «       Ze G d„ d	«      «       Z G d
„ d«      Zy)é    )Ú	dataclassÚfield)ÚListÚDictÚAnyÚUnionÚSetÚOptional)
ÚKNNÚFilterÚGroupByÚLimitÚ
ProjectionÚScanÚRankÚSelectÚWhereÚKeyc                   ó   — e Zd ZU eed<   y)Ú	CountPlanÚscanN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© ó    úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/execution/expression/plan.pyr   r      s   … à
„Jr   r   c                   ól   — e Zd ZU eed<    ee¬«      Zeed<    ee¬«      Z	eed<    ee
¬«      Ze
ed<   y)ÚGetPlanr   ©Údefault_factoryÚfilterÚlimitÚ
projectionN)r   r   r   r   r   r   r   r#   r   r$   r   r%   r   r   r   r    r       s4   … à
ƒJÙ¨6Ô2€FˆFÓ2Ù¨Ô/€Eˆ5Ó/Ù"°:Ô>€J�
Ô>r   r    c                   óZ   — e Zd ZU eed<   eed<    ee¬«      Zeed<    ee	¬«      Z
e	ed<   y)ÚKNNPlanr   Úknnr!   r#   r%   N)r   r   r   r   r   r   r   r   r#   r   r%   r   r   r   r'   r'      s*   … à
ƒJØ	ƒHÙ¨6Ô2€FˆFÓ2Ù"°:Ô>€J�
Ô>r   r'   c                   ó˜  — e Zd ZdZ	 	 	 	 	 ddeeeeee	f   f      deee
eee	f   f      deeeeee	f   f      deeeeee	f   ef      deeeeee	f   ee   ee   f      f
d„Zd	eee	f   fd
„Zdd„Zdeeef   d	d fd„Zdeeeeee	f   f      d	d fd„Zdeee
eee	f   f      d	d fd„Zdeeeeee	f   f      d	d fd„Zddeded	d fd„Zy)ÚSearcha\  Payload for hybrid search operations.

    Can be constructed by directly providing the parameters, or by using the builder pattern.

    Examples:
        Direct construction with expressions:
            Search(
                where=Key("status") == "active",
                rank=Knn(query=[0.1, 0.2]),
                limit=Limit(limit=10),
                select=Select(keys={Key.DOCUMENT}),
            )

        Direct construction with dicts:
            Search(
                where={"status": "active"},
                rank={"$knn": {"query": [0.1, 0.2]}},
                limit=10,
                select=["#document", "#score"],
            )

        Builder pattern:
            (Search()
             .where(Key("status") == "active")
             .rank(Knn(query=[0.1, 0.2]))
             .limit(10)
             .select(Key.DOCUMENT))
    NÚwhereÚrankÚgroup_byr$   Úselectc                 óR  — |€d| _         ndt        |t        «      r|| _         nLt        |t        «      rt        j                  |«      | _         n!t        dt        |«      j                  › �«      ‚|€d| _        ndt        |t        «      r|| _        nLt        |t        «      rt        j                  |«      | _        n!t        dt        |«      j                  › �«      ‚|€t        «       | _        ndt        |t        «      r|| _        nLt        |t        «      rt        j                  |«      | _        n!t        dt        |«      j                  › �«      ‚|€t        «       | _        n’t        |t        «      r|| _        nzt        |t        «      rt        j                  |ddœ«      | _        nLt        |t        «      rt        j                  |«      | _        n!t        dt        |«      j                  › �«      ‚|€t        «       | _        yt        |t        «      r|| _        yt        |t        «      rt        j                  |«      | _        yt        |t"        t$        f«      r&t        j                  dt#        |«      i«      | _        yt        d	t        |«      j                  › �«      ‚)
aW  Initialize a Search payload.

        Args:
            where: Where expression or dict for filtering results (defaults to None - no filtering)
                   Dict will be converted using Where.from_dict()
            rank: Rank expression or dict for scoring (defaults to None - no ranking)
                  Dict will be converted using Rank.from_dict()
                  Note: Primitive numbers are not accepted - use {"$val": number} for constant ranks
            group_by: GroupBy configuration for grouping and aggregating results (defaults to None)
                      Dict will be converted using GroupBy.from_dict()
            limit: Limit configuration for pagination (defaults to no limit)
                   Can be a Limit object, a dict for Limit.from_dict(), or an int
                   When passing an int, it creates Limit(limit=value, offset=0)
            select: Select configuration for keys (defaults to empty selection)
                    Can be a Select object, a dict for Select.from_dict(),
                    or a list/set of strings (e.g., ["#document", "#score"])
        Nz1where must be a Where object, dict, or None, got z/rank must be a Rank object, dict, or None, got z6group_by must be a GroupBy object, dict, or None, got r   )r$   Úoffsetz6limit must be a Limit object, dict, int, or None, got Úkeysz>select must be a Select object, dict, list, set, or None, got )Ú_whereÚ
isinstancer   ÚdictÚ	from_dictÚ	TypeErrorÚtyper   Ú_rankr   r   Ú	_group_byr   Ú_limitÚintr   Ú_selectÚlistÚset)Úselfr+   r,   r-   r$   r.   s         r   Ú__init__zSearch.__init__E   s  € ð4 ˆ=ØˆD�KÜ˜œuÔ%ØˆD�KÜ˜œtÔ$ÜŸ/™/¨%Ó0ˆD�KäØCÄDÈÃK×DXÑDXÐCYÐZóð ð
 ˆ<ØˆD�JÜ˜œdÔ#ØˆD�JÜ˜œdÔ#ÜŸ™¨Ó-ˆD�JäØAÄ$ÀtÃ*×BUÑBUÐAVÐWóð ð
 ÐÜ$›YˆD�NÜ˜¤'Ô*Ø%ˆD�NÜ˜¤$Ô'Ü$×.Ñ.¨xÓ8ˆD�NäØHÌÈhË×I`ÑI`ÐHaÐbóð ð
 ˆ=Ü›'ˆD�KÜ˜œuÔ%ØˆD�KÜ˜œsÔ#ÜŸ/™/°EÀQÑ*GÓHˆD�KÜ˜œtÔ$ÜŸ/™/¨%Ó0ˆD�KäØHÌÈeË×I]ÑI]ÐH^Ð_óð ð
 ˆ>Ü!›8ˆD�LÜ˜¤Ô'Ø!ˆD�LÜ˜¤Ô%Ü!×+Ñ+¨FÓ3ˆD�LÜ˜¤¤s Ô,ä!×+Ñ+¨V´T¸&³\Ð,BÓCˆD�LäØPÔQUÐV\ÓQ]×QfÑQfÐPgÐhóð r   Úreturnc                 ó:  — | j                   �| j                   j                  «       nd| j                  �| j                  j                  «       nd| j                  j                  «       | j                  j                  «       | j
                  j                  «       dœS )z5Return a JSON-serializable dictionary representation.N)r#   r,   r-   r$   r.   )r2   Úto_dictr8   r9   r:   r<   )r?   s    r   rC   zSearch.to_dictŸ   st   € ð 04¯{©{Ð/F�d—k‘k×)Ñ)Ô+ÈDØ,0¯J©JÐ,B�D—J‘J×&Ñ&Ô(ÈØŸ™×.Ñ.Ó0Ø—[‘[×(Ñ(Ó*Ø—l‘l×*Ñ*Ó,ñ
ð 	
r   c                 ó  — t        t        j                  t        j                  t        j                  t        j
                  h¬«      }t        | j                  | j                  | j                  | j                  |¬«      S )zBSelect all predefined keys (document, embedding, metadata, score).©r1   ©r+   r,   r-   r$   r.   )r   r   ÚDOCUMENTÚ	EMBEDDINGÚMETADATAÚSCOREr*   r2   r8   r9   r:   )r?   Ú
new_selects     r   Ú
select_allzSearch.select_allª   sQ   € ä¤#§,¡,´·±¼s¿|¹|ÌSÏYÉYÐ!WÔXˆ
ÜØ—+‘+Ø—‘Ø—^‘^Ø—+‘+Øô
ð 	
r   r1   c                 óœ   — t        t        |«      ¬«      }t        | j                  | j                  | j
                  | j                  |¬«      S )z¶Select specific keys to return.

        Args:
            *keys: Key objects or string key names.

        Returns:
            Search: A new Search with updated selection.
        rE   rF   )r   r>   r*   r2   r8   r9   r:   )r?   r1   rK   s      r   r.   zSearch.selectµ   s>   € ô ¤ T£Ô+ˆ
ÜØ—+‘+Ø—‘Ø—^‘^Ø—+‘+Øô
ð 	
r   c                 ór   — t        || j                  | j                  | j                  | j                  ¬«      S )aQ  Set the where clause for filtering.

        Args:
            where: Where expression, dict, or None.

        Example:
            search.where((Key("status") == "active") & (Key("score") > 0.5))
            search.where({"status": "active"})
            search.where({"$and": [{"status": "active"}, {"score": {"$gt": 0.5}}]})
        rF   )r*   r8   r9   r:   r<   )r?   r+   s     r   r+   zSearch.whereÇ   s0   € ô ØØ—‘Ø—^‘^Ø—+‘+Ø—<‘<ô
ð 	
r   Ú	rank_exprc                 ór   — t        | j                  || j                  | j                  | j                  ¬«      S )a  Set the ranking expression.

        Args:
            rank_expr: A Rank expression, dict, or None for scoring
                       Dicts will be converted using Rank.from_dict()
                       Note: Primitive numbers are not accepted - use {"$val": number} for constant ranks

        Example:
            search.rank(Knn(query=[0.1, 0.2]) * 0.8 + Val(0.5) * 0.2)
            search.rank({"$knn": {"query": [0.1, 0.2]}})
            search.rank({"$sum": [{"$knn": {"query": [0.1, 0.2]}}, {"$val": 0.5}]})
        rF   )r*   r2   r9   r:   r<   )r?   rO   s     r   r,   zSearch.rankÚ   s0   € ô Ø—+‘+ØØ—^‘^Ø—+‘+Ø—<‘<ô
ð 	
r   c                 ór   — t        | j                  | j                  || j                  | j                  ¬«      S )a#  Set the group_by configuration for grouping and aggregating results

        Args:
            group_by: A GroupBy object, dict, or None for grouping
                      Dicts will be converted using GroupBy.from_dict()

        Example:
            search.group_by(GroupBy(
                keys=[Key("category")],
                aggregate=MinK(keys=[Key.SCORE], k=3)
            ))
            search.group_by({
                "keys": ["category"],
                "aggregate": {"$min_k": {"keys": ["#score"], "k": 3}}
            })
        rF   )r*   r2   r8   r:   r<   )r?   r-   s     r   r-   zSearch.group_byï   s0   € ô" Ø—+‘+Ø—‘ØØ—+‘+Ø—<‘<ô
ð 	
r   r0   c                 óŒ   — t        ||¬«      }t        | j                  | j                  | j                  || j
                  ¬«      S )zëSet the limit and offset for pagination

        Args:
            limit: Maximum number of results to return
            offset: Number of results to skip (default: 0)

        Example:
            search.limit(20, offset=10)
        )r0   r$   rF   )r   r*   r2   r8   r9   r<   )r?   r$   r0   Ú	new_limits       r   r$   zSearch.limit  s<   € ô  ¨uÔ5ˆ	ÜØ—+‘+Ø—‘Ø—^‘^ØØ—<‘<ô
ð 	
r   )NNNNN)rA   r*   )r   )r   r   r   Ú__doc__r
   r   r   r   Ústrr   r   r   r   r;   r   r   r	   r@   rC   rL   r   r.   r+   r,   r-   r$   r   r   r   r*   r*   '   s¡  „ ñð> 9=Ø6:Ø=AØ=AØOSñXà˜˜e T¨#¨s¨(¡^Ð3Ñ4Ñ5ðXð �u˜T 4¨¨S¨¡>Ð1Ñ2Ñ3ðXð ˜5 ¨$¨s°C¨x©.Ð!8Ñ9Ñ:ð	Xð
 ˜˜e T¨#¨s¨(¡^°SÐ8Ñ9Ñ:ðXð ˜˜v t¨C°¨H¡~°t¸C±yÀ#ÀcÁ(ÐJÑKÑLóXðt
˜˜c 3˜h™ó 
ó	
ð
˜E # s (™Oð 
°ó 
ð$
˜8 E¨%°°c¸3°h±Ð*?Ñ$@ÑAð 
Àhó 
ð&
˜h u¨T°4¸¸S¸±>Ð-AÑ'BÑCð 
Èó 
ð*
 ¨%°¸¸cÀ3¸h¹Ð0GÑ*HÑ!Ið 
Èhó 
ñ2
˜3ð 
¨ð 
°Hô 
r   r*   N)Údataclassesr   r   Útypingr   r   r   r   r	   r
   Ú&chromadb.execution.expression.operatorr   r   r   r   r   r   r   r   r   r   r   r    r'   r*   r   r   r   ú<module>rY      st   ðß (ß 8× 8÷÷ ÷ ð ÷ð ó ðð ÷?ð ?ó ð?ð ÷?ð ?ó ð?÷r
ò r
r   