ó
    >:jQ  ã            	       óô   • S SK r S SKJrJr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\S\S\\\4   4S jjrS rSS jrg)é    N)ÚAnyÚOptionalÚUnion)ÚLycorisLayerc                   óF  ^ • \ rS rSrSrS\R                  SS4U 4S jjr\S\	\
   4S j5       rS\
S	\S
\S\S\4
S jrS\
4S jrS\
4S jrS r SS\
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$ )Ú	LoKrLayeré   ©Úlokr_w1Ú	lokr_w1_aÚ	lokr_w1_bÚlokr_w2Ú	lokr_w2_aÚ	lokr_w2_bÚlokr_t2Ú
base_layerÚreturnNc                 óÈ  >• [         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
        [        R                  " 0 5      U l        g ©N)ÚsuperÚ__init__r   ÚnnÚParameterDictr   r   r   r   r   r   r   )Úselfr   Ú	__class__s     €ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/lokr/layer.pyr   ÚLoKrLayer.__init__&   sœ   ø€ Ü‰ÑÔÜ×Ò˜dÔ/ô ×'Ò'¨Ó+ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×'Ò'¨Ó+ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×)Ò)¨"Ó-ˆŒÜ×'Ò'¨Ó+ˆ�ó    c                 ó®   • 1 U R                   k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ÚLoKrLayer._available_adapters3   sj   € ð
Ø�\‰\ð
à�^‰^ð
ð �^‰^ð
ð �\‰\ð	
ð
 �^‰^ð
ð �^‰^ð
ð �\‰\ð
ð 	
r   Úadapter_nameÚrÚuse_w1Úuse_w2Úuse_effective_conv2dc           	      ó²	  • U(       aE  [         R                  " [        R                  " US   S   US   S   5      5      U R                  U'   O{[         R                  " [        R                  " US   S   U5      5      U R
                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   [        U5      S:X  Ga™  U(       aI  [         R                  " [        R                  " US   S   US   S   /USS  Q76 5      U R                  U'   g U(       aº  [         R                  " [        R                  " X"US   US   5      5      U R                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   g [         R                  " [        R                  " US   S   U5      5      U R                  U'   [         R                  " [        R                  " X#S   S   US   -  US   -  5      5      U R                  U'   g [        U5      S:X  Ga�  U(       aI  [         R                  " [        R                  " US   S   US   S   US   5      5      U R                  U'   g U(       a·  [         R                  " [        R                  " X"US   S5      5      U R                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   g [         R                  " [        R                  " US   S   U5      5      U R                  U'   [         R                  " [        R                  " X#S   S   US   -  5      5      U R                  U'   g U(       aE  [         R                  " [        R                  " US   S   US   S   5      5      U R                  U'   g [         R                  " [        R                  " US   S   U5      5      U R                  U'   [         R                  " [        R                  " X#S   S   5      5      U R                  U'   g )Nr   é   é   é   é   )r   Ú	ParameterÚtorchÚemptyr   r   r   Úlenr   r   r   r   )r   r"   r#   Úshaper$   r%   r&   s          r   Úcreate_adapter_parametersÚ#LoKrLayer.create_adapter_parameters?   sŸ  € ö Ü)+¯ª´e·k²kÀ%ÈÁ(È1Á+ÈuÐUVÉxÐXYÉ{Ó6[Ó)\ˆD�L‰L˜Ò&ä+-¯<ª<¼¿ºÀEÈ!ÁHÈQÁKÐQRÓ8SÓ+TˆD�N‰N˜<Ñ(Ü+-¯<ª<¼¿ºÀAÈQÁxÐPQÁ{Ó8SÓ+TˆD�N‰N˜<Ñ(ô ˆu‹:˜Œ?ÞÜ-/¯\ª\¼%¿+º+ÀeÈAÁhÈqÁkÐSXÐYZÑS[Ð\]ÑS^Ð:kÐafÐghÐgiÐajÒ:kÓ-l�—‘˜\Ò*Þ%Ü-/¯\ª\¼%¿+º+ÀaÈEÐRSÉHÐV[Ð\]ÑV^Ó:_Ó-`�—‘˜\Ñ*Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;Ó<WÓ/X�—‘˜|Ñ,Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;Ó<WÓ/X�—‘˜|Ò,ä/1¯|ª|¼E¿KºKÈÈaÉÐQRÉÐUVÓ<WÓ/X�—‘˜|Ñ,Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;ÐY^Ð_`ÑYaÑKaÐdiÐjkÑdlÑKlÓ<mÓ/n�—‘˜|Ò,Ü�‹Z˜1Œ_ÞÜ-/¯\ª\¼%¿+º+ÀeÈAÁhÈqÁkÐSXÐYZÑS[Ð\]ÑS^Ð`eÐfgÑ`hÓ:iÓ-j�—‘˜\Ò*Þ%ô .0¯\ª\¼%¿+º+ÀaÈEÐRSÉHÐVWÓ:XÓ-Y�—‘˜\Ñ*Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;Ó<WÓ/X�—‘˜|Ñ,Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;Ó<WÓ/X�—‘˜|Ò,ä/1¯|ª|¼E¿KºKÈÈaÉÐQRÉÐUVÓ<WÓ/X�—‘˜|Ñ,Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;ÐY^Ð_`ÑYaÑKaÓ<bÓ/c�—‘˜|Ò,ö Ü-/¯\ª\¼%¿+º+ÀeÈAÁhÈqÁkÐSXÐYZÑS[Ð\]ÑS^Ó:_Ó-`�—‘˜\Ò*ä/1¯|ª|¼E¿KºKÈÈaÉÐQRÉÐUVÓ<WÓ/X�—‘˜|Ñ,Ü/1¯|ª|¼E¿KºKÈÐQRÉ8ÐTUÉ;Ó<WÓ/X�—‘˜|Ò,r   c                 óŠ  • XR                   ;   a-  [        R                  R                  U R                   U   5        Ok[        R                  R                  U R                  U   5        [        R                  R                  U R                  U   [        R                  " S5      S9  XR                  ;   a@  [        R                  R                  U R                  U   [        R                  " S5      S9  O~[        R                  R                  U R                  U   [        R                  " S5      S9  [        R                  R                  U R                  U   [        R                  " S5      S9  XR                  ;   a@  [        R                  R                  U R                  U   [        R                  " S5      S9  g g ©Né   )Úa)r   r   ÚinitÚzeros_r   Úkaiming_uniform_r   ÚmathÚsqrtr   r   r   r   ©r   r"   s     r   Úreset_adapter_parametersÚ"LoKrLayer.reset_adapter_parametersm   s  € ØŸ<™<Ó'Ü�G‰G�N‰N˜4Ÿ<™<¨Ñ5Õ6ä�G‰G�N‰N˜4Ÿ>™>¨,Ñ7Ô8Ü�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRàŸ<™<Ó'Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPä�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ð (r   c                 óÖ  • XR                   ;   a@  [        R                  R                  U R                   U   [        R
                  " S5      S9  O~[        R                  R                  U R                  U   [        R
                  " S5      S9  [        R                  R                  U R                  U   [        R
                  " S5      S9  XR                  ;   a@  [        R                  R                  U R                  U   [        R
                  " S5      S9  O~[        R                  R                  U R                  U   [        R
                  " S5      S9  [        R                  R                  U R                  U   [        R
                  " S5      S9  XR                  ;   a@  [        R                  R                  U R                  U   [        R
                  " S5      S9  g g r4   )r   r   r7   r9   r:   r;   r   r   r   r   r   r   r<   s     r   Úreset_adapter_parameters_randomÚ)LoKrLayer.reset_adapter_parameters_random}   s=  € ØŸ<™<Ó'Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPä�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§^¡^°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ð (r   c                 óŠ  • XR                   ;   a@  [        R                  R                  U R                   U   [        R
                  " S5      S9  O~[        R                  R                  U R                  U   [        R
                  " S5      S9  [        R                  R                  U R                  U   [        R
                  " S5      S9  XR                  ;   a-  [        R                  R                  U R                  U   5        Ok[        R                  R                  U R                  U   5        [        R                  R                  U R                  U   [        R
                  " S5      S9  XR                  ;   a@  [        R                  R                  U R                  U   [        R
                  " S5      S9  g g r4   )r   r   r7   r9   r:   r;   r   r   r   r8   r   r   r   r<   s     r   Ú$reset_adapter_parameters_lycoris_wayÚ.LoKrLayer.reset_adapter_parameters_lycoris_wayŽ   s  € ØŸ<™<Ó'Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPä�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Ÿ<™<¨Ñ5Õ6ä�G‰G�N‰N˜4Ÿ>™>¨,Ñ7Ô8Ü�G‰G×$Ñ$ T§^¡^°LÑ%AÄTÇYÂYÈqÃ\Ð$ÑRàŸ<™<Ó'Ü�G‰G×$Ñ$ T§\¡\°,Ñ%?Ä4Ç9Â9ÈQÃ<Ð$ÒPð (r   ÚalphaÚrank_dropoutÚmodule_dropoutÚinit_weightsÚdecompose_bothÚdecompose_factorÚinference_modec                 óØ  • US::  a  [        SU 35      eX R                  U'   X0R                  U'   X2-  U R                  U'   X@R                  U'   XPR
                  U'   US   U R                  U'   U R                  5       n[        U[        R                  5      (       aŠ  UR                  UR                  pí[        XÙ5      u  nn[        Xé5      u  nnUU4UU44nU=(       a    U[        US   S   US   S   5      S-  :  (       + nU[        US   S   US   S   5      S-  :  + nSnGOÀ[        U[        R                  5      (       a­  UR                   UR"                  píUR$                  n[        XÙ5      u  nn[        Xé5      u  nnUU4UU4/UQ7nU=(       a    U[        US   S   US   S   5      S-  :  (       + nU[        US   S   US   S   5      S-  :¬  nU=(       a    UR$                  S:g  nOô[        U[        R&                  5      (       a´  UR                   UR"                  píUR$                  S   4n[        XÙ5      u  nn[        Xé5      u  nnUU4UU4/UQ7nU=(       a    U[        US   S   US   S   5      S-  :  (       + nU[        US   S   US   S   5      S-  :¬  nU=(       a    UR$                  S   S:g  nO![)        S[+        U5      R,                   35      eU R/                  XUUUU5        U(       a*  US	:X  a  U R1                  U5        O#U R3                  U5        OU R5                  U5        U R7                  U5        U R9                  U R:                  U
S
9  g)a¾  Internal function to create lokr 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 adapter weights.
    use_effective_conv2d (`bool`): Use parameter effective decomposition for Conv2d with ksize > 1.
    decompose_both (`bool`): Perform rank decomposition of left kronecker product matrix.
    decompose_factor (`int`): Kronecker product decomposition factor.
r   z?`r` should be a positive integer value but the value passed is Úrank_dropout_scaler(   r*   F)r(   r(   z0LoKr is not implemented for base layers of type Úlycoris)rK   N)Ú
ValueErrorr#   rE   ÚscalingrF   rG   rM   Úget_base_layerÚ
isinstancer   ÚLinearÚin_featuresÚout_featuresÚfactorizationÚmaxÚConv2dÚin_channelsÚout_channelsÚkernel_sizeÚConv1dÚ	TypeErrorÚtypeÚ__name__r1   rC   r=   r@   Ú%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r   r"   r#   rE   rF   rG   rH   r&   rI   rJ   rK   Úkwargsr   Úin_dimÚout_dimÚin_mÚin_nÚout_lÚout_kr0   r$   r%   Úk_sizes                          r   Úupdate_layerÚLoKrLayer.update_layerž   s~  € ð6 �‹6ÜÐ^Ð_`Ð^aÐbÓcÐcà �‰ˆ|ÑØ#(�
‰
�<Ñ Ø%*¡Yˆ�‰�\Ñ"Ø*6×Ñ˜,Ñ'Ø,:×Ñ˜LÑ)Ø06Ð7KÑ0Lˆ×Ñ Ñ-Ø×(Ñ(Ó*ˆ
ô �j¤"§)¡)×,Ñ,Ø(×4Ñ4°j×6MÑ6M�Gä& vÓ@‰JˆD�$Ü(¨ÓC‰LˆE�5Ø˜U�^ d¨D \Ð2ˆEà(×R¨Q´°U¸1±X¸a±[À%ÈÁ(È1Á+Ó1NÐQRÑ1RÑ-RÔSˆFØœc %¨¡(¨1¡+¨u°Q©x¸©{Ó;¸aÑ?Ò@ˆFØ#(Ò Ü˜
¤B§I¡I×.Ñ.Ø(×4Ñ4°j×6MÑ6M�GØ×+Ñ+ˆFä& vÓ@‰JˆD�$Ü(¨ÓC‰LˆE�5Ø˜U�^ d¨D \Ð;°FÑ;ˆEà(×R¨Q´°U¸1±X¸a±[À%ÈÁ(È1Á+Ó1NÐQRÑ1RÑ-RÔSˆFØœ#˜e A™h q™k¨5°©8°A©;Ó7¸!Ñ;Ñ;ˆFð $8×#\¸J×<RÑ<RÐV\Ñ<\Ñ Ü˜
¤B§I¡I×.Ñ.Ø(×4Ñ4°j×6MÑ6M�GØ ×,Ñ,¨QÑ/Ð1ˆFä& vÓ@‰JˆD�$Ü(¨ÓC‰LˆE�5Ø˜U�^ d¨D \Ð;°FÑ;ˆEà(×R¨Q´°U¸1±X¸a±[À%ÈÁ(È1Á+Ó1NÐQRÑ1RÑ-RÔSˆFØœ#˜e A™h q™k¨5°©8°A©;Ó7¸!Ñ;Ñ;ˆFð
 $8×#Z¸J×<RÑ<RÐSTÑ<UÐYZÑ<ZÑ äÐNÌtÐT^ÓO_×OhÑOhÐNiÐjÓkÐkð 	×&Ñ& |¸¸vÀvÐOcÔdö Ø˜yÓ(Ø×9Ñ9¸,ÕGà×-Ñ-¨lÕ;à×0Ñ0°Ô>ð 	×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr   c           	      ó¼  • XR                   ;   a  U R                   U   nOU R                  U   U R                  U   -  nXR                  ;   a  U R                  U   nOcXR                  ;   a5  [        U R                  U   U R                  U   U R                  U   5      nOU R                  U   U R                  U   -  n[        X#U R                  U   5      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'                  5       nUR(                  " S/S/[+        UR                  SS  5      -  Q76 R-                  UR.                  5      nU R0                  U   (       a  XwR3                  5       -  nXG-  nU$ )Nr   éÿÿÿÿr(   )r   r   r   r   r   Úmake_weight_cpr   r   Ú	make_kronrP   rQ   ÚreshapeÚweightr0   rF   Útrainingr-   ÚrandÚsizeÚfloatÚviewr/   ÚtoÚdevicerM   Úmean)r   r"   Úw1Úw2rr   r   rF   Údrops           r   Úget_delta_weightÚLoKrLayer.get_delta_weight  s„  € àŸ<™<Ó'Ø—‘˜lÑ+‰Bà—‘ Ñ-°·±¸|Ñ0LÑLˆBàŸ<™<Ó'Ø—‘˜lÑ+‰BØŸ\™\Ó)Ü §¡¨\Ñ :¸D¿N¹NÈ<Ñ<XÐZ^×ZhÑZhÐiuÑZvÓw‰Bà—‘ Ñ-°·±¸|Ñ0LÑLˆBô ˜2 4§<¡<°Ñ#=Ó>ˆð ×(Ñ(Ó*ˆ
ð —‘ 
× 1Ñ 1× 7Ñ 7Ó8ˆð ×(Ñ(¨Ñ6ˆØ�=�=ž\Ü—J’J˜vŸ{™{¨1›~Ó.°Ñ=×DÑDÓFˆDØ—9’9˜RÐ> 1 #¬¨F¯L©L¸¸Ð,<Ó(=Ñ"=Ò>×AÑAÀ&Ç-Á-ÓPˆDØ×&Ñ& |×4ØŸ	™	›Ñ#�Ø‰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(   )ÚdtypeÚdisable_adaptersÚmergedÚunmerger   rb   r    rG   rs   r-   rt   Ú_get_delta_activationsrx   )r   r€   Úargsrc   Úprevious_dtypeÚresultÚactive_adapterrG   s           r   ÚforwardÚLoKrLayer.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   r   )F)r_   Ú
__module__Ú__qualname__Ú__firstlineno__Úadapter_layer_namesr   ÚModuler   ÚpropertyÚsetÚstrr    ÚintÚboolr1   r=   r@   rC   rv   rk   r-   ÚTensorr~   r‹   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      sf  ø† ðÐð, 2§9¡9ð ,°÷ ,ð ð	
 S¨¡Xó 	
ó ð	
ð,Yàð,Yð ð,Yð
 ð,Yð ð,Yð #ô,Yð\Q°Sô Qð Q¸Cô Qò"Qð6  %ñaNàðaNð ðaNð ð	aNð
 ðaNð ðaNð ðaNð #ðaNð ðaNð ðaNð ðaNð 
õaNðF ¨Sð  °U·\±\ô  ðD˜Ÿ™ð ¸5¿<¹<÷ ò r   r   c                   ó*  ^ • \ rS rSrSr        SS\R                  S\\\	\
R                  4      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$ )rS   i>  z LoKr implemented in Linear layerr   ry   r‚   r"   r#   rE   rF   rG   rH   c
                 óZ   >• [         TU ]  U5        X@l        U R                  " XEXgX‰40 U
D6  g r   ©r   r   Ú_active_adapterrk   )r   r   ry   r‚   r"   r#   rE   rF   rG   rH   rc   r   s              €r   r   ÚLinear.__init__A  s2   ø€ ô 	‰Ñ˜Ô$ð  ,ÔØ×Ò˜,¨5ÀÑgÐ`fÓgr   Úinputr‡   rc   r   c                 ó†   • U R                  U5      nU R                  X%R                  5      n[        R                  " X%5      $ r   )r~   Ú_cast_input_dtyper‚   ÚFÚlinear)r   r"   r    r‡   rc   Údelta_weights         r   r†   ÚLinear._get_delta_activationsT  s9   € ð ×,Ñ,¨\Ó:ˆØ×&Ñ& u×.@Ñ.@ÓAˆä�xŠx˜Ó,Ð,r   c                 ó   • g)NT© r<   s     r   Úsupports_lora_conversionÚLinear.supports_lora_conversion\  s   € Ør   c                 ó*   >• [         TU ]  5       nSU-   $ ©Nzlokr.©r   Ú__repr__©r   Úrepr   s     €r   r®   ÚLinear.__repr___  ó   ø€ Ü‰gÑÓ ˆØ˜‰}Ðr   ©rž   )NNÚdefaultr   ç        rµ   rµ   T)r´   )r_   r�   rŽ   r�   Ú__doc__r   r‘   r   r   r”   r-   ry   r‚   r•   rv   r–   r   r—   r   r†   r©   r®   r˜   r™   rš   s   @r   rS   rS   >  s  ø† Ù*ð
 6:Ø'+Ø%ØØØ!Ø #Ø!ñhà—I‘Iðhð ˜˜s E§L¡LÐ0Ñ1Ñ2ðhð ˜Ÿ™Ñ$ð	hð
 ðhð ðhð ðhð ðhð ðhð ÷hð hð&-Øð-Ø(-¯©ð-Ø=@ð-ØLOð-à	�‰ô-ñ°Sð Èõ ð˜#÷ õ r   rS   c                   ó  ^ • \ rS rSrSr         SS\R                  S\\\	\
R                  4      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$ )rX   id  z LoKr implemented in Conv2d layerr   ry   r‚   r"   r#   rE   rF   rG   r&   rH   c           	      ó\   >• [         TU ]  U5        X@l        U R                  " XEXgXŠU	40 UD6  g r   r�   ©r   r   ry   r‚   r"   r#   rE   rF   rG   r&   rH   rc   r   s               €r   r   ÚConv2d.__init__g  ó:   ø€ ô 	‰Ñ˜Ô$ð  ,ÔØ×ÒØ˜U°.ÐPdñ	
Øhnó	
r   r    r‡   rc   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)
r~   r¢   r‚   rQ   r£   Úconv2dr¾   r¿   rÀ   rÁ   ©r   r"   r    r‡   rc   r¥   r   s          r   r†   ÚConv2d._get_delta_activations}  ós   € ð ×,Ñ,¨\Ó:ˆØ×&Ñ& u×.@Ñ.@ÓAˆà×(Ñ(Ó*ˆ
Ü�xŠxØØØ×$Ñ$Ø×&Ñ&Ø×(Ñ(Ø×$Ñ$ñ
ð 	
r   c                 ó*   >• [         TU ]  5       nSU-   $ r¬   r­   r¯   s     €r   r®   ÚConv2d.__repr__�  r²   r   r³   ©	NNr´   r   rµ   rµ   rµ   FT©r_   r�   rŽ   r�   r¶   r   r‘   r   r   r”   r-   ry   r‚   r•   rv   r–   r   r—   r   r†   r®   r˜   r™   rš   s   @r   rX   rX   d  óõ   ø† Ù*ð
 6:Ø'+Ø%ØØØ!Ø #Ø%*Ø!ñ
à—I‘Ið
ð ˜˜s E§L¡LÐ0Ñ1Ñ2ð
ð ˜Ÿ™Ñ$ð	
ð
 ð
ð ð
ð ð
ð ð
ð ð
ð #ð
ð ÷
ð 
ð,
Øð
Ø(-¯©ð
Ø=@ð
ØLOð
à	�‰ô
ð ˜#÷ õ r   rX   c                   ó  ^ • \ rS rSrSr         SS\R                  S\\\	\
R                  4      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$ )r\   i’  z LoKr implemented in Conv1d layerr   ry   r‚   r"   r#   rE   rF   rG   r&   rH   c           	      ó\   >• [         TU ]  U5        X@l        U R                  " XEXgXŠU	40 UD6  g r   r�   r¹   s               €r   r   ÚConv1d.__init__•  r»   r   r    r‡   rc   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½   )
r~   r¢   r‚   rQ   r£   Úconv1dr¾   r¿   rÀ   rÁ   rÃ   s          r   r†   ÚConv1d._get_delta_activations«  rÅ   r   c                 ó*   >• [         TU ]  5       nSU-   $ r¬   r­   r¯   s     €r   r®   ÚConv1d.__repr__»  r²   r   r³   rÈ   rÉ   rš   s   @r   r\   r\   ’  rÊ   r   r\   Ú	dimensionÚfactorr   c                 óÚ   • US:”  a  X-  S:X  a	  UnX-  nX#4$ US:X  a  U nSU p2X#-   nX#:  a7  US-   nX-  S:w  a  US-  nX-  S:w  a  M  X-  nXV-   U:”  d  XQ:”  a  O	XVp2X#:  a  M7  X#:”  a  X#p#X#4$ )aN  Factorizes the provided number into the product of two numbers

Args:
    dimension (`int`): The number that needs to be factorized.
    factor (`int`, optional):
        Factorization divider. The algorithm will try to output two numbers, one of each will be as close to the
        factor as possible. If -1 is provided, the decomposition algorithm would try to search dividers near the
        square root of the dimension. Defaults to -1.

Returns:
    Tuple[`int`, `int`]: A tuple of two numbers, whose product is equal to the provided number. The first number is
    always less than or equal to the second.

Example:
    ```py
    >>> factorization(256, factor=-1)
    (16, 16)

    >>> factorization(128, factor=-1)
    (8, 16)

    >>> factorization(127, factor=-1)
    (1, 127)

    >>> factorization(128, factor=4)
    (4, 32)
    ```
r   rn   r(   r¨   )rÓ   rÔ   ÚmÚnÚlengthÚnew_mÚnew_ns          r   rV   rV   Ã  sª   € ð< �ƒz�yÑ)¨aÓ/ØˆØÑˆØˆtˆØ�ƒ|ØˆØˆi€qØ‰U€FØ
‹%Ø�A‘ˆØÑ 1Ó$Ø�Q‰JˆEð Ñ 1Õ$àÑ"ˆØ‰=˜6Ó! U£^Øàˆqð �%ð 	ƒuØˆ1Øˆ4€Kr   c                 ó6   • [         R                  " SXU5      nU$ )Nzi j k l, i p, j r -> p r k l)r-   Úeinsum)ÚtÚwaÚwbÚrebuild2s       r   ro   ro   ÷  s   € Ü�|Š|Ð:¸AÀ2ÓF€HØ€Or   c                 óÈ   • [        UR                  5      S:X  a   U R                  S5      R                  S5      n UR                  5       n[        R
                  " X5      nX2-  $ )Nr)   r*   )r/   r0   Ú	unsqueezeÚ
contiguousr-   Úkron)r{   r|   ÚscaleÚrebuilds       r   rp   rp   ü  sK   € Ü
ˆ2�8‰8ƒ}˜ÓØ�\‰\˜!‹_×&Ñ& qÓ)ˆØ	�‰‹€BÜ�jŠj˜Ó €Gà‰?Ðr   )rn   )g      ð?)r:   Útypingr   r   r   r-   Útorch.nnr   Útorch.nn.functionalÚ
functionalr£   Úpeft.tuners.lycoris_utilsr   r‘   r   rS   rX   r\   r•   ÚtuplerV   ro   rp   r¨   r   r   Ú<module>rí      sˆ   ðó ß 'Ñ 'ã Ý ß Ð å 2ôb�—	‘	˜<ô bôJ	#ˆYô #ôL+ˆYô +ô\+ˆYô +ñb1˜Sð 1¨#ð 1°u¸SÀ#¸X±õ 1òhõ
r   