o
    wi                     @  s   d dl mZ G dd dZdS )    )annotationsc                	   @  s   e Zd ZdZdddddddd	d
Zdd e D ZdddZdd e D Zdd Z	e
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+S )-QueryGeneratorznQueryGenerator is a helper object to write filters for runs.

    <!-- lazydoc-ignore-class: internal -->
    $nez$gtz$gtez$ltz$lte$inz$ninz$regex)!=>z>=<z<=INNINREGEXc                 C     i | ]\}}||qS  r   .0kvr   r   U/home/ubuntu/.local/lib/python3.10/site-packages/wandb/apis/public/query_generator.py
<dictcomp>       zQueryGenerator.<dictcomp>z$and$or)ANDORc                 C  r   r   r   r   r   r   r   r      r   c                 C  s   d S )Nr   selfr   r   r   __init__   s   zQueryGenerator.__init__keystrc                 C  s   | dr|d }|dd }nd}|d}t|dkr-|d dvr+|d |d  S dS |d d	vr=|dd
g|  S |d| S )zFormat a key for sorting.)+-r      Nr   .)	createdAt	updatedAtnamesweepsummary_metrics.)configsummary_metricstagsr'   )
startswithsplitlenjoin)clsr   	directionpartsr   r   r   format_order_key   s   

zQueryGenerator.format_order_keyc                 C     | dd uS )Nfiltersgetr   opr   r   r   	_is_group/      zQueryGenerator._is_groupc                 C  r1   )Nr   r3   r5   r   r   r   _is_individual2   r8   zQueryGenerator._is_individualc                 C  s   |dkr|S | j | |iS )N=)INDIVIDUAL_OP_TO_MONGO)r   r6   valuer   r   r   _to_mongo_op_value5   s   z!QueryGenerator._to_mongo_op_valuec                 C  s   |d dkrd|d  S |d dkrd|d  S |d dkr$d|d  S |d d	kr.|d S |d d
kr:d|d  S t d|)zAConvert a key dictionary to the corresponding server path string.sectionr&   config.r#   summaryr%   	keys_infokeys_info.keys.runr(   tags.zInvalid key: {})
ValueErrorformat)r   r   r   r   r   key_to_server_path;   s   z!QueryGenerator.key_to_server_pathc                 C  s   | drd|ddd dS | dr d|ddd dS | dr0d|ddd dS | d	r@d
|d	dd dS d|dS )zAConvert a server path string to the corresponding key dictionary.r?   r&   r   r>   r#   r%   r@   rB   rA   rD   r(   rC   )r)   r*   )r   pathr   r   r   server_path_to_keyI   s   




z!QueryGenerator.server_path_to_keyc                 C  sJ   g }|d D ]}|  |d }|drd| }nd| }|| q|S )z6Convert a list of key dictionaries to an order string.keysr   	ascendingr   r   )rG   r4   append)r   rK   ordersr   orderr   r   r   keys_to_orderV   s   

zQueryGenerator.keys_to_orderc                 C  sh   g }|D ]+}|dd }|d dkrd}n|d dkrd}nt dd	|d
|d}|| qd|iS )z6Convert an order string to a list of key dictionaries.r   Nr   r   Tr   Fz.you must sort by ascending(+) or descending(-)rC   rH   )r   rL   rK   )	ExceptionrM   )r   rO   rK   r   r#   rL   r   r   r   r   order_to_keysc   s   zQueryGenerator.order_to_keysc                 C  s   |d d dkr
d S | dd u r|d dkr|d dkrd S | dd ur,|d r,d S |d d	 d
kr`|d dkrBd
d|d iiS |d du rXdd
d id
d|d d iigiS d
|d d iS | |d }|d u rm|S || |d |d iS )Nr   r#    r<   r6   r:   r   disabledr>   r(   r	   r   Fr   r   )r4   rG   r=   )r   filterrI   r   r   r   _to_mongo_individualt   s"   &z#QueryGenerator._to_mongo_individualc                   sF     |r
 |S  |r! j|d   fdd|d D iS dS )zBReturns dictionary with filter format converted to MongoDB filter.r6   c                      g | ]}  |qS r   )filter_to_mongor   fr   r   r   
<listcomp>   s    
z2QueryGenerator.filter_to_mongo.<locals>.<listcomp>r2   N)r9   rV   r7   GROUP_OP_TO_MONGO)r   rU   r   r   r   rX      s   


zQueryGenerator.filter_to_mongoc                   s   |du rdS d}|D ]}| j v r|} nq
|dur+ j |  fdd|| D dS | D ]+\}}t|trPtt| } | j| || d  S  |d|d  S dS )zBReturns dictionary with MongoDB filter converted to filter format.Nc                   rW   r   )mongo_to_filterrY   r   r   r   r[      r   z2QueryGenerator.mongo_to_filter.<locals>.<listcomp>)r6   r2   )r   r6   r<   r:   )	MONGO_TO_GROUP_OPitems
isinstancedictnextiterrK   rJ   MONGO_TO_INDIVIDUAL_OP)r   rU   group_opr   r   r   r6   r   r   r   r]      s*   


zQueryGenerator.mongo_to_filterN)r   r   )__name__
__module____qualname____doc__r;   r_   rd   r\   r^   r   classmethodr0   r7   r9   r=   rG   rJ   rP   rR   rV   rX   r]   r   r   r   r   r      s6    

r   N)
__future__r   r   r   r   r   r   <module>   s    