ó
    >:jÝD  ã                  ó
  • S SK Jr  S SKrS SKJrJr  S SKrS SKJrJr  S SK	J
r
  S SKJrJrJr  S SKJr  S SKJr  S	S
KJr   " S S\R*                  5      r " S S\5      r " S S\R*                  \5      r        SS jrg)é    )ÚannotationsN)ÚAnyÚOptional)ÚnnÚsvd_lowrank)Ú
BufferDict)ÚBaseTunerLayerÚ_get_in_out_featuresÚcheck_adapters_to_merge)Úgather_params_ctx)Ú	transposeé   )ÚPsoftConfigc                  óž   ^ • \ rS rSrSr      S             SU 4S jjjrSSS jjrSS jrSS jrSSS jjr	SS jr
SS	 jrS
rU =r$ )Ú	OrthLayeré   z^
r*r orthogonal transformation R used in PSOFT between A and B. Forward: output = input @ R.T
c                ó´  >• [         T
U ]  5         Xl        X l        X0l        X@l        XPl        X`l        Xpl        U(       as  [        R                  " [        R                  " XS-
  -  S-  5      5      U l        [        R                  " XS5      u  p‰U R                  SUSS9  U R                  SU	SS9  O/[        R                  " [        R                  " X5      5      U l        U(       a*  [        R                  " [        R                  " U5      5      OS U l        U(       a0  [        R                  " [        R                  " U5      5      U l        g S U l        g )Nr   é   ÚrowsF©Ú
persistentÚcols)ÚsuperÚ__init__ÚsizeÚorthÚmag_bÚmag_aÚuse_cayley_neumannÚnum_cayley_neumann_termsÚcayley_neumann_epsr   Ú	ParameterÚtorchÚemptyÚweightÚtriu_indicesÚregister_bufferÚvector_bÚvector_a)Úselfr   r   r   r   r   r    r!   r   r   Ú	__class__s             €ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/psoft/layer.pyr   ÚOrthLayer.__init__$   só   ø€ ô 	‰ÑÔØŒ	ØŒ	ØŒ
ØŒ
Ø"4ÔØ(@Ô%Ø"4ÔæÜŸ,š,¤u§{¢{°DÀ1¹HÑ4EÈ!Ñ3KÓ'LÓMˆDŒKÜ×+Ò+¨D¸Ó:‰JˆDØ× Ñ  ¨¸%Ð Ñ@Ø× Ñ  ¨¸%Ð Ò@äŸ,š,¤u§{¢{°4Ó'>Ó?ˆDŒKæ;@œŸš¤U§[¢[°Ó%6Ô7ÀdˆŒÞ;@œŸš¤U§[¢[°Ó%6Ó7ˆ�Àdˆ�ó    c                ó†  • U R                   /nU R                  b  UR                  U R                  5        U R                  b  UR                  U R                  5        [	        S U 5       5      (       a  g [
        R                  " 5          U(       a¦  U R                  (       a  U R                   R                  5         O)[        R                  R                  U R                   5        U R                  b  U R                  R                  S5        U R                  b  U R                  R                  S5        OðU R                  (       a*  [        R                  R                  U R                   SSS9  Oe[        R                  R                  U R                   5        U R                   R                  [
        R                  " U R                   5      S-  5        U R                  b  U R                  R                  S5        U R                  b  U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nc              3  ó8   #   • U  H  oR                   v •  M     g 7f©N)Úis_meta)Ú.0Úps     r,   Ú	<genexpr>Ú-OrthLayer.reset_parameters.<locals>.<genexpr>I   s   é € Ð)¢&˜Q�yŽy¢&ùs   ‚g      ð?ç        gš™™™™™¹?)ÚmeanÚstd)r%   r(   Úappendr)   Úanyr#   Úno_gradr   Úzero_r   ÚinitÚeye_Úfill_Únormal_Úadd_Ú
randn_like)r*   Úinit_weightsÚparamss      r,   Úreset_parametersÚOrthLayer.reset_parametersB   sb  € Ø—+‘+�ˆØ�=‰=Ñ$Ø�M‰M˜$Ÿ-™-Ô(Ø�=‰=Ñ$Ø�M‰M˜$Ÿ-™-Ô(äÑ)¡&Ó)×)Ñ)Øä�]Š]�_ÞØ—9—9Ø—K‘K×%Ñ%Õ'ä—G‘G—L‘L §¡Ô-à—=‘=Ñ,Ø—M‘M×'Ñ'¨Ô,Ø—=‘=Ñ,Ø—M‘M×'Ñ'¨Ô,øà—9—9Ü—G‘G—O‘O D§K¡K°c¸s�OÒCä—G‘G—L‘L §¡Ô-Ø—K‘K×$Ñ$¤U×%5Ò%5°d·k±kÓ%BÀSÑ%HÔIà—=‘=Ñ,Ø—M‘M×'Ñ'¨Ô,Ø—=‘=Ñ,Ø—M‘M×'Ñ'¨Ô,÷+ �_Ž_ús   ÂFH2È2
I c                ó€  • U R                  5       nUR                  R                  S:X  a?  UR                  [        R
                  [        R                  4;   a  [        R                  nOUR                  nUR                  U5      UR                  U5      R                  5       -  R                  UR                  5      $ )NÚcpu)
Ú
get_matrixÚdeviceÚtypeÚdtyper#   Úfloat16Úbfloat16Úfloat32ÚtoÚt)r*   ÚinputÚRÚcompute_dtypes       r,   ÚforwardÚOrthLayer.forwardc   s   € Ø�O‰OÓˆà�<‰<×Ñ Ó%¨%¯+©+¼%¿-¹-ÌÏÉÐ9XÓ*XÜ!ŸM™M‰Mà!ŸK™KˆMà—‘˜Ó'¨!¯$©$¨}Ó*=×*?Ñ*?Ó*AÑA×EÑEÀeÇkÁkÓRÐRr.   c                ó6  • [         R                  " U R                  U R                  4U R                  R                  U R                  R
                  S9nUR                  U R                  U R                  4U R                  5      nXR                  SS5      -
  $ )N©rK   rM   r   r   )
r#   Úzerosr   r%   rK   rM   Ú	index_putr   r   r   )r*   ÚQs     r,   Ú_skew_symmetricÚOrthLayer._skew_symmetrico   sm   € Ü�KŠK˜Ÿ™ D§I¡IÐ.°t·{±{×7IÑ7IÐQU×Q\ÑQ\×QbÑQbÑcˆØ�K‰K˜Ÿ™ D§I¡IÐ.°·±Ó<ˆØ—;‘;˜q !Ó$Ñ$Ð$r.   c                ó–   • [         R                  R                  USS9n[         R                  " U5      (       a  X2:”  a
  XUS-   -  -  nU$ )NÚfro)Úordgê-�™—q=)r#   ÚlinalgÚnormÚisfinite)r*   r\   Úepsrc   s       r,   Ú
_project_QÚOrthLayer._project_Qv   sD   € Ü�|‰|× Ñ  ¨Ð Ð.ˆÜ�>Š>˜$×Ñ D£JØ˜D 5™LÑ)Ñ*ˆAØˆr.   c                óü  • SnS nU R                   (       d  U R                  nGO{U R                  5       nUR                  n[        R
                  " U R                  UR                  UR                  S9nU R                  (       a½  U R                  b  U R                  X@R                  S9n[        U R                  5      nUR                  5       nUS:”  ak  UR                  USS9  US:”  aU  XD-  nUR                  USS9  Un[        SUS-
  5       H  n	X„-  nUR                  USS9  M     X„-  nUR                  U5        O]U[        R                   [        R"                  4;   nU(       a  UR%                  5       n[        R&                  R)                  XT-
  XT-   SS	9nU R*                  b  U R*                  S S 2S 4   U-  nU R,                  b  X0R,                  S S S 24   -  nU(       a  UR/                  U5      nU$ )
NFrY   )re   r   g       @)Úalphar   é   )Úleft)r   r%   r]   rM   r#   Úeyer   rK   r   r!   rf   Úintr    ÚclonerB   ÚrangerN   rO   Úfloatrb   Úsolver(   r)   rQ   )
r*   Úcast_to_fp32Ú
orig_dtyperT   r\   Úid_matrR   Ú	Q_squaredÚQ_powerÚ_s
             r,   rJ   ÚOrthLayer.get_matrix}   s­  € ØˆØˆ
à�y�yØ—‘ŠAà×$Ñ$Ó&ˆAØŸ™ˆJä—Y’Y˜tŸy™y°·±ÀÇÁÑIˆFà×&×&Ø×*Ñ*Ñ6ØŸ™¨×/FÑ/F˜ÐG�AÜ˜×5Ñ5Ó6�à—L‘L“N�Ø�q“5Ø—F‘F˜1 C�FÑ(Ø˜1“uØ$%¡E˜	ØŸ™˜y°˜Ñ4à"+˜Ü!& q¨!¨a©%¦˜AØ&-¡k˜GØŸF™F 7°#˜FÓ6ñ "1ð #*¡+˜ØŸ™˜wœøà)¬e¯m©m¼U¿^¹^Ð-LÑL�ÞØŸ™›	�AÜ—L‘L×&Ñ& v¡z°6±:ÀEÐ&ÐJ�ð �=‰=Ñ$Ø—‘ša ˜gÑ&¨Ñ*ˆAØ�=‰=Ñ$Ø—M‘M $ª 'Ñ*Ñ*ˆAæØ—‘�ZÓ ˆAàˆr.   c                óþ   • SU R                   R                   SU R                   SU R                   SU R                   S[        U R                  5       SU R                   SU R                   SU R                   S	3$ )
Núpsoft.z(size=z, orth=z, use_cayley_neumann=z, num_cayley_neumann_terms=z, cayley_neumann_eps=z, mag_a=z, mag_b=Ú))
r+   Ú__name__r   r   r   rm   r    r!   r   r   )r*   s    r,   Ú__repr__ÚOrthLayer.__repr__­   sŠ   € à�T—^‘^×,Ñ,Ð-ð .Ø—I‘I�;˜g d§i¡i [ð 1"Ø"&×"9Ñ"9Ð!:ð ;(Ü(+¨D×,IÑ,IÓ(JÐ'Kð L"Ø"&×"9Ñ"9Ð!:ð ;Ø—Z‘Z�L ¨¯©¨Øðð	
r.   )
r!   r   r   r    r   r   r   r)   r(   r%   )TTTFé   N)r   rm   r   Úboolr   r€   r   r€   r   r€   r    rm   r!   zOptional[float])T)rD   r€   ÚreturnÚNone)rS   útorch.Tensorr�   rƒ   )r�   rƒ   )gÍÌÌÌÌÌì?)r\   rƒ   re   rp   r�   rƒ   ©r�   Ústr)r|   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   rF   rV   r]   rf   rJ   r}   Ú__static_attributes__Ú__classcell__©r+   s   @r,   r   r      s™   ø† ñð ØØØ#(Ø()Ø.2ðKàðKð ðKð ð	Kð
 ðKð !ðKð #&ðKð ,÷Kð Kö<-ôBSô%öô.÷`	
ò 	
r.   r   c                  ó|   ^ • \ rS rSr% SrS\S'   SrS\S'   SU 4S jjrSS jrSS	 jr	SS
 jr
SS jrSS jrSrU =r$ )Ú
PsoftLayeré¹   )Úpsoft_Rztuple[str, ...]Úadapter_layer_names)ÚrÚpsoft_alphaÚscalingÚpsoft_dropoutÚ	psoft_svdÚpsoft_svd_lowrank_niterÚab_svd_initÚother_param_namesc                ó®  >• [         TU ]  5         Xl        0 U l        0 U l        0 U l        [        R                  " 0 5      U l        0 U l	        0 U l
        0 U l        [        R                  " 0 5      U l        [        SS9U l        [        SS9U l        / U l        SU l        X l        SU l        U R)                  5       n[+        U5      u  p4X0l        X@l        g )NFr   )r   r   Ú
base_layerr’   r“   r”   r   Ú
ModuleDictr•   r–   r—   r˜   r�   r   Ú_psoft_A_cacheÚ_psoft_B_cacheÚmerged_adaptersÚ_disable_adaptersÚkwargsÚfan_in_fan_outÚget_base_layerr
   Úin_featuresÚout_features)r*   r›   r¡   r¤   r¥   r+   s        €r,   r   ÚPsoftLayer.__init__Å   sÅ   ø€ Ü‰ÑÔØ$Œð "$ˆŒØ-/ˆÔØ)+ˆŒÜŸ]š]¨2Ó.ˆÔØ)+ˆŒØ79ˆÔ$Ø57ˆÔô —}’} RÓ(ˆŒô )°EÑ:ˆÔÜ(°EÑ:ˆÔà*,ˆÔØ!&ˆÔØŒà#ˆÔà×(Ñ(Ó*ˆ
Ü$8¸Ó$DÑ!ˆØ&ÔØ(Õr.   c                ó>   • U R                   U   U R                  U   4$ r1   ©r�   rž   ©r*   Úadapter_names     r,   Ú_get_psoft_ab_cache_buffersÚ&PsoftLayer._get_psoft_ab_cache_buffersä   s#   € Ø×"Ñ" <Ñ0°$×2EÑ2EÀlÑ2SÐSÐSr.   c                ó<   • X R                   U'   X0R                  U'   g r1   r¨   )r*   rª   ÚAÚBs       r,   Ú_set_psoft_ab_cache_buffersÚ&PsoftLayer._set_psoft_ab_cache_buffersç   s   € Ø,-×Ñ˜LÑ)Ø,-×Ñ˜LÒ)r.   c           
     óB  • UR                   nUR                  n[        UR                  5      nUR                  U l        X`R                  U'   UR
                  U R
                  U'   UR
                  U-  U R                  U'   UR                  S:”  a  [        R                  " UR                  S9O[        R                  " 5       U R                  U'   UR                   U R                   U'   UR                  U R                  U'   UR                  U R                  U'   [        UUR                  UR                  UR                   UR"                  UR$                  UR&                  S9U R(                  U'   U R+                  U5        U R(                  U   R-                  US9  U R(                  U   R/                  S5        [1        U R3                  5       R4                  5         U R7                  X5        S S S 5        U R9                  U/5        g ! , (       d  f       N!= f)Nr7   )r4   )r   r   r   r   r   r    r!   )rD   T)r˜   rD   rm   r’   r¢   r“   r”   r•   r   ÚDropoutÚIdentityr–   r—   r   Ú
psoft_orthÚpsoft_mag_bÚpsoft_mag_ar   r    r!   r�   Ú%_move_adapter_to_device_of_base_layerrF   Úrequires_grad_r   r£   r%   Ú_build_psoft_ab_cache_buffersÚset_adapter)r*   rª   Úconfigr¡   r˜   rD   r’   s          r,   Úupdate_layerÚPsoftLayer.update_layerë   s¿  € Ø×(Ñ(ˆØ×*Ñ*ˆä�—‘‹Mˆà$×3Ñ3ˆÔà �‰ˆ|ÑØ)/×);Ñ);ˆ×Ñ˜Ñ&Ø%+×%7Ñ%7¸!Ñ%;ˆ�‰�\Ñ"ð 39×2FÑ2FÈÓ2LŒB�JŠJ˜×-Ñ-Ò.ÔRT×R]ÒR]ÓR_ð 	×Ñ˜<Ñ(ð *0×);Ñ);ˆ×Ñ˜Ñ&Ø'-×'7Ñ'7ˆ�‰�|Ñ$Ø5;×5SÑ5Sˆ×$Ñ$ \Ñ2ä%.ØØ×"Ñ"Ø×$Ñ$Ø×$Ñ$Ø%×8Ñ8Ø%+×%DÑ%DØ%×8Ñ8ñ&
ˆ�‰�\Ñ"ð 	×2Ñ2°<Ô@Ø�‰�\Ñ"×3Ñ3ÀÐ3ÑNØ�‰�\Ñ"×1Ñ1°$Ô7ä˜t×2Ñ2Ó4×;Ñ;Õ<Ø×.Ñ.¨|ÔI÷ =ð 	×Ñ˜,˜Õ(÷ =Õ<ús   Ç#HÈ
Hc                óÌ  • [         R                  " 5          U R                  5       nUR                  nUR                  nU[         R
                  [         R                  [         R                  4;  a  [        S5      e[        UR                  [         R
                  5      U R                  5      nU R                  U   nU R                  UUU R                  U   U R                  U   S9u  p‰n
X�R                   U   -  nUS:X  a  U
nU[         R"                  " U5      -  nO]US:X  aI  [         R$                  " U5      n[         R"                  " U5      U
-  nU[         R"                  " U5      -  nO['        SU 35      eUR)                  5       R+                  5       nUR)                  5       R+                  5       nU R-                  XU5        S S S 5        g ! , (       d  f       g = f)NzOPSOFT init requires float32/float16/bfloat16. Re-quantize after init if needed.)Úsvd_modeÚniterÚ
psoft_initÚ
pissa_initzUnknown ab_svd_init: )r#   r<   r£   r%   rM   rP   rN   rO   Ú	TypeErrorr   rQ   r¢   r’   Ú_compute_svd_factorsr–   r—   r”   ÚdiagÚsqrtÚ
ValueErrorÚ
contiguousÚdetachr°   )r*   rª   Ú	init_typeÚbaser%   rM   ÚWr’   ÚVrÚSrÚUhrÚ	Sr_scaledr®   r¯   Ús_sqrts                  r,   rº   Ú(PsoftLayer._build_psoft_ab_cache_buffers  s  € Ü�]Š]�_Ø×&Ñ&Ó(ˆDØ—[‘[ˆFØ—L‘LˆEØœUŸ]™]¬E¯M©M¼5¿>¹>ÐJÓJÜÐ qÓrÐrô ˜&Ÿ)™)¤E§M¡MÓ2°D×4GÑ4GÓHˆAà—‘�|Ñ$ˆAØ×3Ñ3ØØØŸ™¨Ñ5Ø×2Ñ2°<Ñ@ð	 4ð ‰KˆB�Cð Ÿ\™\¨,Ñ7Ñ7ˆIà˜LÓ(Ø�ØœŸš IÓ.Ñ.‘Ø˜lÓ*ÜŸš IÓ.�Ü—J’J˜vÓ&¨Ñ,�ØœŸš FÓ+Ñ+‘ä Ð#8¸¸Ð!DÓEÐEà—‘“×%Ñ%Ó'ˆAØ—‘“×%Ñ%Ó'ˆAà×,Ñ,¨\¸aÔ@÷C �_Ž_ús   –F6GÇ
G#c               óN  • US:X  aG  [         R                  R                  UR                  SS9u  pVnUS S 2S U24   nUS U n	US U2S S 24   n
OUUS:X  aA  [	        UR                  X$S9u  pVnUS S 2S U24   nUS U n	US S 2S U24   R                  5       n
O[        SU 35      eX‰U
4$ )NÚfullF)Úfull_matricesÚlowrank)ÚqrÁ   zUnknown svd_mode: )r#   rb   ÚsvdÚdatar   rR   rÈ   )r*   r%   r’   rÀ   rÁ   ÚUÚSÚVhrÎ   rÏ   rÐ   ÚVs               r,   rÅ   ÚPsoftLayer._compute_svd_factors8  sÄ   € à�vÓÜ—|‘|×'Ñ'¨¯©À5Ð'ÐI‰HˆA�"Ø’1�b�q�b�5‘ˆBØ�2�A�ˆBØ�R�a�Rš�U‘)‰CØ˜Ó"Ü! &§+¡+°Ñ@‰GˆA�!Ø’1�b�q�b�5‘ˆBØ�2�A�ˆBØ’A�r˜�r�E‘(—*‘*“,‰CäÐ1°(°Ð<Ó=Ð=Ø�sˆ{Ðr.   )r    r�   rž   r˜   r›   r¢   r¤   r¡   rŸ   r¥   r�   r“   r•   r–   r—   r’   r”   )r›   ú	nn.Moduler�   r‚   )rª   r…   )rª   r…   r®   rƒ   r¯   rƒ   r�   r‚   )rª   r…   r¼   r   r¡   r   r�   r‚   )rª   r…   rË   r…   r�   r‚   )r%   rƒ   r’   rm   rÀ   r…   rÁ   rm   )r|   r†   r‡   rˆ   r‘   Ú__annotations__r™   r   r«   r°   r½   rº   rÅ   rŠ   r‹   rŒ   s   @r,   rŽ   rŽ   ¹   sD   ø‡ Ø+7Ð˜Ó7ð*Ð�ó ÷)ô>Tô.ô%)ôR"A÷Hò r.   rŽ   c                  ó”   ^ • \ rS rSr          SU 4S jjrSS jrSS jrSSS jjrSSS jjrSS jr	SS jr
SU 4S	 jjrS
rU =r$ )ÚLineariI  c                ó¨   >• [         TU ]  5         [        R                  " X40 UD6  UR                  U l        X l        U R
                  " U4SU0UD6  g )Nr¼   )r   r   rŽ   r¢   Ú_active_adapterr½   )r*   r›   rª   r¼   r¡   r+   s        €r,   r   ÚLinear.__init__J  sO   ø€ ô 	‰ÑÔÜ×Ò˜DÑ7°Ò7à$×3Ñ3ˆÔØ+ÔØ×Ò˜,Ñ@¨vÐ@¸Ó@r.   c                ó<   • U R                   U   R                  5       $ r1   )r�   rJ   r©   s     r,   Ú_get_R_matrixÚLinear._get_R_matrixX  s   € Ø�|‰|˜LÑ)×4Ñ4Ó6Ð6r.   c                óZ  • U R                  U5      u  p#U R                  5       R                  nUR                  nUR                  nU R                  U5      nU R                  U   nUR                  S:X  a4  U[        R                  [        R                  4;   a  [        R                  OUn	UR                  XYS9n
UR                  XYS9nUR                  XYS9n[        R                  " X…U	S9nX¼U-
  -  U
-  n[        XàR                  5      nXàR                   U   -  nUR                  US9$ )u]   
Î”W = scaling * B (R - id_mat) A Returns in base weight layout (respecting fan_in_fan_out).
rI   rY   )rM   )r«   r£   r%   rK   rM   rè   r’   rL   r#   rN   rO   rP   rQ   rl   r   r¢   r”   )r*   rª   r®   r¯   Úbase_wrK   Ú	out_dtyperT   r’   rU   ÚA_cÚB_cÚR_crt   Údeltas                  r,   Úget_delta_weightÚLinear.get_delta_weight[  s  € ð
 ×/Ñ/°Ó=‰ˆØ×$Ñ$Ó&×-Ñ-ˆØ—‘ˆØ—L‘Lˆ	à×Ñ˜|Ó,ˆØ�F‰F�<Ñ ˆð %Ÿk™k¨UÓ2°yÄUÇ]Á]ÔTY×TbÑTbÐDcÓ7cŒE�MŠMÐjsð 	ð �d‰d˜&ˆdÐ6ˆØ�d‰d˜&ˆdÐ6ˆØ�d‰d˜&ˆdÐ6ˆä—’˜1°=ÑAˆØ˜V‘|Ñ$ sÑ*ˆÜ˜%×!4Ñ!4Ó5ˆØŸ™ \Ñ2Ñ2ˆà�x‰x˜iˆxÐ(Ð(r.   c                ó¦  • [        X5      nU(       d  g U R                  5       nU GH'  nX@R                  ;  a  M  U(       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XSR                  l        OSU R                  U5      nUR                  =R                  UR                  UR                  R                  5      -  sl        U R                  R                  U5        GM*     g )Nz1NaNs detected in the merged weights. The adapter z seems to be broken)r   r£   r�   r%   rÚ   rn   rM   rñ   rQ   r#   rd   ÚallrÈ   rŸ   r:   )r*   Ú
safe_mergeÚadapter_namesr›   Úactive_adapterÚorig_weightrs   Údelta_weights           r,   ÚmergeÚLinear.mergew  s  € Ü/°ÓDˆÞØà×(Ñ(Ó*ˆ
ä+ˆNØ§\¡\Ó1ÙæØ(×/Ñ/×4Ñ4×:Ñ:Ó<�Ø(×.Ñ.�
à#×4Ñ4°^ÓD�ØŸ™¨zÓ:Ñ:�ä—~’~ kÓ2×6Ñ6×8Ñ8Ü$ØKÈNÐK[Ð[nÐoóð ð *5×!Ñ!Õ&à#×4Ñ4°^ÓD�Ø×!Ñ!×&Ò&¨,¯/©/¸*×:KÑ:K×:QÑ:QÓ*RÑRÕ&à× Ñ ×'Ñ'¨×7ò+ ,r.   c                ó   • g)NT© r©   s     r,   Úsupports_lora_conversionÚLinear.supports_lora_conversion•  s   € Ør.   c                óÔ  • U R                   (       d  [        R                  " S[        5        g U R	                  5       R
                  n[        U R                  5      S:”  aˆ  U R                  R                  5       nX R                  ;  a  MD  UR                  nU R                  U5      nU=R                  UR                  U5      -  sl        [        U R                  5      S:”  a  M‡  g g )Nz Already unmerged. Nothing to do.r   )ÚmergedÚwarningsÚwarnÚUserWarningr£   r%   ÚlenrŸ   Úpopr�   rM   rñ   rÚ   rQ   )r*   r%   r÷   rs   rù   s        r,   ÚunmergeÚLinear.unmerge˜  s¨   € Ø�{�{Ü�MŠMÐ<¼kÔJØà×$Ñ$Ó&×-Ñ-ˆä�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNà§\¡\Ó1ÙàŸ™ˆJØ×0Ñ0°Ó@ˆLØ�KŠK˜<Ÿ?™?¨:Ó6Ñ6�Kô �$×&Ñ&Ó'¨!×+r.   c                ó€  • U R                   (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nU$ U R                  (       a  U R                  " U/UQ70 UD6nU$ U R                  " U/UQ70 UD6nUR                  nU R
                  R                  5       nU R                   Hí  nXv;  a  M
  U R                  U5      u  p‰U R                  U   n
U R                  U   nU R
                  U   nU R                  XR                  5      nU
" U5      nUR                  UR                  UR                  S9nU	R                  UR                  UR                  S9nXïR                  5       -  nU" U5      nUU-
  UR                  5       -  nUUU-  -   nMï     UR                  U5      nU$ )NrY   )Údisable_adaptersr  r  r›   rM   r�   ÚkeysÚactive_adaptersr«   r•   r”   Ú_cast_input_dtyperQ   rK   rR   )r*   ÚxÚargsr¡   ÚresultÚtorch_result_dtypeÚ
psoft_keysr÷   r®   r¯   Údropoutr”   ÚR_layerÚx_castÚx_drí   rî   ÚxaÚxrÚdelta_ys                       r,   rV   ÚLinear.forward©  s�  € Ø× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð@ ˆð? �[�[Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð< ˆð9 —_’_ QÐ8¨Ò8°Ñ8ˆFØ!'§¡ÐàŸ™×*Ñ*Ó,ˆJØ"&×"6Ô"6�Ø!Ó3Ùà×7Ñ7¸ÓG‘�à×,Ñ,¨^Ñ<�ØŸ,™, ~Ñ6�ØŸ,™, ~Ñ6�à×/Ñ/°·7±7Ó;�Ù˜f“o�à—d‘d #§*¡*°C·I±I�dÐ>�Ø—d‘d #§*¡*°C·I±I�dÐ>�àŸ5™5›7‘]�Ù˜R“[�à ™7 c§e¡e£gÑ-�Ø 7¨WÑ#4Ñ5’ñ) #7ð, —Y‘YÐ1Ó2ˆFàˆr.   c                ó&   >• S[         TU ]  5       -   $ )Nrz   )r   r}   )r*   r+   s    €r,   r}   ÚLinear.__repr__Ï  s   ø€ Øœ%™'Ñ*Ó,Ñ,Ð,r.   )rå   r¢   )
r›   rà   rª   r…   r¼   r   r¡   r   r�   r‚   )rª   r…   r�   rƒ   )FN)rõ   r€   rö   zOptional[list[str]]r�   r‚   )Údefault)rª   r…   r�   r€   )r�   r‚   )r  rƒ   r  r   r¡   r   r�   rƒ   r„   )r|   r†   r‡   rˆ   r   rè   rñ   rú   rþ   r  rV   r}   rŠ   r‹   rŒ   s   @r,   rã   rã   I  sg   ø† ðAàðAð ðAð ð	Að
 ðAð 
÷Aô7ô)ö88ö<ô7ô"$÷L-õ -r.   rã   c                ó$  • S n[        U [        5      (       a  U R                  5       nOU n[        U[        R                  R
                  5      (       a<  UR                  (       a  [        R                  " S5        SUl        [        X4SU0UD6nU$ )Nz[fan_in_fan_out=True is not compatible with `torch.nn.Linear`. Setting fan_in_fan_out=False.Fr¼   )	Ú
isinstancer	   r£   r#   r   rã   r¢   r  r  )Útargetrª   r¼   r¡   Ú
new_moduleÚtarget_base_layers         r,   Údispatch_defaultr#  Ó  s}   € ð €Jä�&œ.×)Ñ)Ø"×1Ñ1Ó3Ñà"ÐäÐ#¤U§X¡X§_¡_×5Ñ5Ø× × Ü�MŠMØmôð %*ˆFÔ!Ü˜FÑJ¸ÐJÀ6ÑJˆ
àÐr.   )r   rà   rª   r…   r¼   r   r�   zOptional[nn.Module])Ú
__future__r   r  Útypingr   r   r#   r   r   Úpeft.tuners._buffer_dictr   Úpeft.tuners.tuners_utilsr	   r
   r   Úpeft.utils.integrationsr   Úpeft.utils.otherr   r¼   r   ÚModuler   rŽ   rã   r#  rý   r.   r,   Ú<module>r+     sˆ   ðõ #ã ß  ã ß !å /ß bÑ bÝ 5Ý &å ôW
�—	‘	ô W
ôtM�ô Mô`G-ˆR�Y‰Y˜
ô G-ðTØðàðð ðð
 õr.   