ó
    >:jÍ:  ã                   óò   • 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  S SK	J
r
Jr  S SKJr   " S S\
5      r " S S	\R                  \5      r " S
 S\R                  \5      r " S S\5      r " S S\5      rg)é    N)ÚAnyÚOptional)ÚConv1D)ÚBaseTunerLayerÚcheck_adapters_to_merge)Ú	transposec                   óZ   • \ rS rSrSrS\R                  S\SS4S jrSS\4S	 jjr	S
 r
Srg)ÚIA3Layeré   )Úia3_lÚ
base_layerÚis_feedforwardÚreturnNc                 óü  • Xl         [        R                  " 0 5      U l        SU l        / U l        X l        U R                  5       n[        U[        R                  5      (       a  UR                  UR                  pTOô[        U[        R                  [        R                  45      (       a  UR                  UR                  pTO­[        U[        R                   5      (       a  UR"                  UR$                  pTOv[        U[&        5      (       aJ  [)        UR*                  S5      (       a  UR*                  R,                  OUR*                  R.                  u  pEO[1        S[3        U5       35      eX@l
        XPl        g )NFÚds_shapezUnsupported layer type )r   ÚnnÚParameterDictr   Ú_disable_adaptersÚmerged_adaptersr   Úget_base_layerÚ
isinstanceÚLinearÚin_featuresÚout_featuresÚConv2dÚConv3dÚin_channelsÚout_channelsÚ	EmbeddingÚnum_embeddingsÚembedding_dimr   ÚhasattrÚweightr   ÚshapeÚ
ValueErrorÚtype)Úselfr   r   Úkwargsr   r   s         ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/ia3/layer.pyÚ__init__ÚIA3Layer.__init__   s  € Ø$ŒÜ×%Ò% bÓ)ˆŒ
à!&ˆÔØ!ˆÔØ,Ôà×(Ñ(Ó*ˆ
Ü�j¤"§)¡)×,Ñ,Ø(2×(>Ñ(>À
×@WÑ@W™Ü˜
¤R§Y¡Y´·	±	Ð$:×;Ñ;Ø(2×(>Ñ(>À
×@WÑ@W™Ü˜
¤B§L¡L×1Ñ1Ø(2×(AÑ(AÀ:×C[ÑC[™Ü˜
¤F×+Ñ+ä.5°j×6GÑ6GÈ×.TÑ.T�
×!Ñ!×*Ò*ÐZd×ZkÑZk×ZqÑZqñ &ˆK˜ô Ð6´t¸JÓ7GÐ6HÐIÓJÐJØ&ÔØ(Õó    Úinference_modec                 ó|  • U R                   (       a#  [        R                  " SU R                  45      nO"[        R                  " U R                  S45      n[
        R                  " U5      U R                  U'   U(       a  U R                  U5        U R                  U5        U R                  U R                  US9  g )Né   ©r-   )r   ÚtorchÚrandnr   r   r   Ú	Parameterr   Úreset_ia3_parametersÚ%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r'   Úadapter_nameÚinit_ia3_weightsr-   r(   r#   s         r)   Úupdate_layerÚIA3Layer.update_layer6   sŽ   € ð ××Ü—[’[ ! T×%5Ñ%5Ð!6Ó7‰Fä—[’[ $×"3Ñ"3°QÐ!7Ó8ˆFÜ#%§<¢<°Ó#7ˆ�
‰
�<Ñ ÞØ×%Ñ% lÔ3Ø×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr,   c                 óš   • XR                   R                  5       ;   a.  [        R                  R	                  U R                   U   S5        g g )Ng      ð?)r   Úkeysr   ÚinitÚ	constant_)r'   r8   s     r)   r4   ÚIA3Layer.reset_ia3_parametersC   s5   € ØŸ:™:Ÿ?™?Ó,Ó,ä�G‰G×Ñ˜dŸj™j¨Ñ6¸Õ<ð -r,   )r   r   r   r   r   r   r   ©F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úadapter_layer_namesr   ÚModuleÚboolr*   r:   r4   Ú__static_attributes__© r,   r)   r
   r
      s:   † à$Ðð) 2§9¡9ð )¸dð )ÐQUô )ñ0NÈ4õ Nõ=r,   r
   c                   óÚ   ^ • \ rS rSr    SS\R
                  S\S\S\S\S\SS	4U 4S
 jjjrSS\S\	\
\      SS	4S jjrSS jrS\R                  S\S\S\R                  4S jrSrU =r$ )r   éI   r   r8   Úfan_in_fan_outr   Úis_target_conv_1d_layerr9   r   Nc                 ó�   >• [         TU ]  5         [        R                  XUS9  X0l        XPl        X l        U R                  X&5        g ©N)r   )Úsuperr*   r
   rM   rN   Ú_active_adapterr:   )	r'   r   r8   rM   r   rN   r9   r(   Ú	__class__s	           €r)   r*   ÚLinear.__init__K   sC   ø€ ô 	‰ÑÔÜ×Ñ˜$¸>ÐÑJØ,ÔØ'>Ô$Ø+ÔØ×Ñ˜,Õ9r,   Ú
safe_mergeÚadapter_namesc                 óž  • [        X5      nU(       d  gU GH3  nX0R                  R                  5       ;   d  M#  U R                  5       n[	        U R                  U   R
                  U R                  5      nUR                  R
                  R                  nU(       a…  UR                  R
                  n[        R                  " Xu5      n[        R                  " U5      R                  5       (       d  [        SU S35      eUR                  U5      UR                  l        OI[        R                  " UR                  R
                  U5      R                  U5      UR                  l        U R                  (       d²  UR                   b¥  U R                  U   R#                  UR                   R$                  5      nUR                   R
                  R                  n[        R                  " UR                   R
                  UR
                  5      R                  U5      UR                   l        U R&                  R)                  U5        GM6     g)á  
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ú1NaNs detected in the merged weights. The adapter ú seems to be broken)r   r   r=   r   r   ÚdatarM   r#   Údtyper1   ÚmulÚisfiniteÚallr%   Útor   ÚbiasÚreshaper$   r   Úappend)	r'   rU   rV   Úactive_adapterr   r   Ú
orig_dtypeÚorig_weightsÚscalings	            r)   ÚmergeÚLinear.merge\   s¤  € ô 0°ÓDˆÞàä+ˆNØ§¡§¡Ó!2Õ2Ø!×0Ñ0Ó2�
Ü! $§*¡*¨^Ñ"<×"AÑ"AÀ4×CVÑCVÓW�Ø'×.Ñ.×3Ñ3×9Ñ9�
ÞØ#-×#4Ñ#4×#9Ñ#9�LÜ#(§9¢9¨\Ó#A�Lä Ÿ>š>¨,Ó7×;Ñ;×=Ñ=Ü(ØOÐP^ÐO_Ð_rÐsóð ð .:¯_©_¸ZÓ-H�J×%Ñ%Õ*ä-2¯YªY°z×7HÑ7H×7MÑ7MÈuÓ-U×-XÑ-XÐYcÓ-d�J×%Ñ%Ô*à×*×*°
·±Ñ0KØ"Ÿj™j¨Ñ8×@Ñ@ÀÇÁ×AVÑAVÓW�GØ!+§¡×!5Ñ!5×!;Ñ!;�JÜ+0¯9ª9°Z·_±_×5IÑ5IÈ7Ï<É<Ó+X×+[Ñ+[Ð\fÓ+g�J—O‘OÔ(à×$Ñ$×+Ñ+¨N×;ò- ,r,   c                 ó<  • U R                   (       d  [        R                  " S5        g[        R                  " S5        [        U R                  5      S:”  GaÄ  U R                  R                  5       nXR                  R                  5       ;   Gao  U R                  5       n[        U R                  U   R                  U R                  5      S-   nUR                  R                  R                  n[        R                  " UR                  R                  U5      R!                  U5      UR                  l
        U R"                  (       dµ  UR$                  b¨  U R                  U   R'                  UR$                  R(                  5      nUR$                  R                  R                  n[        R                  " UR$                  R                  UR                  S-   5      R!                  U5      UR$                  l
        [        U R                  5      S:”  a  GMÃ  gg)úG
This method unmerges all merged adapter layers from the base weights.
ú Already unmerged. Nothing to do.Nú,Unmerge result can be inaccurate for (IA)^3.r   ç:Œ0âŽyE>)ÚmergedÚwarningsÚwarnÚlenr   Úpopr   r=   r   r   r[   rM   r#   r\   r1   Údivr`   r   ra   rb   r$   )r'   rd   r   r   re   rg   s         r)   ÚunmergeÚLinear.unmerge†   sv  € ð �{�{Ü�MŠMÐ<Ô=Øä�ŠÐDÔEÜ�$×&Ñ&Ó'¨!Ô+Ø!×1Ñ1×5Ñ5Ó7ˆNØ§¡§¡Ó!2Ô2Ø!×0Ñ0Ó2�
ä! $§*¡*¨^Ñ"<×"AÑ"AÀ4×CVÑCVÓWÐZ^Ñ^�Ø'×.Ñ.×3Ñ3×9Ñ9�
Ü).¯ª°:×3DÑ3D×3IÑ3IÈ5Ó)Q×)TÑ)TÐU_Ó)`�
×!Ñ!Ô&à×*×*°
·±Ñ0KØ"Ÿj™j¨Ñ8×@Ñ@ÀÇÁ×AVÑAVÓW�GØ!+§¡×!5Ñ!5×!;Ñ!;�JÜ+0¯9ª9°Z·_±_×5IÑ5IÈ7Ï<É<ÐZ^ÑK^Ó+_×+bÑ+bÐcmÓ+n�J—O‘OÔ(ô �$×&Ñ&Ó'¨!×+Ð+r,   ÚxÚargsr(   c                 óâ  • UR                   =pEU 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$ SnU R
                   HZ  nX€R                  R                  5       ;  a  M"  U R                  U   R                   nXpR                  U   R                  5       -  nM\     U R                  (       a<  UR                  U5      nX-  R                  U5      n	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
Xg-  R                  U
5      nU$ ©Nr/   )r\   Údisable_adaptersro   ru   r   r7   r   r=   Úflattenr   r`   )r'   rw   rx   r(   r\   Úprevious_dtypeÚresultÚia3_scalingrd   ÚintermÚresult_dtypes              r)   ÚforwardÚLinear.forward�   sM  € Ø!"§¡Ð(ˆØ× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð, ˆð+ �[�[Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð( ˆð% ˆKØ"&×"6Ô"6�Ø!¯©¯©Ó):Ó:ÙØŸ
™
 >Ñ2×8Ñ8�ØŸz™z¨.Ñ9×AÑAÓCÑC’ñ	 #7ð ×"×"Ø—D‘D˜“K�ð ™/×-Ñ-¨nÓ=�ØŸš¨ÐA°$ÒA¸&ÑA�ð ˆð	 Ÿš¨Ð<¨TÒ<°VÑ<�Ø%Ÿ|™|�Ø Ñ.×2Ñ2°<Ó@�àˆr,   )rR   rM   rN   )FFFT©FN©r   N)rB   rC   rD   rE   r   rG   ÚstrrH   r*   r   Úlistrh   ru   r1   ÚTensorr   r‚   rI   Ú__classcell__©rS   s   @r)   r   r   I   s¼   ø† ð  %Ø$Ø(-Ø!%ñ:à—I‘Ið:ð ð:ð ð	:ð
 ð:ð "&ð:ð ð:ð 
÷:ð :ñ"(< ð (<¸XÀdÈ3ÁiÑ=Pð (<Ð\`õ (<ôToð.˜Ÿ™ð ¨cð ¸Sð ÀUÇ\Á\÷ ò r,   r   c                   óæ   ^ • \ rS rSr   SS\R
                  S\S\S\S\SS4U 4S	 jjjrSS
\4S jjr	SS\S\
\\      SS4S jjrSS jrS\R                  S\S\S\R                  4S jrSrU =r$ )Ú_ConvNdé»   r   r8   rM   r   r9   r   Nc                 óÂ   >• [         TU ]  5         [        R                  XUS9  X0l        X l        UR
                  R                  5       U l        U R                  X%5        g rP   )	rQ   r*   r
   rM   rR   r#   ÚdimÚ_kernel_dimr:   )r'   r   r8   rM   r   r9   r(   rS   s          €r)   r*   Ú_ConvNd.__init__¼   sT   ø€ ô 	‰ÑÔÜ×Ñ˜$¸>ÐÑJØ,ÔØ+ÔØ%×,Ñ,×0Ñ0Ó2ˆÔà×Ñ˜,Õ9r,   r-   c                 ó|  • U R                   (       a  U R                  OU R                  nSU4SU R                  S-
  -  -   n[        R
                  " U5      n[        R                  " U5      U R                  U'   U(       a  U R                  U5        U R                  U5        U R                  U R                  US9  g )Nr/   )r/   é   r0   )r   r   r   r�   r1   r2   r   r3   r   r4   r5   r6   r7   )r'   r8   r9   r-   r(   Únum_featuresÚweights_sizer#   s           r)   r:   Ú_ConvNd.update_layerÍ   s™   € à+/×+>×+>�t×'Ò'ÀD×DUÑDUˆØ˜<Ð(¨4°4×3CÑ3CÀaÑ3GÑ+HÑHˆÜ—’˜\Ó*ˆÜ#%§<¢<°Ó#7ˆ�
‰
�<Ñ ÞØ×%Ñ% lÔ3Ø×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr,   rU   rV   c                 ó–  • [        X5      nU(       d  gU GH/  nX0R                  R                  5       ;   d  M#  U R                  5       nUR                  R
                  R                  nU R                  U   R
                  nU R                  (       d  UR                  SS5      nU(       a’  [        R                  " UR                  R
                  U5      R                  5       n[        R                  " U5      R                  5       (       d  [        SU S35      eUR                  U5      UR                  l        OI[        R                  " UR                  R
                  U5      R                  U5      UR                  l        U R                  (       d’  UR                   b…  U R                  U   R#                  UR                   R$                  5      n[        R                  " UR                   R
                  UR
                  5      R                  U5      UR                   l        U R&                  R)                  U5        GM2     g)rX   Nr   r/   rY   rZ   )r   r   r=   r   r#   r[   r\   r   r   r1   r]   Úcloner^   r_   r%   r`   ra   rb   r$   r   rc   )	r'   rU   rV   rd   r   re   r   Úoutput_weightrg   s	            r)   rh   Ú_ConvNd.mergeØ   s¥  € ô 0°ÓDˆÞàä+ˆNØ§¡§¡Ó!2Õ2Ø!×0Ñ0Ó2�
Ø'×.Ñ.×3Ñ3×9Ñ9�
Ø"Ÿj™j¨Ñ8×=Ñ=�Ø×*×*Ø"-×"7Ñ"7¸¸1Ó"=�KæÜ$)§I¢I¨j×.?Ñ.?×.DÑ.DÀkÓ$R×$XÑ$XÓ$Z�Mä Ÿ>š>¨-Ó8×<Ñ<×>Ñ>Ü(ØOÐP^ÐO_Ð_rÐsóð ð .;×-=Ñ-=¸jÓ-I�J×%Ñ%Õ*ä-2¯YªY°z×7HÑ7H×7MÑ7MÈ{Ó-[×-^Ñ-^Ð_iÓ-j�J×%Ñ%Ô*à×*×*°
·±Ñ0KØ"Ÿj™j¨Ñ8×@Ñ@ÀÇÁ×AVÑAVÓW�GÜ+0¯9ª9°Z·_±_×5IÑ5IÈ7Ï<É<Ó+X×+[Ñ+[Ð\fÓ+g�J—O‘OÔ(à×$Ñ$×+Ñ+¨N×;ò1 ,r,   c                 óT  • U R                   (       d  [        R                  " S5        g[        R                  " S5        [        U R                  5      S:”  GaÐ  U R                  R                  5       nXR                  R                  5       ;   Ga{  U R                  5       nUR                  R                  R                  nU R                  U   R                  nU R                  (       d  UR                  SS5      n[        R                  " UR                  R                  US-   5      R!                  U5      UR                  l
        U R                  (       d²  UR"                  b¥  U R                  U   R%                  UR"                  R&                  5      nUR"                  R                  R                  n[        R(                  " UR"                  R                  UR                  5      R!                  U5      UR"                  l
        [        U R                  5      S:”  a  GMÏ  gg)rk   rl   Nrm   r   r/   rn   )ro   rp   rq   rr   r   rs   r   r=   r   r#   r[   r\   r   r   r1   rt   r`   ra   rb   r$   r]   )r'   rd   r   re   r   rg   s         r)   ru   Ú_ConvNd.unmerge  s~  € ð �{�{Ü�MŠMÐ<Ô=Øä�ŠÐDÔEÜ�$×&Ñ&Ó'¨!Ô+Ø!×1Ñ1×5Ñ5Ó7ˆNØ§¡§¡Ó!2Ô2Ø!×0Ñ0Ó2�
Ø'×.Ñ.×3Ñ3×9Ñ9�
à"Ÿj™j¨Ñ8×=Ñ=�Ø×*×*Ø"-×"7Ñ"7¸¸1Ó"=�KÜ).¯ª°:×3DÑ3D×3IÑ3IÈ;ÐY]ÑK]Ó)^×)aÑ)aÐblÓ)m�
×!Ñ!Ô&à×*×*°
·±Ñ0KØ"Ÿj™j¨Ñ8×@Ñ@ÀÇÁ×AVÑAVÓW�GØ!+§¡×!5Ñ!5×!;Ñ!;�JÜ+0¯9ª9°Z·_±_×5IÑ5IÈ7Ï<É<Ó+X×+[Ñ+[Ð\fÓ+g�J—O‘OÔ(ô �$×&Ñ&Ó'¨!×+Ð+r,   rw   rx   r(   c                 ó  • UR                   =pEU R                  (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nGOU R                  (       a  U R                  " U/UQ70 UD6nOöSnU R
                   HL  nX€R                  R                  5       ;  a  M"  U R                  U   R                   nXpR                  U   -  nMN     U R                  (       a]  UR                  U5      nX-  R                  U R                  5       R                  R                   5      n	U R                  " U	/UQ70 UD6nO*U R                  " U/UQ70 UD6nUR                  U5      U-  nUR                  U5      nU$ rz   )r\   r{   ro   ru   r   r7   r   r=   r   r`   r   r#   )
r'   rw   rx   r(   r\   r}   r~   r   rd   r€   s
             r)   r‚   Ú_ConvNd.forward  sC  € Ø!"§¡Ð(ˆà× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ŠFØ�[�[Ø—_’_ QÐ8¨Ò8°Ñ8‰FàˆKØ"&×"6Ô"6�Ø!¯©¯©Ó):Ó:ÙØŸ
™
 >Ñ2×8Ñ8�ØŸz™z¨.Ñ9Ñ9’ñ	 #7ð ×"×"Ø—D‘D˜“K�ð ™/×-Ñ-¨d×.AÑ.AÓ.C×.JÑ.J×.PÑ.PÓQ�ØŸš¨ÐA°$ÒA¸&ÑA‘àŸš¨Ð<¨TÒ<°VÑ<�ØŸ™ 5Ó)¨KÑ7�à—‘˜>Ó*ˆØˆr,   )rR   r�   rM   )FFTrA   r„   r…   )rB   rC   rD   rE   r   rG   r†   rH   r*   r:   r   r‡   rh   ru   r1   rˆ   r   r‚   rI   r‰   rŠ   s   @r)   rŒ   rŒ   »   s½   ø† ð
  %Ø$Ø!%ñ:à—I‘Ið:ð ð:ð ð	:ð
 ð:ð ð:ð 
÷:ð :ñ"	NÈ4õ 	Nñ*< ð *<¸XÀdÈ3ÁiÑ=Pð *<Ð\`õ *<ôXhð2˜Ÿ™ð ¨cð ¸Sð ÀUÇ\Á\÷ ò r,   rŒ   c                   ó(   ^ • \ rS rSrU 4S jrSrU =r$ )r   i<  c                 óv   >• [         TU ]  " U0 UD6  U R                  S:X  d  [        SU R                   35      eg )Né   z0Conv2d layer kernel must have 4 dimensions, not ©rQ   r*   r�   r%   ©r'   rx   r(   rS   s      €r)   r*   ÚConv2d.__init__?  óC   ø€ Ü‰Ò˜$Ð) &Ò)Ø×Ñ 1Ó$ÜÐOÐPT×P`ÑP`ÐOaÐbÓcÐcð %r,   rJ   ©rB   rC   rD   rE   r*   rI   r‰   rŠ   s   @r)   r   r   <  s   ø† ÷dó dr,   r   c                   ó(   ^ • \ rS rSrU 4S jrSrU =r$ )r   iE  c                 óv   >• [         TU ]  " U0 UD6  U R                  S:X  d  [        SU R                   35      eg )Né   z0Conv2d layer kernel must have 5 dimensions, not r¢   r£   s      €r)   r*   ÚConv3d.__init__G  r¥   r,   rJ   r¦   rŠ   s   @r)   r   r   E  s   ø† ÷dó dr,   r   )rp   Útypingr   r   r1   Útorch.nnr   Útransformers.pytorch_utilsr   Úpeft.tuners.tuners_utilsr   r   Ú
peft.utilsr   r
   rG   r   rŒ   r   r   rJ   r,   r)   Ú<module>r°      so   ðó ß  ã Ý Ý -ç LÝ  ô,=ˆ~ô ,=ô^oˆR�Y‰Y˜ô oôd~ˆb�i‰i˜ô ~ôBdˆWô dôdˆWõ dr,   