Ë
    éÓ^j²  ã                   ó`   — 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„ Zd„ Zd„ Zd	„ Zy)
é    N)Údeepcopy)Únn)Ú
Conv2dSameÚBatchNormAct2dÚLinear)Úextract_layerÚ	set_layerÚadapt_model_from_stringÚadapt_model_from_filec                 ó"  — |j                  d«      }| }t        | d«      r|d   dk7  r| j                  }t        | d«      s|d   dk(  r|dd }|D ]=  }t        ||«      r,|j                  «       st	        ||«      }Œ,|t        |«         }Œ;|c S  |S )zÎExtract a layer from a model using dot-separated path.

    Args:
        model: PyTorch model.
        layer: Dot-separated layer path (e.g., 'layer1.0.conv1').

    Returns:
        Extracted module.
    ú.Úmoduler   é   N)ÚsplitÚhasattrr   ÚisdigitÚgetattrÚint)ÚmodelÚlayerr   Úls       ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/_prune.pyr   r      sœ   € ð �K‰K˜Ó€EØ€FÜˆu�hÔ E¨!¡H°Ò$8Ø—‘ˆÜ�5˜(Ô#¨¨a©°HÒ(<Ø�a�b�	ˆØò ˆÜ�6˜1ÔØ—9‘9”;Ü  ¨Ó+‘à¤ A£™‘àŠMðð €Mó    c                 ó’  — |j                  d«      }| }t        | d«      r|d   dk7  r| j                  }d}|}|D ]?  }t        ||«      sŒ|j                  «       st	        ||«      }n|t        |«         }|dz  }ŒA |dz  }|d| D ]-  }|j                  «       st	        ||«      }Œ |t        |«         }Œ/ ||   }t        |||«       y)z­Set a layer in a model using dot-separated path.

    Args:
        model: PyTorch model.
        layer: Dot-separated layer path.
        val: New value for the layer.
    r   r   r   r   N)r   r   r   r   r   r   Úsetattr)r   r   Úvalr   Ú	lst_indexÚmodule2r   s          r   r	   r	   '   sÞ   € ð �K‰K˜Ó€EØ€FÜˆu�hÔ E¨!¡H°Ò$8Ø—‘ˆØ€IØ€GØò ˆÜ�7˜AÕØ—9‘9”;Ü! '¨1Ó-‘à!¤# a£&™/�Ø˜‰N‰Iðð ��N€IØ�:�IÐò $ˆØ�y‰yŒ{Ü˜V QÓ'‰FàœC ›F‘^‰Fð	$ð
 	ˆiÑ€AÜˆF�A�sÕr   c                 ó   — d}i }|j                  |«      }|D ]T  }|j                  d«      }|d   }|d   dd j                  d«      }|d   dk7  sŒ9|D �cg c]  }t        |«      ‘Œ c}||<   ŒV t        | j                  «       «      j                  }	t        | j                  «       «      j
                  }
|	|
dœ}t        | «      }| j                  «       D �]P  \  }}t        | |«      }t        |t        j                  «      st        |t        «      r¡t        |t        «      rt        }nt        j                  }||d	z      }|d   }|d   }d}|j                  dkD  r|}|} |d|||j                  |j                  d
u|j                   |j"                  ||j$                  dœ|¤Ž}t'        |||«       ŒÞt        |t(        «      rit)        ||d	z      d   f|j*                  |j,                  |j.                  ddœ|¤Ž}|j0                  |_        |j2                  |_        t'        |||«       �ŒWt        |t        j4                  «      rQt        j4                  d||d	z      d   |j*                  |j,                  |j.                  ddœ|¤Ž}t'        |||«       �ŒÂt        |t        j6                  «      s�ŒÞ||d	z      d   }t7        d||j8                  |j                  d
udœ|¤Ž}t'        |||«       t;        |d«      s�Œ)t=        |dd«      |j>                  k(  r||_         ||_        �ŒS |jC                  «        | jC                  «        |S c c}w )a  Adapt a model to pruned structure from string specification.

    Args:
        parent_module: Original model to adapt.
        model_string: String containing layer shapes for pruned model.

    Returns:
        Adapted model with pruned layer dimensions.
    z***ú:r   r   éÿÿÿÿú,Ú )ÚdeviceÚdtypez.weightN)Úin_channelsÚout_channelsÚkernel_sizeÚbiasÚpaddingÚdilationÚgroupsÚstrideT)ÚepsÚmomentumÚaffineÚtrack_running_stats)Únum_featuresr.   r/   r0   r1   )Úin_featuresÚout_featuresr)   r2   Úhead_hidden_size© )"r   r   ÚnextÚ
parametersr$   r%   r   Únamed_modulesr   Ú
isinstancer   ÚConv2dr   r,   r(   r)   r*   r+   r-   r	   r   r.   r/   r0   ÚdropÚactÚBatchNorm2dr   r4   r   r   r2   r5   Úeval)Úparent_moduleÚmodel_stringÚ	separatorÚ
state_dictÚ	lst_shapeÚkÚkeyÚshapeÚir$   r%   ÚddÚ
new_moduleÚnÚmÚ
old_moduleÚconvÚsr&   r'   ÚgÚnew_convÚnew_bnr2   Únew_fcs                            r   r
   r
   F   sN  € ð €IØ€JØ×"Ñ" 9Ó-€IØò 6ˆØ�G‰G�C‹LˆØ�‰dˆØ�!‘�Q�r�
× Ñ  Ó%ˆØ�‰8�r‹>Ø/4Ö5¨!œs 1�vÒ5ˆJ�sŠOð6ô �-×*Ñ*Ó,Ó-×4Ñ4€FÜ�×)Ñ)Ó+Ó,×2Ñ2€EØ UÑ	+€Bä˜-Ó(€JØ×+Ñ+Ó-ó =7‰ˆˆ1Ü" =°!Ó4ˆ
Ü�j¤"§)¡)Ô,´
¸:ÄzÔ0RÜ˜*¤jÔ1Ü!‘ä—y‘y�Ø˜1˜y™=Ñ)ˆAØ˜A™$ˆKØ˜Q™4ˆLØˆAØ× Ñ  1Ò$Ø*�Ø�Ùð 
Ø'Ø)Ø&×2Ñ2Ø—_‘_¨DÐ0Ø"×*Ñ*Ø#×,Ñ,ØØ!×(Ñ(ñ
ð ñ
ˆHô �j ! XÕ.Ü˜
¤NÔ3Ü#Ø˜1˜y™=Ñ)¨!Ñ,ðà—N‘NØ#×,Ñ,Ø!×(Ñ(Ø$(ñð ñˆFð %Ÿ/™/ˆFŒKØ#Ÿ™ˆFŒJÜ�j ! VÖ,Ü˜
¤B§N¡NÔ3Ü—^‘^ð Ø'¨¨I©Ñ6°qÑ9Ø—N‘NØ#×,Ñ,Ø!×(Ñ(Ø$(ñð ñˆFô �j ! VÖ,Ü˜
¤B§I¡IÖ.à% a¨)¡mÑ4°QÑ7ˆLÜð Ø(Ø'×4Ñ4Ø—_‘_¨DÐ0ñð ñ	ˆFô �j ! VÔ,Ü�z >Ö2Ü˜:Ð'9¸1Ó=À×AXÑAXÒXØ2>�JÔ/Ø*6�
Ö'ð{=7ð~ ‡O�OÔØ×ÑÔàÐùòU 6s   ÁMc                 óÊ   — t        j                  t        t        j                  j                  d|dz   «      «      }t        | |j                  d«      j                  «       «      S )zöAdapt a model to pruned structure from file specification.

    Args:
        parent_module: Original model to adapt.
        model_variant: Name of pruned model variant file.

    Returns:
        Adapted model with pruned layer dimensions.
    Ú_prunedz.txtzutf-8)	ÚpkgutilÚget_dataÚ__name__ÚosÚpathÚjoinr
   ÚdecodeÚstrip)r@   Úmodel_variantÚ
adapt_datas      r   r   r   ¥   sL   € ô ×!Ñ!¤(¬B¯G©G¯L©L¸ÀMÐTZÑDZÓ,[Ó\€JÜ" =°*×2CÑ2CÀGÓ2L×2RÑ2RÓ2TÓUÐUr   )rY   rV   Úcopyr   Útorchr   Útimm.layersr   r   r   Ú__all__r   r	   r
   r   r6   r   r   ú<module>rd      s3   ðÛ 	Û Ý å ç :Ñ :â
\€òò6ò>\ó~Vr   