o
    -wiY                     @   s   G d d dZ dS )c                	   @   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e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d*S )+QueryGeneratorz<QueryGenerator is a helper object to write filters for runs.$nez$gtz$gtez$ltz$lte$inz$ninz$regex)!=>z>=<z<=INNINREGEXc                 C      i | ]\}}||qS  r   .0kvr   r   ^/home/ubuntu/sommelier/.venv/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__keyc                 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 )
N)+-       r   .)	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   r/   )Nr   r1   r3   r   r   r   _is_individual+   r6   zQueryGenerator._is_individualc                 C   s   |dkr|S | j | |iS )N=)INDIVIDUAL_OP_TO_MONGO)r   r4   valuer   r   r   _to_mongo_op_value.   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|)Nsectionr$   config.r!   summaryr#   	keys_infokeys_info.keys.runr&   tags.zInvalid key: {})
ValueErrorformat)r   r   r   r   r   key_to_server_path4   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 )Nr=   r$   r   r<   r!   r#   r>   r@   r?   rB   r&   rA   )r'   r(   )r   pathr   r   r   server_path_to_keyA   s   




z!QueryGenerator.server_path_to_keyc                 C   sJ   g }|d D ]}|  |d }|drd| }nd| }|| q|S )Nkeysr   	ascendingr   r   )rE   r2   append)r   rI   ordersr   orderr   r   r   keys_to_orderM   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 )Nr   r   r   Tr   Fz.you must sort by ascending(+) or descending(-)rA   rF   )r   rJ   rI   )	ExceptionrK   )r   rM   rI   r   r!   rJ   r   r   r   r   order_to_keysY   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:   r4   r8   r   disabledr<   r&   r   r   Fr   r   )r2   rE   r;   )r   filterrG   r   r   r   _to_mongo_individuali   s"   &z#QueryGenerator._to_mongo_individualc                    sF     |r
 |S  |r! j|d   fdd|d D iS d S )Nr4   c                       g | ]}  |qS r   )filter_to_mongor   fr   r   r   
<listcomp>   s    
z2QueryGenerator.filter_to_mongo.<locals>.<listcomp>r0   )r7   rT   r5   GROUP_OP_TO_MONGO)r   rS   r   r   r   rV      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rRtt|  } | j| || d  S  |d|d  S d S )Nc                    rU   r   )mongo_to_filterrW   r   r   r   rY      r   z2QueryGenerator.mongo_to_filter.<locals>.<listcomp>)r4   r0   )r   r4   r:   r8   )	rI   MONGO_TO_GROUP_OPitems
isinstancedictnextiterrH   MONGO_TO_INDIVIDUAL_OP)r   rS   group_opr   r   r   r4   r   r   r   r[      s*   


zQueryGenerator.mongo_to_filterN)__name__
__module____qualname____doc__r9   r]   rb   rZ   r\   r   classmethodstrr.   r5   r7   r;   rE   rH   rN   rP   rT   rV   r[   r   r   r   r   r      s6    

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