o
    پi                     @   sh   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	 g d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s&|d dkr&|dd  }|D ]}t||r@| s9t||}q(|t| }q(|  S |S N.moduler      )splithasattrr   isdigitgetattrint)modellayerr   l r   F/home/ubuntu/.local/lib/python3.10/site-packages/timm/models/_prune.pyr      s   

r   c                 C   s   | d}| }t| dr|d dkr| j}d}|}|D ]}t||r6| s,t||}n|t| }|d7 }q|d8 }|d | D ]}| sMt||}qA|t| }qA|| }t||| d S r   )r   r   r   r   r   r   setattr)r   r   valr   	lst_indexmodule2r   r   r   r   r      s(   

r   c                 C   s$  d}i }| |}|D ]%}| d}|d }|d dd  d}|d dkr0dd	 |D ||< qt| }|  D ]\}	}
t| |	}t|tjsMt|trt|trUt}ntj}||	d
  }|d }|d }d}|jdkrq|}|}||||j	|j
d u|j|j||jd}t||	| q9t|trt||	d
  d |j|j|jdd}|j|_|j|_t||	| q9t|tjrtj||	d
  d |j|j|jdd}t||	| q9t|tjr||	d
  d }t||j|j
d ud}t||	| t|drt|dd|jkr||_||_q9|  |   |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/   )in_featuresout_featuresr'   r0   head_hidden_size)r   r   named_modulesr   
isinstancer   Conv2dr   r*   r&   r'   r(   r)   r+   r   r   r,   r-   r.   dropactBatchNorm2dr   r2   r   r   r0   r3   eval)parent_modulemodel_string	separator
state_dict	lst_shapekkeyshape
new_modulenm
old_moduleconvsr$   r%   gnew_convnew_bnr0   new_fcr   r   r   r	   6   st   





r	   c                 C   s.   t ttjd|d }t| |d S )N_prunedz.txtzutf-8)	pkgutilget_data__name__ospathjoinr	   decodestrip)r;   model_variant
adapt_datar   r   r   r
   r   s   r
   )rQ   rN   copyr   torchr   timm.layersr   r   r   __all__r   r   r	   r
   r   r   r   r   <module>   s    <