ó
    >:jaH  ã                  ó�  • S SK Jr  S SKrS SKrS SKrS SKJr  S SK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  S SKJrJr  S S	KJr  S S
KJr  S SKJrJrJr   " S S5      rSS jr\
R>                  " 5       SSS jj5       r \
R>                  " 5       SS j5       r! " S S5      r"\
R>                  " 5          S     SS jj5       r#g)é    )ÚannotationsN)ÚCallable)ÚOptionalÚUnion)Úclear_device_cache)Úsnapshot_download)ÚHFValidationErrorÚLocalEntryNotFoundError)ÚSafetensorErrorÚ	safe_open)Úcached_file)Úget_checkpoint_shard_files)Úis_bnb_4bit_availableÚis_bnb_availableÚis_xpu_availablec                  ól   ^ • \ rS rSrS
U 4S jjr\SS j5       r\SS j5       rS rS r	S r
S rS	rU =r$ )ÚNFQuantizeré&   c                óØ  >• [         TU ]  " U0 UD6  [        R                  " S[        S9  Xl        X l        X0l        X@l        U R                  S:X  a?  U R                  U R
                  S9U l
        U R                  R                  U5      U l
        g U R                  S:X  a?  U R                  U R
                  S9U l
        U R                  R                  U5      U l
        g [        S5      e)Nz�NFQuantizer is deprecated and is going to be removed in PEFT 0.20. Consider using alternative quantization libraries for nf{2,4,8} quantization.©ÚcategoryÚnormal)Únum_bitsÚuniformz-Other quantization methods not supported yet.)ÚsuperÚ__init__ÚwarningsÚwarnÚDeprecationWarningr   ÚdeviceÚmethodÚ
block_sizeÚcreate_normal_mapÚnorm_lookup_tableÚtoÚcreate_uniform_mapÚNotImplementedError)Úselfr   r    r!   r"   ÚargsÚkwargsÚ	__class__s          €ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/utils/loftq_utils.pyr   ÚNFQuantizer.__init__'   sÊ   ø€ Ü‰Ò˜$Ð) &Ò)ä�ŠðMä'ò	
ð !ŒØŒØŒØ$ŒØ�;‰;˜(Ó"Ø%)×%;Ñ%;ÀTÇ]Á]Ð%;Ð%SˆDÔ"Ø%)×%;Ñ%;×%>Ñ%>¸vÓ%FˆDÕ"Ø�[‰[˜IÓ%Ø%)×%<Ñ%<ÀdÇmÁmÐ%<Ð%TˆDÔ"Ø%)×%;Ñ%;×%>Ñ%>¸vÓ%FˆDÕ"ä%Ð&UÓVÐVó    c                óú   • U (       aX  [         R                  " SSSUS-
  -  5      n[         R                  " SSSUS-
  -  5      n[         R                  " X#SS  /5      nU$ [         R                  " SSSU-  5      nU$ )Néÿÿÿÿr   é   é   )ÚtorchÚlinspaceÚcat)Ú	symmetricr   ÚnegativeÚpositiveÚtables        r,   r&   ÚNFQuantizer.create_uniform_map=   sv   € æä—~’~ b¨!¨Q°8¸a±<Ñ-@ÓAˆHÜ—~’~ a¨¨A°(¸Q±,Ñ,?Ó@ˆHÜ—I’I˜x°!°"¨Ð6Ó7ˆEð ˆô —N’N 2 q¨!¨X©+Ó6ˆEØˆr.   c                óæ  •  SSK Jn  SU-  nU(       a~  UR                  [        R
                  " SU -
  XS-   5      5      R                  5       n/ n[        [        U5      S-
  5       H$  nUR                  SXW   -  SXWS-      -  -   5        M&     UnO„UR                  [        R
                  " U SUS-  S-   5      S S 5      R                  5       nS/n	UR                  [        R
                  " U SUS-  5      S S 5      * R                  5       n
X‰-   U
-   n[        R                  " U5      nUR                  5       R                  nXfR                  5       -  nU$ ! [         a    [        S5      ef = f)Nr   )ÚnormzMThe required package 'scipy' is not installed. Please install it to continue.r1   r2   g      à?r0   )Úscipy.statsr<   ÚImportErrorÚppfr3   r4   ÚtolistÚrangeÚlenÚappendÚTensorÚsortÚvaluesÚmax)Úoffsetr6   r   r<   Ú
variationsÚvrF   ÚindexÚv1Úv2Úv3s              r,   r#   ÚNFQuantizer.create_normal_mapI   sP  € ð	oÝ(ð ˜‘[ˆ
ÞØ—‘œŸš¨¨F©
°FÈ¹NÓKÓL×SÑSÓUˆAØˆFÜœs 1›v¨™zÖ*�Ø—‘˜c A¡H™n¨s°Q¸q±y±\Ñ/AÑAÖBñ +à‰Að —‘œ%Ÿ.š.¨°°jÀA±oÈÑ6IÓJÈ3ÈBÐOÓP×WÑWÓYˆBØ�ˆBØ—8‘8œEŸNšN¨6°3¸
Àa¹ÓHÈÈ"ÐMÓNÐN×VÑVÓXˆBØ‘˜"‘ˆAä—’˜a“ˆØ—‘“×%Ñ%ˆØ—*‘*“,ÑˆØˆøô) ó 	oÜÐmÓnÐnð	oús   ‚E ÅE0c                ó4  • [         R                  " U5      R                  5       nX-  nUR                  S5      n[         R                  " U R
                  5      R                  SS5      n[         R                  " XE-
  5      n[         R                  " USS9nXr4$ )Nr0   r2   ©Údim)r3   ÚabsrG   Ú	unsqueezeÚtensorr$   ÚreshapeÚargmin)r(   ÚweightÚmax_absÚweight_normedÚweight_normed_expandedÚ
L_reshapedÚabs_diffÚqweights           r,   Úquantize_tensorÚNFQuantizer.quantize_tensorc   s„   € Ü—)’)˜FÓ#×'Ñ'Ó)ˆØÑ(ˆà!.×!8Ñ!8¸Ó!<Ðô —\’\ $×"8Ñ"8Ó9×AÑAÀ!ÀRÓHˆ
ô —9’9Ð3Ñ@ÓAˆô —,’,˜x¨RÑ0ˆØÐÐr.   c                ó‚   • UR                  5       nU R                  U   nXB-  nUR                  UR                  5      nU$ )N)Úflattenr$   rV   Úshape)r(   r^   rY   Úqweight_flattenrZ   rX   s         r,   Údequantize_tensorÚNFQuantizer.dequantize_tensors   s=   € Ø!Ÿ/™/Ó+ˆà×.Ñ.¨Ñ?ˆØÑ(ˆà—‘ §¡Ó.ˆàˆr.   c           	     ó  • [        UR                  5      S:w  a"  [        S[        UR                  5       S35      eUR                  S   UR                  S   -  U R                  -  S:w  a9  [        SUR                  S    SUR                  S    SU R                   S	35      eUR                  u  p#UR                  nUR                  5       nUR                  S
U R                  5      nU R                  S:X  a!  UR                  5       R                  S
S9S   nO>U R                  S:X  a#  UR                  S
S9SUR                  S
S9-  -   nO[        S5      eUR                  S
5      nXg-  nUR                  S
5      nU R                  R                  SS
5      n	[        R                  " X‰-
  5      n
[        R                   " U
S
S9nUR                  S
SU R"                  -  5      n[        R$                  " X#-  S-  U R"                  -  S4[        R&                  US9n[)        SU R"                  -  5       H:  nUS S 2U4   XÐR"                  -  -  US S 2U4'   US S 2S4==   US S 2U4   -  ss'   M<     XÇUR                  4$ )Nr1   ú+Only support 2D matrix, but your input has ú dimensions.r   r2   zWeight with shape (z x z!) is not dividable by block size Ú.r0   r   rQ   r   g      @zMethod not supported yet.é   ©Údtyper    )rB   rc   Ú
ValueErrorr"   r    rb   rV   r!   rS   rG   ÚmeanÚstdr'   rT   r$   r3   rW   r   ÚzerosÚuint8rA   )r(   rX   ÚMÚNr    Úweight_flattenÚweight_blockÚ
weight_maxÚweight_divabsr\   r]   r^   Úqweight_packÚis                 r,   Úquantize_blockÚNFQuantizer.quantize_block}   sW  € Üˆv�|‰|Ó Ó!ÜÐJÌ3ÈvÏ|É|ÓK\ÐJ]Ð]iÐjÓkÐkØ�<‰<˜‰?˜VŸ\™\¨!™_Ñ,¨t¯©Ñ>À!ÓCÜØ% f§l¡l°1¡oÐ%6°c¸&¿,¹,Àq¹/Ð9Jð K2Ø26·/±/Ð1BÀ!ðEóð ð
 �|‰|‰ˆØ—‘ˆð  Ÿ™Ó)ˆØ%×-Ñ-¨b°$·/±/ÓBˆØ�;‰;˜(Ó"Ø%×)Ñ)Ó+×/Ñ/°BÐ/Ð7¸Ñ:‰JØ�[‰[˜IÓ%Ø%×*Ñ*¨rÐ*Ð2°S¸<×;KÑ;KÐPRÐ;KÐ;SÑ5SÑS‰Jä%Ð&AÓBÐBØ×)Ñ)¨"Ó-ˆ
Ø$Ñ1ˆØ%×/Ñ/°Ó3ˆØ×+Ñ+×3Ñ3°A°rÓ:ˆ
ä—9’9˜]Ñ7Ó8ˆÜ—,’,˜x¨RÑ0ˆð —/‘/ " a¨4¯=©=Ñ&8Ó9ˆÜ—{’{ A¡E¨Q¡J°·±Ñ$>ÀÐ#BÌ%Ï+É+Ð^dÑeˆô �q˜DŸM™MÑ)Ö*ˆAØ#¢A q D™M¨Q·±Ñ->Ñ>ˆG’A�q�D‰MØš˜A˜Ó 'ª!¨Q¨$¡-Ñ/Õñ +ð ¨¯©Ð5Ð5r.   c                ó>  • UR                   n[        R                  " UR                  S   SU R                  -  4[        R
                  US9n[        SU R                  -  5       Hƒ  nUR                  [        R                  5      SU R                  -  -  nUR                  [        R                  5      nU R                  U   R                  5       US S 2U4'   XR                  -	  nM…     UR                  SU R                  5      nX‚-  nUR                  U5      nU$ )Nr   rk   rl   r1   r0   )r    r3   rq   rc   r   Úfloat32rA   r%   Úlongr$   ÚsqueezerV   r"   )	r(   r^   rw   Úweight_shaper    rX   rz   Úlookup_table_idxrv   s	            r,   Údequantize_blockÚNFQuantizer.dequantize_block¦   sæ   € à—‘ˆÜ—’˜gŸm™m¨AÑ.°°T·]±]Ñ0BÐCÌ5Ï=É=ÐagÑhˆÜ�q˜DŸM™MÑ)Ö*ˆAØ&Ÿz™z¬%¯*©*Ó5¸¸4¿=¹=Ñ8HÑHÐØ/×2Ñ2´5·:±:Ó>ÐØ×1Ñ1Ð2BÑC×KÑKÓMˆF’1�a�4‰LØ§¡Ñ.ŠGñ	 +ð —~‘~ b¨$¯/©/Ó:ˆØÑ*ˆØ—‘ Ó-ˆàˆr.   )r"   r    r!   r$   r   )r1   Úcudar   é@   )Fé   )g+’ew÷î?Fr1   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ústaticmethodr&   r#   r_   re   r{   rƒ   Ú__static_attributes__Ú__classcell__)r+   s   @r,   r   r   &   sK   ø† ÷Wð, ó	ó ð	ð óó ðò2 ò ò'6÷Rð r.   r   c                ó„  • [        U R                  5       5      nUS:w  a  [        SU S35      e[        R                  R                  U SS9u  p4nU[        R                  " [        R                  " U5      SS2SU24   5      -  n[        R                  " [        R                  " U5      SU2SS24   5      U-  nXgX4XQS.$ )	zf
:param weight: The matrix to decompose, of shape (H, W) :param reduced_rank: the final rank :return:
r1   rh   ri   F)Úfull_matricesNr   )ÚLÚRÚUÚSÚVhÚreduced_rank)rB   Úsizern   r3   ÚlinalgÚsvdÚsqrtÚdiag)rX   r–   Úmatrix_dimensionr“   r”   r•   r‘   r’   s           r,   Ú_low_rank_decompositionr�   ·   s³   € ô ˜6Ÿ;™;›=Ó)ÐØ˜1ÓÜÐFÐGWÐFXÐXdÐeÓfÐfô �|‰|×Ñ °eÐÐ<�H€Aˆ"à	ŒU�ZŠZœŸ
š
 1›¢a¨¨<¨Ð&7Ñ8Ó9Ñ:€AÜ�
Š
”5—:’:˜a“=  < ²Ð!2Ñ3Ó4°rÑ9€Aà °"ÑSÐSr.   c                ó`  • [        5       (       a  SS KnO[        S5      eUS;  a  [        S5      eUS::  a  [        S5      eU R                  5       u  pVU R                  nU R
                  n[        R                  " SU SU SU S	U S
U 3
5        [        5       (       d-  US:X  a'  [        XSSS9n	Un
[        R                  " S[        S9  O[        5       (       a  SOSn
U R                  U
[        R                   S9n U R#                  5       n[%        U5       GH|  n['        5         US:X  az  [        5       (       ak  UR(                  R+                  UR                  S5      SSSS9R                  U
5      nUR,                  R/                  UR0                  UR2                  5      nO¬US:X  a)  W	R5                  U5      u  nnnU	R7                  UUU5      nO}US:X  aw  UR(                  R9                  UR                  S5      SS9R                  U5      nUR,                  R;                  UR0                  UR<                  5      R                  U
5      nU W-
  n[?        X²S9nUS   US   US   nnnUS-   U:X  a    OU [        R@                  " UU5      -
  nGM     WWnnWR                  XxS9UU4$ )Nr   z>bitsandbytes is not available, please install it to use LoftQ.)r‡   rk   z+Only nf4 and int8 quantization is supportedz+Number of iterations must be greater than 0z	Weight: (z, z
) | Rank: z | Num Iter: z | Num Bits: r‡   r   r†   )r   r    r!   r"   zkNative support for nf4 is being deprecated with PEFT 0.20. Please install a recent version of bitsandbytes.r   Úxpur…   ©r    rm   ÚcpuFÚnf4)Úrequires_gradÚcompress_statisticsÚ
quant_typerk   )r£   ©r–   r‘   r’   r–   r2   )!r   Úbitsandbytesrn   r—   r    rm   ÚloggingÚinfor   r   r   r   r   r   r%   r3   r~   ÚclonerA   r   ÚnnÚ
Params4bitÚ
functionalÚdequantize_4bitÚdataÚquant_stater{   rƒ   Ú
Int8ParamsÚint8_vectorwise_dequantÚSCBr�   Úmm)rX   r   r–   Únum_iterÚbnbÚout_featureÚ
in_featurer    rm   Ú	quantizerÚcompute_deviceÚresrz   r^   Údequantized_weightÚquantized_weightrY   rc   Úoutputr‘   r’   Úlora_AÚlora_Bs                          r,   Ú
loftq_initrÁ   È   s�  € ä×ÑÜ"äÐYÓZÐZà�vÓÜÐFÓGÐGØ�1ƒ}ÜÐFÓGÐGà$Ÿk™k›mÑ€KØ�]‰]€FØ�L‰L€EÜ‡L‚LØ
�K�=  : ,¨j¸¸ÀmÐT\ÐS]Ð]jÐksÐjtÐuôô !×"Ñ" x°1£}ä¨ÈÐ^`Ñaˆ	ØˆÜ�ŠØyÜ'ó	
ô
 #3×"4Ñ"4™¸&ˆà�Y‰Y˜n´E·M±MˆYÐB€FØ
�,‰,‹.€CÜ�8�_ˆÜÔà�q‹=Ô2×4Ñ4Ø—f‘f×'Ñ'Ø—‘�u“¨UÈÐZ_ð (ð ç‰b�Ó ð ð "%§¡×!?Ñ!?ÀÇÁÈg×NaÑNaÓ!bÑØ˜‹]Ø/8×/GÑ/GÈÓ/LÑ,Ð˜g uØ!*×!;Ñ!;Ð<LÈgÐW\Ó!]ÑØ˜‹]Ø—f‘f×'Ñ'¨¯©¨u«ÀUÐ'ÐK×NÑNÈvÓVˆGØ!$§¡×!GÑ!GÈÏÉÐV]×VaÑVaÓ!b×!eÑ!eÐftÓ!uÐàÐ)Ñ)ˆô )¨ÑHˆØ# C™[¨&°©+°v¸nÑ7Mˆlˆ1ˆð ˆq‰5�HÓÙà”u—x’x  1“~Ñ%‹ñ3 ð6 ˜ˆF€Fà× Ñ ¨Ð Ð<¸fÀfÐLÐLr.   c                ór  • SS K nUS:w  a  [        S5      e[        5       (       d  [        S5      e[        5       (       a  SOSnUR                  R                  U R                  U R                  5      nUR                  U[        R                  S9nX-
  n[        5         [        XsS9nUS	   US
   US   p:n	X©4$ )Nr   r‡   z0Only 4 bit quantization supported at the moment.z0bitsandbytes 4bit quantization is not available.rŸ   r…   r    r¦   r‘   r’   r–   )r§   rn   r   r   r­   r®   r¯   r°   r%   r3   r~   r   r�   )r^   rX   r   r–   r¶   rº   r¼   Úresidualr¾   r‘   r’   s              r,   Ú_loftq_init_newrÄ     sª   € ãà�1ƒ}ÜÐKÓLÐLÜ ×"Ñ"ÜÐKÓLÐLä.×0Ñ0‘U°f€NØŸ™×7Ñ7¸¿¹Àg×FYÑFYÓZÐà�Y‰Y˜n´E·M±MˆYÐB€FØÑ*€HÜÔä$ XÑI€FØ ™ f¨S¡k°6¸.Ñ3Iˆ,€AØˆ4€Kr.   c                  ó$   • \ rS rSrSrS rS rSrg)Ú_SafetensorLoaderi  zŒ
Simple utility class that loads tensors with safetensors from a single file or sharded files.

Takes care of file name normalization etc.

c                óÎ  • Uc)   [        UR                  R                  R                  SS9nSnUR                  U5      (       d  [        R                  R                  X$5      nX l        [        UR                  5       SS 5      U l        SU l        SU l        S U l        [        R                  R'                  U5      (       d¹  UR)                  [        R                  R*                  5      S	   n [-        U[/        US
5      5      u  pgSU l        U Vs0 s H/  oˆR)                  [        R                  R*                  5      S   U_M1     n	nUS   R5                  5        VV
s0 s H
  u  pŠX‰U
   _M     sn
nU l        g g ! [        [
        4 a  n[        S5      UeS nAf[         a  n[        S5      UeS nAff = f! [0         a  n[3        SU S35      UeS nAff = fs  snf s  sn
nf )NT)Úlocal_files_onlyz«The provided model does not appear to be a transformers model or is a local model. In this case, you must pass the model_path argument that points to the safetensors file.zNThe model.safetensors file must be present on disk, but it could not be found.zmodel.safetensorsÚbase_model_prefixúbase_model.model.Fr   zmodel.safetensors.index.jsonzCould not find file for zA, ensure that there is a (sharded) safetensors file of the model.r0   Ú
weight_map)r   Ú
base_modelÚconfigÚ_name_or_pathÚAttributeErrorr	   rn   r
   ÚendswithÚosÚpathÚjoinÚ
model_pathÚgetattrÚget_base_modelrÉ   ÚprefixÚ
is_shardedrË   ÚexistsÚ
rpartitionÚsepr   r   ÚOSErrorÚFileNotFoundErrorÚitems)r(   Ú
peft_modelrÔ   ÚexcÚsuffixÚpar_dirÚresolved_archive_fileÚsharded_metadataÚkÚfile_maprJ   s              r,   r   Ú_SafetensorLoader.__init__$  sË  € ØÑð
Ü.¨z×/DÑ/D×/KÑ/K×/YÑ/YÐlpÑq�
ð %ˆØ×"Ñ" 6×*Ñ*ÜŸ™Ÿ™ jÓ9ˆJà$ŒÜ!(¨×)BÑ)BÓ)DÐFYÐ[_Ó!`ˆÔØ)ˆŒØˆŒØˆŒä�w‰w�~‰~˜j×)Ñ)à ×+Ñ+¬B¯G©G¯K©KÓ8¸Ñ;ˆGðÜ:TØœ[¨Ð2PÓQó;Ñ7Ð%ð #ˆDŒOáBWÓXÒBW¸QŸ™¤R§W¡W§[¡[Ó1°"Ñ5°qÒ8ÑBWˆHÐXØ:JÈ<Ñ:X×:^Ñ:^Ô:`ÔaÒ:`±$°!˜q¨1¡+š~Ñ:`ÒaˆD�Oð *øô) #Ô$5Ð6ó Ü ðaóð ðûô +ó Ü Ødóàðûðûô, ó Ü'Ø.¨z¨lÐ:{Ð|óàðûðüò YùÛasG   …(E= Ã0F: Ä6GÅ!G!Å=F7ÆFÆF7Æ&F2Æ2F7Æ:
GÇGÇGc                ó|  • U R                   (       d  U R                  nOU R                  U   n[        USSS9 n UR	                  U5      nS S S 5        U$ ! [
         aI  nU R                  (       a1  U[        U R                  5      S-   S  nUR	                  U5      n S nANVUeS nAff = f! , (       d  f       W$ = f)NÚptr¡   )Ú	frameworkr    r2   )rØ   rÔ   rË   r   Ú
get_tensorr   rÉ   rB   )r(   ÚnameÚ	file_pathÚfrU   rà   s         r,   rë   Ú_SafetensorLoader.get_tensorM  sª   € Ø��ØŸ™‰IàŸ™¨Ñ-ˆIä�y¨D¸Ò?À1ð	ØŸ™ dÓ+�÷ @ð ˆøô #ó à×)×)à¤ D×$:Ñ$:Ó ;¸aÑ ?Ð AÐB�DØŸ\™\¨$Ó/•Fà�Iûðú÷ @Ô?ð ˆús4   ¹B,»AÁ
B)Á =B$ÂB,Â"B$Â$B)Â)B,Â,
B;)rÉ   rØ   rÔ   r×   rË   N)rˆ   r‰   rŠ   r‹   Ú__doc__r   rë   r�   © r.   r,   rÆ   rÆ     s   † ñò'bõRr.   rÆ   c                óÔ  • [        5       (       d  [        S5      eSSKJn  SnSn[	        X5      nU R                  5        GH’  u  p‰[        X”5      (       d  M  UR                  U5      (       d  [        S5      eSnU[        U5      S nUR                  US	-   5      n
U	R                  U   n[        U	R                  U
S
US9u  pÍU(       d<  XÉR                  U   R                  l        XÙR                   U   R                  l        MÇ  U	R                  U   R                  R                  nU	R                   U   R                  R                  nXÉR                  U   R                  l        XÙR                   U   R                  l        U" X5      nU(       d:  XéR                  U   R                  l        XùR                   U   R                  l        AAGM•     U(       d  [        S5      eg)aB  
Replace the LoRA weights of a model quantized with bitsandbytes, using the LoftQ technique.

The replacement is done on the fly by loading in the non-quantized weights from a locally stored safetensors model
file and initializing the LoRA weights such that the quantization error between the original and quantized weights
is minimized.

As lazy loading is not possible with pickle, normal PyTorch checkpoint files cannot be supported.

Depending on the model size, calling this function may take some time to finish.

Args:
    peft_model (`PeftModel`):
        The model to replace the weights of. Must be a quantized PEFT model with LoRA layers.
    model_path (`Optional[str]`):
        The path to the model safetensors file. If the model is a Hugging Face model, this will be inferred from
        the model's config. Otherwise, it must be provided.
    adapter_name (`str`):
        The name of the adapter to replace the weights of. The default adapter name is "default".
    callback (`Optional[Callable[[PeftModel, str], bool]]`):
        A callback function that will be called after each module is replaced. The callback function should take
        the model and the name of the current module as input and return a boolean indicating whether the
        replacement should be kept. If the callback returns False, the replacement will be rolled back. This can be
        very useful to confirm that the LoftQ initialization actually decreases the quantization error of the
        model. As an example, this callback could generate logits for given input and compare it with the logits
        from the original, non-quanitzed model with the same input, and only return `True` if there is an
        improvement. As this is a greedy optimization, it's possible that calling this function multiple times
        yields incremental improvements.
zHbitsandbytes must be installed and the model must be quantized in 4bits.r   )Ú
Linear4bitrÊ   Fz8The passed model does not appear to be a valid PeftModelTNz.weightr‡   )r   r–   z%No bnb LoRA module found on the model)r   rn   Úpeft.tuners.loraró   rÆ   Únamed_modulesÚ
isinstanceÚ
startswithÚ	TypeErrorrB   rë   ÚrrÄ   rX   r¿   r¯   rÀ   )rß   rÔ   Úadapter_nameÚcallbackró   r×   Ú	any_matchÚsafetensor_loaderrì   ÚmodulerU   r–   r¿   rÀ   Úlora_A_beforeÚlora_B_beforeÚshould_replaces                    r,   Úreplace_lora_weights_loftqr  a  s£  € ôH !×"Ñ"ÜÐcÓdÐdå+ð !€FØ€IÜ)¨*ÓAÐð #×0Ñ0×2‰ˆÜ˜&×-Ñ-Ùà�‰˜v×&Ñ&ÜÐVÓWÐWàˆ	Ø”C˜“K�MÐ"ˆØ"×-Ñ-¨d°YÑ.>Ó?ˆà—x‘x Ñ-ˆÜ(¨¯©¸ÈÐYeÑf‰ˆÞØ6<�M‰M˜,Ñ'×.Ñ.Ô3Ø6<�M‰M˜,Ñ'×.Ñ.Ô3ÙàŸ™ lÑ3×:Ñ:×?Ñ?ˆØŸ™ lÑ3×:Ñ:×?Ñ?ˆà28�‰�lÑ#×*Ñ*Ô/Ø28�‰�lÑ#×*Ñ*Ô/Ù! *Ó3ˆÞà6C�M‰M˜,Ñ'×.Ñ.Ô3Ø6C�M‰M˜,Ñ'×.Ñ.Ô3à›=ñ; 3ö> ÜÐ@ÓAÐAð r.   )é    )r2   )rX   z'Union[torch.Tensor, torch.nn.Parameter]r   Úintr–   r  )r   r  r–   r  )NÚdefaultN)rÔ   zOptional[str]rú   Ústrrû   z0Optional[Callable[[torch.nn.Module, str], bool]])$Ú
__future__r   r¨   rÑ   r   Úcollections.abcr   Útypingr   r   r3   Úaccelerate.utils.memoryr   Úhuggingface_hubr   Úhuggingface_hub.errorsr	   r
   Úsafetensorsr   r   Útransformers.utilsr   Útransformers.utils.hubr   Úpeft.import_utilsr   r   r   r   r�   Úno_gradrÁ   rÄ   rÆ   r  rñ   r.   r,   Ú<module>r     sÖ   ðõ$ #ã Û 	Û Ý $ß "ã Ý 6Ý -ß Mß 2Ý *Ý =ç WÑ W÷Nñ NôbTð" ‡‚ƒõ;Mó ð;Mð| ‡‚ƒóó ð÷(Bñ BðJ ‡‚ƒð !%Ø!ØAEð	NBàðNBð ðNBð ?ô	NBó ñNBr.   