ó
    >:jŽq  ã                  óÀ   • S SK Jr  S SKrS SKJr  S SKrS SKJs  Jr	  S SKJr  S SK
Jr  S SKJrJr  SSKJrJrJrJr   " S	 S
\5      r " S S\R*                  \5      rg)é    )ÚannotationsN)ÚOptional)Únn)Ú
BufferDict)ÚBaseTunerLayerÚcheck_adapters_to_mergeé   )Úclustering_ZÚget_trainable_subspacesÚseg_locationsÚ	slice_pcac                  óŽ   • \ rS rSrSrSrSrSS jrSS jr S       SS jjr	    S                   SS jjr
S	rg
)ÚAdamssLayeré   z=
Base Adamss layer that stores adapter-specific information.
)Úadamss_AÚadamss_B)Únum_subspacesÚtrain_subspace_indexÚ
seg_resultÚscatter_indexÚexp_avg_ipt_AÚexp_avg_ipt_BÚexp_avg_unc_AÚexp_avg_unc_Bc                ó$  • Xl         [        R                  " 0 5      U l        [        R                  " 0 5      U l        [        SS9U l        0 U l        0 U l        0 U l	        0 U l
        0 U l        0 U l        0 U l        0 U l        SU l        / U l        g )NT)Ú
persistentF)Ú
base_layerr   Ú
ModuleDictr   r   r   Úadamss_newBr   r   r   r   r   r   r   r   Ú_disable_adaptersÚmerged_adapters)Úselfr   Úkwargss      ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/adamss/layer.pyÚ__init__ÚAdamssLayer.__init__4   s…   € Ø$Œô Ÿš bÓ)ˆŒÜŸš bÓ)ˆŒä%°Ñ6ˆÔØˆÔØ$&ˆÔ!ØˆŒØˆÔàˆÔØˆÔØˆÔØˆÔØ!&ˆÔØ!ˆÕó    c                óì   • XR                   ;   ae  [        U R                   U   5      nS/U-  U R                   U'   S/U-  U R                  U'   S/U-  U R                  U'   S/U-  U R                  U'   gg)zö
Clear stored importance stats for an adapter.

Called after each masking interval to restart EMA accumulation for the next importance scoring window. Without
the reset the scores from early training steps would dominate later masking decisions.
N)r   Úlenr   r   r   )r"   Úadapter_nameÚns      r$   Úreset_importanceÚAdamssLayer.reset_importanceH   s‚   € ð ×-Ñ-Ó-Ü�D×&Ñ& |Ñ4Ó5ˆAØ04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ò,ð .r'   c                óô  • XR                   ;  a  gXR                  ;  a  gU R                  U   nU R                  U   nU R                   U   nU R                  U   nU R                  U   nU R
                  U   n	[        U R                  U   5       Hâ  n
XFU4XWU	44 HÓ  u  p¼nXº   nUR                  c  M  XÊ   c.  [        R                  " USS9XÊ'   [        R                  " USS9XÚ'   XîR                  -  R                  5       R                  5       nXüU
   -
  R                  5       nXÚ   R                  U5      R                  USU-
  S9  XÊ   R                  U5      R                  USU-
  S9  MÕ     Mä     g)a¤  
Update importance scores using current gradients.

Called by [`AdamssModel.update_and_allocate`] (which is in turn called by [`AdamssAsaCallback`] when using
HuggingFace `Trainer`).

Args:
    adapter_name: Name of the adapter to update importance for.
    importance_beta: EMA coefficient for importance averaging (0.8-0.95 typical).
    uncertainty_beta: EMA coefficient for uncertainty averaging (0.8-0.95 typical).
NF©Úrequires_gradr	   )Úalpha)r   r   r   r   r   r   Úranger   ÚgradÚtorchÚ
zeros_likeÚabsÚdetachÚmul_Úadd_)r"   r*   Úimportance_betaÚuncertainty_betaÚparam_list_AÚparam_list_BÚipt_AÚipt_BÚunc_AÚunc_BÚiÚ
param_listÚipt_listÚunc_listÚparamÚiptÚdiffs                    r$   Úupdate_importanceÚAdamssLayer.update_importanceV   s  € ð ×1Ñ1Ó1ØØŸ}™}Ó,Øà—}‘} \Ñ2ˆØ—}‘} \Ñ2ˆà×"Ñ" <Ñ0ˆØ×"Ñ" <Ñ0ˆØ×"Ñ" <Ñ0ˆØ×"Ñ" <Ñ0ˆä�t×)Ñ)¨,Ñ7Ö8ˆAà eÐ,Ø eÐ,ó3Ñ.�
 hð #™�Ø—:‘:Ó)Ø‘{Ñ*Ü&+×&6Ò&6°uÈEÑ&R˜™Ü&+×&6Ò&6°uÈEÑ&R˜™ð !§:¡:Ñ-×2Ñ2Ó4×;Ñ;Ó=�Cð  ¨1¡+Ñ-×2Ñ2Ó4�DØ‘K×$Ñ$Ð%5Ó6×;Ñ;¸DÈÐL\ÑH\Ð;Ñ]ð ‘K×$Ñ$ _Ó5×:Ñ:¸3ÀaÈ/ÑFYÐ:ÓZó%3ò 9r'   c
                óŠ
  • U R                  5       R                  nU R                  5       R                  nUR                  nUR                  nUR
                  u  nnUb  US-  nUb&  [        R                  " X¼R                  S5      4SS9nOUnUR                  S5      R                  S5      R                  [        R                  5      R                  U5      n [        UX-[        R                  5      nUu  nn[        USSSS2SS24   US
5      u  nn[!        U5      n[#        U5      nUU R$                  U'   UU R&                  U'   UU R(                  U'   USSSS2SS24   R+                  5       R                  U5      U R,                  U'   Un/ n/ n[/        U R$                  U   5       GH  nUU   nUU   n USSU SU24   n!U(       a‚  U!U!R0                  -  n"[        R2                  " U"[5        U"R
                  5      SS9u  n#n$n%U$U	U$S   -  :„  n&[5        U&R7                  5       R9                  5       U[;        U$5      5      n'U'S:X  a  Sn'O[5        [;        U 5      U5      n'U'S:X  a  Sn'U!U!R0                  -  n([        R2                  " U([5        U(R
                  S   U'5      SS9u  n)n*nU)SS2SU'24   n+U!R0                  U+-  n,[        R<                  R?                  U,SS9u  n-n.U-R0                  RA                  5       n/US:X  a   [        RB                  " [;        U 5      U'XíS9n0O"[        RD                  " [;        U 5      U'XíS9S-  n0URG                  [H        RJ                  " U/R                  U5      5      5        URG                  [H        RJ                  " U0R                  U5      5      5        GM     [H        RL                  " U5      U RN                  U'   [H        RL                  " U5      U RP                  U'   U(       aN  Un1S/U1-  U RR                  U'   S/U1-  U RT                  U'   S/U1-  U RV                  U'   S/U1-  U RX                  U'   [        R                  " [/        U R$                  U   5       Vs/ s H%  nU R(                  U   U R&                  U   U      PM'     snSS9R[                  5       U R\                  U'   U R_                  U5        U Ra                  U Rb                  US9  g! [         a=  n[        SU S[        UR
                  5       SUR                   SU S	U 3
5      UeSnAff = fs  snf )z™
Update layer with Adamss adapter.

This method initializes the Adamss decomposition for the weight matrix using SVD, clustering, and QR
initialization.
Nr	   ©Údimr   z(slice_pca raised an exception for layer z (shape=z, dtype=z	, device=z): é
   é   )ÚqÚniterÚreduced)ÚmodeÚ
orthogonal)ÚdtypeÚdeviceg{®Gáz„?)Úinference_mode)2Úget_base_layerÚweightÚbiasrV   rU   Úshaper4   ÚcatÚ	unsqueezeÚtoÚfloat32r   Ú	ExceptionÚRuntimeErrorÚtupler
   r   r   r   r   r   r7   r   r2   ÚTÚsvd_lowrankÚminÚsumÚitemr)   ÚlinalgÚqrÚ
contiguousÚzerosÚrandnÚappendr   Ú	ParameterÚParameterListr   r   r   r   r   r   Úlongr   Ú%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)2r"   r*   Úrr   Úsubspace_rankÚinit_weightsÚuse_asarW   Úuse_dynamic_rankÚsvd_thresholdr#   rY   rZ   rV   rU   Ú_Úin_featuresÚweight_with_biasÚweight_tensorÚresÚeÚVVTÚUUÚcluster_idxÚeffective_num_subspacesr   r   Úrank_per_subspaceÚA_paramsÚB_paramsrB   Úsubspace_idxÚseg_indicesÚsubspace_dataÚZ_rowÚ_U_rowÚS_rowÚ_V_rowÚthreshold_maskÚactual_rankÚ
Z_subspaceÚU_gramÚ_S_gramÚA_intermediateÚmatrix_for_qrÚQÚ_RÚA_initÚB_initr+   s2                                                     r$   Úupdate_layerÚAdamssLayer.update_layer†   s`  € ð* ×$Ñ$Ó&×-Ñ-ˆØ×"Ñ"Ó$×)Ñ)ˆØ—‘ˆØ—‘ˆØŸ™‰ˆˆ;ð ÑØ˜1ÑˆKð ÑÜ$Ÿyšy¨&·.±.ÀÓ2CÐ)DÈ!ÑLÑà%Ðð )×2Ñ2°1Ó5×?Ñ?ÀÓB×EÑEÄeÇmÁmÓT×WÑWÐX^Ó_ˆð	Ü˜M¨1´e·m±mÓDˆCð ‰ˆˆRô 0<¸B¸qÀ!ÂQÊ¸z¹NÈMÐ[]Ó/^Ñ,ˆÐ,ô # ;Ó/ˆ
ô  7Ð7NÓOÐð ,Cˆ×Ñ˜<Ñ(Ø2Fˆ×!Ñ! ,Ñ/Ø(2ˆ�‰˜Ñ%ð *-¨Q°²1²a¨Z©×)?Ñ)?Ó)A×)DÑ)DÀUÓ)Kˆ×Ñ˜Ñ&ð *Ðð ˆØˆä�t×)Ñ)¨,Ñ7×8ˆAØ/°Ñ2ˆLØ$ \Ñ2ˆKð ˜q ! [°"°1°"Ð4Ñ5ˆMö  à%¨¯©Ñ7�ô ).×(9Ò(9¸%Ä3ÀuÇ{Á{ÓCSÐ[\Ñ(]Ñ%�˜˜vð
 "'¨¸¸q¹Ñ)AÑ!A�Ü! .×"4Ñ"4Ó"6×";Ñ";Ó"=¸}ÌcÐRWËjÓY�ð  !Ó#Ø"#�Køô
 "¤# kÓ"2°MÓB�ð  !Ó#Ø"#�Kð '¨¯©Ñ8ˆJô "'×!2Ò!2°:ÄÀZ×EUÑEUÐVWÑEXÐZeÓAfÐnoÑ!pÑˆF�G˜QØ#¢A |¨ | OÑ4ˆNð *ŸO™O¨nÑ<ˆMÜ—L‘L—O‘O M¸	�OÐB‰EˆAˆrð —S‘S—^‘^Ó%ˆFð
 ˜|Ó+ô Ÿš¤S¨Ó%5°{È%Ñ_‘ô Ÿš¤S¨Ó%5°{È%Ñ_ÐbfÑf�ð �O‰OœBŸLšL¨¯©°5Ó)9Ó:Ô;Ø�O‰OœBŸLšL¨¯©°5Ó)9Ó:×;ñK 9ôR ')×&6Ò&6°xÓ&@ˆ�‰�lÑ#Ü&(×&6Ò&6°xÓ&@ˆ�‰�lÑ#ö Ø'ˆAØ04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ñ,Ø04¨v¸©zˆD×Ñ˜|Ñ,ô ,1¯9ª9ô ˜t×1Ñ1°,Ñ?Ô@óâ@�Að —‘ Ñ-¨d×.GÑ.GÈÑ.UÐVWÑ.XÔYÙ@ñð ñ,
÷ ‰$‹&ð 	×Ñ˜<Ñ(ð 	×2Ñ2°<Ô@ð 	×Ñ˜×-Ñ-¸nÐÒMøôI ó 	ÜØ:¸<¸.ÈÔQVÐWd×WjÑWjÓQkÐPlÐltð  vC÷  vIñ  vIð  uJð  JSð  TZð  S[ð  [^ð  _`ð  ^að  bóàðûð	üòrs   ÃS6 Ñ=,U Ó6
T=Ô 8T8Ô8T=)r    r   r   r   r   r   r   r   r   r!   r   r   r   r   N)r   ú	nn.ModuleÚreturnÚNone)r*   Ústrrœ   r�   )ç333333ë?rŸ   )r*   rž   r:   Úfloatr;   r    rœ   r�   )FFFgš™™™™™¹?)r*   rž   rt   Úintr   r¡   ru   r¡   rv   rž   rw   ÚboolrW   r¢   rx   r¢   ry   r    rœ   r�   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úadapter_layer_namesÚother_param_namesr%   r,   rI   r™   Ú__static_attributes__© r'   r$   r   r      så   † ñð 3Ðð	Ðô"ô(:ð [_ð.[Øð.[Ø27ð.[ØRWð.[à	õ.[ðn Ø$Ø!&Ø"ðoNàðoNð ðoNð ð	oNð
 ðoNð ðoNð ðoNð ðoNð ðoNð ðoNð 
÷oNð oNr'   r   c                  ó®   ^ • \ rS rSrSr     S               SU 4S jjjrU 4S jrSS jrSSS jjrSS jr	SS jr
SS	 jrSU 4S
 jjrSrU =r$ )ÚLineari8  z
Adamss-adapted Linear layer.
c                ó.  >• [         T
U ]  5         [        R                  " X40 UD6  UR                  U l        UR                  U l        UR                  SS5      n	U R                  " UUUUUU4SU	0UD6  X l        UR                  R                  U l	        g )NrW   F)
Úsuperr%   r   r{   Úout_featuresÚpopr™   Ú_active_adapterrY   rU   )r"   r   r*   rt   r   ru   rv   rw   r#   rW   Ú	__class__s             €r$   r%   ÚLinear.__init__=  s£   ø€ ô 	‰ÑÔÜ×Ò˜TÑ8°Ò8ð &×1Ñ1ˆÔØ&×3Ñ3ˆÔð  Ÿ™Ð$4°eÓ<ˆØ×ÒØØØØØØñ		
ð *ð		
ð ò		
ð  ,ÔØ×&Ñ&×,Ñ,ˆ�
r'   c           	     ó4  >• UR                  5        GHS  u  p‰UR                  U5      (       d  M  U[        U5      S n
U
R                  S5      n SR	                  USS 5      nU(       a  U R                  U5      OU nUS   nUR                  5       (       a  U[        U5         nO[        XÞ5      n [        U[        R                  [        R                   45      (       d  MÒ  UR"                  U	R"                  :w  d  Mî  [        R                   " [        R$                  " U	5      UR&                  S9nUR                  5       (       a  UU[        U5      '   GMG  [)        XÞU5        GMV     [*        TU ]Y  XX4XVU5        g! [        [        [        4 a     GM„  f = f)aÅ  Handle shape mismatches that arise when loading checkpoints.

AdaMSS B parameter shapes depend on KMeans clustering of the weight matrix. KMeans uses a fixed `random_state`
so results should be deterministic, but this override acts as a safety net in case sklearn changes clustering
behaviour across versions. It detects shape mismatches and replaces placeholder parameters with
correctly-shaped tensors before the default `load_state_dict` logic runs.
NÚ.éÿÿÿÿr/   )ÚitemsÚ
startswithr)   ÚsplitÚjoinÚget_submoduleÚisdigitr¡   ÚgetattrÚAttributeErrorÚ
IndexErrorÚKeyErrorÚ
isinstancer4   ÚTensorr   rn   r[   Ú
empty_liker0   Úsetattrr¯   Ú_load_from_state_dict)r"   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsÚkeyÚvalueÚ	local_keyÚpartsÚparent_pathÚtargetÚlastÚcurrentÚ	new_paramr³   s                    €r$   rÆ   ÚLinear._load_from_state_dict^  sJ  ø€ ð %×*Ñ*×,‰JˆCØ—>‘> &×)Ñ)ÙØœC ›K˜MÐ*ˆIØ—O‘O CÓ(ˆEð
à!Ÿh™h u¨S¨b zÓ2�Þ<G˜×+Ñ+¨KÔ8ÈT�Ø˜R‘y�Ø—<‘<—>‘>Ø$¤S¨£YÑ/‘Gä% fÓ3‘Gô ˜'¤E§L¡L´"·,±,Ð#?×@Ó@ÀWÇ]Á]ÐV[×VaÑVaÕEaÜŸLšL¬×)9Ò)9¸%Ó)@ÐPW×PeÑPeÑf�	Ø—<‘<—>‘>Ø(1�Fœ3˜t›9Ô%ä˜F¨)×4ñ- -ô0 	‰Ñ%Ø ¸ÐWaõ	
øô #¤J´Ð9ó Ûðús   ÁAE=Â'E=Å=FÆFc                ó  • UR                   nU R                  (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nGO¢U R                  (       a  U R                  " U/UQ70 UD6nGOyUR                  U R                   5      nU R                  5       R                  b¡  UR                  5       S:X  a9  [        R                  " UR                  S   SUR                  U R                   S9nO=[        R                  " / UR                  SS QSP7UR                  U R                   S.6n[        R                  " X4SS9nOUnU R                  " U/UQ70 UD6nU R                   GHy  nX€R                  ;  a  M  [         R"                  " XpR$                  U   R                  U R                   5      5      n	/ n
['        U R(                  U   5       H–  nU R                  U   U   R                  U R                   5      nU R*                  U   U   R                  U R                   5      n[         R"                  " Xœ5      n[         R"                  " Xí5      nU
R-                  U5        M˜     [        R                  " U
SS9nU R.                  U   R                  UR                  5      nUR                  5       S:X  a…  UR1                  S5      R3                  UR                  S   S5      n[        R4                  " UR                  S   UR                  S   UR                  UR                   S9R7                  SUU5      nOšUR1                  S5      R1                  S5      R2                  " / UR                  SS QSP76 n[        R4                  " / UR                  SS QUR                  S   P7UR                  UR                   S.6R7                  SUU5      nX_-   nGM|     UR                  U5      $ )z&
Forward pass with Adamss adaptation.
NrO   r   r	   ©rV   rU   r·   rL   )rU   r    ÚmergedÚunmerger   r^   rX   rZ   rM   r4   Úonesr[   rV   r\   rs   r   ÚFÚlinearr   r2   r   r   rm   r   r]   Úexpandrk   Úscatter)r"   ÚxÚargsr#   Úprevious_dtypeÚresultrÜ   ÚnewxÚactive_adapterÚ	projectedÚsubspace_chunksrB   ÚA_iÚB_iÚsubspace_outÚadapter_deltaÚscatter_index_tensorÚindexs                     r$   ÚforwardÚLinear.forward„  sn  € ð Ÿ™ˆà×!×!Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ŠFØ�[�[ð —_’_ QÐ8¨Ò8°Ñ8ŠFð —‘�T—Z‘ZÓ ˆAð ×"Ñ"Ó$×)Ñ)Ñ5Ø—5‘5“7˜a“<Ü Ÿ:š: a§g¡g¨a¡j°!¸A¿H¹HÈDÏJÉJÑW‘Dä Ÿ:š:ÐZ q§w¡w¨s° |ÐZ°QÑZ¸q¿x¹xÈtÏzÉzÒZ�DÜ—y’y ! °Ñ3‘à�ð —_’_ QÐ8¨Ò8°Ñ8ˆFð #'×"6Õ"6�Ø!¯©Ó6Ùô ŸHšH T×+;Ñ+;¸NÑ+K×+NÑ+NÈtÏzÉzÓ+ZÓ[�	ð #%�Ü˜t×1Ñ1°.ÑAÖB�AØŸ-™-¨Ñ7¸Ñ:×=Ñ=¸d¿j¹jÓI�CØŸ-™-¨Ñ7¸Ñ:×=Ñ=¸d¿j¹jÓI�CÜ#$§8¢8¨IÓ#;�LÜ#$§8¢8¨LÓ#>�LØ#×*Ñ*¨<Ö8ñ Cô !&§	¢	¨/¸rÑ B�Ø'+×'9Ñ'9¸.Ñ'I×'LÑ'LÈ]×MaÑMaÓ'bÐ$à ×$Ñ$Ó&¨!Ó+Ø0×:Ñ:¸1Ó=×DÑDÀ]×EXÑEXÐYZÑE[Ð]_Ó`�EÜ$)§K¢KØ%×+Ñ+¨AÑ.ØŸ™ RÑ(Ø,×3Ñ3Ø+×1Ñ1ñ	%÷
 ‘g˜a ¨Ó6ñ "ð 1×:Ñ:¸1Ó=×GÑGÈÓJ×QÒQÐpÐS`×SfÑSfÐgjÐhjÐSkÐpÐmoÒp�EÜ$)§K¢Kð %Ø&×,Ñ,¨S¨bÐ1ð%àŸ™ RÑ(ñ%ð  -×3Ñ3Ø+×1Ñ1ò	%÷
 ‘g˜b %¨Ó7ð "ð  Ñ/“ñQ #7ðV �y‰y˜Ó(Ð(r'   c                ó  • [        X5      nU(       d  gU GHï  nX0R                  ;   d  M  U R                  5       nU(       Ga:  UR                  R                  R                  5       nUR                  nU R                  U5      nXWR                  U5      -  n[        R                  " U5      R                  5       (       d  [        SU S35      eXTR                  l        UR                  b�  UR                  R                  R                  5       nU R                  U5      n	X‰R                  U5      -  n[        R                  " U5      R                  5       (       d  [        SU S35      eX„R                  l        OmU R                  U5      nUR                  =R                  U-  sl        UR                  b0  U R                  U5      n	UR                  =R                  U	-  sl        U R                  R!                  U5        GMò     g)a�  
Merge the active adapter weights into the base weights.

Args:
    safe_merge (`bool`, *optional*):
        If True, the merge operation will be performed in a copy of the original weights and check for NaNs
        before merging the weights. Defaults to `False`.
    adapter_names (`list[str]`, *optional*):
        The list of adapter names that should be merged. If None, all active adapters will be merged.
Nz1NaNs detected in the merged weights. The adapter z seems to be brokenz.NaNs detected in the merged bias. The adapter )r   r   rX   rY   ÚdataÚclonerU   Úget_delta_weightr^   r4   ÚisfiniteÚallÚ
ValueErrorrZ   Úget_delta_biasr!   rm   )
r"   Ú
safe_mergeÚadapter_namesræ   r   Úorig_weightÚ
orig_dtypeÚdelta_weightÚ	orig_biasÚ
delta_biass
             r$   ÚmergeÚLinear.mergeÒ  s¶  € ô 0°ÓDˆÞàä+ˆNØ§¡Õ.Ø!×0Ñ0Ó2�
ßð #-×"3Ñ"3×"8Ñ"8×">Ñ">Ó"@�KØ!,×!2Ñ!2�JØ#'×#8Ñ#8¸Ó#H�LØ§?¡?°:Ó#>Ñ>�Kä Ÿ>š>¨+Ó6×:Ñ:×<Ñ<Ü(ØOÐP^ÐO_Ð_rÐsóð ð .9×%Ñ%Ô*ð "—‘Ñ2Ø$.§O¡O×$8Ñ$8×$>Ñ$>Ó$@˜	Ø%)×%8Ñ%8¸Ó%H˜
Ø!§]¡]°:Ó%>Ñ>˜	Ü$Ÿ~š~¨iÓ8×<Ñ<×>Ñ>Ü",Ø"PÐQ_ÐP`Ð`sÐ tó#ð ð 09Ÿ™Ô,øà#'×#8Ñ#8¸Ó#H�LØ×%Ñ%×*Ò*¨lÑ:Õ*ð "—‘Ñ2Ø%)×%8Ñ%8¸Ó%H˜
Ø"Ÿ™×,Ò,°
Ñ:Õ,à×$Ñ$×+Ñ+¨N×;òK ,r'   c                ób  • U R                   (       d  [        R                  " S5        g[        U R                  5      S:”  aî  U R                  R                  5       nXR                  ;   a©  U R                  5       nUR                  nUR                  nU R                  U5      nU=R                  UR                  U5      -  sl        UR                  b?  U R                  U5      nUR                  =R                  UR                  U5      -  sl        [        U R                  5      S:”  a  Mí  gg)zG
This method unmerges all merged adapter layers from the base weights.
z Already unmerged. Nothing to do.Nr   )rÚ   ÚwarningsÚwarnr)   r!   r±   r   rX   rY   rU   rô   rò   r^   rZ   rø   )r"   ræ   r   rY   rü   rý   rÿ   s          r$   rÛ   ÚLinear.unmerge	  sä   € ð �{�{Ü�MŠMÐ<Ô=Øä�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNØ§¡Ó.Ø!×0Ñ0Ó2�
Ø#×*Ñ*�Ø#Ÿ\™\�
Ø#×4Ñ4°^ÓD�Ø—’˜|Ÿ™¨zÓ:Ñ:•ð —?‘?Ñ.Ø!%×!4Ñ!4°^Ó!D�JØ—O‘O×(Ò(¨J¯M©M¸*Ó,EÑEÕ(ô �$×&Ñ&Ó'¨!×+r'   c                óz  • U R                  5       R                  R                  nU R                  5       R                  R                  nU R                  5       R                  nU R                  U   nU R
                  U   nU R                  U   nUR                  S:H  =(       a#    U[        R                  [        R                  4;   nU(       a  [        R                  OUn	UR                  U5      R                  U	5      nUR                  S   n
UR                  S   n[        R                  " X«X)S9n/ n[        U R                   U   5       H`  nXn   R                  U5      R                  U	5      nX~   R                  U5      R                  U	5      nUU-  U-  nUR#                  U5        Mb     U(       aB  [        R$                  " USS9nU R&                  U   R                  UR                  5      nUUU'   U R                  5       R(                  b  USS2SS24   nOUnU(       a  UR                  US9nU$ )	aÐ  
Compute the delta weight for the given adapter.

For AdaMSS, the forward computes:
    result = newx @ resW.T + scatter(newx @ newB.T @ A.T @ B.T)

Since resW = original_weight_with_bias, the delta is just the adapter path:
    delta = scatter(B @ A @ newB)

We extract the weight portion (excluding bias column) as the delta to add to the base layer's weight.

Args:
    adapter_name (str): The name of the adapter for which the delta weight should be computed.
Úcpur   r	   rÙ   rL   Nr·   ©rU   ©rX   rY   rV   rU   r   r   r   Útyper4   Úfloat16Úbfloat16r_   r^   r[   rk   r2   r   rm   r\   r   rZ   ©r"   r*   rV   rU   Úbase_weightÚnewBr<   r=   Úcast_to_fp32Úcompute_dtyper°   Úin_features_plus_1rý   ÚchunksrB   ré   rê   ÚchunkÚcombinedÚscatter_idxÚoutput_tensors                        r$   rô   ÚLinear.get_delta_weight  sý  € ð ×$Ñ$Ó&×-Ñ-×4Ñ4ˆØ×#Ñ#Ó%×,Ñ,×2Ñ2ˆØ×)Ñ)Ó+×2Ñ2ˆð ×Ñ Ñ-ˆð —}‘} \Ñ2ˆØ—}‘} \Ñ2ˆð —{‘{ eÑ+×X°¼%¿-¹-ÌÏÉÐ9XÑ0XˆÞ)5œŸš¸5ˆà�w‰w�v‹×!Ñ! -Ó0ˆð #×(Ñ(¨Ñ+ˆØ!ŸZ™Z¨™]Ðô —{’{ <ÈFÑhˆð
 ˆÜ�t×)Ñ)¨,Ñ7Ö8ˆAØ‘/×$Ñ$ VÓ,×/Ñ/°Ó>ˆCØ‘/×$Ñ$ VÓ,×/Ñ/°Ó>ˆCð ˜#‘I Ñ$ˆEØ�M‰M˜%Ö ñ 9ö Ü—y’y ¨QÑ/ˆHà×,Ñ,¨\Ñ:×=Ñ=¸l×>QÑ>QÓRˆKØ(0ˆL˜Ñ%ð ×ÑÓ ×%Ñ%Ñ1à(ª¨C¨R¨C¨Ñ0‰Mð )ˆMæØ)×,Ñ,°5Ð,Ð9ˆMàÐr'   c                ó¶  • U R                  5       R                  R                  nU R                  5       R                  R                  nU R                  5       R                  nU R                  U   nU R
                  U   nU R                  U   nUR                  S:H  =(       a#    U[        R                  [        R                  4;   nU(       a  [        R                  OUn	UR                  U5      R                  U	5      nUR                  S   n
UR                  S   n[        R                  " X«X)S9n/ n[        U R                   U   5       H`  nXn   R                  U5      R                  U	5      nX~   R                  U5      R                  U	5      nUU-  U-  nUR#                  U5        Mb     U(       aB  [        R$                  " USS9nU R&                  U   R                  UR                  5      nUUU'   U R                  5       R(                  c#  [        R                  " UR                  S   X)S9nO	USS2S4   nU(       a  UR                  US9nU$ )	zÝ
Compute the bias delta for the given adapter.

This is the last column of the adapter path contribution (B @ A @ newB).

Args:
    adapter_name (str): The name of the adapter for which the bias delta should be computed.
r  r   r	   rÙ   rL   Nr·   r  r	  r  s                        r$   rø   ÚLinear.get_delta_biash  s  € ð ×$Ñ$Ó&×-Ñ-×4Ñ4ˆØ×#Ñ#Ó%×,Ñ,×2Ñ2ˆØ×)Ñ)Ó+×2Ñ2ˆð ×Ñ Ñ-ˆð —}‘} \Ñ2ˆØ—}‘} \Ñ2ˆà—{‘{ eÑ+×X°¼%¿-¹-ÌÏÉÐ9XÑ0XˆÞ)5œŸš¸5ˆà�w‰w�v‹×!Ñ! -Ó0ˆà"×(Ñ(¨Ñ+ˆØ!ŸZ™Z¨™]Ðô —{’{ <ÈFÑhˆð ˆÜ�t×)Ñ)¨,Ñ7Ö8ˆAØ‘/×$Ñ$ VÓ,×/Ñ/°Ó>ˆCØ‘/×$Ñ$ VÓ,×/Ñ/°Ó>ˆCØ˜#‘I Ñ$ˆEØ�M‰M˜%Ö ñ	 9ö Ü—y’y ¨QÑ/ˆHØ×,Ñ,¨\Ñ:×=Ñ=¸l×>QÑ>QÓRˆKØ(0ˆL˜Ñ%ð ×ÑÓ ×%Ñ%Ñ-ä!ŸKšK¨×(9Ñ(9¸!Ñ(<ÀVÑa‰Mà(ª¨B¨Ñ/ˆMæØ)×,Ñ,°5Ð,Ð9ˆMàÐr'   c                ó*   >• [         TU ]  5       nSU-   $ )Nzadamss.)r¯   Ú__repr__)r"   Úrepr³   s     €r$   r  ÚLinear.__repr__   s   ø€ Ü‰gÑÓ ˆØ˜3‰Ðr'   )r²   rU   r{   r°   )iô  é   r	   rT   F)r   r›   r*   rž   rt   r¡   r   r¡   ru   r¡   rv   rž   rw   r¢   rœ   r�   )rá   útorch.Tensorrœ   r   )FN)rù   r¢   rú   zOptional[list[str]]rœ   r�   )rœ   r�   )r*   rž   rœ   r   )rœ   rž   )r£   r¤   r¥   r¦   r§   r%   rÆ   rï   r   rÛ   rô   rø   r  rª   Ú__classcell__)r³   s   @r$   r­   r­   8  s¢   ø† ñð ØØØ(Øð-àð-ð ð-ð ð	-ð
 ð-ð ð-ð ð-ð ð-ð 
÷-ð -õB$
ôLL)ö\5<ônFô,GôR6÷põ r'   r­   )Ú
__future__r   r  Útypingr   r4   Útorch.nn.functionalr   Ú
functionalrÝ   Úpeft.tuners._buffer_dictr   Úpeft.tuners.tuners_utilsr   r   Úutilsr
   r   r   r   r   ÚModuler­   r«   r'   r$   Ú<module>r*     sM   ðõ #ã Ý ã ß Ð Ý å /ß Lç RÓ RôWN�.ô WNôtjˆR�Y‰Y˜õ jr'   