a
    dK                     @   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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   [/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/_prune.pyr      s    


r   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 ]$}| st||}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&    


r   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st|trt|trt}ntj}||	d
  }|d }|d }d}|jdkr|}|}||||j	|j
d u|j|j||jd}t||	| qrt|trht||	d
  d |j|j|jdd}|j|_|j|_t||	| qrt|tjrtj||	d
  d |j|j|jdd}t||	| qrt|tjrr||	d
  d }t||j|j
d ud}t||	| t|drr||_qr|  |   |S )Nz***:r   r   , c                 S   s   g | ]}t |qS r   )r   ).0ir   r   r   
<listcomp>?       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   r0   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   sl    





r	   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)r3   Zmodel_variantZ
adapt_datar   r   r   r
   o   s    r
   )r@   r=   copyr   Ztorchr   Ztimm.layersr   r   r   __all__r   r   r	   r
   r   r   r   r   <module>   s   9