ó
    >:j;J  ã                   ó@  • S SK r S SKJr  S SKrS SKJr  S SKJs  Jr  S SK	J
r
   " S S\R                  \
5      r " S S\5      r " S S	\5      r " S
 S\5      r " S S\R                   R"                  5      r " S S\R                   R"                  5      rS rS rg)é    N)ÚAny)ÚLycorisLayerc                   ó8  ^ • \ rS rSrSrS\R                  4U 4S jjr\S\	\
   4S j5       rS\
S\S	\\S
4   4S jrS\
4S jrS\
4S jr  SS\
S\S\S\S\S\S\S\SS4S jjrS\
S\R*                  4S jrS\R*                  S\R*                  4S jrSrU =r$ )Ú	LoHaLayeré   ©Ú	hada_w1_aÚ	hada_w1_bÚ	hada_w2_aÚ	hada_w2_bÚhada_t1Úhada_t2Ú
base_layerc                 ó’  >• [         TU ]  5         [        R                  " X5        [        R                  " 0 5      U l        [        R                  " 0 5      U l        [        R                  " 0 5      U l        [        R                  " 0 5      U l        [        R                  " 0 5      U l	        [        R                  " 0 5      U l
        g ©N)ÚsuperÚ__init__r   ÚnnÚParameterDictr	   r
   r   r   r   r   )Úselfr   Ú	__class__s     €ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/loha/layer.pyr   ÚLoHaLayer.__init__   sŠ   ø€ Ü‰ÑÔÜ×Ò˜dÔ/ô ×)Ò)¨"Ó-ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×'Ò'¨Ó+ˆŒÜ×'Ò'¨Ó+ˆ�ó    Úreturnc                 ó–   • 1 U R                   kU R                  kU R                  kU R                  kU R                  kU R
                  k$ r   r   )r   s    r   Ú_available_adaptersÚLoHaLayer._available_adapters*   sD   € àq�—‘Ðq $§.¡.Ðq°4·>±>ÐqÀDÇNÁNÐqÐUY×UaÑUaÐqÐdh×dpÑdpÐqÐqr   Úadapter_nameÚrÚshape.c           	      ó¨  • [        U5      S:X  Gag  [        R                  " [        R                  " X"US   US   5      5      U R
                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X"US   US   5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   g [        U5      S:X  Gaa  [        R                  " [        R                  " X"US   S5      5      U R
                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X"US   S5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   g [        R                  " [        R                  " US   U5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   [        R                  " [        R                  " US   U5      5      U R                  U'   [        R                  " [        R                  " X#S   5      5      U R                  U'   g )Né   é   é   r   é   )Úlenr   Ú	ParameterÚtorchÚemptyr   r	   r
   r   r   r   )r   r   r    r!   s       r   Úcreate_adapter_parametersÚ#LoHaLayer.create_adapter_parameters.   s|  € äˆu‹:˜Œ?Ü)+¯ª´e·k²kÀ!ÈÈaÉÐRWÐXYÑRZÓ6[Ó)\ˆD�L‰L˜Ñ&Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(ä)+¯ª´e·k²kÀ!ÈÈaÉÐRWÐXYÑRZÓ6[Ó)\ˆD�L‰L˜Ñ&Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ò(Ü�‹Z˜1Œ_Ü)+¯ª´e·k²kÀ!ÈÈaÉÐRSÓ6TÓ)UˆD�L‰L˜Ñ&Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(ä)+¯ª´e·k²kÀ!ÈÈaÉÐRSÓ6TÓ)UˆD�L‰L˜Ñ&Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ò(ä+-¯<ª<¼¿ºÀEÈ!ÁHÈaÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ñ(ä+-¯<ª<¼¿ºÀEÈ!ÁHÈaÓ8PÓ+QˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÓ8PÓ+QˆD�N‰N˜<Ò(r   c                 óH  • XR                   R                  5       ;   aé  [        R                  R	                  U R                   U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R                  U R                  U   5        XR                  R                  5       ;   a  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  g g ©Né   )Úa)r	   Úkeysr   ÚinitÚkaiming_uniform_ÚmathÚsqrtr
   r   Úzeros_r   r   r   ©r   r   s     r   Úreset_adapter_parametersÚ"LoHaLayer.reset_adapter_parametersG   s  € ð Ÿ>™>×.Ñ.Ó0Ó0Ü�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G�N‰N˜4Ÿ>™>¨,Ñ7Ô8ØŸ<™<×,Ñ,Ó.Ó.Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÑPÜ�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPð /r   c                 ón  • XR                   R                  5       ;   aü  [        R                  R	                  U R                   U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  XR                  R                  5       ;   a  [        R                  R	                  U R                  U   [
        R                  " S5      S9  [        R                  R	                  U R                  U   [
        R                  " S5      S9  g g r.   )r	   r1   r   r2   r3   r4   r5   r
   r   r   r   r   r7   s     r   Úreset_adapter_parameters_randomÚ)LoHaLayer.reset_adapter_parameters_randomV   s  € ð Ÿ>™>×.Ñ.Ó0Ó0Ü�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRÜ�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRØŸ<™<×,Ñ,Ó.Ó.Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÑPÜ�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPð /r   ÚalphaÚrank_dropoutÚmodule_dropoutÚinit_weightsÚuse_effective_conv2dÚinference_modeNc	                 óÊ  • US::  a  [        SU 35      eX R                  U'   X0R                  U'   X2-  U R                  U'   X@R                  U'   XPR
                  U'   U R                  5       n
[        U
[        R                  5      (       a!  [        U
R                  R                  5      nGOO[        U
[        R                  5      (       a~  U=(       a    U
R                  S:g  nU(       a&  U
R                  U
R                   /U
R                  Q7nOëU
R                  U
R                   U
R                  S   -  U
R                  S   -  4nO²[        U
[        R"                  5      (       ar  U=(       a    U
R                  S   S:g  nU(       a'  U
R                  U
R                   U
R                  S   4nOJU
R                  U
R                   U
R                  S   -  4nO![%        S['        U
5      R(                   35      eU R+                  XU5        U(       a  U R-                  U5        OU R/                  U5        U R1                  U5        U R3                  U R4                  US9  g)a@  Internal function to create loha adapter

Args:
    adapter_name (`str`): Name for the adapter to add.
    r (`int`): Rank for the added adapter.
    alpha (`float`): Alpha for the added adapter.
    rank_dropout (`float`): The dropout probability for rank dimension during training.
    module_dropout (`float`): The dropout probability for disabling adapter during training.
    init_weights (`bool`): Whether to initialize weights.
    use_effective_conv2d (`bool`, *optional*, defaults to `False`):
        Use parameter effective decomposition for Conv2d with ksize > 1.
r   z?`r` should be a positive integer value but the value passed is )r&   r&   r&   z0LoHa is not implemented for base layers of type )rB   N)Ú
ValueErrorr    r=   Úscalingr>   r?   Úget_base_layerÚ
isinstancer   ÚLinearÚtupleÚweightr!   ÚConv2dÚkernel_sizeÚout_channelsÚin_channelsÚConv1dÚ	TypeErrorÚtypeÚ__name__r+   r8   r;   Ú%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r   r   r    r=   r>   r?   r@   rA   rB   Úkwargsr   r!   s               r   Úupdate_layerÚLoHaLayer.update_layere   s'  € ð0 �‹6ÜÐ^Ð_`Ð^aÐbÓcÐcà �‰ˆ|ÑØ#(�
‰
�<Ñ Ø%*¡Yˆ�‰�\Ñ"Ø*6×Ñ˜,Ñ'Ø,:×Ñ˜LÑ)ð ×(Ñ(Ó*ˆ
Ü�j¤"§)¡)×,Ñ,Ü˜*×+Ñ+×1Ñ1Ó2ŠEÜ˜
¤B§I¡I×.Ñ.ð $8×#\¸J×<RÑ<RÐV\Ñ<\Ð Þ#Ø#×0Ñ0°*×2HÑ2HÐbÈ:×KaÑKaÑb‘ð ×+Ñ+Ø×*Ñ*¨Z×-CÑ-CÀAÑ-FÑFÈ×I_ÑI_Ð`aÑIbÑbð‘ô ˜
¤B§I¡I×.Ñ.ð
 $8×#Z¸J×<RÑ<RÐSTÑ<UÐYZÑ<ZÐ Þ#Ø#×0Ñ0°*×2HÑ2HÈ*×J`ÑJ`ÐabÑJcÐd‘ð ×+Ñ+Ø×*Ñ*¨Z×-CÑ-CÀAÑ-FÑFð‘ô
 ÐNÌtÐT^ÓO_×OhÑOhÐNiÐjÓkÐkð 	×&Ñ& |¸Ô>ö Ø×)Ñ)¨,Õ7à×0Ñ0°Ô>ð 	×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr   c                 óô  • XR                   R                  5       ;   a  [        U R                   U   U R                  U   U R                  U   U R
                  U   U R                  U   U R                  U   [        R                  " U R                  U   5      S9nOb[        U R                  U   U R                  U   U R                  U   U R                  U   [        R                  " U R                  U   5      S9nU R                  5       nUR                  UR                  R                  5      nU R                   U   nU R"                  (       a¤  U(       a�  [        R$                  " UR'                  S5      5      U:„  R)                  UR*                  5      nUR,                  " S/S/[/        UR                  SS  5      -  Q76 R)                  UR0                  5      nXUR3                  5       -  nX%-  nU$ )N)Úscaler   éÿÿÿÿr&   )r   r1   Úmake_weight_cpr	   r
   r   r   r   r)   ÚtensorrE   Úmake_weightrF   ÚreshaperJ   r!   r>   ÚtrainingÚrandÚsizeÚtoÚdtypeÚviewr'   ÚdeviceÚmean)r   r   rJ   r   r>   Údrops         r   Úget_delta_weightÚLoHaLayer.get_delta_weightµ   s“  € àŸ<™<×,Ñ,Ó.Ó.Ü#Ø—‘˜\Ñ*Ø—‘˜|Ñ,Ø—‘˜|Ñ,Ø—‘˜\Ñ*Ø—‘˜|Ñ,Ø—‘˜|Ñ,Ü—l’l 4§<¡<°Ñ#=Ó>ñ‰Fô !Ø—‘˜|Ñ,Ø—‘˜|Ñ,Ø—‘˜|Ñ,Ø—‘˜|Ñ,Ü—l’l 4§<¡<°Ñ#=Ó>ñˆFð ×(Ñ(Ó*ˆ
ð —‘ 
× 1Ñ 1× 7Ñ 7Ó8ˆð ×(Ñ(¨Ñ6ˆØ�=�=ž\Ü—J’J˜vŸ{™{¨1›~Ó.°Ñ=×AÑAÀ&Ç,Á,ÓOˆDØ—9’9˜RÐ> 1 #¬¨F¯L©L¸¸Ð,<Ó(=Ñ"=Ò>×AÑAÀ&Ç-Á-ÓPˆDð —I‘I“KÑˆDØ‰NˆFàˆr   Úxc                 ód  • UR                   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                  " U/UQ70 UD6nU R
                   H{  nX`R                  ;  a  M  U R                  U   nU R                  (       a/  U R                  (       d  MG  [        R                  " S5      U:”  d  Mc  XPR                  " Xa/UQ70 UD6-   nM}     UR                  U5      nU$ )Nr&   )rd   Údisable_adaptersÚmergedÚunmerger   rU   r   r?   r`   r)   ra   Ú_get_delta_activationsrc   )r   rk   ÚargsrV   Úprevious_dtypeÚresultÚactive_adapterr?   s           r   ÚforwardÚLoHaLayer.forwardÜ   sø   € ØŸ™ˆà× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8‰FØ�[�[Ø—_’_ QÐ8¨Ò8°Ñ8‰Fà—_’_ QÐ8¨Ò8°Ñ8ˆFð #'×"6Ô"6�Ø!×)AÑ)AÓAÙà!%×!4Ñ!4°^Ñ!D�ð ŸŸ¨4¯=¯=©=¼U¿ZºZÈ»]È^Õ=[Ø#×&AÒ&AÀ.Ð&eÐVZÒ&eÐ^dÑ&eÑe’Fñ #7ð —‘˜>Ó*ˆØˆr   )r   r   r	   r
   r   r   )FF)rR   Ú
__module__Ú__qualname__Ú__firstlineno__Úadapter_layer_namesr   ÚModuler   ÚpropertyÚsetÚstrr   ÚintrI   r+   r8   r;   ÚfloatÚboolrW   r)   ÚTensorri   ru   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s2  ø† àdÐð
, 2§9¡9÷ 
,ð ðr S¨¡Xó ró ðrðR°cð R¸cð RÈ%ÐPSÐUXÐPXÉ/ô Rð2Q°Sô QðQ¸Cô Qð. &+Ø$ñNNàðNNð ðNNð ð	NNð
 ðNNð ðNNð ðNNð #ðNNð ðNNð 
õNNð`%¨Sð %°U·\±\ô %ðN˜Ÿ™ð ¸5¿<¹<÷ ò r   r   c                   óà   ^ • \ rS rSrSr      SS\R                  S\S\S\	S\	S\	S	\
4U 4S
 jjjrS\S\R                  S\S\S\R                  4
S jrSS\S\
4S jjrS\4U 4S jjrSrU =r$ )rH   é÷   z LoHa implemented in Linear layerr   r   r    r=   r>   r?   r@   c                 óZ   >• [         T	U ]  U5        X l        U R                  " X#XEXg40 UD6  g r   ©r   r   Ú_active_adapterrW   )
r   r   r   r    r=   r>   r?   r@   rV   r   s
            €r   r   ÚLinear.__init__ú   s2   ø€ ô 	‰Ñ˜Ô$ð  ,ÔØ×Ò˜,¨5ÀÑgÐ`fÓgr   Úinputrq   rV   r   c                 ó†   • U R                  U5      nU R                  X%R                  5      n[        R                  " X%5      $ r   )ri   Ú_cast_input_dtyperd   ÚFÚlinear)r   r   rŒ   rq   rV   Údelta_weights         r   rp   ÚLinear._get_delta_activations  s9   € ð ×,Ñ,¨\Ó:ˆØ×&Ñ& u×.@Ñ.@ÓAˆä�xŠx˜Ó,Ð,r   c                 ó   • g)NT© r7   s     r   Úsupports_lora_conversionÚLinear.supports_lora_conversion  s   € Ør   c                 ó*   >• [         TU ]  5       nSU-   $ ©Nzloha.©r   Ú__repr__©r   Úrepr   s     €r   rš   ÚLinear.__repr__  ó   ø€ Ü‰gÑÓ ˆØ˜‰}Ðr   ©rŠ   )Údefaultr   ç        r¡   r¡   T)r    )rR   rw   rx   ry   Ú__doc__r   r{   r~   r   r€   r�   r   r)   r‚   r   rp   r•   rš   rƒ   r„   r…   s   @r   rH   rH   ÷   sÎ   ø† Ù*ð
 &ØØØ!Ø #Ø!ñhà—I‘Iðhð ðhð ð	hð
 ðhð ðhð ðhð ÷hð hð"-Øð-Ø(-¯©ð-Ø=@ð-ØLOð-à	�‰ô-ñ°Sð Èõ ð˜#÷ õ r   rH   c                   óÐ   ^ • \ rS 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\R                  S\S\S\R                  4
S jrS\4U 4S jjrSrU =r$ )rK   i  z LoHa implemented in Conv2d layerr   r   r    r=   r>   r?   rA   r@   c	           	      ó\   >• [         T
U ]  U5        X l        U R                  " X#XEXhU40 U	D6  g r   r‰   ©r   r   r   r    r=   r>   r?   rA   r@   rV   r   s             €r   r   ÚConv2d.__init__  ó:   ø€ ô 	‰Ñ˜Ô$ð  ,ÔØ×ÒØ˜U°.ÐPdñ	
Øhnó	
r   rŒ   rq   rV   r   c           	      óü   • U R                  U5      nU R                  X%R                  5      nU R                  5       n[        R
                  " UUUR                  UR                  UR                  UR                  S9$ ©N)ÚstrideÚpaddingÚdilationÚgroups)
ri   rŽ   rd   rF   r�   Úconv2drª   r«   r¬   r­   ©r   r   rŒ   rq   rV   r‘   r   s          r   rp   ÚConv2d._get_delta_activations2  ós   € ð ×,Ñ,¨\Ó:ˆØ×&Ñ& u×.@Ñ.@ÓAˆà×(Ñ(Ó*ˆ
Ü�xŠxØØØ×$Ñ$Ø×&Ñ&Ø×(Ñ(Ø×$Ñ$ñ
ð 	
r   c                 ó*   >• [         TU ]  5       nSU-   $ r˜   r™   r›   s     €r   rš   ÚConv2d.__repr__B  rž   r   rŸ   ©r    r   r¡   r¡   r¡   FT©rR   rw   rx   ry   r¢   r   r{   r~   r   r€   r�   r   r)   r‚   r   rp   rš   rƒ   r„   r…   s   @r   rK   rK     ó¿   ø† Ù*ð
 &ØØØ!Ø #Ø%*Ø!ñ
à—I‘Ið
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð #ð
ð ÷
ð 
ð(
Øð
Ø(-¯©ð
Ø=@ð
ØLOð
à	�‰ô
ð ˜#÷ õ r   rK   c                   óÐ   ^ • \ rS 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\R                  S\S\S\R                  4
S jrS\4U 4S jjrSrU =r$ )rO   iG  z LoHa implemented in Conv1d layerr   r   r    r=   r>   r?   rA   r@   c	           	      ó\   >• [         T
U ]  U5        X l        U R                  " X#XEXhU40 U	D6  g r   r‰   r¥   s             €r   r   ÚConv1d.__init__J  r§   r   rŒ   rq   rV   r   c           	      óü   • U R                  U5      nU R                  X%R                  5      nU R                  5       n[        R
                  " UUUR                  UR                  UR                  UR                  S9$ r©   )
ri   rŽ   rd   rF   r�   Úconv1drª   r«   r¬   r­   r¯   s          r   rp   ÚConv1d._get_delta_activations^  r±   r   c                 ó*   >• [         TU ]  5       nSU-   $ r˜   r™   r›   s     €r   rš   ÚConv1d.__repr__n  rž   r   rŸ   r´   rµ   r…   s   @r   rO   rO   G  r¶   r   rO   c                   óZ   • \ rS rSr\\R                  " S5      4S j5       r\S 5       rSr	g)Ú
HadaWeightiv  r&   c                 óD   • U R                  XX4U5        X-  X4-  -  U-  nU$ r   )Úsave_for_backward)ÚctxÚw1aÚw1bÚw2aÚw2brZ   Údiff_weights          r   ru   ÚHadaWeight.forwardw  s-   € à×Ñ˜c¨°%Ô8Ø™	 c¡iÑ0°EÑ9ˆØÐr   c                 óÆ   • U R                   u  p#pEnX-  nXU-  -  nXsR                  -  nUR                  U-  n	XU-  -  nXuR                  -  n
UR                  U-  nAX‰X«S 4$ r   )Úsaved_tensorsÚT)rÃ   Úgrad_outrÄ   rÅ   rÆ   rÇ   rZ   ÚtempÚgrad_w1aÚgrad_w1bÚgrad_w2aÚgrad_w2bs               r   ÚbackwardÚHadaWeight.backward}  st   € à&)×&7Ñ&7Ñ#ˆ�3˜UØÑ#ˆØ ™9Ñ%ˆØŸ%™%‘<ˆØ—5‘5˜4‘<ˆà ™9Ñ%ˆØŸ%™%‘<ˆØ—5‘5˜4‘<ˆàØ 8°tÐ;Ð;r   r”   N©
rR   rw   rx   ry   Ústaticmethodr)   r]   ru   rÓ   rƒ   r”   r   r   rÀ   rÀ   v  s3   † ØØ/4¯|ª|¸A«ó ó ðð
 ñ<ó ó<r   rÀ   c                   óZ   • \ rS rSr\\R                  " S5      4S j5       r\S 5       rSr	g)ÚHadaWeightCPi�  r&   c           	      ó˜   • U R                  XX4XVU5        [        R                  " SXU5      n[        R                  " SXFU5      n	X‰-  U-  $ )Nzi j k l, j r, i p -> p r k l)rÂ   r)   Úeinsum)
rÃ   Út1rÄ   rÅ   Út2rÆ   rÇ   rZ   Úrebuild1Úrebuild2s
             r   ru   ÚHadaWeightCP.forwardŽ  sJ   € à×Ñ˜b s°¸%Ô@ä—<’<Ð >ÀÈÓMˆÜ—<’<Ð >ÀÈÓMˆàÑ" UÑ*Ð*r   c                 óÔ  • U R                   u  p#pEpgnX-  n[        R                  " SXW5      n	[        R                  " SX–5      n
X¡-  nA
[        R                  " SX›5      n[        R                  " SX³R                  5      nAA	[        R                  " SX-5      n[        R                  " SXÔR                  5      nA[        R                  " SX$5      n	[        R                  " SX“5      n
X¡-  nA
[        R                  " SX›5      n[        R                  " SX¶R                  5      nAA	[        R                  " SX]5      n[        R                  " SX×R                  5      nAXüUUUUS 4$ )Nzi j k l, j r -> i r k lzi j k l, i r -> r j k lzr j k l, i j k l -> r izi r k l, i j k l -> r j)rË   r)   rÚ   rÌ   )rÃ   rÍ   rÛ   rÄ   rÅ   rÜ   rÆ   rÇ   rZ   rÎ   ÚrebuildÚgrad_wrÏ   Ú	grad_temprÐ   Úgrad_t1rÑ   rÒ   Úgrad_t2s                      r   rÓ   ÚHadaWeightCP.backward—  s3  € à.1×.?Ñ.?Ñ+ˆ�#˜3 UØÑ#ˆä�|Š|Ð5°rÓ?ˆÜ—,’,Ð8¸$ÓDˆàÑ#ˆØä—<’<Ð 9¸4ÓHˆÜ—L’LÐ!:¸FÇEÁEÓJˆ	Ø�Dä—<’<Ð 9¸2ÓIˆÜ—,’,Ð8¸)ÇUÁUÓKˆØä�|Š|Ð5°rÓ?ˆÜ—,’,Ð8¸$ÓDˆàÑ#ˆØä—<’<Ð 9¸4ÓHˆÜ—L’LÐ!:¸FÇEÁEÓJˆ	Ø�Dä—<’<Ð 9¸2ÓIˆÜ—,’,Ð8¸)ÇUÁUÓKˆØØ (¨G°X¸xÈÐMÐMr   r”   NrÕ   r”   r   r   rØ   rØ   �  s5   † ØØ7<·|²|ÀA³ó +ó ð+ð ñNó óNr   rØ   c                 ó0   • [         R                  XX#U5      $ r   )rÀ   Úapply)rÄ   rÅ   rÆ   rÇ   rZ   s        r   r^   r^   º  s   € Ü×Ñ˜C c°Ó6Ð6r   c           	      ó2   • [         R                  XX#XEU5      $ r   )rØ   rè   )rÛ   rÄ   rÅ   rÜ   rÆ   rÇ   rZ   s          r   r\   r\   ¾  s   € Ü×Ñ˜b s°¸%Ó@Ð@r   )r4   Útypingr   r)   Útorch.nnr   Útorch.nn.functionalÚ
functionalr�   Úpeft.tuners.lycoris_utilsr   r{   r   rH   rK   rO   ÚautogradÚFunctionrÀ   rØ   r^   r\   r”   r   r   Ú<module>rñ      s’   ðó Ý ã Ý ß Ð å 2ô[�—	‘	˜<ô [ô|!ˆYô !ôH)ˆYô )ôX)ˆYô )ô^<�—‘×(Ñ(ô <ô.*N�5—>‘>×*Ñ*ô *NòZ7óAr   