ó
    >:j„5  ã                  ó‚  • S SK Jr  S SKrS SKJrJrJr  S SKrS SKJr  S SK	J	r	  S SK
JrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJrJrJr  S S	KJr  \R:                  \R<                  \R>                  \R@                  \RB                  \RD                  4r#\RH                  RJ                  \RL                  RJ                  \RN                  RJ                  \RP                  RJ                  \RR                  RJ                  /r*\\RV                  \RX                  \RZ                  \R\                  \R^                  \R`                  4   r1\Rd                  Rf                  \Rd                  Rh                  \Rd                  Rj                  \Rd                  Rl                  \Rn                  \Rp                  4r9 " S
 S\5      r:g)é    )ÚannotationsN)ÚAnyÚOptionalÚUnion)Únn)Útqdm)ÚadaloraÚlohaÚlokrÚloraÚoftÚshira)Ú	BaseTunerÚBaseTunerLayerÚ_delete_auxiliary_adapter)Ú2TRANSFORMERS_MODELS_TO_LORA_TARGET_MODULES_MAPPINGÚModulesToSaveWrapperÚPeftTypeÚ_get_submodulesÚget_gptqmodel_quant_linear)Ú_set_adapterc                  óÚ   ^ • \ rS rSrSrSU 4S jjrSU 4S jjr        SS jrSS jrSS jr	\
S 5       rSSS	 jjr\
S
 5       r    S     SS jjrSS jrSS jrSS jrSrU =r$ )Ú
MixedModelé9   aÃ  
A class that allows to mix different types of adapters in a single model.

Note: This class should usually not be initialized directly. Instead, use `get_peft_model` with the argument
`mixed=True`.

Args:
    model (:obj:`nn.Module`):
        The model to be tuned.
    config (:obj:`PeftConfig`):
        The config of the model to be tuned. The adapter type must be compatible.
    adapter_name (:obj:`str`):
        The name of the first adapter.
c                ó&   >• [         TU ]  XU5        g ©N)ÚsuperÚ__init__)ÚselfÚmodelÚconfigÚadapter_nameÚ	__class__s       €ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/mixed/model.pyr   ÚMixedModel.__init__I   s   ø€ Ü‰Ñ˜¨Õ5ó    c           	     óÌ   >• [        U[        R                  5      (       d5  [        U R                  R
                   S[         S[        U5       S35      e[        TU ]%  U5        g)z´
A helper method to check the config when a new adapter is being added.

Raise a ValueError if there is something wrong with the config or if it conflicts with existing adapters.

z only supports z configs, but got Ú.N)
Ú
isinstanceÚConfigsÚ__args__Ú
ValueErrorr#   Ú__name__ÚCOMPATIBLE_TUNER_TYPESÚtyper   Ú_check_new_adapter_config)r   r!   r#   s     €r$   r0   Ú$MixedModel._check_new_adapter_configL   sa   ø€ ô ˜&¤'×"2Ñ"2×3Ñ3ÜØ—>‘>×*Ñ*Ð+¨?Ô;QÐ:RÐRdÔeiÐjpÓeqÐdrÐrsÐtóð ô 	‰Ñ)¨&Õ1r&   c                óp  • [        U[        R                  5      (       a%  [        R                  R                  " X/UQ70 UD6  g [        U[
        R                  5      (       a%  [
        R                  R                  " X/UQ70 UD6  g [        U[        R                  5      (       a%  [        R                  R                  " X/UQ70 UD6  g [        U[        R                  5      (       a%  [        R                  R                  " X/UQ70 UD6  g [        U[        R                  5      (       a%  [        R                   R                  " X/UQ70 UD6  g [        U["        R$                  5      (       a%  ["        R&                  R                  " X/UQ70 UD6  g [)        S[+        U5       S[,         S35      e)NzUnsupported config type ú, should be one of r(   )r)   r	   ÚAdaLoraConfigÚAdaLoraModelÚ_create_and_replacer   Ú
LoraConfigÚ	LoraModelr
   Ú
LoHaConfigÚ	LoHaModelr   Ú
LoKrConfigÚ	LoKrModelr   Ú	OFTConfigÚOFTModelr   ÚShiraConfigÚ
ShiraModelr,   r/   r.   )r   r!   ÚargsÚkwargss       r$   r6   ÚMixedModel._create_and_replaceZ   s=  € ô �fœg×3Ñ3×4Ñ4Ü× Ñ ×4Ò4°TÐSÀDÒSÈFÓSÜ˜¤§¡×0Ñ0Ü�N‰N×.Ò.¨tÐM¸dÒMÀfÓMÜ˜¤§¡×0Ñ0Ü�N‰N×.Ò.¨tÐM¸dÒMÀfÓMÜ˜¤§¡×0Ñ0Ü�N‰N×.Ò.¨tÐM¸dÒMÀfÓMÜ˜¤§¡×.Ñ.Ü�L‰L×,Ò,¨TÐK¸DÒKÀFÓKÜ˜¤× 1Ñ 1×2Ñ2Ü×Ñ×0Ò0°ÐOÀÒOÈÓOäÐ7¼¸V»°~ÐEXÔYoÐXpÐpqÐrÓsÐsr&   c                óN  ^^• [        XU5        [        US5      (       a  UR                  5       nO[        US5      (       a  UR                  n[        US5      (       d3  UR                  Ul        [        US5      (       a  UR
                  Ul        [        USS 5      bc  [        US5      (       a  UR                  UR                  l        OUR                  Ul        UR                  UR                  R                  5        [        R                  " S5      mUR                  5        Hù  u  mn[        U4S j[         5       5      (       d  M&  [        US5      (       a  UR                  nOp[        US5      (       a  UR                   nOR[        US	5      (       a  UR                  nO4[        US
S 5      b  UR"                  nO[%        UR'                  5       5      n[        U4S jUR'                  5        5       5      (       a  MÞ  UR                  UR                  5        Mû     g )NÚ
base_layerÚquant_linear_moduleÚbiasÚstateÚmetac              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr   © )Ú.0ÚprefixÚnames     €r$   Ú	<genexpr>Ú-MixedModel._replace_module.<locals>.<genexpr>Š   s   øé € Ð9² f˜T–>²ùó   ƒÚqweightÚW_qÚweightÚin_proj_weightc              3  ó@   >#   • U  H  oR                   T:H  v •  M     g 7fr   )Údevice)rL   ÚprI   s     €r$   rO   rP   –   s   øé € ÐIÒ5H°Ÿ8™8 tÖ+Ò5Hùs   ƒ)ÚsetattrÚhasattrÚget_base_layerrF   rT   rG   ÚgetattrrH   rE   ÚtorW   ÚtorchÚnamed_modulesÚanyÚPREFIXESrR   rS   rU   ÚnextÚ
parameters)	r   ÚparentÚ
child_nameÚ
new_moduleÚchildÚmodulerT   rI   rN   s	          @@r$   Ú_replace_moduleÚMixedModel._replace_moduleo   s”  ù€ Ü� JÔ/ô
 �5˜,×'Ñ'Ø×(Ñ(Ó*‰EÜ�UÐ1×2Ñ2à×-Ñ-ˆEä�z <×0Ñ0Ø %§¡ˆJÔÜ�u˜f×%Ñ%Ø"'§*¡*�
”ä�5˜' 4Ó(Ñ4Ü�z <×0Ñ0Ø.3¯k©k�
×%Ñ%Õ+à#(§;¡;�
Ô Ø�M‰M˜%Ÿ,™,×-Ñ-Ô.ä�|Š|˜FÓ#ˆà&×4Ñ4Ö6‰LˆD�&ÜÔ9µÓ9×9Ó9Ü˜5 )×,Ñ,Ø"Ÿ]™]‘FÜ˜U E×*Ñ*Ø"ŸY™Y‘FÜ˜U H×-Ñ-Ø"Ÿ\™\‘FÜ˜UÐ$4°dÓ;ÑGØ"×1Ñ1‘Fä! %×"2Ñ"2Ó"4Ó5�FäÔI°V×5FÑ5FÔ5HÓI×IÓIØ—I‘I˜fŸm™mÖ,ò 7r&   c                ó@  ^• UR                  5        H-  u  mn[        U4S j[         5       5      (       a  M&  SUl        M/     U R                   HÌ  n[        U R                  U   SS5      nUS:X  a  M%  US:X  a+  UR                  5        H  u  mnST;   d  M  SUl        M     MV  US:X  ac  UR                  5        HM  n[        U[        5      (       d  M  [        US5      (       d  M-  UR                  c  M<  SUR                  l        MO     M¿  [        SU S	35      e   g )
Nc              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr   rK   )rL   rM   Úns     €r$   rO   Ú>MixedModel._mark_only_adapters_as_trainable.<locals>.<genexpr>›   s   øé € Ð:² v –{²ùrQ   FrG   ÚnoneÚallTÚ	lora_onlyzRequested bias: z, is not implemented.)Únamed_parametersr`   ra   Úrequires_gradÚactive_adaptersr\   Úpeft_configÚmodulesr)   ÚLayersrZ   rG   r,   )r   r    rX   Úactive_adapterrG   Úmrm   s         @r$   Ú _mark_only_adapters_as_trainableÚ+MixedModel._mark_only_adapters_as_trainable™   só   ø€ Ø×*Ñ*Ö,‰DˆAˆqÜÔ:µÓ:×:Ó:Ø"'�–ñ -ð #×2Ô2ˆNÜ˜4×+Ñ+¨NÑ;¸VÀVÓLˆDØ�v‹~Ùà�u‹}Ø!×2Ñ2Ö4‘D�A�qØ •{Ø*.˜žó 5ð ˜Ó$àŸ™ž�AÜ! !¤V×,Ó,´¸¸F×1CÓ1CÈÏÉÓHZØ/3˜Ÿ™Ö,ó )ô !Ð#3°D°6Ð9NÐ!OÓPÐPò 3r&   c                óš  • UR                  SS 5      n[        U5      nUc  Ub#  [        SU R                  R                   S35      eUR                  SS5      nUR                  SS5      nU(       d  U(       a#  [        SU R                  R                   S35      e[        U [        R                  5      (       a$  [        R                  R                  " XU40 UD6nU$ [        U [        R                  5      (       a$  [        R                  R                  " XU40 UD6nU$ [        U [        R                  5      (       a$  [        R                   R                  " XU40 UD6nU$ [        U ["        R$                  5      (       a$  ["        R&                  R                  " XU40 UD6nU$ [        U [(        R*                  5      (       a$  [(        R,                  R                  " XU40 UD6nU$ [        U [.        R0                  5      (       a$  [.        R2                  R                  " XU40 UD6nU$ [        S[5        U 5       S	[6         S
35      e)NÚgptq_quantization_configz$GPTQ quantization not supported for ú (yet).Úloaded_in_8bitFÚloaded_in_4bitz-8bit and 4bit quantization not supported for zUnknown config type r3   r(   )Úgetr   r,   Ú	peft_typeÚvalueÚpopr)   r	   r4   r5   Ú_create_new_moduler   r7   r8   r
   r9   r:   r   r;   r<   r   r=   r>   r   r?   r@   r/   r.   )	r!   r"   ÚtargetrB   r}   ÚGPTQQuantLinearr   r€   rf   s	            r$   r…   ÚMixedModel._create_new_module¯   s  € à#)§:¡:Ð.HÈ$Ó#OÐ Ü4Ð5MÓNˆØ$Ñ0°oÑ6QÜÐCÀF×DTÑDT×DZÑDZÐC[Ð[bÐcÓdÐdàŸ™Ð$4°eÓ<ˆØŸ™Ð$4°eÓ<ˆÞž^ÜÐLÈV×M]ÑM]×McÑMcÐLdÐdkÐlÓmÐmä�fœg×3Ñ3×4Ñ4Ü ×-Ñ-×@Ò@ÀÐW]ÑhÐagÑhˆJð Ðô ˜¤§¡×0Ñ0ÜŸ™×:Ò:¸6ÐQWÑbÐ[aÑbˆJð Ðô ˜¤§¡×0Ñ0ÜŸ™×:Ò:¸6ÐQWÑbÐ[aÑbˆJð Ðô ˜¤§¡×0Ñ0ÜŸ™×:Ò:¸6ÐQWÑbÐ[aÑbˆJð Ðô ˜¤§¡×.Ñ.ÜŸ™×8Ò8¸ÈvÑ`ÐY_Ñ`ˆJð
 Ðô	 ˜¤× 1Ñ 1×2Ñ2Ü×)Ñ)×<Ò<¸VÐSYÑdÐ]cÑdˆJð Ðô Ð3´D¸³L°>ÐATÔUkÐTlÐlmÐnÓoÐor&   c                ó   • [        XUS9  U R                  R                  5        H`  n[        U[        5      (       d  M  UR
                  (       a&  [        R                  " S5        UR                  5         UR                  XS9  Mb     Xl
        g )N)Úinference_modezJAdapter cannot be set when the model is merged. Unmerging the model first.)r   r    rv   r)   rw   ÚmergedÚwarningsÚwarnÚunmergeÚset_adapterrx   )r   r"   rŠ   rh   s       r$   r�   ÚMixedModel.set_adapterË   sg   € Ü�T¸ÒGØ—j‘j×(Ñ(Ö*ˆFÜ˜&¤&×)Ó)Ø—=—=Ü—M’MÐ"nÔoØ—N‘NÔ$Ø×"Ñ" <Ð"ÓOñ +ð +Õr&   c                ó„   • U R                   c2  US   [        ;  a  [        S5      e[        [        US      5      U l         U $ )NÚ
model_typez0Please specify `target_modules` in `peft_config`)Útarget_modulesr   r,   Úset)ru   Úmodel_configs     r$   Ú_prepare_adapter_configÚ"MixedModel._prepare_adapter_configÕ   sK   € à×%Ñ%Ñ-Ø˜LÑ)Ô1cÓcÜ Ð!SÓTÐTä),ÜBÀ<ÐP\ÑC]Ñ^ó*ˆKÔ&ð Ðr&   c                ó–  ^^^• U(       a&  [        U R                  SS 5      S:X  a  [        S5      eUU4S jnU R                  R                  5        V^Vs/ s H(  u  mn[	        U4S j[
         5       5      (       a  M&  TPM*     nnnSU(       a  SOS-   S	-   n	[        X‚(       + U	S
9 HÔ  m [        U R                  T5      u  p«n[        US5      (       a2  U(       a  U" U5        U R                  X¬UR                  5       U5        M`  [        U[        5      (       d  Mw  UR                  UR                     n[        US5      (       a'  U(       a  UR!                  TTS9  UR                  5       n[#        X¬U5        MÖ     [        U R                  S5      (       a  U R                  ?U R                  $ s  snnf ! [         a     GM  f = f)NÚquantization_methodÚgptqz4Cannot merge layers when the model is gptq quantizedc                ó(  >• / nU n[        US5      (       a0  UR                  U5        UR                  n[        US5      (       a  M0  [        US S USS  5       H&  u  p4UR	                  TTS9  UR                  Ul        M(     U R	                  TTS9  g )NrE   éÿÿÿÿé   ©Ú
safe_mergeÚadapter_names)rZ   ÚappendrE   ÚzipÚmerge)rh   ÚpathÚlayerÚlayer_beforeÚlayer_afterr    rŸ   s        €€r$   Úmerge_recursivelyÚBMixedModel._unload_and_optionally_merge.<locals>.merge_recursivelyë   s–   ø€ àˆDØˆEÜ˜% ×.Ñ.Ø—‘˜EÔ"Ø×(Ñ(�ô ˜% ×.Ó.ô .1°°c°r°¸DÀÀ¸HÖ-EÑ)�Ø×!Ñ!¨ZÀ}Ð!ÑUØ*5×*@Ñ*@�Ö'ñ .Fð �L‰L J¸mˆLÒLr&   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr   rK   ©rL   rM   Úkeys     €r$   rO   Ú:MixedModel._unload_and_optionally_merge.<locals>.<genexpr>÷   s   øé € ÐKqÒhpÐ^dÐVYÎMÒhpùrQ   z
Unloading zand merging Ú r    )ÚdisableÚdescrE   rž   ru   )r\   r    r,   r_   r`   ra   r   r   ÚAttributeErrorrZ   ri   r[   r)   r   Úmodules_to_saverx   r£   rY   ru   )r   r£   ÚprogressbarrŸ   r    r¨   r¬   Ú_Úkey_listr°   rd   r†   Útarget_namerf   s      `` `       r$   Ú_unload_and_optionally_mergeÚ'MixedModel._unload_and_optionally_mergeà   s~  ú€ ö Ü�t—z‘zÐ#8¸$Ó?À6ÓIÜ Ð!WÓXÐXö
	Mð '+§j¡j×&>Ñ&>Ô&@ÕrÒ&@™F˜C ÌÔKqÕhpÓKq×Hq—CÑ&@ˆÑrØ¶™~¸BÑ?À'ÑIˆä˜¬/ÀÔEˆCðÜ.=¸d¿j¹jÈ#Ó.NÑ+� ô �v˜|×,Ñ,ÞÙ% fÔ-Ø×$Ñ$ V¸&×:OÑ:OÓ:QÐSYÖZÜ˜FÔ$8×9Ó9à#×3Ñ3°F×4IÑ4IÑJ�
Ü˜: |×4Ñ4æØ"×(Ñ(°JÈmÐ(Ñ\Ø!+×!:Ñ!:Ó!<�JÜ˜¨ZÖ8ñ% Fô, �4—:‘:˜}×-Ñ-Ø—
‘
Ð&à�z‰zÐùó9 søô "ó Ûðús   Á%F3Á?F3Â,F9Æ9
GÇGc                óH   • [        SU R                  R                   S35      e)Nz(Weighted adapters are not supported for r~   )ÚNotImplementedErrorr#   r-   ©r   rA   rB   s      r$   Úadd_weighted_adapterÚMixedModel.add_weighted_adapter  s#   € Ü!Ð$LÈTÏ^É^×MdÑMdÐLeÐelÐ"mÓnÐnr&   c           	     óþ  ^• [        U[        5      (       a  U/nOUn[        U5      [        U R                  R	                  5       5      -
  nU(       a;  [        S[        U5       S[        U R                  R	                  5       5       35      eU HÀ  nU R                  U	 U R                  R                  5        V^Vs/ s H(  u  mn[        U4S j[         5       5      (       a  M&  TPM*     nnnSnU HX  m[        U R                  T5      u  pXn[        U[        5      (       d  M3  UR                  U5        Ub  MI  UR                  SS nMZ     MÂ     W=(       d    / U l        [!        U R                  XS9  gs  snnf )zq
Deletes an existing adapter.

Args:
    adapter_name (Union[str, list[str]]): Name of the adapter(s) to delete.
zAdapter(s) z  not found, available adapters: c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr   rK   r«   s     €r$   rO   Ú,MixedModel.delete_adapter.<locals>.<genexpr>-  s   øé € ÐOuÒltÐbhÐZ]ÖP]ÒltùrQ   N)Únew_active_adapters)r)   Ústrr”   ru   Úkeysr,   Úsortedr    r_   r`   ra   r   r   Údelete_adapterrt   rx   r   )	r   r"   r    Ú
mismatchedr¬   r´   rµ   Únew_adapterr†   s	       `    r$   rÅ   ÚMixedModel.delete_adapter  sE  ø€ ô �l¤C×(Ñ(Ø)˜N‰Mà(ˆMä˜Ó'¬#¨d×.>Ñ.>×.CÑ.CÓ.EÓ*FÑFˆ
ÞÜØœf ZÓ0Ð1Ð1QÔRXÐY]×YiÑYi×YnÑYnÓYpÓRqÐQrÐsóð ó *ˆLØ× Ñ  Ð.à*.¯*©*×*BÑ*BÔ*DÕvÒ*D¡  QÌCÔOuÕltÓOu×LuŸÑ*DˆHÑvØˆKÛ�Ü.¨t¯z©z¸3Ó?‘�˜1Ü˜f¤n×5Ó5Ø×)Ñ)¨,Ô7Ø"Ó*Ø&,×&<Ñ&<¹QÐ&?šó  ñ *ð *×/¨RˆÔÜ! $§*¡*¨lÓ\ùó ws   Â>%E9Ã'E9c                ó:   • U R                   R                  " U0 UD6$ r   )r    Úgenerater»   s      r$   rÊ   ÚMixedModel.generate9  s   € Ø�z‰z×"Ò" DÐ3¨FÑ3Ð3r&   )rx   )r    ú	nn.Moduler!   r*   r"   rÂ   ÚreturnÚNone)r!   r*   rÍ   rÎ   )r!   r*   rA   r   rB   r   rÍ   rÎ   )rÍ   rÎ   )r    rÌ   rÍ   rÎ   )F)r"   úUnion[str, list[str]]rŠ   ÚboolrÍ   rÎ   )TFFN)r³   rÐ   rŸ   rÐ   r    zOptional[list[str]])rA   r   rB   r   rÍ   rÎ   )r"   rÏ   rÍ   rÎ   )rA   r   rB   r   )r-   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r0   r6   ri   rz   Ústaticmethodr…   r�   r–   r·   r¼   rÅ   rÊ   Ú__static_attributes__Ú__classcell__)r#   s   @r$   r   r   9   sÄ   ø† ñ÷6÷2ðtàðtð ðtð ð	tð
 
ôtô*(-ôTQð, ñó ðö6+ð ñó ðð Ø!Ø Ø-1ð3ð ð3ð ð	3ð
 +õ3ôjoô]÷B4ò 4r&   r   );Ú
__future__r   rŒ   Útypingr   r   r   r^   r   r   Úpeft.tunersr	   r
   r   r   r   r   Úpeft.tuners.tuners_utilsr   r   r   Ú
peft.utilsr   r   r   r   r   Úpeft.utils.otherr   ÚLORAÚLOHAÚLOKRÚADALORAÚOFTÚSHIRAr.   r8   rM   r<   r:   r>   r@   ra   r7   r9   r;   r4   r=   r?   r*   r¥   Ú	LoraLayerÚ	LoHaLayerÚ	LoKrLayerÚAdaLoraLayerÚOFTLayerÚ
ShiraLayerrw   r   rK   r&   r$   Ú<module>rê      sJ  ðõ #ã ß 'Ñ 'ã Ý Ý ç =× =ß YÑ Y÷õ õ *ð #Ÿ-™-¨¯©¸¿¹Àx×GWÑGWÐYa×YeÑYeÐgo×guÑguÐvÐ à‡N�N×ÑØ‡N�N×ÑØ‡N�N×ÑØ‡L�L×ÑØ	×Ñ×Ñð€ð Ø‡O�O�T—_‘_ d§o¡o°w×7LÑ7LÈcÏmÉmÐ]b×]nÑ]nÐnñ€ð 	‡J�J×ÑØ‡J�J×ÑØ‡J�J×ÑØ‡M�M×ÑØ‡L�LØ	×Ñð
€ôA4�õ A4r&   