o
    2wi	                     @   s>   d dl mZ d dlmZ d dlZddlmZ G dd dZdS )    )OrderedDict)PathN   )XPc                   @   s   e Zd ZdZdedejdefddZdede	fdd	Z
dedefd
dZi fde	defddZdeje dejeje ef fddZdS )
NamesMixinzHMixin that handles everything related to the naming of experiments.
    keyvaluereturnc                 C   st   | d}g }|dd D ]}||dd  q||d  d|}t|tr-|j}|du r3|S | d| S )z#Shorten the name of an XP.
        .N   T=)splitappendjoin
isinstancer   name)selfr   r   	key_partsshort_key_partspart r   G/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/dora/names.pyshort_name_part   s   


zNamesMixin.short_name_partxpc                 C   s   t  )zReturns name parts, i.e. an OrderedDict from param name -> param value.
        Name parts that don't impact the signature should be ignored.
        )NotImplementedErrorr   r   r   r   r   get_name_parts"   s   zNamesMixin.get_name_partsc                 C   s   |  |gd S )zReturns the XP name.
        r   )	get_namesr   r   r   r   get_name(   s   zNamesMixin.get_nameparts	referencec                 C   s>   g }|  D ]\}}||vr| ||}|| qd|S )N )itemsr   r   r   )r   r    r!   	out_partsr   r   r   r   r   r   _get_short_name-   s   

zNamesMixin._get_short_namexpsc                 C   s   t |dksJ | |d }g }|D ]:}| |}| D ]\}}||v r1|| |kr1|| qt| t|  }|D ]}|| q@|| qg }	|D ]}|	| || qR| |}
|	|
fS )zGiven list of XPs, return individual XP names + base name.
        The common part in all XPs are factored into the base name
        r   )lenr   r#   popsetkeysr   r%   )r   r&   r!   all_xp_partsr   r    r   valmissingnames	base_namer   r   r   r   5   s$   


zNamesMixin.get_namesN)__name__
__module____qualname____doc__strtpAnyr   r   r   r   r   dictr%   ListTupler   r   r   r   r   r      s    ,r   )	collectionsr   pathlibr   typingr5   r   r   r   r   r   r   r   <module>   s
   