ó
    >:jÂ  ã                  ó˜   • 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  S SK	J
r
Jr  SSKJr  SSKJr   " S	 S
\5      r          SS jrg)é    )ÚannotationsN)ÚAnyÚOptional)Úis_torchao_available)ÚBaseTunerLayerÚcheck_adapters_to_mergeé   )Ú
LoraConfig)ÚLinearc                  óZ   ^ • \ rS rSrSrU 4S jrS rS	S
S jjrSS jrSU 4S jjr	Sr
U =r$ )ÚTorchaoLoraLinearé   z>LoRA layer implementation for Linear layers using torchao datac               ó¾   >• US   R                   (       a"  [        U R                  R                   S35      e[        TU ]  " U0 UD6  Xl        U R                  5         g )NÚconfigz0 does not support lora_bias yet, set it to False)Ú	lora_biasÚ
ValueErrorÚ	__class__Ú__name__ÚsuperÚ__init__Úget_apply_tensor_subclassÚ_check_dtype_supported)Úselfr   ÚargsÚkwargsr   s       €ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/lora/torchao.pyr   ÚTorchaoLoraLinear.__init__    sU   ø€ ð �(Ñ×%×%Ü §¡× 7Ñ 7Ð8Ð8hÐiÓjÐjä‰Ò˜$Ð) &Ò)Ø)BÔ&Ø×#Ñ#Õ%ó    c                óª   • SSK Jn  U R                  5       nUR                  n[	        X15      (       a!  [        [        U 5      R                   S35      eg )Nr   )Ú
Int4Tensorz$ only supports int8 weights for now.)Útorchao.quantizationr    Úget_base_layerÚweightÚ
isinstancer   Útyper   )r   r    Ú
base_layerr#   s       r   r   Ú(TorchaoLoraLinear._check_dtype_supported*   sL   € å3à×(Ñ(Ó*ˆ
Ø×"Ñ"ˆÜ�f×)Ñ)Ü¤ T£
× 3Ñ 3Ð4Ð4XÐYÓZÐZð *r   c                óH  • SSK Jn  [        X5      nU(       d  g U R                  5         U R	                  5       nUR
                  nU H   n WR                  5       nU(       a8  [        R                  " U5      R                  5       (       d  [        SU S35      eXPR                  U5      -  nU?XTl        U" X@R                  5       5        AU R                   R#                  U5        M¢     g ! [         a*  nS[        W5      R                   S3n[        U5      UeS nAff = f)Nr   ©Ú	quantize_úWeights of type zI do not support dequantization (yet), which is needed to support merging.z1NaNs detected in the merged weights. The adapter z seems to be broken)Útorchaor*   r   r   r"   r#   Ú
dequantizeÚNotImplementedErrorr%   r   ÚtorchÚisfiniteÚallr   Úget_delta_weightr   Úmerged_adaptersÚappend)	r   Ú
safe_mergeÚadapter_namesr*   r&   r#   Úactive_adapterÚexcÚmsgs	            r   ÚmergeÚTorchaoLoraLinear.merge3   s  € Ý%ä/°ÓDˆÞàà×#Ñ#Ô%à×(Ñ(Ó*ˆ
Ø×"Ñ"ˆã+ˆNð8Ø×*Ñ*Ó,�ö ¤%§.¢.°Ó"8×"<Ñ"<×">Ñ">Ü ØGÈÐGWÐWjÐkóð ð ×+Ñ+¨NÓ;Ñ;ˆFàÐ!Ø &ÔÙ�j×"@Ñ"@Ó"BÔCØà× Ñ ×'Ñ'¨Ö7ò- ,øô 'ó 8à&¤t¨F£|×'<Ñ'<Ð&=ð >'ð 'ð ô *¨#Ó.°CÐ7ûð8ús   ÁC-Ã-
D!Ã7%DÄD!c                óh  • SSK Jn  U R                  (       d  [        R                  " S5        g [        U R                  5      S:”  a´  U R                  R                  5       nX R                  R                  5       ;  a  MR  U R                  5       nUR                  n UR                  5       nX@R!                  U5      -  nU?XCl        U" X0R#                  5       5        A[        U R                  5      S:”  a  M³  g g ! [         a*  nS[        U5      R                   S3n[        U5      UeS nAff = f)Nr   r)   z Already unmerged. Nothing to do.r+   zK do not support dequantization (yet), which is needed to support unmerging.)r,   r*   ÚmergedÚwarningsÚwarnÚlenr3   ÚpopÚlora_AÚkeysr"   r#   r-   r.   r%   r   r2   r   )r   r*   r7   r&   r#   r8   r9   s          r   ÚunmergeÚTorchaoLoraLinear.unmergeX   s  € Ý%à�{�{Ü�MŠMÐ<Ô=Øä�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNØ§[¡[×%5Ñ%5Ó%7Ó7Ùà×,Ñ,Ó.ˆJØ×&Ñ&ˆFð8Ø×*Ñ*Ó,�ð ×+Ñ+¨NÓ;Ñ;ˆFð
 Ð!Ø &ÔÙ�j×"@Ñ"@Ó"BÔCØô1 �$×&Ñ&Ó'¨!×+øô 'ó 8à&¤t¨F£|×'<Ñ'<Ð&=ð >)ð )ð ô *¨#Ó.°CÐ7ûð8ús   ÂC= Ã=
D1Ä%D,Ä,D1c                ór   >• [         TU ]  5       nUR                  SSU R                  R                   35      $ )Nzlora.Linearzlora.)r   Ú__repr__Úreplacer   r   )r   Úrepr   s     €r   rG   ÚTorchaoLoraLinear.__repr__y   s3   ø€ Ü‰gÑÓ ˆØ�{‰{˜=¨E°$·.±.×2IÑ2IÐ1JÐ*KÓLÐLr   )r   )FN)r5   Úboolr6   zOptional[list[str]]ÚreturnÚNone)rL   rM   )rL   Ústr)r   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r:   rD   rG   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s)   ø† ÙHõ&ò[ö#8ôJ÷BMõ Mr   r   c                ó   • S n[        U [        5      (       a  U R                  5       nOU n[        US5      (       d  U$ [	        5       (       d  U$ SSKJn  [        UR                  U5      (       a  [        X4SU0UD6nU$ )Nr#   r   )ÚTorchAOBaseTensorr   )	r$   r   r"   Úhasattrr   Útorchao.utilsrV   r#   r   )ÚtargetÚadapter_namer   r   Ú
new_moduleÚtarget_base_layerrV   s          r   Údispatch_torchaor]   ~   s€   € ð €Jä�&œ.×)Ñ)Ø"×1Ñ1Ó3Ñà"ÐäÐ$ h×/Ñ/ØÐä×!Ñ!ØÐå/äÐ#×*Ñ*Ð,=×>Ñ>Ü& vÑUÀFÐUÈfÑUˆ
àÐr   )
rY   ztorch.nn.ModulerZ   rN   r   r
   r   r   rL   zOptional[torch.nn.Module])Ú
__future__r   r>   Útypingr   r   r/   Úpeft.import_utilsr   Úpeft.tuners.tuners_utilsr   r   r   r
   Úlayerr   r   r]   © r   r   Ú<module>rd      se   ðõ #ã ß  ã õ 3ß Lå Ý ô^M˜ô ^MðBØðàðð ðð ð	ð
 õr   