o
    Ti	                     @   s^   d dl Zd dlZddlT d dlZdd Zdd Zdd	 Zd
e	fddZ
dddZdddZdS )    N   )*c                 C   s(   g }|D ]}| | |  | | } q|S )z<convert index form (single integer) to feature form (vector))append)pdimsfeaturedim r	   T/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/autotuning/tuner/utils.pyindex_to_feature   s
   
r   c              	   C   sP   d}t | D ]\}}tdd|d|d|  |tt|d| | 7 }q|S )z<convert feature form (vector) to index form (single integer)r   zj:zk:r   N)	enumerateprintintnpprod)r   r   r   jkr	   r	   r
   feature_to_index   s
    r   c                 C   sX   g }|   D ]#\}}t|tr|t| qt|tr$|t| q|d q|S )N   )items
isinstancedictextenddict_to_dimslistr   len)tuning_spacer   keyvalr	   r	   r
   r      s   

r   dc                 c   s`    |   |  }}|D ]
}t|ts|g}qdd |D }tj| D ]
}tt||V  q#d S )Nc                 s   s*    | ]}t |trt|nt|V  qd S N)r   r   gen_combinationsget_list).0vr	   r	   r
   	<genexpr>2   s   ( z#gen_combinations.<locals>.<genexpr>)keysvaluesr   r   	itertoolsproductr   zip)r   r&   r'   r$   values_choicescombr	   r	   r
   r!   -   s   
r!    _c                 C   sh   g }|   D ])\}}|r|| | n|}t|tjjr(|t|||d   q|||f qt|S )N)sep)	r   r   collectionsabcMutableMappingr   flattenr   r   )r   
parent_keyr/   r   r   r$   new_keyr	   r	   r
   r3   7   s   r3   c           	      C   s   g }|   D ]/\}}||vrq|du s|dks|dks|dkr qt|tr.|t|| q|t| q|durOg }t||D ]\}}|||  qA|}|S )zExtract values from dictNauto
autotuningr-   )r   r   r   r   dict_to_featurefloatr*   )	feature_dictr&   	max_valuer   r   r   norm_featurefmvr	   r	   r
   r8   B   s    
r8   )r-   r.   r    )numpyr   r(   utilscollections.abcr0   r   r   r   r   r!   r3   r8   r	   r	   r	   r
   <module>   s   		

