ó
    oM‡jII  ã                   óÎ  • S SK r S SKJs  J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Jr  \R                  " \5      rS\R                   4S jrS\R                   4S	 jrSS
\4S jjr " S S\ R                  R                   5      r " S S\R                   5      r " S S\R                   5      r " S S\R0                  5      r " S S\R4                  5      rg)é    N)Únné   )Ú	deprecateÚlogging)Úis_transformers_available)ÚCLIPTextModelÚCLIPTextModelWithProjectionÚtext_encoderc                 ó0  • / n[        U [        [        45      (       aX  [        U R                  R
                  R                  5       H)  u  p#SU S3nUR                  nUR                  XE45        M+     U$ [        SU R                  R                   35      e)Nútext_model.encoder.layers.z
.self_attnz.do not know how to get attention modules for: )Ú
isinstancer   r	   Ú	enumerateÚ
text_modelÚencoderÚlayersÚ	self_attnÚappendÚ
ValueErrorÚ	__class__Ú__name__)r
   Úattn_modulesÚiÚlayerÚnameÚmods         Ú£C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/lora.pyÚtext_encoder_attn_modulesr   '   s�   € Ø€Lä�,¤Ô0KÐ L×MÑMÜ! ,×"9Ñ"9×"AÑ"A×"HÑ"HÖI‰HˆAØ/°¨s°*Ð=ˆDØ—/‘/ˆCØ×Ñ  Ö,ñ Jð Ðô ÐIÈ,×J`ÑJ`×JiÑJiÐIjÐkÓlÐló    c                 ó0  • / n[        U [        [        45      (       aX  [        U R                  R
                  R                  5       H)  u  p#UR                  nSU S3nUR                  XT45        M+     U$ [        SU R                  R                   35      e)Nr   z.mlpz(do not know how to get mlp modules for: )r   r   r	   r   r   r   r   Úmlpr   r   r   r   )r
   Úmlp_modulesr   r   Úmlp_modr   s         r   Útext_encoder_mlp_modulesr#   5   s�   € Ø€Kä�,¤Ô0KÐ L×MÑMÜ! ,×"9Ñ"9×"AÑ"A×"HÑ"HÖI‰HˆAØ—i‘iˆGØ/°¨s°$Ð7ˆDØ×Ñ ˜Ö/ñ Jð Ðô ÐCÀL×DZÑDZ×DcÑDcÐCdÐeÓfÐfr   Ú
lora_scalec                 ó˜  • [        U 5       Hf  u  p#[        UR                  [        5      (       d  M&  XR                  l        XR
                  l        XR                  l        XR                  l        Mh     [        U 5       HF  u  p$[        UR                  [        5      (       d  M&  XR                  l        XR                  l        MH     g ©N)r   r   Úq_projÚPatchedLoraProjectionr$   Úk_projÚv_projÚout_projr#   Úfc1Úfc2)r
   r$   Ú_Úattn_moduleÚ
mlp_modules        r   Úadjust_lora_scale_text_encoderr1   C   s’   € Ü3°LÖA‰ˆÜ�k×(Ñ(Ô*?×@Ó@Ø,6×ÑÔ)Ø,6×ÑÔ)Ø,6×ÑÔ)Ø.8× Ñ Ö+ñ Bô 2°,Ö?‰ˆÜ�j—n‘nÔ&;×<Ó<Ø(2�N‰NÔ%Ø(2�N‰NÖ%ò @r   c                   óZ   ^ • \ rS rSrSU 4S jjrSSSS.U 4S jjrSS jrS	 rS
 rSr	U =r
$ )r(   éQ   Nc           	      óZ  >• Sn[        SSU5        [        T	U ]	  5         SSKJn  Xl        U R
                  R                  R                  nUc   U R
                  R                  R                  nU" U R
                  R                  U R
                  R                  UUUUS9U l        X l        g )NzsUse of `PatchedLoraProjection` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.r(   ú1.0.0r   )ÚLoRALinearLayer)Únetwork_alphaÚdeviceÚdtypeÚrank)r   ÚsuperÚ__init__Úmodels.lorar6   Úregular_linear_layerÚweightr8   r9   Úin_featuresÚout_featuresÚlora_linear_layerr$   )
Úselfr>   r$   r7   r:   r9   Údeprecation_messager6   r8   r   s
            €r   r<   ÚPatchedLoraProjection.__init__R   sŸ   ø€ ð TÐÜÐ)¨7Ð4GÔHä‰ÑÔÝ1à$8Ô!à×*Ñ*×1Ñ1×8Ñ8ˆà‰=Ø×-Ñ-×4Ñ4×:Ñ:ˆEá!0Ø×%Ñ%×1Ñ1Ø×%Ñ%×2Ñ2Ø'ØØØñ"
ˆÔð %�r   Ú F©ÚdestinationÚprefixÚ	keep_varsc                óv   >• U R                   c  U R                  R                  " XAX#S.6$ [        TU ]  " XAX#S.6$ )NrG   )rB   r>   Ú
state_dictr;   )rC   rH   rI   rJ   Úargsr   s        €r   rL   Ú PatchedLoraProjection.state_dictm   sA   ø€ Ø×!Ñ!Ñ)Ø×,Ñ,×7Ò7Ø°vòð ô ‰wÒ! 4ÈÒeÐer   c           	      ó@  • U R                   c  g U R                  R                  R                  R                  U R                  R                  R                  R
                  pCU R                  R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  b/  X`R                   R                  -  U R                   R                  -  nXQ[        R                  " US S S 24   US S S 24   5      S   -  -   nU(       aF  [        R                  " U5      R                  5       R                  5       (       a  [!        SU  S35      eUR#                  XCS9U R                  R                  l        S U l         UR%                  5       U l        UR%                  5       U l        Xl        g ©Nr   úaThis LoRA weight seems to be broken. Encountered NaN values when trying to fuse LoRA weights for ú .LoRA weights will not be fused.©r8   r9   )rB   r>   r?   Údatar9   r8   ÚfloatÚupÚdownr7   r:   ÚtorchÚbmmÚisnanÚanyÚitemr   ÚtoÚcpuÚw_upÚw_downr$   ©	rC   r$   Úsafe_fusingr9   r8   Úw_origr_   r`   Úfused_weights	            r   Ú
_fuse_loraÚ PatchedLoraProjection._fuse_lorau   s¬  € Ø×!Ñ!Ñ)Øà×1Ñ1×8Ñ8×=Ñ=×CÑCÀT×E^ÑE^×EeÑEe×EjÑEj×EqÑEqˆvà×*Ñ*×1Ñ1×6Ñ6×<Ñ<Ó>ˆØ×%Ñ%×(Ñ(×/Ñ/×4Ñ4×:Ñ:Ó<ˆØ×'Ñ'×,Ñ,×3Ñ3×8Ñ8×>Ñ>Ó@ˆà×!Ñ!×/Ñ/Ñ;Ø×0Ñ0×>Ñ>Ñ>À×AWÑAW×A\ÑA\Ñ\ˆDà¬e¯iªi¸¸TÂ1¸W¹ÀvÈdÒTUÈgÁÓ.WÐXYÑ.ZÑ!ZÑ[ˆæœ5Ÿ;š; |Ó4×8Ñ8Ó:×?Ñ?×AÑAÜðOØOSÈfð U2ð2óð ð 1=·±Àv°Ð0[ˆ×!Ñ!×(Ñ(Ô-ð "&ˆÔð —H‘H“JˆŒ	Ø—j‘j“lˆŒØ$�r   c           	      óD  • [        U SS 5      b  [        U SS 5      c  g U R                  R                  R                  nUR                  UR
                  p2U R                  R                  US9R                  5       nU R                  R                  U5      R                  5       nUR                  5       U R                  [        R                  " US S S 24   US S S 24   5      S   -  -
  nUR                  X2S9U R                  R                  l        S U l        S U l	        g ©Nr_   r`   ©r8   r   rS   )Úgetattrr>   r?   rT   r9   r8   r_   r]   rU   r`   r$   rX   rY   ©rC   rd   r9   r8   r_   r`   Úunfused_weights          r   Ú_unfuse_loraÚ"PatchedLoraProjection._unfuse_lora•   sú   € Ü˜˜f dÓ+Ñ7¼GÀDÈ(ÐTXÓ<YÑ<eØà×0Ñ0×7Ñ7×<Ñ<ˆØ$×*Ñ*¨L×,?Ñ,?ˆvà�y‰y�|‰| 6ˆ|Ð*×0Ñ0Ó2ˆØ—‘—‘ Ó'×-Ñ-Ó/ˆà%×+Ñ+Ó-°·±Ä5Ç9Â9ÈTÐRVÒXYÐRYÉ]Ð\bÐcgÒijÐcjÑ\kÓClÐmnÑCoÑ1oÑpˆØ0>×0AÑ0AÈÐ0AÐ0]ˆ×!Ñ!×(Ñ(Ô-àˆŒ	Øˆ�r   c                 óÆ   • U R                   c  SU l         U R                  c  U R                  U5      $ U R                  U5      U R                   U R                  U5      -  -   $ )Nç      ð?)r$   rB   r>   )rC   Úinputs     r   ÚforwardÚPatchedLoraProjection.forward¥   s[   € Ø�?‰?Ñ"Ø!ˆDŒOØ×!Ñ!Ñ)Ø×,Ñ,¨UÓ3Ð3Ø×(Ñ(¨Ó/°4·?±?ÀT×E[ÑE[Ð\aÓEbÑ3bÑcÐcr   )rB   r$   r>   r`   r_   )é   Né   N©rp   F)r   Ú
__module__Ú__qualname__Ú__firstlineno__r<   rL   re   rm   rr   Ú__static_attributes__Ú__classcell__©r   s   @r   r(   r(   Q   s4   ø† ÷%ð6 -1¸Àu÷ fð fô%ò@÷ dð dr   r(   c                   óÎ   ^ • \ rS rSrSr    SS\S\S\S\S-  S\R                  \	-  S-  S	\R                  S-  4U 4S
 jjjrS\R                  S\R                  4S jrSrU =r$ )r6   é­   aM  
A linear layer that is used with LoRA.

Parameters:
    in_features (`int`):
        Number of input features.
    out_features (`int`):
        Number of output features.
    rank (`int`, `optional`, defaults to 4):
        The rank of the LoRA layer.
    network_alpha (`float`, `optional`, defaults to `None`):
        The value of the network alpha used for stable learning and preventing underflow. This value has the same
        meaning as the `--network_alpha` option in the kohya-ss trainer script. See
        https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_network_README-en.md#execute-learning
    device (`torch.device`, `optional`, defaults to `None`):
        The device to use for the layer's weights.
    dtype (`torch.dtype`, `optional`, defaults to `None`):
        The dtype to use for the layer's weights.
Nr@   rA   r:   r7   r8   r9   c                 ó¬  >• [         TU ]  5         Sn[        SSU5        [        R                  " XSXVS9U l        [        R                  " X2SXVS9U l        X@l        X0l        X l	        Xl
        [        R                  R                  U R
                  R                  SU-  S9  [        R                  R                  U R                  R                  5        g )NzmUse of `LoRALinearLayer` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.r6   r5   F)Úbiasr8   r9   rt   ©Ústd)r;   r<   r   r   ÚLinearrW   rV   r7   r:   rA   r@   ÚinitÚnormal_r?   Úzeros_)	rC   r@   rA   r:   r7   r8   r9   rD   r   s	           €r   r<   ÚLoRALinearLayer.__init__Â   s¢   ø€ ô 	‰ÑÔð NÐÜÐ# WÐ.AÔBä—I’I˜k°eÀFÑXˆŒ	Ü—)’)˜D°UÀ6ÑWˆŒð +ÔØŒ	Ø(ÔØ&Ôä
�‰�‰˜Ÿ	™	×(Ñ(¨a°$©hˆÑ7Ü
�‰�‰�t—w‘w—~‘~Õ&r   Úhidden_statesÚreturnc                 ó.  • UR                   nU R                  R                  R                   nU R                  UR                  U5      5      nU R	                  U5      nU R
                  b  XPR
                  U R                  -  -  nUR                  U5      $ r&   ©r9   rW   r?   r]   rV   r7   r:   ©rC   rˆ   Ú
orig_dtyper9   Údown_hidden_statesÚup_hidden_statess         r   rr   ÚLoRALinearLayer.forwardÜ   ó�   € Ø"×(Ñ(ˆ
Ø—	‘	× Ñ ×&Ñ&ˆà!ŸY™Y }×'7Ñ'7¸Ó'>Ó?ÐØŸ7™7Ð#5Ó6Ðà×ÑÑ)Ø× 2Ñ 2°T·Y±YÑ >Ñ>Ðà×"Ñ" :Ó.Ð.r   )rW   r@   r7   rA   r:   rV   )ru   NNN)r   rw   rx   ry   Ú__doc__ÚintrU   rX   r8   Ústrr9   r<   ÚTensorrr   rz   r{   r|   s   @r   r6   r6   ­   s•   ø† ñð0 Ø&*Ø,0Ø$(ñ'àð'ð ð'ð ð	'ð
 ˜t‘|ð'ð —‘˜sÑ" TÑ)ð'ð �{‰{˜TÑ!÷'ð 'ð4
/ U§\¡\ð 
/°e·l±l÷ 
/ò 
/r   r6   c                   óÐ   ^ • \ rS rSrSr     SS\S\S\S\\\\4   -  S\\\\4   -  S	\\\\4   -  \-  S
\S-  4U 4S jjjr	S\
R                  S\
R                  4S jrSrU =r$ )ÚLoRAConv2dLayeréé   aÖ  
A convolutional layer that is used with LoRA.

Parameters:
    in_features (`int`):
        Number of input features.
    out_features (`int`):
        Number of output features.
    rank (`int`, `optional`, defaults to 4):
        The rank of the LoRA layer.
    kernel_size (`int` or `tuple` of two `int`, `optional`, defaults to 1):
        The kernel size of the convolution.
    stride (`int` or `tuple` of two `int`, `optional`, defaults to 1):
        The stride of the convolution.
    padding (`int` or `tuple` of two `int` or `str`, `optional`, defaults to 0):
        The padding of the convolution.
    network_alpha (`float`, `optional`, defaults to `None`):
        The value of the network alpha used for stable learning and preventing underflow. This value has the same
        meaning as the `--network_alpha` option in the kohya-ss trainer script. See
        https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_network_README-en.md#execute-learning
Nr@   rA   r:   Úkernel_sizeÚstrideÚpaddingr7   c           	      ó˜  >• [         T	U ]  5         Sn[        SSU5        [        R                  " XXEUSS9U l        [        R                  " X2SSSS9U l        Xpl        X0l        [        R                  R                  U R
                  R                  SU-  S	9  [        R                  R                  U R                  R                  5        g )
NzmUse of `LoRAConv2dLayer` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.r—   r5   F)r™   rš   r›   r€   ©rt   rt   )r™   rš   r€   rt   r�   )r;   r<   r   r   ÚConv2drW   rV   r7   r:   r„   r…   r?   r†   )
rC   r@   rA   r:   r™   rš   r›   r7   rD   r   s
            €r   r<   ÚLoRAConv2dLayer.__init__   sŸ   ø€ ô 	‰ÑÔð NÐÜÐ# WÐ.AÔBä—I’I˜k¸[ÐahÐotÑuˆŒ	ô —)’)˜D¸FÈ6ÐX]Ñ^ˆŒð +ÔØŒ	ä
�‰�‰˜Ÿ	™	×(Ñ(¨a°$©hˆÑ7Ü
�‰�‰�t—w‘w—~‘~Õ&r   rˆ   r‰   c                 ó.  • UR                   nU R                  R                  R                   nU R                  UR                  U5      5      nU R	                  U5      nU R
                  b  XPR
                  U R                  -  -  nUR                  U5      $ r&   r‹   rŒ   s         r   rr   ÚLoRAConv2dLayer.forward  r‘   r   )rW   r7   r:   rV   )ru   r�   r�   r   N)r   rw   rx   ry   r’   r“   Útupler”   rU   r<   rX   r•   rr   rz   r{   r|   s   @r   r—   r—   é   s·   ø† ñð4 Ø-3Ø(.Ø/0Ø&*ñ'àð'ð ð'ð ð	'ð
 ˜5  c ™?Ñ*ð'ð �e˜C ˜H‘oÑ%ð'ð �u˜S #˜X‘Ñ&¨Ñ,ð'ð ˜t‘|÷'ð 'ð8
/ U§\¡\ð 
/°e·l±l÷ 
/ò 
/r   r—   c                   ó´   ^ • \ rS rSrSrSS.S\S-  4U 4S jjjrS\S-  4S jrSS\S	\	4S
 jjr
S rSS\R                  S\S\R                  4S jjrSrU =r$ )ÚLoRACompatibleConvi)  z3
A convolutional layer that can be used with LoRA.
N©Ú
lora_layerr¦   c                óP   >• Sn[        SSU5        [        TU ]  " U0 UD6  Xl        g )NzpUse of `LoRACompatibleConv` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.r¤   r5   ©r   r;   r<   r¦   ©rC   r¦   rM   ÚkwargsrD   r   s        €r   r<   ÚLoRACompatibleConv.__init__.  s1   ø€ ð QÐÜÐ&¨Ð1DÔEä‰Ò˜$Ð) &Ò)Ø$�r   c                 ó.   • Sn[        SSU5        Xl        g ©NznUse of `set_lora_layer()` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.Úset_lora_layerr5   ©r   r¦   ©rC   r¦   rD   s      r   r®   Ú!LoRACompatibleConv.set_lora_layer5  s   € ð OÐÜÐ" GÐ-@ÔAà$�r   r$   rb   c                 ó<  • U R                   c  g U R                  R                  R                  U R                  R                  R                  pCU R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  b/  X`R                   R                  -  U R                   R                  -  n[        R                  " UR                  SS9UR                  SS95      nUR                  UR                  5      nXQU-  -   n	U(       aF  [        R                  " U	5      R!                  5       R#                  5       (       a  [%        SU  S35      eU	R'                  XCS9U R                  l        S U l         UR)                  5       U l        UR)                  5       U l        Xl        g )Nrt   ©Ú	start_dimrQ   rR   rS   )r¦   r?   rT   r9   r8   rU   rV   rW   r7   r:   rX   ÚmmÚflattenÚreshapeÚshaperZ   r[   r\   r   r]   r^   r_   r`   Ú_lora_scale)
rC   r$   rb   r9   r8   rc   r_   r`   Úfusionrd   s
             r   re   ÚLoRACompatibleConv._fuse_lora;  s–  € Ø�?‰?Ñ"ØàŸ™×(Ñ(×.Ñ.°·±×0@Ñ0@×0GÑ0Gˆvà—‘×!Ñ!×'Ñ'Ó)ˆØ�‰×!Ñ!×(Ñ(×-Ñ-×3Ñ3Ó5ˆØ—‘×%Ñ%×,Ñ,×1Ñ1×7Ñ7Ó9ˆà�?‰?×(Ñ(Ñ4ØŸ/™/×7Ñ7Ñ7¸$¿/¹/×:NÑ:NÑNˆDä—’˜$Ÿ,™,°˜,Ð3°V·^±^Èa°^Ð5PÓQˆØ—‘ §¡Ó/ˆØ¨fÑ!4Ñ5ˆæœ5Ÿ;š; |Ó4×8Ñ8Ó:×?Ñ?×AÑAÜðOØOSÈfð U2ð2óð ð (Ÿ?™?°&˜?ÐFˆ�‰Ôð ˆŒð —H‘H“JˆŒ	Ø—j‘j“lˆŒØ%Õr   c                 óÌ  • [        U SS 5      b  [        U SS 5      c  g U R                  R                  nUR                  R                  UR                  R                  p2U R
                  R                  US9R                  5       U l        U R                  R                  U5      R                  5       U l        [        R                  " U R
                  R                  SS9U R                  R                  SS95      nUR                  UR                  5      nUR                  5       U R                  U-  -
  nUR                  X2S9U R                  l        S U l        S U l        g )Nr_   r`   ri   rt   r³   rS   )rj   r?   rT   r9   r8   r_   r]   rU   r`   rX   rµ   r¶   r·   r¸   r¹   )rC   rd   r9   r8   rº   rl   s         r   rm   ÚLoRACompatibleConv._unfuse_lora]  s  € Ü˜˜f dÓ+Ñ7¼GÀDÈ(ÐTXÓ<YÑ<eØà—{‘{×'Ñ'ˆØ$×)Ñ)×/Ñ/°×1BÑ1B×1IÑ1Iˆvà—I‘I—L‘L¨�LÐ/×5Ñ5Ó7ˆŒ	Ø—k‘k—n‘n VÓ,×2Ñ2Ó4ˆŒä—’˜$Ÿ)™)×+Ñ+°aÐ+Ð8¸$¿+¹+×:MÑ:MÐXYÐ:MÐ:ZÓ[ˆØ—‘ ×!3Ñ!3Ó5ˆØ%×+Ñ+Ó-°×1AÑ1AÀFÑ1JÑKˆØ)×,Ñ,°FÐ,ÐHˆ�‰ÔàˆŒ	Øˆ�r   rˆ   Úscaler‰   c           	      ót  • U R                   S:w  a,  [        R                  " XR                  U R                   S9nSnOU R                  n[        R
                  " XR                  U R                  U R                  X0R                  U R                  5      nU R                  c  U$ XBU R                  U5      -  -   $ )NÚzeros)Úmode)r   r   )Úpadding_modeÚFÚpadÚ _reversed_padding_repeated_twicer›   Úconv2dr?   r€   rš   ÚdilationÚgroupsr¦   )rC   rˆ   r¾   r›   Úoriginal_outputss        r   rr   ÚLoRACompatibleConv.forwardo  s•   € Ø×Ñ Ó'ÜŸEšE -×1VÑ1VÐ]a×]nÑ]nÑoˆMØ‰Gà—l‘lˆGäŸ8š8ØŸ;™;¨¯	©	°4·;±;ÀÏÉÐX\×XcÑXcó
Ðð �?‰?Ñ"Ø#Ð#à#¨t¯©¸}Ó/MÑ'MÑNÐNr   ©r¹   r¦   r`   r_   rv   ©rp   )r   rw   rx   ry   r’   r—   r<   r®   rU   Úboolre   rm   rX   r•   rr   rz   r{   r|   s   @r   r¤   r¤   )  s{   ø† ñð DHò %¨/¸DÑ*@÷ %ð %ð%¨¸4Ñ)?ô %ñ & Uð  &¸tõ  &òDñ$O U§\¡\ð O¸%ð OÈ%Ï,É,÷ Oó Or   r¤   c                   óº   ^ • \ rS rSrSrSS.S\S-  4U 4S jjjrS\S-  4S jrSS\S	\	4S
 jjr
S rSS\R                  S\S\R                  4U 4S jjjrSrU =r$ )ÚLoRACompatibleLineari€  z,
A Linear layer that can be used with LoRA.
Nr¥   r¦   c                óP   >• Sn[        SSU5        [        TU ]  " U0 UD6  Xl        g )NzrUse of `LoRACompatibleLinear` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.rÏ   r5   r¨   r©   s        €r   r<   ÚLoRACompatibleLinear.__init__…  s1   ø€ ð SÐÜÐ(¨'Ð3FÔGä‰Ò˜$Ð) &Ò)Ø$�r   c                 ó.   • Sn[        SSU5        Xl        g r­   r¯   r°   s      r   r®   Ú#LoRACompatibleLinear.set_lora_layerŒ  s   € ð OÐÜÐ" GÐ-@ÔAØ$�r   r$   rb   c           	      óð  • U R                   c  g U R                  R                  R                  U R                  R                  R                  pCU R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  R                  R                  R                  5       nU R                   R                  b/  X`R                   R                  -  U R                   R                  -  nXQ[        R                  " US S S 24   US S S 24   5      S   -  -   nU(       aF  [        R                  " U5      R                  5       R                  5       (       a  [        SU  S35      eUR!                  XCS9U R                  l        S U l         UR#                  5       U l        UR#                  5       U l        Xl        g rP   )r¦   r?   rT   r9   r8   rU   rV   rW   r7   r:   rX   rY   rZ   r[   r\   r   r]   r^   r_   r`   r¹   ra   s	            r   re   ÚLoRACompatibleLinear._fuse_lora‘  s€  € Ø�?‰?Ñ"ØàŸ™×(Ñ(×.Ñ.°·±×0@Ñ0@×0GÑ0Gˆvà—‘×!Ñ!×'Ñ'Ó)ˆØ�‰×!Ñ!×(Ñ(×-Ñ-×3Ñ3Ó5ˆØ—‘×%Ñ%×,Ñ,×1Ñ1×7Ñ7Ó9ˆà�?‰?×(Ñ(Ñ4ØŸ/™/×7Ñ7Ñ7¸$¿/¹/×:NÑ:NÑNˆDà¬e¯iªi¸¸TÂ1¸W¹ÀvÈdÒTUÈgÁÓ.WÐXYÑ.ZÑ!ZÑ[ˆæœ5Ÿ;š; |Ó4×8Ñ8Ó:×?Ñ?×AÑAÜðOØOSÈfð U2ð2óð ð (Ÿ?™?°&˜?ÐFˆ�‰Ôð ˆŒð —H‘H“JˆŒ	Ø—j‘j“lˆŒØ%Õr   c           	      ó  • [        U SS 5      b  [        U SS 5      c  g U R                  R                  nUR                  UR                  p2U R
                  R                  US9R                  5       nU R                  R                  U5      R                  5       nUR                  5       U R                  [        R                  " US S S 24   US S S 24   5      S   -  -
  nUR                  X2S9U R                  l        S U l        S U l        g rh   )rj   r?   rT   r9   r8   r_   r]   rU   r`   r¹   rX   rY   rk   s          r   rm   Ú!LoRACompatibleLinear._unfuse_lora±  sì   € Ü˜˜f dÓ+Ñ7¼GÀDÈ(ÐTXÓ<YÑ<eØà—{‘{×'Ñ'ˆØ$×*Ñ*¨L×,?Ñ,?ˆvà�y‰y�|‰| 6ˆ|Ð*×0Ñ0Ó2ˆØ—‘—‘ Ó'×-Ñ-Ó/ˆà%×+Ñ+Ó-°×1AÑ1AÄEÇIÂIÈdÐSWÒYZÐSZÉmÐ]cÐdhÒjkÐdkÑ]lÓDmÐnoÑDpÑ1pÑqˆØ)×,Ñ,°FÐ,ÐHˆ�‰ÔàˆŒ	Øˆ�r   rˆ   r¾   r‰   c                 óŠ   >• U R                   c  [        TU ]	  U5      nU$ [        TU ]	  U5      X R                  U5      -  -   nU$ r&   )r¦   r;   rr   )rC   rˆ   r¾   Úoutr   s       €r   rr   ÚLoRACompatibleLinear.forwardÁ  sD   ø€ Ø�?‰?Ñ"Ü‘'‘/ -Ó0ˆCØˆJä‘'‘/ -Ó0°E¿O¹OÈMÓ<ZÑ4ZÑ[ˆCØˆJr   rË   rv   rÌ   )r   rw   rx   ry   r’   r6   r<   r®   rU   rÍ   re   rm   rX   r•   rr   rz   r{   r|   s   @r   rÏ   rÏ   €  sv   ø† ñð DHò %¨/¸DÑ*@÷ %ð %ð%¨¸4Ñ)?ô %ñ
& Uð &¸tõ &ò@ñ  U§\¡\ð ¸%ð È%Ï,É,÷ ö r   rÏ   rÌ   )rX   Útorch.nn.functionalr   Ú
functionalrÃ   Úutilsr   r   Úutils.import_utilsr   Útransformersr   r	   Ú
get_loggerr   ÚloggerÚModuler   r#   rU   r1   r(   r6   r—   rž   r¤   rƒ   rÏ   © r   r   Ú<module>rä      sÇ   ðó0 ß Ð Ý ç &Ý :ñ ×ÑßGð 
×	Ò	˜HÓ	%€ð¨B¯I©Iô ð¨2¯9©9ô ñ3¸Uõ 3ôYd˜EŸH™HŸO™Oô Ydôx9/�b—i‘iô 9/ôx=/�b—i‘iô =/ô@TO˜Ÿ™ô TOônG˜2Ÿ9™9õ Gr   