§
    ÎÐj‰L  ã                   óÀ  — d dl mZmZmZmZ d„ Zd„ Zd„ Zd3d„Zd4d	„Z	d
„ Z
d dl mZmZmZmZ  ed¦  «        Zdedefd„Zdedeeeef                  fd„Zdedeeeef                  defd„Zdedefd„Zdedededefd„Zdedededefd„Zdedeeeef                  dedefd„Zdededefd„Zdedefd„Zdedeeef         defd „Zded!ee         defd"„Zd#edefd$„Zd%ee         d&ed'edeee         ef         fd(„Zd)efd*ee         d+ed%ee         d&ed'ed,eegef         deee         ef         fd-„Z	 d5d/ee         d0ed1edeee         ef         fd2„ZdS )6é    )ÚListÚTupleÚDictÚCallablec                 óR  — t          | t          ¦  «        rd„ | D ¦   «         S |                      d¦  «        } |                      dd¦  «                             d¦  «        }d„ |D ¦   «         }d                     |¦  «        } |                      dd¦  «                             ¦   «         S )	Nc                 óf   — g | ].}t          |t          ¦  «        r|                     d ¦  «        n|‘Œ/S )ú 
)Ú
isinstanceÚstrÚstrip©Ú.0Úmultis     úEC:\Users\johnn\OneDrive\Documents\AI\shared\utils\loras_mutipliers.pyú
<listcomp>z.preparse_loras_multipliers.<locals>.<listcomp>   s8   € ÐiÐiÐiÈe­
°5½#Ñ(>Ô(>ÐI�—’˜GÑ$Ô$Ð$ÀEÐiÐiÐió    r	   úÚ ú
c                 ó¬   — g | ]Q}|                      ¦   «         ¯|                     ¦   «                              d ¦  «        °=|                      ¦   «         ‘ŒRS )ú#)r   ÚlstripÚ
startswithr   s     r   r   z.preparse_loras_multipliers.<locals>.<listcomp>   s   € ð  Kð  Kð  K°ÐUZ×U`ÒU`ÑUbÔUbð  KÐkp×kwÒkwÑkyÔky÷  lEò  lEð  FIñ  lJô  lJð  K˜uŸ{š{™}œ}ð  Kð  Kð  Kr   ú ú|)r
   Úlistr   ÚreplaceÚsplitÚjoin)Úloras_multipliersÚloras_mult_choices_lists     r   Úpreparse_loras_multipliersr"      s¼   € ÝÐ#¥TÑ*Ô*ð jØiÐiÐWhÐiÑiÔiÐià)×/Ò/°Ñ8Ô8ÐØ/×7Ò7¸¸bÑAÔA×GÒGÈÑMÔMÐð Kð  KÐ:Qð  Kñ  Kô  KÐØŸšÐ!8Ñ9Ô9ÐØ×$Ò$ S¨Ñ-Ô-×3Ò3Ñ5Ô5Ð5r   c                 ó´  — d„ }| d         |         }| d         |         }| d         |         }| d         |         }	|	r#t          |t          ¦  «        r|S  |||¦  «        S t          |t          ¦  «        r8t          |t          ¦  «        r#t          |t          ¦  «        r||k    r||k    r|S  |||¦  «         ||||z
  ¦  «        z    ||||z
  ¦  «        z   S )Nc                 ó~   ‡ ‡— t          ‰ t          ¦  «        s‰ gŠ ‰dk    rg S ˆˆ fd„t          ‰¦  «        D ¦   «         S )Nr   c                 óF   •— g | ]}‰|t          ‰¦  «        z  ‰z           ‘ŒS © ©Úlen)r   ÚiÚnum_inference_stepsÚslists     €€r   r   z4expand_slist.<locals>.expand_one.<locals>.<listcomp>   s.   ø€ ÐaÐaÐaÀ��a�#˜e™*œ*‘nÐ(;Ñ;Ô<ÐaÐaÐar   )r
   r   Úrange)r+   r*   s   ``r   Ú
expand_onez expand_slist.<locals>.expand_one   sP   øø€ Ý˜%¥Ñ&Ô&Ð7°°¨Ø Ò"Ð"ØˆIØaÐaÐaÐaÐaÅeÐL_ÑF`ÔF`ÐaÑaÔaÐar   Úphase1Úphase2Úphase3Úshared)r
   Úfloat)
Úslists_dictÚmult_nor*   Úmodel_switch_stepÚmodel_switch_step2r-   r.   r/   r0   r1   s
             r   Úexpand_slistr7      sU  € ðbð bð bð ˜Ô" 7Ô+€FØ˜Ô" 7Ô+€FØ˜Ô" 7Ô+€FØ˜Ô" 7Ô+€FØð qÝ�f�eÑ$Ô$Ð3¨V mØˆz˜&Ð"5Ñ6Ô6Ð6å�f�eÑ$Ô$ð  	Z­°F½EÑ)BÔ)Bð  	ZÅzÐRXÕZ_ÑG`ÔG`ð  	ZÐekÐouÒeuÐeuð  {Að  EKò  {Kð  {Kð  TZð  MZØˆz˜&Ð"3Ñ4Ô4°z°zÀ&ÐJ\Ð_pÑJpÑ7qÔ7qÑqÐt~Ðt~ð  @Fð  H[ð  ^pñ  Hpñ  uqô  uqñ  qð  	qr   c                 ó0   — dg| z  dg| z  dg| z  dg| z  dœS )Ng      ð?F©r.   r/   r0   r1   r&   )Únb_lorass    r   Ú_new_slists_dictr;   !   s6   € à�$˜‘/Ø�$˜‘/Ø�$˜‘/Ø�'˜HÑ$ð	ð ð r   Né   é   c	                 ó|  ‡‡‡‡ ‡!— t          | t          ¦  «        r5t          | ¦  «        }	|	dk    r t          | |	dz   d …         ¦  «        dk    rdS ‰€‰Š‰€‰Šdt          dt          fd„Š ˆ fd„}
d„ }d	„ |pg D ¦   «         }t          |¦  «        }‰‰d
œ|¥Š!|D ]}t          |¦  «        ‰!|<   Œt          | t          ¦  «        st          | ¦  «        dk    �r8t          | ¦  «        d |…         }t          |¦  «        D �]\  }}t          |t          ¦  «        �rÂ| 
                    ¦   «         }|                     d¦  «        }t          |¦  «        dk    }|sQt          |¦  «        |k    r>t          |¦  «        |k    rddd|› d�fc S |dk    r|d d…         |z   n||dd …         z   }t          |¦  «        D �] \  }}t          |¦  «        dk    r¶d|v r²|                     d¦  «        }t          |¦  «        t          |¦  «        k    r#ddd|dz   › d|› dt          |¦  «        › d�fc c S t          ||¦  «        D ]H\  }} |
|||¦  «        \  }}t          |¦  «        dk    rdd|fc c c S  |‰!|         ||||¦  «         ŒIŒÏ |
|||¦  «        \  }}t          |¦  «        dk    r	dd|fc c S |rˆ!fd„|D ¦   «         n‰!gD ]} ||||||¦  «         Œ�Œ"�ŒÞ|rˆ!fd„|D ¦   «         n‰!gD ]} |||dt          |¦  «        d¦  «         Œ�Œ|�J|r/|D ]+}‰!|         }||         }dD ]}||         ||         z   ||<   ŒŒ,ndD ]}||         ‰!|         z   ‰!|<   Œ|r‰!|d                  }dD ]}||         ‰!|<   Œ‰!d         }ˆˆˆˆ!fd„t          t          |¦  «        ¦  «        D ¦   «         }d„ |D ¦   «         }|‰!dfS )Nr   r=   )r   r   zAThere can be only one '|' character in Loras Multipliers SequenceÚelementÚreturnc                 óP   — | €dS 	 t          | ¦  «         dS # t          $ r Y dS w xY w)NFT)r2   Ú
ValueError)r?   s    r   Úis_floatz)parse_loras_multipliers.<locals>.is_float3   sC   € Øˆ?Ø�5ð	Ý�'‰NŒNˆNØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   † —
%¤%c                 ó*  •— d| v re|                       d¦  «        }g }|D ]G} ‰|¦  «        sd d|dz   › d|› d|› d|dz   › �fc S |                     t          |¦  «        ¦  «         ŒH|dfS  ‰| ¦  «        sd d|dz   › d| › d	�fS t          | ¦  «        dfS )
Nú,zLora sub value no r=   ú (z) in Multiplier definition 'z' is invalid in Phase r   úLora Multiplier no z) is invalid)r   Úappendr2   )ÚmultÚlora_noÚphase_noÚmultlistr+   ÚsmultrC   s         €r   Úparse_slistz,parse_loras_multipliers.<locals>.parse_slist;   s  ø€ Ø�$ˆ;ˆ;Ø—z’z #‘”ˆHØˆEØ!ð +ð +�Ø�x ‘”ð WØð  "W°gÀ±kð  "Wð  "WÀUð  "Wð  "WÐhpð  "Wð  "Wð  IQð  TUñ  IUð  "Wð  "Wð  Wð  Wð  Wð  WØ—’�U 5™\œ\Ñ*Ô*Ð*Ð*Ø˜"�9ÐØˆx˜‰~Œ~ð 	QØÐP¨w¸©{ÐPÐP¸dÐPÐPÐPÐPÐPÝ�T‰{Œ{˜BˆÐr   c                 óˆ   — |r.|x| d         |<   x| d         |<   | d         |<   d| d         |<   d S || d|dz   › �         |<   d S )Nr.   r/   r0   Tr1   Úphaser=   r&   )Útarget_slistsrJ   rK   r+   Úshared_phasess        r   Úset_phase_slistz0parse_loras_multipliers.<locals>.set_phase_slistH   sr   € Øð 	CØuzÐzˆM˜(Ô# GÑ,Ðz¨}¸XÔ/FÀwÑ/OÐR_Ð`hÔRiÐjqÑRrØ/3ˆM˜(Ô# GÑ,Ð,Ð,à=BˆMÐ0 (¨Q¡,Ð0Ð0Ô1°'Ñ:Ð:Ð:r   c                 ó’   — g | ]D}t          |¦  «                             ¦   «         ¯#t          |¦  «                             ¦   «         ‘ŒES r&   )r   r   )r   Úbranchs     r   r   z+parse_loras_multipliers.<locals>.<listcomp>O   sE   € ÐjÐjÐj¨ÕVYÐZ`ÑVaÔVa×VgÒVgÑViÔViÐj•�F‘”×!Ò!Ñ#Ô#ÐjÐjÐjr   )r5   r6   ú;r   zKif the ';' syntax is used for one Lora multiplier, there should be at most z phases for this multiplierr<   éÿÿÿÿú:rG   rF   z) should define z branch values separated by ':'c                 ó    •— g | ]
}‰|         ‘ŒS r&   r&   ©r   rU   r3   s     €r   r   z+parse_loras_multipliers.<locals>.<listcomp>n   s   ø€ Ð.ZÐ.ZÐ.ZÀv¨{¸6Ô/BÐ.ZÐ.ZÐ.Zr   c                 ó    •— g | ]
}‰|         ‘ŒS r&   r&   rZ   s     €r   r   z+parse_loras_multipliers.<locals>.<listcomp>q   s   ø€ Ð&RÐ&RÐ&R¸v {°6Ô':Ð&RÐ&RÐ&Rr   Tr9   r.   c           	      ó6   •— g | ]}t          ‰|‰‰‰¦  «        ‘ŒS r&   ©r7   )r   r)   r5   r6   r*   r3   s     €€€€r   r   z+parse_loras_multipliers.<locals>.<listcomp>…   sC   ø€ ð  $^ð  $^ð  $^ð  EF¥\°+¸qÐBUÐWhÐj|Ñ%~Ô%~ð  $^ð  $^ð  $^r   c                 óL   — g | ]!}t          |t          ¦  «        r|d          n|‘Œ"S )r   )r
   r   )r   r+   s     r   r   z+parse_loras_multipliers.<locals>.<listcomp>†   s0   € Ð#Ð#Ð#ÐX]µ¸EÅ4Ñ1HÔ1HÐ%S U¨1¤X XÈeÐ#Ð#Ð#r   )r
   r   Ú	_find_barÚanyÚboolr;   r   r(   r"   Ú	enumerater   r   Úzipr2   r,   )"r    r:   r*   Úmerge_slistÚ	nb_phasesr5   r6   Úmodel_switch_phaseÚlora_multiplier_branchesÚposrN   rS   ÚbranchesÚbase_slistsrU   Úlist_mult_choices_listr)   rI   Ú
phase_multrR   rK   Úbranch_multsÚbranch_multr+   ÚerrorrQ   Úbranch_slistsÚmerge_branchÚkeyÚfirst_branchr.   Úloras_list_mult_choices_numsrC   r3   s"     `  ``                         @@r   Úparse_loras_multipliersru   *   s  øøøøø€ ÝÐ#¥SÑ)Ô)ð XÝÐ)Ñ*Ô*ˆØ�!Š8ˆ8�	Ð"3°C¸!±G°H°HÔ"=Ñ>Ô>À!ÒCÐCð  MXð  MXàÐ Ø/ÐØÐ!Ø0Ðð�#ð ¥$ð ð ð ð ðð ð ð ð ðCð Cð Cð kÐjÐ3KÐ3QÈrÐjÑjÔj€HÝ" 8Ñ,Ô,€KØ(9ÐQcÐsÐsÐgrÐs€KØð 9ð 9ˆÝ.¨xÑ8Ô8ˆ�FÑÐåÐ#¥TÑ*Ô*ð L­cÐ2CÑ.DÔ.DÀqÒ.HÑ.HÝ!;Ð<MÑ!NÔ!NÈyÐPXÈyÔ!YÐÝ Ð!7Ñ8Ô8ð 	Lñ 	L‰GˆAˆtÝ˜$¥Ñ$Ô$ñ LØ—z’z‘|”|�Ø!ŸZšZ¨™_œ_�
Ý # J¡¤°!Ò 3�Ø$ð ~­¨Z©¬¸IÒ)EÐ)EÝ˜:‘”¨Ò2Ð2Ø! 2ð  (\Ðu~ð  (\ð  (\ð  (\ð   \ð  \ð  \ð  \ØBTÐXYÒBYÐBY *¨R¨a¨R¤.°:Ñ"=Ð"=Ð`jÐmwÐxzÐx{Ðx{Ôm|Ñ`|�JÝ&/°
Ñ&;Ô&;ð ^ñ ^‘N�H˜dÝ˜8‘}”} qÒ(Ð(¨S°D¨[¨[Ø'+§z¢z°#¡¤˜Ý˜|Ñ,Ô,µ°H±´Ò=Ð=Ø#% rð  ,OÀÀQÁð  ,Oð  ,OÈ$ð  ,Oð  ,OÕ`cÐdlÑ`mÔ`mð  ,Oð  ,Oð  ,Oð  $Oð  Oð  Oð  Oð  Oð  OÝ36°xÀÑ3NÔ3Nð dð dÑ/˜F KØ+6¨;°{ÀAÀxÑ+PÔ+P™L˜E 5Ý" 5™zœz¨Aš~˜~Ø')¨2¨u }Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø+˜O¨K¸Ô,?ÀÀHÈeÐUbÑcÔcÐcÐcð	dð (3 {°4¸¸HÑ'EÔ'E™˜˜uÝ˜u™:œ:¨š>˜>Ø#% r¨5 =Ð0Ð0Ð0Ð0Ð0Ø^fÐ.yÐ.ZÐ.ZÐ.ZÐ.ZÐQYÐ.ZÑ.ZÔ.ZÐ.ZÐmxÐlyð ^ð ^˜MØ+˜O¨M¸1¸hÈÈ}Ñ]Ô]Ð]Ð]ñ^ñ^ð" W_Ð&qÐ&RÐ&RÐ&RÐ&RÈÐ&RÑ&RÔ&RÐ&RÐepÐdqð Lð L�MØ#�O M°1°a½¸t¹¼ÀdÑKÔKÐKÐKñLð ÐØð 	GØ"ð Pð P�Ø +¨FÔ 3�Ø*¨6Ô2�ØCð Pð P�CØ)5°cÔ):¸]È3Ô=OÑ)O�M #Ñ&Ð&ðPðPð @ð Gð G�Ø#.¨sÔ#3°kÀ#Ô6FÑ#F�˜CÑ Ð àð 1Ø" 8¨A¤;Ô/ˆØ;ð 	1ð 	1ˆCØ+¨CÔ0ˆK˜ÑÐà˜Ô"€Fð $^ð  $^ð  $^ð  $^ð  $^ð  $^ð  $^õ  JOõ  PSð  TZñ  P[ô  P[ñ  J\ô  J\ð  $^ñ  $^ô  $^Ð Ø#Ð#Ða}Ð#Ñ#Ô#Ð à(¨+°rÐ9Ð9r   c                 óà   ‡‡‡‡— ddl m} t          ‰d         ¦  «        }ˆˆˆˆfd„t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }|                     | ||¦  «         d S )Nr   )Úoffloadr.   c           	      ó6   •— g | ]}t          ‰|‰‰‰¦  «        ‘ŒS r&   r]   )r   r)   r*   Úphase_switch_stepÚphase_switch_step2r3   s     €€€€r   r   z'update_loras_slists.<locals>.<listcomp>�   s-   ø€ Ð~Ð~Ð~Ðmn�|˜K¨Ð,?ÐARÐTfÑhÔhÐ~Ð~Ð~r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r&   )r   )r   Úls     r   r   z'update_loras_slists.<locals>.<listcomp>Ž   s   € Ð
%Ð
%Ð
%�a�3ˆq‰6Œ6Ð
%Ð
%Ð
%r   )Úmmgprw   r(   r,   Úactivate_loras)	Útransr3   r*   ry   rz   rw   ÚszÚslistsÚnoss	    ````    r   Úupdate_loras_slistsrƒ   Š   s�   øøøø€ ØÐÐÐÐÐÝ	ˆ[˜Ô"Ñ	#Ô	#€BØ~Ð~Ð~Ð~Ð~Ð~Ð~ÕrwÐxzÑr{Ôr{Ð~Ñ~Ô~€FØ
%Ð
%�5 ™9œ9Ð
%Ñ
%Ô
%€CØ×Ò˜5 # vÑ/Ô/Ð/Ð/Ð/r   c                 ó„  — t          | ¦  «        }d x}}t          | ¦  «        D ]%\  }}	|dk    r
|€|	|k    r|}|dk    r
|€|	|k    r|}Œ&|€|}|€|}d}
|dk    rdd}
|
|dk    rdndt          ||¦  «        › �z  }
||k     r>|
||k    rd	nd
|dz   › dt          ||¦  «        › �z  }
|dk    r||k     r|
d|dz   › d|› �z  }
|||
fS )Nr<   é   r   r=   zDenoising Steps: r   z Phase 1 = Nonez Phase 1 = 1:z, Phase 2 = Nonez, Phase 2 = rX   z, Phase 3 = )r(   rb   Úmin)Ú	timestepsÚguide_phasesrf   Úswitch_thresholdÚswitch2_thresholdÚtotal_num_stepsr5   r6   r)   ÚtÚphases_descriptions              r   Úget_model_switch_stepsrŽ   “   sÀ  € Ý˜)‘n”n€OØ-1Ð1ÐÐ*Ý˜)Ñ$Ô$ð nð n‰ˆˆ1Ø˜!ÒÐÐ 1Ð 9¸aÐCSÒ>SÐ>SÐijÐUfØ˜!ÒÐÐ 2Ð :¸qÐDUÒ?UÐ?UÐlmÐWiøØÐ °oÐ"3ØÐ!¸Ð#5ØÐØ�aÒÐØ0ÐØÐ5FÈ!Ò5KÐ5KÐ1Ð1ð  RLÕbeÐfwð  yHñ  cIô  cIð  RLð  RLñ  	LÐØ˜Ò.Ð.ØÐ9JÐN`Ò9`Ð9`Ð"5Ð"5ð  gxð  vGð  IJñ  vJð  gxð  gxõ  NQð  Rdð  etñ  Nuô  Nuð  gxð  gxñ  xÐØ˜aÒÐÐ$6¸Ò$HÐ$HØ"Ð&_Ð5GÈÑ5JÐ&_Ð&_ÈoÐ&_Ð&_Ñ_Ð"ØÐ0Ð2DÐDÐDr   z:;,.0123456789Úsr@   c                 ól   — d}t          | ¦  «        D ]!\  }}|dv rd}Œ|dk    rd}Œ|dk    r|s|c S Œ"dS )NF©r   r   r   Tr   rW   )rb   )r�   Úcomr)   Úchs       r   r_   r_   ­   s^   € Ø
€CÝ˜1‘”ð ð ‰ˆˆ2Ø�ÐÐØˆCˆCØ�3ŠYˆYØˆCˆCØ�3ŠYˆY˜sˆYØˆHˆHˆHøØˆ2r   Útextc                 óx  — g dddf\  }}}}t          | ¦  «        D ]x\  }}|dv r|r|                     ||f¦  «         d}d}Œ'|dk    r|r|                     ||f¦  «         d}d}ŒK|s+|t          v r|sd|}}Œ]|r|                     ||f¦  «         d}Œy|r$|                     |t          | ¦  «        f¦  «         |S )NFr   r‘   r   T)rb   rH   Ú_ALWDr(   )r”   Úresr’   Úin_tokÚstr)   r“   s          r   Ú_spansrš   ¸   sø   € Ø˜u e¨QÐ.Ñ€Cˆˆf�bÝ˜4‘”ð ?ð ?‰ˆˆ2Ø�ÐÐØÐ:�s—z’z 2 q 'Ñ*Ô*Ð*°U¨FØˆCˆCØ�3ŠYˆYØÐ:�s—z’z 2 q 'Ñ*Ô*Ð*°U¨FØˆCˆCØð 	?Ø•Uˆ{ˆ{ØÐ3¨D°! r˜vøàÐ>˜3Ÿ:š: r¨1 gÑ.Ô.Ð.¸°øØÐ*ˆs�zŠz˜2�s 4™yœy˜/Ñ*Ô*Ð*Ø€Jr   Úspansc                 ó°   — t          |¦  «        dk    r8|d         d         |d         d         }}d| ||…         v sd| ||…         v rdndS d| v sd| v rdndS )	Nr<   éþÿÿÿr=   rW   r   r   r   r   r'   )r”   r›   ÚaÚbs       r   Ú_choose_sepr    É   sr   € Ý
ˆ5�z„z�Q‚€Ø�RŒy˜Œ|˜U 2œY qœ\ˆ1ˆØ  Q q S¤	Ð)Ð)¨T°T¸!¸A¸#´YÐ->Ð->ˆtˆtÀSÐHØ˜D�L�L D¨D L Lˆ4ˆ4°sÐ:r   c                 ó^   — |                       d¦  «        }|dk    r| |dz   d …         n| }d|v S )Nr   rW   r=   r   )Úrfind)r”   ÚlnÚsegs      r   Ú_ends_in_comment_liner¥   Ï   s:   € Ø	�Š�DÑ	Ô	€BØ š8˜8ˆ$ˆr�A‰vˆwˆwŒ-ˆ-¨€CØ�#ˆ:Ðr   ÚkÚsepc                 ó¦  — |dk    r| S | }t          |¦  «        r|                     d¦  «        s|dz  }g }|r/|d                              ¦   «         s|                     |¦  «         |                     d¦  «         t	          |dz
  ¦  «        D ],}|                     |¦  «         |                     d¦  «         Œ-|d                     |¦  «        z   S )Nr   r   rW   Ú1r=   r   )r¥   ÚendswithÚisspacerH   r,   r   )r”   r¦   r§   rŒ   ÚpartsÚ_s         r   Ú_append_tokensr®   Ô   sÎ   € ØˆA‚v€v�dˆ{Ø€AÝ˜QÑÔÐE¨¯ª°DÑ)9Ô)9ÐE¸AÀ¹I¸AØ€EØÐ3��2”—’‘”Ð3 %§,¢,¨sÑ"3Ô"3Ð"3Ø	‡L‚L�ÑÔÐÝ�1�q‘5‰\Œ\ð -ð -ˆØ�Š�SÑÔÐ˜5Ÿ<š<¨Ñ,Ô,Ð,Ð,Øˆr�wŠw�u‰~Œ~ÑÐr   r™   Úenc                 ó^  — t          | ¦  «        }|}||k     r| |         dv r|dz  }||k     r
| |         dv °||k    r| d |…         | |d …         z   S |}|dk    r%| |dz
           dv r|dz  }|dk    r| |dz
           dv °||k     r| d |…         | |d …         z   S | d |…         | |d …         z   S )N©r   ú	r=   r   r'   )r”   r™   r¯   ÚnÚrr|   s         r   Ú_erase_span_and_one_seprµ   ß   sê   € ÝˆD‰	Œ	€AØ
€AØ
ˆaŠ%ˆ%�D˜”G˜{Ð*Ð*¨A°©F¨Aˆ!ˆaŠ%ˆ%�D˜”G˜{Ð*Ð*Øˆ2‚v€v�d˜3˜B˜3”i $ q r r¤(Ñ*Ð*Ø
€AØ
ˆaŠ%ˆ%�D˜˜1™”I Ð,Ð,¨a°1©f¨aˆ!ˆaŠ%ˆ%�D˜˜1™”I Ð,Ð,Øˆ2‚v€v�d˜2˜A˜2”h  b c c¤Ñ*Ð*Ø���Œ9�t˜B˜C˜C”yÑ Ð r   Údropc                 ó¼   — |dk    r| S | }t          || d …         ¦  «        D ]\  }}t          |||¦  «        }Œ|r |d         dv r|d d…         }|r
|d         dv °|S )Nr   rW   r±   )Úreversedrµ   )r”   r›   r¶   Únew_textr™   r¯   s         r   Ú_trim_last_tokensrº   é   sŒ   € Øˆq‚y€y˜�+Ø€HÝ˜5 $   œ=Ñ)Ô)ð =ð =‰ˆˆBÝ*¨8°R¸Ñ<Ô<ˆˆØ
ð !�x ”| {Ð2Ð2Ø˜C˜R˜C”=ˆð ð !�x ”| {Ð2Ð2à€Or   Útargetc                 óÊ   — t          | ¦  «        }t          |¦  «        }||k    r| S ||k    rt          | |||z
  ¦  «        S t          | |¦  «        }t	          | ||z
  |¦  «        S )N)rš   r(   rº   r    r®   )r”   r»   ÚspÚcurr§   s        r   Ú_enforce_countr¿   ò   sh   € Ý	�‰Œ€B�S ™WœW�sØ
ˆf‚}€}˜T�kØ
ˆV‚|€|Õ.¨t°R¸¸v¹ÑFÔFÐFÝ
�d˜BÑ
Ô
€CÝ˜$ ¨¡¨cÑ2Ô2Ð2r   c                 óî   — dg }}| D ]Z}|dv rd}|                      |¦  «         Œ|dk    rd}|                      |¦  «         Œ<|dk    r|sŒE|                      |¦  «         Œ[d                     |¦  «        S )NFr‘   r   Tr   r   )rH   r   )r�   r’   Úoutr“   s       r   Ú_strip_bars_outside_commentsrÂ   ù   s†   € Ø�bˆ€CØð ð ˆØ�ÐÐ U˜s¨C¯JªJ°r©N¬N¨N¨NØ�3ŠYˆY T˜s¨C¯JªJ°r©N¬N¨N¨NØ�3ŠYˆY˜sˆY HØ�jŠj˜‰nŒnˆnˆnØ�7Š7�3‰<Œ<Ðr   Úreplc                 ó  — |s| S t          | ¦  «        }t          |                     ¦   «         d¬¦  «        D ]H}d|cxk    rt          |¦  «        k     r,n Œ||         \  }}| d |…         ||         z   | |d …         z   } ŒI| S ©NT)Úreverser   )rš   ÚsortedÚkeysr(   )r”   rÃ   r½   Úidxr™   r¯   s         r   Ú_replace_tokensrÊ     s™   € ØÐ˜�Ý	�‰Œ€BÝ�d—i’i‘k”k¨4Ð0Ñ0Ô0ð 5ð 5ˆØ�ÐÐÒÐ•c˜"‘g”gÒÐÐÐÐØ˜”W‰FˆB�Ø˜˜˜”9˜t CœyÑ(¨4°°°¬9Ñ4ˆDøØ€Kr   Úidxsc                 óä   — |s| S | }t          t          |¦  «        d¬¦  «        D ]J}t          |¦  «        }d|cxk    rt          |¦  «        k     rn Œ.||         \  }}t	          |||¦  «        }ŒK|S rÅ   )rÇ   Úsetrš   r(   rµ   )r”   rË   rÁ   rÉ   r½   r™   r¯   s          r   Ú_drop_tokens_by_indicesrÎ     sŠ   € ØÐ˜�Ø
€CÝ•c˜$‘i”i¨Ð.Ñ.Ô.ð 7ð 7ˆÝ�C‰[Œ[ˆØ�ÐÐÒÐ•c˜"‘g”gÒÐÐÐÐØ˜”W‰FˆB�Ý)¨#¨r°2Ñ6Ô6ˆCøØ€Jr   Úpc                 óö   — |                       ¦   «                              dd¦  «        }d|v r|                     dd¦  «        }d|v °t          |¦  «        dk    r|                     d¦  «        r
|d d…         }|S )Nú\ú/z//r=   rW   )r   r   r(   rª   )rÏ   r�   s     r   Ú_default_path_keyrÓ     sp   € Ø	�Š‰	Œ	×Ò˜$ Ñ$Ô$€AØ
�!ˆ)ˆ)˜Ÿš 4¨Ñ-Ô-�Qˆ$�!ˆ)ˆ)Ý
ˆ1�v„v�‚z€z�a—j’j ‘o”o€z¨1¨S¨b¨S¬6 qØ€Hr   Ú	loras_newÚmult_newÚmodec                 óf  — t          |¦  «        }|dk    r| t          |¦  «        fS |d|…         ||dz   d…         }}t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        }}t          | ¦  «        }t	          ||¦  «        }	t          d||	z
  ¦  «        }
t	          ||
¦  «        }t          d||	|z   z
  ¦  «        }|dk    r%| d|	…         |r| |	|z   |	|z   |z   …         ng z   }|}n)|	}| |||z   …         |r| ||z   ||z   |z   …         ng z   }|}|t          |¦  «        fS )z¹
    Split mult_new on '|' (outside comments) and split loras_new accordingly.
    Return ONLY the side relevant to `mode`. Extras loras (if any) are appended to the selected side.
    rW   Nr=   r   úmerge before)r_   rÂ   r(   rš   r†   Úmax)rÔ   rÕ   rÖ   ÚbiÚleftÚrightÚnLÚnRÚLÚb_countÚremÚa_countÚextrasÚl_selÚm_selÚstart_afters                   r   Ú_select_new_siderç     s”  € õ 
�8Ñ	Ô	€BØ	ˆR‚x€xØÕ6°xÑ@Ô@Ð@Ð@à˜3˜B˜3”- ¨"¨q©&¨'¨'Ô!2ˆ%€DÝ•˜‘”ÑÔ¥¥F¨5¡M¤MÑ 2Ô 2ˆ€BÝˆI‰Œ€Aõ �"�a‰jŒj€GÝ�!�Q˜‘[Ñ!Ô!€CÝ�"�c‰lŒl€GÝ�!�Q˜' GÑ+Ñ,Ñ-Ô-€Fàˆ~ÒÐà˜(˜7˜(Ô#ÐdjÐ'r y°¸7Ñ1BÀWÈwÑEVÐY_ÑE_Ð1_Ô'`Ð'`ÐprÑsˆØˆˆð ˆØ˜+ k°GÑ&;Ð;Ô<ð  FLð  ATÀ	È+ÐX_ÑJ_ÐbmÐpwÑbwð  {Añ  cAð  KAô  ABð  ABð  RTñ  UˆØˆàÕ.¨uÑ5Ô5Ð5Ð5r   rØ   Ú	loras_oldÚmult_oldÚpath_keyc                 óf  ‡&‡'— |dv sJ ‚|                      ¦   «         }|                      ¦   «         }t          |¦  «        }|dk    r|d|…         ||dz   d…         fnd|f\  }}|dk    }	t          |¦  «        t          |¦  «        }}
t          |
¦  «        }t          | ¦  «        }||k    r|}||z
  }|}t	          ||¦  «        }n$|}d}t	          ||¦  «        }t	          |d¦  «        }t          |||¦  «        \  }}t	          |t          |¦  «        ¦  «        Š't          ‰'¦  «        }ˆ'fd„|D ¦   «         }|dk    �r	| d|…         }|}t          |¦  «        }i }t          |¦  «        D ]\  }} ||¦  «        }||vr|||<   Œi }g Š&t          |¦  «        D ]m\  }}|                      ||¦  «        ¦  «        }|�H|t          |¦  «        k     r5|t          |¦  «        k     r||         nd	||<   ‰&                     |¦  «         Œnt          ||¦  «        }t          ‰'‰&¦  «        } ˆ&fd
„t          |¦  «        D ¦   «         }!||!z   }"�n| |d…         }|}t          |¦  «        }i }t          |¦  «        D ]\  }} ||¦  «        }||vr|||<   Œi }g Š&t          |¦  «        D ]m\  }}|                      ||¦  «        ¦  «        }|�H|t          |¦  «        k     r5|t          |¦  «        k     r||         nd	||<   ‰&                     |¦  «         Œnt          ||¦  «        } t          ‰'‰&¦  «        }ˆ&fd„t          |¦  «        D ¦   «         }!|!|z   }"t          t          |¦  «        ¦  «        dk    }#t          t          | ¦  «        ¦  «        dk    }$|#r
|$r|› d| › �}%n|#r||dk    s|	rdndz   }%n| }%|"|%fS )a6  
    Merge settings with full formatting/comment preservation and correct handling of `mult_new` with '|'.
    Dedup rule: when merging AFTER (resp. BEFORE), if a new lora already exists in preserved BEFORE (resp. AFTER),
    update that preserved multiplier and drop the duplicate from the replaced side.
    )rØ   úmerge afterrW   Nr=   r   r   c                 ó*   •— g | ]\  }}‰||…         ‘ŒS r&   r&   )r   r™   r¯   Úmult_new_aligneds      €r   r   z(merge_loras_settings.<locals>.<listcomp>m  s'   ø€ Ð?Ð?Ð?©f¨b°"Ð" 2 b 5Ô)Ð?Ð?Ð?r   rì   r©   c                 ó<   •— g | ]\  }}|t          ‰¦  «        v¯|‘ŒS r&   ©rÍ   ©r   r)   ÚlpÚ	drop_idxss      €r   r   z(merge_loras_settings.<locals>.<listcomp>ƒ  ó.   ø€ Ð[Ð[Ð[™e˜a À1ÍCÐPYÉNÌNÐCZÐCZ�rÐCZÐCZÐCZr   c                 ó<   •— g | ]\  }}|t          ‰¦  «        v¯|‘ŒS r&   rð   rñ   s      €r   r   z(merge_loras_settings.<locals>.<listcomp>š  rô   r   r   rØ   )r   r_   rš   r(   r¿   rç   rb   ÚgetrH   rÊ   rÎ   )(rè   ré   rÔ   rÕ   rÖ   rê   Úbi_oldÚ
before_oldÚ	after_oldÚorig_had_barÚsp_b_oldÚsp_a_oldÚn_b_oldÚ	total_oldÚkeep_bÚkeep_aÚbefore_old_alignedÚafter_old_alignedÚloras_new_selÚmult_new_selÚsp_newÚ
new_tokensÚpreserved_lorasÚpreserved_textÚpreserved_spansÚ
pos_by_keyr)   rò   r¦   Úrepl_mapÚjÚbefore_textÚ
after_textÚ
loras_keepÚ	loras_outÚ
has_beforeÚ	has_afterÚmult_outró   rî   s(                                         @@r   Úmerge_loras_settingsr  D  sx  øø€ ð Ð2Ð2Ð2Ð2Ð2Ø�nŠnÑÔ€HØ�nŠnÑÔ€Hõ �xÑ Ô €FØJPÐTVÊ,È,˜X g v gÔ.°¸À!¹¸¸Ô0EÐFÐFÐ]_ÐaiÐ\jÑ€J�	Ø˜b’L€Lå 
Ñ+Ô+­V°IÑ->Ô->ˆh€HÝ�(‰mŒm€GÝ�I‘”€Ià�)ÒÐØˆØ˜VÑ#ˆØ'ÐÝ+¨I°vÑ>Ô>ÐÐàˆØˆÝ+¨J¸Ñ?Ô?ÐÝ+¨I°qÑ9Ô9Ðõ #3°9¸hÈÑ"MÔ"MÑ€M�<Ý% lµC¸Ñ4FÔ4FÑGÔGÐÝÐ$Ñ%Ô%€FØ?Ð?Ð?Ð?¸Ð?Ñ?Ô?€Jàˆ}ÒÑà# G V GÔ,ˆØ,ˆÝ  Ñ0Ô0ˆØ%'ˆ
Ý˜Ñ/Ô/ð 	6ð 	6‰EˆAˆrØ�˜‘”ˆAØ˜
Ð"Ð"°A J¨q¡Møà#%ˆØ!ˆ	Ý˜}Ñ-Ô-ð 	$ð 	$‰EˆAˆrØ—’˜x˜x¨™|œ|Ñ,Ô,ˆAØˆ} ¥S¨Ñ%9Ô%9Ò!9Ð!9Ø/0µ3°z±?´?Ò/BÐ/B˜j¨œm˜mÈ�˜‘Ø× Ò  Ñ#Ô#Ð#øå% n°hÑ?Ô?ˆÝ-Ð.>À	ÑJÔJˆ
Ø[Ð[Ð[Ð[¥y°Ñ'?Ô'?Ð[Ñ[Ô[ˆ
Ø%¨
Ñ2ˆ	‰	ð $ F G GÔ,ˆØ+ˆÝ  Ñ0Ô0ˆØ%'ˆ
Ý˜Ñ/Ô/ð 	6ð 	6‰EˆAˆrØ�˜‘”ˆAØ˜
Ð"Ð"°A J¨q¡Møà#%ˆØ!ˆ	Ý˜}Ñ-Ô-ð 	$ð 	$‰EˆAˆrØ—’˜x˜x¨™|œ|Ñ,Ô,ˆAØˆ} ¥S¨Ñ%9Ô%9Ò!9Ð!9Ø/0µ3°z±?´?Ò/BÐ/B˜j¨œm˜mÈ�˜‘Ø× Ò  Ñ#Ô#Ð#øå% n°hÑ?Ô?ˆ
Ý-Ð.>À	ÑJÔJˆØ[Ð[Ð[Ð[¥y°Ñ'?Ô'?Ð[Ñ[Ô[ˆ
Ø  ?Ñ2ˆ	õ •V˜KÑ(Ô(Ñ)Ô)¨AÒ-€JÝ•V˜JÑ'Ô'Ñ(Ô(¨1Ò,€IØð �ið Ø!Ð0Ð0 JÐ0Ð0ˆˆØ	ð Ø¨$°.Ò*@Ð*@ÀLÐ*@ # #ÐWYÑZˆˆàˆà�hÐÐr   ÚbeforeÚlorasrI   Úwhichc                 ól  — |dv sJ ‚t          |¦  «        }|dk    r|d |…         ||dz   d …         fnd|f\  }}t          |¦  «        }t          |¦  «        }t          | ¦  «        }||k    r|}	||	z
  }
n|}	d}
|dk    r| d |	…         t          ||	¦  «        fS | |	|	|
z   …         t          ||
¦  «        fS )N)r  ÚafterrW   r=   r   r   r  )r_   rš   r(   r¿   )r  rI   r  rÚ   Ú
before_txtÚ	after_txtÚsp_bÚn_bÚtotalrÿ   r   s              r   Úextract_loras_sider  «  sæ   € ð
 Ð'Ð'Ð'Ð'Ð'Ý	�4‰Œ€BØ:<Àº(¸(˜T # 2 #œY¨¨R°!©V¨W¨W¬Ð6Ð6ÈÈTÈ
Ñ€J�	å�*ÑÔ€DÝˆt‰9Œ9€CÝ�‰JŒJ€Eà
ˆe‚|€|ØˆØ˜‘ˆˆàˆØˆà�ÒÐØ�W�f�WŒ~�~¨j¸&ÑAÔAÐAÐAà�V˜F V™OÐ+Ô,­n¸YÈÑ.OÔ.OÐOÐOr   )Nr<   NNr=   N)NN)r  )Útypingr   r   r   r   r"   r7   r;   ru   rƒ   rŽ   rÍ   r–   r   Úintr_   rš   r    ra   r¥   r®   rµ   rº   r¿   rÂ   rÊ   rÎ   rÓ   rç   r  r  r&   r   r   ú<module>r"     s!  ðà .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð6ð 6ð 6ðqð qð qð$ð ð ð^:ð ^:ð ^:ð ^:ð@0ð 0ð 0ð 0ðEð Eð Eð( /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .àˆÐÑÔ€ð	�ð 	˜ð 	ð 	ð 	ð 	ð�ð ˜˜e C¨ HœoÔ.ð ð ð ð ð";�cð ; $ u¨S°#¨X¤Ô"7ð ;¸Cð ;ð ;ð ;ð ;ð ð ¨ð ð ð ð ð
	˜ð 	 ð 	¨3ð 	°3ð 	ð 	ð 	ð 	ð! #ð !¨3ð !°Cð !¸Cð !ð !ð !ð !ð˜Cð ¨¨U°3¸°8¬_Ô(=ð ÀSð ÈSð ð ð ð ð3˜ð 3 cð 3¨cð 3ð 3ð 3ð 3ð Cð ¨Cð ð ð ð ð˜#ð  T¨#¨s¨(¤^ð ¸ð ð ð ð ð #ð ¨T°#¬Yð ¸3ð ð ð ð ð˜ð  ð ð ð ð ð!6Ø�CŒyð!6àð!6ð ð!6ð ˆ4�Œ9�cˆ>Ôð	!6ð !6ð !6ð !6ðT Ø%6ðcð cØ�CŒyðcàðcð �CŒyðcð ð	cð
 ðcð ˜�u˜c�zÔ"ðcð ˆ4�Œ9�cˆ>Ôðcð cð cð cðT ðPð PØ�Œ9ðPà
ðPð ðPð ˆ4�Œ9�cˆ>Ôð	Pð Pð Pð Pð Pð Pr   