
    mi	                     D    d dl mZ d dlmZ d dlZddlmZ  G d d      Zy)    )OrderedDict)PathN   )XPc                       e Zd ZdZdedej                  defdZdede	fdZ
dedefdZi fd	e	d
efdZdej                  e   dej                  ej                  e   ef   fdZy)
NamesMixinzHMixin that handles everything related to the naming of experiments.
    keyvaluereturnc                     |j                  d      }g }|dd D ]  }|j                  |dd         |j                  |d          dj                  |      }t        |t              r|j
                  }|du r|S | d| S )z#Shorten the name of an XP.
        .N   T=)splitappendjoin
isinstancer   name)selfr	   r
   	key_partsshort_key_partsparts         D/var/www/stems/demucs_env/lib/python3.12/site-packages/dora/names.pyshort_name_partzNamesMixin.short_name_part   s     IIcN	crN 	-D""48,	-y}-hh'eT"JJED=Jaw    xpc                     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   s     r   get_name_partszNamesMixin.get_name_parts"   s     "##r   c                 ,    | j                  |g      d   S )zReturns the XP name.
        r   )	get_namesr    s     r   get_namezNamesMixin.get_name(   s     ~~rd#B''r   parts	referencec                     g }|j                         D ]-  \  }}||vs| j                  ||      }|j                  |       / dj                  |      S )N )itemsr   r   r   )r   r%   r&   	out_partsr	   r
   r   s          r   _get_short_namezNamesMixin._get_short_name-   sY    	++- 	'JC)#++C7  &	' xx	""r   xpsc                 "   t        |      dkD  sJ | j                  |d         }g }|D ]  }| j                  |      }|j                         D ]$  \  }}||v s||   |k7  s|j                  |       & t	        |j                               t	        |j                               z
  }|D ]  }|j                  |        |j                  |        g }	|D ]#  }|	j                  | j                  ||             % | j                  |      }
|	|
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_names              r   r#   zNamesMixin.get_names5   s    3x!||''A/	 		'B''+E!KKM 'S)#	##(=MM#&' )..*+c%**,.??G #c"#&		' ! 	AELL--eY?@	A ((3	ir   N)__name__
__module____qualname____doc__strtpAnyr   r   r   r!   r$   dictr+   ListTupler#    r   r   r   r      s     3  rvv  #   $ $ $(2 (# (
 EG #[ #T # RWWR[  RXXbggclC6G-H  r   r   )	collectionsr   pathlibr   typingr<   r   r   r   rA   r   r   <module>rE      s    $   >  > r   