o
    4ѹg                     @   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 )Znum_batches_tracked .0xr   r   U/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/funasr/utils/misc.py
<listcomp>   s    z.statistic_model_parameters.<locals>.<listcomp>)Z
state_dict	enumeratesortedlistkeys
startswithnumel)modelprefixZ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   Zastype)r   vec_dimZ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   Z	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	Zscp_pathZ
value_typeZkv_sepfZret_dictZone_lineposr   valuer   r   r	   load_scp_as_dict   s   


$r3   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)   r*   r+   r,   r-   r.   appendr/   r   r   r	   load_scp_as_list,   s   

$r6   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   r2   r   r   r	   r;   9   s   
r;   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)configr0   zkwargs: zconfig.yaml is saved to: %s
model_pathzconfiguration.json)osmakedirsgetpathjoinr   savelogginginfoexistsshutilcopy)kwargsZ	yaml_filerA   Zconfig_jsonr   r   r	   prepare_model_dirC   s   rN   c                 C   s    t j| }t j|\}}|S )u   
    从给定的文件路径中提取文件名（不包含路径和扩展名）
    :param file_path: 完整的文件路径
    :return: 文件名（不含路径和扩展名）
    N)rB   rE   basenamesplitext)	file_pathZfilename_with_extensionfilename	extensionr   r   r	   "extract_filename_without_extensionU   s   rT   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.)rB   rE   rJ   printisfileremoveisdirrmdirOSErrorrK   rmtree)rE   r   r   r	   smart_removec   s   


r\   )N)r   )r   r$   )rB   r)   rK   rH   collectionsr   Znumpyr   Z	omegaconfr   r   r   Zint32r   r#   r3   r6   r;   rN   rT   r\   r   r   r   r	   <module>   s     




