o
    ´©ià  ã                   @   s    d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
 ddd„Zdejfdd„Zdd	d
„Zddd„Zddd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚOrderedDict)Ú
DictConfigÚ	OmegaConfc                 C   sZ   |   ¡ }d}tttdd„ | ¡ D ƒƒƒƒD ]\}}|d u s"| |¡r*|||  ¡ 7 }q|S )Nr   c                 S   s   g | ]}d |vr|‘qS )Únum_batches_tracked© ©Ú.0Úxr   r   úE/home/ubuntu/.local/lib/python3.10/site-packages/funasr/utils/misc.pyÚ
<listcomp>   s    z.statistic_model_parameters.<locals>.<listcomp>)Ú
state_dictÚ	enumerateÚsortedÚlistÚkeysÚ
startswithÚnumel)ÚmodelÚprefixÚvar_dictr   ÚiÚkeyr   r   r
   Ústatistic_model_parameters
   s   ÿ€r   é   c                 C   s8   dt |ƒ d  | ¡}t t|ƒd d d… ¡dk |¡S )Nz{:0zb}éÿÿÿÿÚ1)ÚstrÚformatÚnpÚarrayr   Úastype)r	   Úvec_dimÚdtypeÚbr   r   r
   Úint2vec   s   "r$   c                    s   t  ‡ fdd„| D ƒ¡S )Nc                    s   g | ]	}t t|ƒˆ ƒ‘qS r   )r$   Úintr   ©r!   r   r
   r      s    zseq2arr.<locals>.<listcomp>)r   Ú	row_stack)Úseqr!   r   r&   r
   Úseq2arr   s   r)   r   ú c           	      C   s–   t j| ddd9}tƒ }| ¡ D ]'}| ¡ }| |¡}|d |… ||d d … }}|dkr3| d¡}|||< q|W  d   ƒ S 1 sDw   Y  d S )NÚrzutf-8©Úencodingé   r   r*   )ÚioÚopenr   Ú	readlinesÚstripÚfindÚsplit©	Úscp_pathÚ
value_typeÚkv_sepÚfÚret_dictÚone_lineÚposr   Úvaluer   r   r
   Úload_scp_as_dict   s   


$÷r>   c           	      C   sš   t j| ddd;}g }| ¡ D ]*}| ¡ }| |¡}|d |… ||d d … }}|dkr2| d¡}| ||f¡ q|W  d   ƒ S 1 sFw   Y  d S )Nr+   Úutf8r,   r.   r   r*   )r/   r0   r1   r2   r3   r4   Úappendr5   r   r   r
   Úload_scp_as_list,   s   

$÷rA   c                 C   sT   |  ¡ D ]#\}}t|tƒr#|| v r#t|ƒdkr|| |< t| | |ƒ q|| |< qd S )Nr   )ÚitemsÚ
isinstanceÚdictÚlenÚdeep_update)ÚoriginalÚupdater   r=   r   r   r
   rF   9   s   
úrF   c               	   K   s®   t j|  dd¡dd t j |  dd¡d¡}tj| |d t d| › ¡ t d|¡ |  d	d ¡}|d urSt j |d
¡}t j 	|¡rUt
 |t j |  dd¡d
¡¡ d S d S d S )NÚ
output_dirz./T)Úexist_okzconfig.yaml)Úconfigr9   zkwargs: zconfig.yaml is saved to: %sÚ
model_pathzconfiguration.json)ÚosÚmakedirsÚgetÚpathÚjoinr   ÚsaveÚloggingÚinfoÚexistsÚshutilÚcopy)ÚkwargsÚ	yaml_filerL   Úconfig_jsonr   r   r
   Úprepare_model_dirC   s   ÿýr[   c                 C   s    t j | ¡}t j |¡\}}|S )u¶   
    ä»Žç»™å®šçš„æ–‡ä»¶è·¯å¾„ä¸­æå–æ–‡ä»¶åï¼ˆä¸åŒ…å«è·¯å¾„å’Œæ‰©å±•åï¼‰
    :param file_path: å®Œæ•´çš„æ–‡ä»¶è·¯å¾„
    :return: æ–‡ä»¶åï¼ˆä¸å«è·¯å¾„å’Œæ‰©å±•åï¼‰
    )rM   rP   ÚbasenameÚsplitext)Ú	file_pathÚfilename_with_extensionÚfilenameÚ	extensionr   r   r
   Ú"extract_filename_without_extensionU   s   rb   c                 C   s¨   t j | ¡st| › dƒ dS t j | ¡r$t  | ¡ td| › dƒ dS t j | ¡rRzt  | ¡ td| › dƒ W dS  tyQ   t	 
| ¡ td| › dƒ Y dS w dS )zVIntelligently removes files, empty directories, and non-empty directories recursively.z does not exist.NzFile z has been deleted.zEmpty directory zNon-empty directory z has been recursively deleted.)rM   rP   rU   ÚprintÚisfileÚremoveÚisdirÚrmdirÚOSErrorrV   Úrmtree)rP   r   r   r
   Úsmart_removec   s   


ýûrj   )N)r   )r   r*   )rM   r/   rV   rS   Úcollectionsr   Únumpyr   Ú	omegaconfr   r   r   Úint32r$   r)   r>   rA   rF   r[   rb   rj   r   r   r   r
   Ú<module>   s     




