ó
    >:jš  ã                  óÊ   • S SK Jr  S SKrS SKrS SKJr  S SKrS SKJr  S SK	J
r
Jr  SSKJr  \" 5       (       a&  S SKJr   " S	 S
\R                   R"                  \5      rSS jrg)é    )ÚannotationsN)ÚOptional)Úis_hqq_available)ÚBaseTunerLayerÚcheck_adapters_to_mergeé   )ÚOFTLayer)Ú	HQQLinearc                  ó¨   ^ • \ 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 rSS jrSU 4S jjr	Sr
U =r$ )ÚHqqOFTLinearé   c                ó˜   >• [         TU ]  5         [        R                  " X5        SU l        X l        U R                  UUUUUUUU	U
US9
  g )NF)Úoft_block_sizeÚmodule_dropoutÚinit_weightsÚcoftÚepsÚblock_shareÚuse_cayley_neumannÚnum_cayley_neumann_terms)ÚsuperÚ__init__r	   Úfan_in_fan_outÚ_active_adapterÚupdate_layer)ÚselfÚ
base_layerÚadapter_nameÚrr   r   r   r   r   r   r   r   ÚkwargsÚ	__class__s                €ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/oft/hqq.pyr   ÚHqqOFTLinear.__init__!   s]   ø€ ô ‰GÑÔÜ×Ò˜dÔ/Ø"'ˆDÔà#/Ô Ø×ÑØØØ-Ø-Ø)ØØØ'Ø#5Ø)Að ò ó    c                ó®  • [        X5      nU(       d  gU GH»  nX0R                  R                  5       ;  a  M#  U R                  5       n0 [        R
                  " UR                  5      ESUR                  0EnUR                  5       nU R                  U5      n[        R                  " USS5      n[        R                  " XvR                  UR                  5      5      n[        R                  " USS5      nUR                  UR                  5      R                  UR                  5      nU(       a8  [        R                   " U5      R#                  5       (       d  [%        SU S35      e['        SXTR(                  UR                  S9n	UR+                  SS5        U	R,                  " U40 UD6  X�l        U R0                  R3                  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. This is useful if you want to check if the merge operation will produce
        NaNs. 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.
        Defaults to `None`.
NÚoffload_metar   r   z1NaNs detected in the merged weights. The adapter z seems to be broken©Úcompute_dtypeÚdevice)r   Úlora_AÚkeysÚget_base_layerÚcopyÚdeepcopyÚquant_configr&   Ú
dequantizeÚget_delta_weightÚtorchÚ	transposeÚmmÚtoÚdtyper)   ÚisfiniteÚallÚ
ValueErrorr
   r(   ÚpopÚquantizer   Úmerged_adaptersÚappend)
r   Ú
safe_mergeÚadapter_namesÚactive_adapterÚlayerr/   ÚoutputÚoft_dataÚw_dataÚnew_hqq_layers
             r"   ÚmergeÚHqqOFTLinear.mergeB   su  € ô 4°DÓHˆMÞ àä"/�Ø!¯©×)9Ñ)9Ó);Ó;Ùà×+Ñ+Ó-�Øh¤$§-¢-°×0BÑ0BÓ"CÐhÀ^ÐUZ×UgÑUgÑh�à×)Ñ)Ó+�Ø×0Ñ0°Ó@�äŸš¨°°AÓ6�ÜŸš (¯I©I°h·n±nÓ,EÓF�ÜŸš¨°°AÓ6�ØŸ™ 8§>¡>Ó2×5Ñ5°h·o±oÓF�æ¤e§n¢n°VÓ&<×&@Ñ&@×&BÑ&BÜ$ØKÈNÐK[Ð[nÐoóð ô !*¨$°×L_ÑL_Ðhm×htÑhtÑ u�Ø× Ñ  °Ô6Ø×&Ò& vÑ>°Ò>Ø"/”Ø×$Ñ$×+Ñ+¨N×;ò1 #0r$   c                óÎ  • U R                   (       d  [        R                  " S5        g[        U R                  5      S:”  Ga£  U R                  R                  5       nXR                  R                  5       ;  a  MS  U R                  5       n0 [        R                  " UR                  5      ESUR                  0EnUR                  5       nU R                  U5      n[        R                   " USS5      n[        R"                  " UR%                  5       UR'                  UR(                  5      5      n[        R                   " USS5      nUR'                  UR(                  5      R'                  UR*                  5      n[-        SX2R.                  UR*                  S9nUR                  SS5        UR0                  " U40 UD6  Xpl        [        U R                  5      S:”  a  GM¢  gg)zG
This method unmerges all merged adapter layers from the base weights.
z Already unmerged. Nothing to do.Nr   r&   r   r'   )ÚmergedÚwarningsÚwarnÚlenr<   r:   Úoft_Rr+   r,   r-   r.   r/   r&   r0   r1   r2   r3   r4   Útr5   r6   r)   r
   r(   r;   r   )r   r@   rA   r/   rB   rC   rD   rE   s           r"   ÚunmergeÚHqqOFTLinear.unmergen   sl  € ð —;—;Ü—’Ð@ÔAØä�d×*Ñ*Ó+¨aÔ/Ø!%×!5Ñ!5×!9Ñ!9Ó!;�Ø!¯©¯©Ó):Ó:Ùà×+Ñ+Ó-�Øh¤$§-¢-°×0BÑ0BÓ"CÐhÀ^ÐUZ×UgÑUgÑh�Ø×)Ñ)Ó+�à×0Ñ0°Ó@�äŸš¨°°AÓ6�ÜŸš (§*¡*£,°·	±	¸(¿.¹.Ó0IÓJ�ÜŸš¨°°AÓ6�ØŸ™ 8§>¡>Ó2×5Ñ5°h·o±oÓF�ä )¨$°×L_ÑL_Ðhm×htÑhtÑ u�Ø× Ñ  °Ô6Ø×&Ò& vÑ>°Ò>Ø"/”ô' �d×*Ñ*Ó+¨a×/Ð/r$   c                ó<   • U R                   U   R                  5       $ ©N)rM   Ú
get_weight)r   Úadapters     r"   r1   ÚHqqOFTLinear.get_delta_weight‹   s   € Ø—:‘:˜gÑ&×1Ñ1Ó3Ð3r$   c                óÊ  • U R                   " U/UQ70 UD6  UR                  SS 5      nU R                  (       a8  U R                  (       a  U R	                  5         U R
                  " U/UQ70 UD6nOÃU R                  (       a  U R
                  " U/UQ70 UD6nO›U R                   H‹  nX`R                  R                  5       ;  a  M"  U R                  U   n[        R                  " 5       (       + nU(       a1  UR                  n	U R                  XR                  R                  5      nU" U5      nM�     U R
                  " U/UQ70 UD6nW(       a  UR                  W	5      nU$ )Nr?   )Ú_check_forward_argsr:   Údisable_adaptersrI   rO   r   Úactive_adaptersrM   r+   r2   Úis_autocast_enabledr6   Ú_cast_input_dtypeÚweightr5   )
r   ÚxÚargsr    r?   Úresultr@   rM   Úrequires_conversionÚexpected_dtypes
             r"   ÚforwardÚHqqOFTLinear.forwardŽ   s  € Ø×$Ò$ QÐ8¨Ò8°Ò8Ø"ŸJ™J ¸Ó=ˆMà×$×$Ø—;—;Ø—L‘L”NØŸš¨Ð<¨TÒ<°VÑ<‘Ø——ØŸš¨Ð<¨TÒ<°VÑ<‘à&*×&:Ô&:�NØ%¯Z©Z¯_©_Ó->Ó>Ù Ø ŸJ™J ~Ñ6�Eä.3×.GÒ.GÓ.IÔ*IÐ'Þ*Ø)*¯©˜Ø ×2Ñ2°1·l±l×6HÑ6HÓI˜á˜a›’Añ ';ð —_’_ QÐ8¨Ò8°Ñ8ˆFÞ"ØŸ™ >Ó2�ØˆMr$   c                ó*   >• [         TU ]  5       nSU-   $ )Nzoft.)r   Ú__repr__)r   Úrepr!   s     €r"   re   ÚHqqOFTLinear.__repr__ª   s   ø€ Ü‘'Ñ"Ó$ˆCØ˜C‘<Ðr$   )r   r   r   )	é   r   g        TFgiUMu?FFé   )r   útorch.nn.Moduler   Ústrr   Úintr   rl   r   Úfloatr   Úboolr   rn   r   rm   r   rn   r   rn   r   rl   ÚreturnÚNone)FN)r>   rn   r?   zOptional[list[str]]ro   rp   )ro   rp   )r]   útorch.Tensorro   rq   )ro   rk   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   rF   rO   r1   rb   re   Ú__static_attributes__Ú__classcell__)r!   s   @r"   r   r      sÀ   ø† ð Ø"#Ø$'Ø!%ØØØ %Ø',Ø,-ð	à'ð	ð ð	ð ð		ð
  ð	ð "ð	ð ð	ð ð	ð ð	ð ð	ð !%ð	ð '*ð	ð ÷	ð 	öB*	<ôX	0ò:	4ô	÷8	 õ 	 r$   r   c                óº   • S n[        U [        5      (       a  U R                  5       nOU n[        5       (       a!  [        U[        5      (       a  [        XA40 UD6nU$ rR   )Ú
isinstancer   r,   r   r
   r   )Útargetr   r    Ú
new_moduleÚtarget_base_layers        r"   Údispatch_hqqr}   ¯   sU   € Ø€Jä�&œ.×)Ñ)Ø"×1Ñ1Ó3Ñà"Ðä×ÑœjÐ):¼I×FÑFÜ!Ð"3ÑLÀVÑLˆ
àÐr$   )rz   rj   r   rk   )Ú
__future__r   r-   rJ   Útypingr   r2   Úpeft.import_utilsr   Úpeft.tuners.tuners_utilsr   r   rA   r	   Úhqq.core.quantizer
   ÚnnÚModuler   r}   © r$   r"   Ú<module>r†      sK   ðõ #ã Û Ý ã å .ß Lå ñ ×ÑÝ+ôM �u—x‘x—‘¨ô M õ`r$   