U
    ¯Ê¹jK  ã                   @   sl   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 ddddgZ
d	d„ Zd
d„ Zdd„ Zdd„ ZdS )é    N)Údeepcopy)Únn)Ú
Conv2dSameÚBatchNormAct2dÚLinearÚextract_layerÚ	set_layerÚadapt_model_from_stringÚadapt_model_from_filec                 C   sŽ   |  d¡}| }t| dƒr*|d dkr*| j}t| dƒsL|d dkrL|dd … }|D ]8}t||ƒr€| ¡ srt||ƒ}qˆ|t|ƒ }qP|  S qP|S ©NÚ.Úmoduler   é   )ÚsplitÚhasattrr   ÚisdigitÚgetattrÚint)ÚmodelÚlayerr   Úl© r   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/_prune.pyr      s    


c                 C   sÀ   |  d¡}| }t| dƒr*|d dkr*| j}d}|}|D ]6}t||ƒr6| ¡ sXt||ƒ}n|t|ƒ }|d7 }q6|d8 }|d |… D ]$}| ¡ sšt||ƒ}q‚|t|ƒ }q‚|| }t|||ƒ d S r   )r   r   r   r   r   r   Úsetattr)r   r   Úvalr   Z	lst_indexZmodule2r   r   r   r   r      s&    


c                 C   s  d}i }|  |¡}|D ]J}|  d¡}|d }|d dd…   d¡}|d dkrdd	„ |D ƒ||< qt| ƒ}|  ¡ D �]„\}	}
t| |	ƒ}t|tjƒsžt|tƒ�rt|tƒr®t}ntj}||	d
  }|d }|d }d}|jdkræ|}|}||||j	|j
d k	|j|j||jd�}t||	|ƒ qrt|tƒ�rht||	d
  d |j|j|jdd�}|j|_|j|_t||	|ƒ qrt|tjƒ�rªtj||	d
  d |j|j|jdd�}t||	|ƒ qrt|tjƒrr||	d
  d }t||j|j
d k	d�}t||	|ƒ t|dƒrr||_qr| ¡  |  ¡  |S )Nz***ú:r   r   éÿÿÿÿú,Ú c                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Úir   r   r   Ú
<listcomp>?   s     z+adapt_model_from_string.<locals>.<listcomp>z.weight)Úin_channelsÚout_channelsÚkernel_sizeÚbiasÚpaddingÚdilationÚgroupsÚstrideT)ÚepsÚmomentumÚaffineÚtrack_running_stats)Únum_featuresr*   r+   r,   r-   )Zin_featuresÚout_featuresr%   r.   )r   r   Znamed_modulesr   Ú
isinstancer   ZConv2dr   r(   r$   r%   r&   r'   r)   r   r   r*   r+   r,   ZdropZactZBatchNorm2dr   r/   r   r.   Úeval)Úparent_moduleZmodel_stringÚ	separatorZ
state_dictZ	lst_shapeÚkÚkeyÚshapeZ
new_moduleÚnÚmZ
old_moduleÚconvÚsr"   r#   ÚgZnew_convZnew_bnr.   Znew_fcr   r   r   r	   6   s†    




     ý   þ   þ  ÿ
c                 C   s.   t  ttj d|d ¡¡}t| | d¡ ¡ ƒS )NZ_prunedz.txtzutf-8)	ÚpkgutilÚget_dataÚ__name__ÚosÚpathÚjoinr	   ÚdecodeÚstrip)r2   Zmodel_variantZ
adapt_datar   r   r   r
   o   s    )r?   r<   Úcopyr   Ztorchr   Ztimm.layersr   r   r   Ú__all__r   r   r	   r
   r   r   r   r   Ú<module>   s   9