ó
    �M§j   ã                   óÀ  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrSrSr\ R                  S:H  r
\
(       a!  S\ R                  R                  SSS5       S3O S\ R                  R                  SS	S
5       S3rS\SS.S\\ S3S.S\ R                  R                  SS5      SS.S\
(       a  S
OSSS.S.rSr " S S5      rS rS rS rS rS rS\S jrS rS  rS! rS" rS# rS\S$ jrS% rS& rS' rS( r S) r!S* r"S+ r#S, r$S- r%S. r&S/ r'\(S0:X  Ga  \&" 5         \RR                  " 5       r*\*RW                  S1/ S2QS39  \*RW                  S4S5S6S79  \*RW                  S8S9S:S;9  \*RY                  5       r-\" 5       r.\-R^                  S<:X  a�  \" 5       r0\0Rc                  5       r2\2(       a$  \0Rg                  5       Ri                  \25      (       d  \Rj                  " S=5        \0Rg                  5       \2   r6\7" S>\6S?    S@\6SA    35        \Rj                  " S 5        \-R^                  SB:X  a  \" 5         \Rj                  " S 5        \-R^                  SC:X  a  \"" 5         \Rj                  " S 5        \" 5       u  r8r9\" \8\95      r:\.SD   \:   r;\-R^                  SE:X  aJ  \7" SF\8 SG\9 SH35        \-Rx                  (       a  \" \-Rz                  \.\:5        g\" \-Rz                  \.\:5        g\-R^                  SI:X  Ga#  \" 5       r0\0R}                  5       r?\0Rg                  5       \?   r6SJr@\ R                  Rƒ                  SK5      (       d  \7" SL5        \'" 5         SMr@O„\7" SN5         \R„                  " / SOQSP\R†                  SQ9R‰                  5       rE \RŒ                  " SRSS/SMST9  \R„                  " / SOQSP\R†                  SQ9R‰                  5       rG\E\G:w  d  \E(       d  SMr@\@(       a1  \7" SW5        \\6S?      SE   rI\IR•                  \6SA   SX9rK\" \K SY35        g\7" SZ5        g\-R^                  S[:X  a	  \#" \.5        ggg!   SrE N±= f! \R�                   a    \7" SU5        \7" SV5        \'" 5         SMr@ N�f = f)]é    Nzsetup_config.jsonz	envs.jsonÚntÚ"z{dir}ÚScriptsz
python.exeÚbinÚpythonz%uv venv --seed --python {ver} "{dir}"zBuv pip install --index-strategy unsafe-best-match --python "{dir}")ÚcreateÚrunÚinstallz"{sys_py}" -m venv "{dir}"z -m pip installz'conda create -y -p "{dir}" python={ver}z conda run -p "{dir}" pip installÚ Úpython3zpip install)ÚuvÚvenvÚcondaÚnoneaÔ  
import sys
import importlib
import importlib.metadata

pkgs = ['torch', 'triton', 'sageattention', 'spas_sage_attn', 'flash_attn']
res = []
try:
    res.append(f"python={sys.version.split()[0]}")
except:
    res.append("python=Unknown")

for p in pkgs:
    try:
        ver = importlib.metadata.version(p)
        res.append(f"{p}={ver}")
    except importlib.metadata.PackageNotFoundError:
        try:
            # Fallback to __version__
            m = importlib.import_module(p)
            ver = getattr(m, '__version__', 'Installed')
            res.append(f"{p}={ver}")
        except ImportError:
            res.append(f"{p}=Missing")
    except Exception:
        res.append(f"{p}=Error")
print("||".join(res))
c                   óJ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)ÚEnvsManageréC   c                 ó8   • S 0 S.U l         U R                  5         g )N)ÚactiveÚenvs)ÚdataÚload©Úselfs    Ú-C:\Users\johnn\OneDrive\Documents\AI\setup.pyÚ__init__ÚEnvsManager.__init__D   s   € Ø#¨RÑ0ˆŒ	Ø�	‰	�ó    c                 ó  • [         R                  R                  [        5      (       a6   [	        [        S5       n[
        R                  " U5      U l        S S S 5        g g ! , (       d  f       g = f!   [        S[         S35         g = f)NÚrz[!] Warning: z corrupted. Starting fresh.)	ÚosÚpathÚexistsÚ	ENVS_FILEÚopenÚjsonr   r   Úprint©r   Úfs     r   r   ÚEnvsManager.loadH   sc   € Ü�7‰7�>‰>œ)×$Ñ$ðNÜœ) SÔ)¨QÜ $§	¢	¨!£�D”I÷ *Ð)ð %ç)Õ)ûðNÜ˜¤i [Ð0KÐLÖMús(   ªA1 ºA ÁA1 Á 
A.Á*A1 Á.A1 Á1Bc                 ó˜   • [        [        S5       n[        R                  " U R                  USS9  S S S 5        g ! , (       d  f       g = f)NÚwé   ©Úindent)r%   r$   r&   Údumpr   r(   s     r   ÚsaveÚEnvsManager.saveP   s.   € Ü”)˜SÔ! QÜ�IŠI�d—i‘i ¨1Ò-÷ "×!Ö!ús	   ‘!;»
A	c                 ó8   • U R                   R                  S5      $ )Nr   )r   Úgetr   s    r   Ú
get_activeÚEnvsManager.get_activeT   s   € Ø�y‰y�}‰}˜XÓ&Ð&r   c                 ó¢   • XR                   S   ;   a.  XR                   S'   U R                  5         [        SU S35        g [        SU S35        g )Nr   r   z[*] 'z ' is now the active environment.ú[!] Environment 'ú' not found.)r   r1   r'   )r   Únames     r   Ú
set_activeÚEnvsManager.set_activeW   sJ   € Ø—9‘9˜VÑ$Ó$Ø"&�I‰I�hÑØ�I‰IŒKÜ�E˜$˜Ð?Ð@ÕAäÐ% d V¨<Ð8Õ9r   c                 óî  • U(       a”  [         R                  " 5       n[         R                  R                  U5      n [         R                  R	                  XT5      nUR                  S5      (       d  US:X  a  UnO#[         R                  R                  SU5      nOSnX'S.U R                  S   U'   U R                  S   (       d  XR                  S'   U R                  5         g ! [         a    Un NUf = f)Nz..Ú.r   )Útyper"   r   r   )
r!   Úgetcwdr"   ÚabspathÚrelpathÚ
startswithÚjoinÚ
ValueErrorr   r1   )r   r:   r?   r"   ÚcwdÚabs_pathÚrel_pathÚ
final_paths           r   Úadd_envÚEnvsManager.add_env_   s½   € ÞÜ—)’)“+ˆCÜ—w‘w—‘ tÓ,ˆHð&ÜŸ7™7Ÿ?™?¨8Ó9�Ø×&Ñ& t×,Ñ,°¸C³Ø!)‘Jä!#§¡§¡¨c°8Ó!<‘Jð ˆJà+/Ñ"Dˆ�	‰	�&Ñ˜$Ñà�y‰y˜×"Ø"&�I‰I�hÑØ�	‰	�øô ó &Ø%’
ð&ús   ½=C% Á; C% Ã%C4Ã3C4c                 óº  • XR                   S   ;   Ga#  U R                   S   U   nUS   n[        R                  R                  U5      (       aH  US   S:w  a?   [	        SU 35        US   S:X  a  [        SU S35        O[        R                  " U5         U R                   S   U	 U R                   S
   U:X  al  S U R                   S
'   [        U R                   S   R                  5       5      nU(       a%  US   U R                   S
'   [	        SUS    S35        O[	        S5        U R                  5         g g ! [         a  n[	        S	U 35         S nAN¾S nAff = f)Nr   r"   r?   r   z[*] Deleting directory: r   zconda env remove -p "z" -yz[!] Error removing directory: r   r   z$[*] Active environment switched to 'ú'.z[*] No environments left.)r   r!   r"   r#   r'   Úrun_cmdÚshutilÚrmtreeÚ	ExceptionÚlistÚkeysr1   )r   r:   Úentryr"   ÚerS   s         r   Ú
remove_envÚEnvsManager.remove_envt   sB  € Ø—9‘9˜VÑ$Ô$Ø—I‘I˜fÑ% dÑ+ˆEØ˜‘=ˆDä�w‰w�~‰~˜d×#Ñ#¨¨f©¸Ó(?ð@ÜÐ4°T°FÐ;Ô<Ø˜V‘}¨Ó/Ü Ð#9¸$¸¸uÐ!EÕFäŸš dÕ+ð —	‘	˜&Ñ! $Ð'Ø�y‰y˜Ñ" dÓ*Ø&*�—	‘	˜(Ñ#Ü˜DŸI™I fÑ-×2Ñ2Ó4Ó5�ÞØ*.¨q©'�D—I‘I˜hÑ'ÜÐ@ÀÀaÁÀ	ÈÐLÕMäÐ5Ô6Ø�I‰I�Kð/ %øô !ó @ÜÐ:¸1¸#Ð>×?Ñ?ûð@ús   Á&D8 Â D8 Ä8
EÅEÅEc                 ó    • U R                   S   $ )Nr   ©r   r   s    r   Ú	list_envsÚEnvsManager.list_envsŽ   s   € Ø�y‰y˜Ñ Ð r   c                 óv  • U R                  5       nU(       d!  [        S5        [        R                  " S5        U R	                  5       n[        U5      S:X  a  [        UR                  5       5      S   $ [        S5        [        UR                  5       5      n[        U5       H-  u  pEXR:X  a  SOSn[        US-    SU SU S	X   S
    S35        M/     [        SU 35        [        S5      R                  5       nUS:X  a  U$  [        U5      S-
  nSUs=::  a  [        U5      :  a  O  U$ X8   $  U$ !    U$ = f)z8Intelligently determine which env to use for operations.z4[!] No environments found. Please run install first.é   r   z 
Multiple environments detected:Ú*Ú ú. [ú] ú (r?   Ú)z	Default: z8Select environment (Number) or Press Enter for Default: r   )rZ   r'   ÚsysÚexitr5   ÚlenrR   rS   Ú	enumerateÚinputÚstripÚint)	r   r   r   rS   ÚiÚkÚmarkerÚchoiceÚidxs	            r   Úresolve_target_envÚEnvsManager.resolve_target_env‘   s2  € à�~‰~ÓˆÞÜÐHÔIÜ�HŠH�QŒKà—‘Ó"ˆäˆt‹9˜‹>Ü˜Ÿ	™	›Ó$ QÑ'Ð'äÐ1Ô2Ü�D—I‘I“KÓ ˆÜ˜d–O‰DˆAØ›K‘S¨SˆFÜ�Q�q‘S�E˜˜V˜H B q c¨¨D©G°F©OÐ+<¸AÐ>Ö?ñ $ô 	�	˜&˜Ð"Ô#ÜÐQÓR×XÑXÓZˆà�R‹<ØˆMð	Ü�f“+ ‘/ˆCØ�CÕ#œ#˜d›)Õ#ð ˆð ‘yÐ ð $ð ˆøð	ØØˆús   Ä&D3 Ä,D3 Ä3D8rY   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r1   r5   r;   rJ   rV   rZ   rp   Ú__static_attributes__© r   r   r   r   C   s0   † òòNò.ò'ò:òò*ò4!õr   r   c                  ó&  • [         R                  R                  [        5      (       d)  [	        S[         S35        [
        R                  " S5        [        [        S5       n [        R                  " U 5      sS S S 5        $ ! , (       d  f       g = f)NzError: z not found.r]   r    )
r!   r"   r#   ÚCONFIG_PATHr'   rd   re   r%   r&   r   )r)   s    r   Úload_configrz   °   sQ   € Ü�7‰7�>‰>œ+×&Ñ&Ü�œ�} KÐ0Ô1Ü�Š�ŒÜ	Œk˜3Ô	 1¬T¯YªY°q«\×	×	×	ús   Á"BÂ
Bc                  ó@  • [         R                  S:X  ao   [        R                  " SS/S[        R                  S9n U R                  S5       H2  nSU;   d  M  UR                  SS	5      S	   R                  5       nUS
4s  $    g [        R                  " / SQS[        R                  S9R                  5       nUS4$ !    g= f!    O= f[        (       a�   [        R                  " SSS[        R                  S9nUR                  SS5      R                  5       R                  S5      S   R                  5       nSU;   d  SU;   a  US4$ US4$ !    g= f [        R                  " SSS[        R                  S9nSU;   a  US4$ SU;   d  SU;   a  US4$  g!    g= f)NÚdarwinÚsystem_profilerÚSPDisplaysDataTypeúutf-8©ÚencodingÚstderrÚ
ÚChipÚ:r]   ÚAPPLE)zApple Silicon (MPS)r†   )ú
nvidia-smiz--query-gpu=namez--format=csv,noheaderÚNVIDIAz(wmic path win32_VideoController get nameT©Úshellr�   r‚   ÚNamer   r   ÚRadeonÚAMDÚINTELzlspci | grep -i vgazAdvanced Micro Devices)ÚUnknownÚUNKNOWN)	rd   ÚplatformÚ
subprocessÚcheck_outputÚDEVNULLÚsplitri   ÚIS_WINÚreplace)ÚoutÚliner:   s      r   Úget_gpu_inforš   ¶   sÄ  € Ü
‡|�|�xÓð	Ü×)Ò)Ø"Ð$8Ð9Ø Ü!×)Ñ)ñˆCð
 Ÿ	™	 $ž�Ø˜T•>ØŸ:™: c¨1Ó-¨aÑ0×6Ñ6Ó8�DØ ˜=Ò(ñ (ð .ðÜ×&Ò&ÚGØÜ×%Ñ%ñ
÷ ‰%‹'ð	 	ð
 �Xˆ~Ðøð	ØØ-ûð ‰Dúç‚vð
	Ü×*Ò*Ø:ØØ Ü!×)Ñ)ñ	ˆDð —<‘< ¨Ó+×1Ñ1Ó3×9Ñ9¸$Ó?ÀÑB×HÑHÓJˆDØ˜4Ó 5¨D£=¸¸u¸Ð2DØ˜�=Ð øØ�ð  úð		Ü×*Ò*Ø%ØØ Ü!×)Ñ)ñ	ˆDð ˜4Ó¨¨h¨Ð!6Ø˜‹}Ð 8¸DÓ @ÈÈuÈÐBTÐ @ð  øð 	�àúsH   –>B= Á(B= ÂB= Â7C Â=CÃCÃA4E ÅE ÅEÅ.F ÆF ÆFc                 ó6  ^• U R                  5       mUS:X  a  gUS:X  a#  ST;   a  gST;   a  gST;   a  g	S
T;   d  ST;   a  ggUS:X  aR  [        U4S jS 5       5      (       a  g[        U4S jS 5       5      (       a  g[        U4S jS 5       5      (       a  ggg)Nr†   ÚMPSrˆ   Ú50ÚRTX_50Ú40ÚRTX_40Ú30ÚRTX_30Ú20ÚQUADROÚRTX_20ÚGTX_10r�   c              3   ó,   >#   • U  H	  oT;   v •  M     g 7f©Nrw   ©Ú.0ÚxÚgs     €r   Ú	<genexpr>Ú"get_profile_key.<locals>.<genexpr>ô   s   øé € Ð@Ò?˜!�AŽvÒ?ùó   ƒ)Ú7600Ú7700Ú7800Ú7900ÚAMD_GFX110Xc              3   ó,   >#   • U  H	  oT;   v •  M     g 7fr¨   rw   r©   s     €r   r­   r®   õ   ó   øé € Ð9Ò8˜!�AŽvÒ8ùr¯   )Ú7000ÚZ1ÚPHOENIXÚAMD_GFX1151c              3   ó,   >#   • U  H	  oT;   v •  M     g 7fr¨   rw   r©   s     €r   r­   r®   ö   r¶   r¯   )Ú8000ÚSTRIXÚ1201ÚAMD_GFX1201)ÚupperÚany)Úgpu_nameÚvendorr¬   s     @r   Úget_profile_keyrÄ   é   s˜   ø€ Ø�‰Ó€AØ�ÓØØ�ÓØ�1‹9˜XØ�1‹9˜XØ�1‹9˜XØ�1‹9˜ A›¨hØØ	�5‹ÜÔ@Ñ?Ó@×@Ñ@ÈÜÔ9Ñ8Ó9×9Ñ9À-ÜÔ9Ñ8Ó9×9Ñ9À-ØØr   c                  óJ   • [         R                  S:X  a  g[        (       a  S$ S$ )Nr|   ÚmacosÚwinÚlinux)rd   r‘   r–   rw   r   r   Ú
get_os_keyrÉ   ú   s    € Ü
‡|�|�xÓØß’Fˆ5Ð' Ð'r   c                 ób   • [        U [        5      (       a  U R                  [        5       5      $ U $ r¨   )Ú
isinstanceÚdictr4   rÉ   )Ú	cmd_entrys    r   Úresolve_cmdrÎ   ÿ   s&   € Ü�)œT×"Ñ"Ø�}‰}œZ›\Ó*Ð*ØÐr   c                 óÞ  • U (       d  g SU ;   ag  [         (       d\  [        SU  35        [        R                  R	                  5       nU(       a  UR                  U5        [        R                  " U SSUS9  g [        SU  35        [        R                  R	                  5       nU(       a.  UR                  5        H  u  p4[        SU SU 35        XBU'   M     [        R                  " U SSUS9  g )Nz&&z
>>> Running (Shell): T)rŠ   ÚcheckÚenvz
>>> Running: z    [ENV SET] Ú=)	r–   r'   r!   ÚenvironÚcopyÚupdater’   r	   Úitems)ÚcmdÚenv_varsÚ
custom_envrl   Úvs        r   rN   rN     s¼   € Þ�àˆsƒ{Ÿ6š6ÜÐ'¨ uÐ-Ô.Ü—Z‘Z—_‘_Ó&ˆ
Þ�Z×&Ñ& xÔ0Ü�Š�s $¨d¸
ÒCØä	ˆO˜C˜5Ð
!Ô"Ü—‘—‘Ó"€JÞØ—N‘NÖ$‰DˆAÜ�N 1 # Q q cÐ*Ô+Ø�q‹Mñ %ô ‡N‚N�3˜d¨$°JÓ?r   c                 óh   • U(       d  g [        SU;   a  UR                  U S95        g U  SU 35        g )Nz{pip})Úpipr_   )rN   Úformat)rÜ   r×   s     r   Úrun_pip_componentrÞ     s/   € Þ�Ü 7¨c£>ˆC�J‰J˜3ˆJÐÕF¸#¸¸aÀ¸u°~ÕFr   c                 ó¢  • Sn[         R                  R                  U5      (       a©  [         R                  R                  U5      (       a„  [         R                  " U5       Hi  n[         R                  R                  XS5      n[         R                  R                  U5      (       d  MI  [        SU S35        [        U  SU S35        Mk     g g g )NÚpluginszrequirements.txtz)
[*] Installing requirements for plugin 'ú'...z -r "r   )	r!   r"   r#   ÚisdirÚlistdirrD   Úisfiler'   rN   )Úpip_cmdÚplugins_dirrT   Ú
plugin_reqs       r   Úinstall_plugin_requirementsrè     s—   € Ø€KÜ	‡w�w‡~�~�k×"Ñ"¤r§w¡w§}¡}°[×'AÑ'AÜ—Z’Z Ö,ˆEÜŸ™Ÿ™ kÐ:LÓMˆJÜ�w‰w�~‰~˜j×)Ó)ÜÐBÀ5À'ÈÐNÔOÜ˜7˜) 6¨*¨°RÐ8Ö9ò	 -ð (BÐ"r   c                 óÞ  • US   nUS   n[         U   nUS   R                  US9R                  S5      nUS[        /n [        R
                  " US[        R                  S9nUR                  5       R                  S	5       Vs/ s H  oˆR                  S
5      PM     sn V	V
s0 s H  u  pšXš_M	     nn	n
X;S'   X+S'   U$ s  snf s  sn
n	f ! [         a  n[        U5      X#S.s S nA$ S nAff = f)Nr?   r"   r	   ©Údirr   z-cr   r€   z||rÒ   )Úerrorr?   r"   )
ÚENV_TEMPLATESrÝ   ri   ÚVERSION_CHECK_SCRIPTr’   r“   r”   r•   rQ   Ústr)r:   Úenv_dataÚenv_typeÚdir_namerT   Úpy_execÚfull_cmdÚoutputr«   rl   rÚ   r   rU   s                r   Úget_env_detailsrö   $  sð   € Ø˜Ñ€HØ˜Ñ€HÜ˜(Ñ#€Eà�E‰l×!Ñ! hÐ!Ð/×5Ñ5°cÓ:€GØ˜Ô3Ð4€HðEÜ×(Ò(¨¸GÌJ×L^ÑL^Ñ_ˆØ8>¿¹»×8LÑ8LÈTÔ8RÓ!SÒ8R°1§'¡'¨#¦,Ñ8RÒ!SÔTÒ!S™˜�’Ñ!SˆÑTØˆV‰ØˆV‰Øˆùò "TùÓTøô ó EÜ˜Q›¨ÑDÕDûðEús<   ¿AC
 ÂB?ÂC
 Â$CÂ2C
 Â?C
 Ã

C,ÃC'Ã!C,Ã'C,c                  óF  • [        5       n [        S5        [        SS 5        [        S5        U R                  5       nU R                  5       nU(       d  [        S5        [        S5        g [        SS SS	S
 SSS SSS SSS SSS SSS SSS 35        [        S5        UR	                  5        HÌ  u  p4[        X45      nX2:X  a  SOSnSU SU 3nSU;   a  [        US SUS   S
 S35        M?  [        US SUS   S
 SUR                  SS5      S SUR                  SS5      S SUR                  SS5      S SUR                  S S5      S SUR                  S!S5      S SUR                  S"S5      S 35        MÎ     [        S5        [        S#5        [        S$5        g )%Nú[
==========================================================================================z!INSTALLED ENVIRONMENTS & VERSIONSú^90úZ==========================================================================================z   No environments installed.ÚNAMEú<15z | ÚTYPEz<5ÚPYTHONz<8ÚTORCHÚTRITONz<9ÚSAGEz<10ÚSPARGEÚFLASHúZ------------------------------------------------------------------------------------------r^   r_   Ú[ra   rì   r?   z | [Error reading environment]r   Ú?ÚtorchÚtritonÚsageattentionÚspas_sage_attnÚ
flash_attnz * = Active Environmentz[==========================================================================================
)r   r'   rZ   r5   rÖ   rö   r4   )Úmanagerr   r   r:   r   Údetailsrm   Údisplay_names           r   Úshow_statusr  5  sã  € Ü‹m€GÜ	ˆ-ÔÜ	Ð0°Ð5Ô7Ü	ˆ&„Mà×ÑÓ€DØ×ÑÓ!€FæÜÐ-Ô.ÜˆfŒØä	ˆV�CˆL˜˜F 2˜; c¨(°2¨°c¸'À#¸ÀcÈ(ÐSUÈÐVYÐZ`ÐadÐYeÐehÐiqÐruÐhvÐvyð  {Bð  CFð  zGð  Hô  IÜ	ˆ(„Oà—j‘j–l‰
ˆÜ! $Ó-ˆØ›‘¨CˆØ˜6˜( " T FÐ+ˆà�gÓÜ�\ #Ð& c¨$¨v©,°rÐ):Ð:XÐYÔZÙä�˜cÐ" # d¨6¡l°2Ð%6°cØ—‘˜X cÓ*¨2Ð.¨cØ—‘˜W SÓ)¨#Ð.¨cØ—‘˜X cÓ*¨2Ð.¨cØ—‘˜_¨SÓ1°#Ð6°cØ—‘Ð-¨cÓ2°3Ð7°sØ—‘˜\¨#Ó.¨sÐ3ð5ö 	6ñ #ô" 
ˆ(„OÜ	Ð#Ô%Ü	ˆ-Õr   c                 ó0  • [         U   nU
S   S   U   S   n[        SU  SU S35        US:w  aj  US:X  aB  S	R                  UR                  S	5      S S
 5      n[        (       a
  SU SU S3nO,SU SU S3nO"US   R                  UU[        R                  S9nW(       a  [        U5        US   R                  US9n[        SU
S   S   U   S    S35        [        U
S   S   U   S   5      n[        U SU 35        [        S5        [        U S35        U(       a.  [        U
S   S   U   S   5      nU(       a  [        U SU 35        U(       aŠ  [        U
S   S   U   S   5      nUR                  S5      (       d  UR                  S5      (       a  [        U SU 35        O6US:X  d  US:X  a#  [        (       d  SU S 3OS!n[        U U 35        OUS":X  a   U(       a*  [        U
S   S#   U   S   5      nU(       a  [        UU5        U(       a.  [        U
S   S$   U   S   5      nU(       a  [        U SU 35        U	 HA  nUU
S   S%   ;   d  M  [        U
S   S%   U   S   5      nU(       d  M1  [        U SU 35        MC     [        U5        g )&NÚ
componentsr   Úverz
[1/3] Preparing Environment: rb   ú)...r   r   r>   é   zpy -z
 -m venv "r   r   )r  rë   Úsys_pyr
   rê   z
[2/3] Installing Torch: r  Úlabelú...r×   r_   z*
[3/3] Installing Requirements & Extras...ú -r requirements.txtr  ÚsageÚhttpr	  r   z. "z/bin/activate" && r   r   ÚspargeÚflashÚkernels)rí   r'   rD   r•   r–   rÝ   rd   Ú
executablerN   rÎ   rC   rÞ   rè   )Úenv_namerñ   Úenv_pathÚpy_kÚtorch_kÚtriton_kÚsage_kÚsparge_kÚflash_kÚkernel_listÚconfigÚtemplateÚtarget_py_verÚpy_ver_shortÚ
create_cmdrÜ   Ú	torch_cmdr×   Úactrl   s                       r   Úinstall_logicr/  [  sÙ  € Ü˜XÑ&€HØ˜<Ñ(¨Ñ2°4Ñ8¸Ñ?€Mä	Ð+¨H¨:°R¸°zÀÐ
FÔGà�6ÓØ�vÓØŸ8™8 M×$7Ñ$7¸Ó$<¸R¸aÐ$@ÓAˆLçŠvØ# L >°¸X¸JÀbÐI‘
à% l ^°;¸x¸jÈÐK‘
à! (Ñ+×2Ñ2Ø!ØÜ—~‘~ð 3ð ˆJö Ü�
Ôà
�9Ñ
×
$Ñ
$¨Ð
$Ð
2€Cä	Ð& v¨lÑ';¸GÑ'DÀWÑ'MÈgÑ'VÐ&WÐWZÐ
[Ô\Ü˜F <Ñ0°Ñ9¸'ÑBÀ5ÑIÓJ€IÜˆsˆe�1�Y�KÐ Ô!ä	Ð7Ô9ÜˆsˆeÐ'Ð(Ô)æÜ˜& Ñ.¨xÑ8¸ÑBÀ5ÑIÓJˆÞ”˜3˜%˜q  ˜Ô'æÜ˜& Ñ.¨vÑ6°vÑ>¸uÑEÓFˆØ�>‰>˜&×!Ñ! S§^¡^°O×%DÑ%DÜ�s�e˜1˜S˜E�NÕ#à˜6Ó! X°Ó%5ßBHÂ&˜˜X˜JÐ&9Ñ:Èb�Ü˜3˜% ˜u˜Õ&Ø˜WÓ$ØæÜ˜& Ñ.¨xÑ8¸ÑBÀ5ÑIÓJˆÞÔ! # sÔ+æÜ˜& Ñ.¨wÑ7¸Ñ@ÀÑGÓHˆÞ”˜3˜%˜q  ˜Ô'ãˆØ��|Ñ$ YÑ/Õ/Ü˜f \Ñ2°9Ñ=¸aÑ@ÀÑGÓHˆCßˆs”G˜s˜e 1 S E˜NÖ+ñ ô
   Õ$r   c                 ó(  • [        SU  S35        [        UR                  5       5      n[        U5       H(  u  pEXR:X  a  SOSn[        US-    SX   S    U 35        M*     [	        S5      nUS:X  a	  U(       a  U$ U[        U5      S-
     $ !   Us $ = f)	Nz
--- ú ---z [RECOMMENDED FOR YOUR GPU]r   r]   ú. r  z'Select option (Enter for Recommended): )r'   rR   rS   rg   rh   rj   )ÚtitleÚoptionsÚrecommended_keyrS   rk   rl   Úrecrn   s           r   Úmenur7  š  s›   € Ü	ˆF�5�'˜Ð
ÔÜ�—‘“Ó€DÜ˜$–‰ˆØ/0Ó/CÑ+ÈˆÜ��1‘��R˜™
 7Ñ+Ð,¨S¨EÐ2Ö3ñ  ô Ð<Ó>€FØ�ƒ|ž°Ð)?Ø”S˜“[ ‘]Ñ#Ð	#øØ"�?Ò"ús   Á:B ÂBc                 óð  • [        5       n[        X!5        U S:w  a  SU  3OSn[        SU  S35        [        SU S35      R	                  5       nU(       d  Un[
        R                  " 5       nU S:w  a  [
        R                  R                  Xe5      OSnXSR                  5       ;   aA  [        S	U S
35        [        S5      R                  5       nUS:w  a  g UR                  U5        Oo[
        R                  R                  U5      (       aK  U S:w  aE  [        SU S35        [        S5      R                  5       nUS:w  a  g [        R                  " U5        [        S5        [        S5        [        S5        [        S5        [        S5      R	                  5       n	U	S:X  a¯  US   U   n
[        SUS   S   U
S   5      n[        SUS   S   U
S   5      n[        SUS   S   U
S   5      n[        SUS   S   U
S   5      n[        S US   S!   U
R!                  S!5      5      n[        S"US   S#   U
S#   5      nU
S$   n[#        XPX{XÍXïUUU5        O™U	S%:X  aJ  US   S&   n[#        XPUUS   US   US   US   UR!                  S!5      UR!                  S#5      US$   U5        OIUS   U   n[#        XPUUS   US   US   US   UR!                  S!5      UR!                  S#5      US$   U5        UR%                  XPU5        ['        UR                  5       5      S':”  a6  [        S(U S)35      R                  5       nUS*:w  a  UR)                  U5        g g [        S+U S,35        UR)                  U5        g !    GN= f)-Nr   Úenv_Úsystemz
--- Configuration for r1  z,Enter a name for this environment (Default: ú): r   z
[!] Warning: Environment 'z' already exists in registry.zFDo you want to overwrite it? (This will delete the old folder) [y/N]: Úyz
[!] Warning: Directory 'z' exists but is not registered.z0Do you want to overwrite this directory? [y/N]: z
--- Select Install Mode ---z!1. Autoselect (Based on your GPU)z2. Manual Selectionz3. Use Latestz"Select option (1-3) [Default: 1]: Ú2Úgpu_profilesúPython Versionr  r   úTorch Versionr  ÚTritonr  úSage Attentionr  úSparge Attentionr  úFlash Attentionr  r  Ú3rž   r]   z
Do you want to make 'z!' the active environment? [Y/n]: Únz
[*] 'z-' is the only environment, setting as active.)r   Úcreate_wgp_configr'   rh   ri   r!   r@   r"   rD   rZ   ÚlowerrV   r#   rO   rP   r7  r4   r/  rJ   rf   r;   )rñ   r(  Údetected_keyr  Údefault_namer:   rF   r"   rn   ÚmodeÚbaser!  r"  r#  r$  r%  r&  r  Úps                      r   Údo_install_interactiverN  ¥  s¯  € Ü‹m€GÜ�lÔ+à(0°FÓ(:�T˜(˜Ñ$À€LÜ	Ð$ X J¨dÐ
3Ô4ÜÐ?À¸~ÈSÐQÓR×XÑXÓZ€DÞ˜�ä
�)Š)‹+€CØ&.°&Ó&8Œ2�7‰7�<‰<˜Ô"¸b€Dà× Ñ Ó"Ó"ÜÐ,¨T¨FÐ2OÐPÔQÜÐ_Ó`×fÑfÓhˆØ�S‹=˜&Ø×Ñ˜4Õ Ü	�‰�‰˜×	Ñ	 (¨fÓ"4ÜÐ*¨4¨&Ð0OÐPÔQÜÐIÓJ×PÑPÓRˆØ�S‹=˜&Ü�]Š]˜4Ô ô 
Ð
)Ô*Ü	Ð
-Ô.Ü	Ð
Ô Ü	ˆ/ÔäÐ5Ó6×<Ñ<Ó>€Dàˆsƒ{Ø�nÑ% lÑ3ˆÜÐ$ f¨\Ñ&:¸8Ñ&DÀdÈ8ÁnÓUˆÜ�¨¨|Ñ(<¸WÑ(EÀtÈGÁ}ÓUˆÜ˜ &¨Ñ"6°xÑ"@À$ÀxÁ.ÓQˆÜÐ&¨¨|Ñ(<¸VÑ(DÀdÈ6ÁlÓSˆÜÐ*¨F°<Ñ,@ÀÑ,JÈDÏHÉHÐU]ÓL^Ó_ˆÜÐ(¨&°Ñ*>¸wÑ*GÈÈgÉÓWˆØ�y‘/ˆä�d d°'ÀVÐW^Ð`gÐioÕpà	�‹Ø�>Ñ" 8Ñ,ˆÜ�d d¨A¨h©K¸¸7¹ÀQÀxÁ[ÐRSÐTZÑR[Ð]^×]bÑ]bÐckÓ]lÐno×nsÑnsÐt{Ón|Ð~ð  AJñ  Kð  MSõ  	Tà�>Ñ" <Ñ0ˆÜ�d d¨A¨h©K¸¸7¹ÀQÀxÁ[ÐRSÐTZÑR[Ð]^×]bÑ]bÐckÓ]lÐno×nsÑnsÐt{Ón|Ð~ð  AJñ  Kð  MSô  	Tà‡O�O�D DÔ)ä
ˆ7×ÑÓÓ !Ó#ÜÐ0°°Ð6WÐXÓY×_Ñ_ÓaˆØ�S‹=Ø×Ñ˜tÕ$ð ô 	�˜�vÐJÐKÔLØ×Ñ˜4Õ øðI 	’ús   ÅM0 Í0M5c                 óª  • [        5       n[        X!5        U S:w  a  SU  3OSn[        R                  " 5       nU S:w  a  [        R                  R                  XT5      OSnXCR                  5       ;   a  UR                  U5        O@[        R                  R                  U5      (       a  U S:w  a  [        R                  " U5        [        SU S35        US   U   n[        X@XgS   US	   US
   US   UR                  S5      UR                  S5      US   U5        UR                  X@U5        UR                  U5        [        SU S35        g !    NŽ= f)Nr   r9  r:  r   z3
[*] Starting Automatic Install (Hardware Profile: r  r>  r   r  r  r  r  r  r  z"
[*] Automatic Install Complete! 'z' is now active.)r   rG  r!   r@   r"   rD   rZ   rV   r#   rO   rP   r'   r/  r4   rJ   r;   )rñ   r(  rI  r  r:   rF   r"   rM  s           r   Údo_install_autorP  á  sD  € Ü‹m€GÜ�lÔ+à (¨FÓ 2ˆT�(�Ñ¸€DÜ
�)Š)‹+€CØ&.°&Ó&8Œ2�7‰7�<‰<˜Ô"¸b€Dà× Ñ Ó"Ó"Ø×Ñ˜4Õ Ü	�‰�‰˜×	Ñ	 (¨fÓ"4Ü�]Š]˜4Ô ô 
Ð@ÀÀÈdÐ
SÔTØˆ~Ñ˜|Ñ,€Aä�$ $¨(©°Q°w±ZÀÀ8ÁÈaÐPVÉiÐYZ×Y^ÑY^Ð_gÓYhÐjk×joÑjoÐpwÓjxÐz{ð  }Fñ  {Gð  IOô  Pà‡O�O�D DÔ)Ø×Ñ�tÔÜ	Ð/°¨vÐ5EÐ
FÕGøð 	‘ús   Â.E ÅEc                  óX  • [        5       n U R                  5       nU(       d  [        S5        [        S5        g U R	                  5       R                  U5      nU(       d  [        SU S35        g US   nUS   n[        SU S35        [        S	5        [        (       Ga0  US
;   a<  [        R                  R                  USS5      n[        R                  " SU S35        g US:X  aÑ  Sn[        R                  " S5      (       d–  [        R                  R                  SS5      n[        R                  R                  USSS5      [        R                  R                  USSS5      S/nU H+  n	[        R                  R                  U	5      (       d  M)  U	n  O   [        R                  " SU SU S35        g [        R                  " S5        g Sn
US
;   a)  U
S[        R                  R                  USS5       S3-  n
OUS:X  a	  U
SU S3-  n
SU
 S 3n[        R                  " US!S"S#9  g )$Nz>[!] No active environment. Please select or install one first.úPress Enter...z)[!] Could not find environment data for 'rM   r?   r"   z(
[*] Spawning interactive terminal for 'rá   z:[*] (Type 'exit' when you are done to return to the menu)
)r   r   r   zactivate.batzcmd.exe /K "r   r   z	conda.batÚUSERPROFILEr   Ú
Miniconda3ÚcondabinÚ	Anaconda3z,C:\ProgramData\Miniconda3\condabin\conda.batz" activate "z
cmd.exe /Kz/if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
zsource 'r   Úactivatez'
a"  if command -v conda >/dev/null 2>&1; then eval "$(conda shell.bash hook)"; else for base in "$HOME/miniconda3" "$HOME/anaconda3" "/opt/miniconda3" "/opt/anaconda3"; do if [ -f "$base/etc/profile.d/conda.sh" ]; then source "$base/etc/profile.d/conda.sh"; break; fi; done; fi
conda activate 'z$bash --rcfile <(cat << 'EOF_WAN2GP'
zEOF_WAN2GP
)Tz	/bin/bash)rŠ   r  )r   r5   r'   rh   rZ   r4   r–   r!   r"   rD   r’   r	   rO   ÚwhichrÓ   r#   )r  r  rð   Úe_typeÚe_pathÚact_batÚ	conda_batÚuserÚpathsrM  Úrc_cmdÚlinux_shell_cmds               r   Úopen_terminalra  ø  sõ  € Ü‹m€GØ×!Ñ!Ó#€HæÜÐNÔOÜÐÔØà× Ñ Ó"×&Ñ& xÓ0€HÞÜÐ9¸(¸À2ÐFÔGØà�fÑ€FØ�fÑ€Fä	Ð5°h°Z¸tÐ
DÔEÜ	ÐGÔIçƒvØ�^Ó#Ü—g‘g—l‘l 6¨9°nÓEˆGÜ�NŠN˜\¨'¨°!Ð4Õ5Ø�wÓØ#ˆIÜ—<’< ×(Ñ(Ü—z‘z—~‘~ m°RÓ8�ä—G‘G—L‘L  |°ZÀÓMÜ—G‘G—L‘L  {°JÀÓLØCð�ó
 �AÜ—w‘w—~‘~ a×(Ó(Ø$%˜	Ùñ ô �NŠN˜\¨)¨°LÀÀÈÐJÕKä�NŠN˜<Õ(àCˆØ�^Ó#Ø˜¤§¡§¡¨f°e¸ZÓ!HÐ IÈÐMÑM‰FØ�wÓØð#ð $* (¨#ð/ñˆFð BÀ&ÀÈÐWˆÜ�Š�¨d¸{ÓKr   c            	      óà  • [         R                  R                  S5      (       d  [        S5        [	        S5        g [        S5         [
        R                  " / SQS[
        R                  [
        R                  S9  [
        R                  " / SQS	S
9n [        5       nSnU R                  5        HÛ  nUR                  5       nU(       d  M  SU;   a  M$  UR                  S5      nUR                  S5      R                  5       nUR                  S5      (       a  U[        S5      S  nO9UR                  S5      (       a#  SR!                  UR#                  S5      SS  5      nU(       a  US:w  a  UR%                  U5        U(       d  MÙ  UnMÝ     ['        [)        U5      5      nU(       d  [        S5        [	        S5        g [        S5        [+        U5       H$  u  p†Xc:X  a  SOSn	[        US-    SU	 SU 35        M&     [	        SU S35      R                  5       n
U
(       d  g U
nU
R-                  5       (       a+  [/        U
5      S-
  nSUs=::  a  [        U5      :  a  O  OX|   nX³:X  a  [        SU S35        [	        S5        g [        S U S!35         [
        R                  " S"S#U/SSSS$9  [        S%U S35        [	        S5        g ! [         a#  n[        SU 35        [	        S5         S nAg S nAff = f! [
        R0                   Ga¼  nUR2                  (       a  UR2                  R5                  5       OSnS&U;   d  S'U;   Ga5  [        S(U S)35        [        S*5        [        S+5        [        S,5        [        S-5        [        S.5        [	        S/5      R                  5       nUS0:X  aÏ   [        S15        [
        R                  " S"S2S3S4S5U 3/SS69  [
        R                  " S"S#U/SS69  [        S7U S835        [
        R                  " / S9Q5      nUR6                  S:w  a  [        S:5        [        S;5         S nAGN„[        S<5         S nAGN•! [         a  n[        S=U 35         S nA S nAGN·S nAff = fUS>:X  a€   [        S15        [
        R                  " S"S2S3S4S?U 3/SS69  [
        R                  " S"S#U/SS69  [        S@U S35         S nAGN! [         a  n[        SAU 35         S nA S nAGN=S nAff = fUSB:X  ad   [        SC5        [
        R                  " S"S#SDU/SS69  [        S%U S35         S nAGN…! [         a  n[        SEU 35         S nA S nAGN§S nAff = f[        SF5         S nAGNÀ[        SGUR2                  (       a  UR2                  R                  5       O
[9        U5       35         S nAGNS nAf[         a  n[        SHU 35         S nAGN)S nAff = f)INú.gitz1[!] Not a git repository. Cannot switch branches.rR  z,
[*] Fetching latest branches from remote...)ÚgitÚfetchz--pruneT©rÐ   Ústdoutr‚   )rd  Úbranchz-ar   ©r�   ú[!] Git error: r   z->r^   z* zremotes/origin/zremotes/Ú/r  ÚHEADz[!] No branches found.z
--- Available Branches ---r_   r]   r`   ra   z*
Enter number or name of branch (Default: r;  r   z[*] Already on 'rM   z[*] Switching to 'rá   rd  Úcheckout)rÐ   Úcapture_outputÚtextz[*] Successfully switched to 'Úoverwrittenz(please commit your changes or stash themz
[!] Failed to switch to 'z' due to uncommitted changes.z"How would you like to handle this?z7  1. Carry changes over to new branch (Not recommended)z  2. Stash changesz  3. Discard modificationsz  4. Cancelz
Select option (1-4): Ú1z
[*] Stashing changes...ÚstashÚpushz-mzAuto-stash before carrying to ©rÐ   z[*] Switched to 'z'. Reapplying changes...)rd  rr  ÚpopzC
[!] Note: There were merge conflicts when reapplying your changes.zc    The changes are still saved in your stash, but you will need to resolve conflicts in the files.z&[*] Successfully carried changes over.z[!] Failed to carry changes: r=  zAuto-stash before switching to z4[*] Successfully set changes aside and switched to 'z [!] Failed to stash and switch: rE  z"
[*] Discarding tracked changes...z-fz[!] Failed to force switch: z[*] Cancelled.z[!] Error switching branch:
z[!] Error: )r!   r"   r#   r'   rh   r’   r	   r”   r“   rQ   ÚsetÚ
splitlinesri   rC   Úlstriprf   rD   r•   ÚaddÚsortedrR   rg   Úisdigitrj   ÚCalledProcessErrorr‚   rH  Ú
returncoderï   )r˜   rU   ÚbranchesÚactive_branchr™   Ú	is_activeÚbÚbranch_listrk   rm   ÚvalÚtargetro   Úerr_msgÚoptÚpop_resÚinner_es                    r   Úswitch_git_branchr‰  /  sJ  € Ü�7‰7�>‰>˜&×!Ñ!ÜÐAÔBÜÐÔØä	Ð
9Ô:ðÜ�ŠÒ2¸$Äz×GYÑGYÔbl×btÑbtÒuÜ×%Ò%Ò&=ÈÑPˆô ‹u€HØ€MØ—‘Ö ˆØ�z‰z‹|ˆÞ‘XØ�4‹<™à—O‘O CÓ(ˆ	Ø�K‰K˜Ó×#Ñ#Ó%ˆà�<‰<Ð)×*Ñ*Ø”#Ð'Ó(Ð)Ð*‰AØ�\‰\˜*×%Ñ%Ø—‘˜Ÿ™ › a bÐ)Ó*ˆAæ��f“Ø�L‰L˜ŒOßˆ9ØŠMñ! !ô$ œ˜h›Ó(€KÞÜÐ&Ô'ÜÐÔØä	Ð
(Ô)Ü˜+Ö&‰ˆØÓ*‘°ˆÜ��1‘��S˜˜  1 #Ð&Ö'ñ 'ô Ð=¸m¸_ÈCÐPÓ
Q×
WÑ
WÓ
Y€CÞØà€FØ
‡{�{‡}�}Ü�#‹h˜‰lˆØ�Õ&”c˜+Ó&Ö&Ø Ñ%ˆFàÓÜÐ   ¨Ð+Ô,ÜÐÔØä	Ð˜v˜h dÐ
+Ô,ð3!Ü�Š˜˜z¨6Ð2¸$ÈtÐZ^Ò_ÜÐ.¨v¨h°bÐ9Ô:ôf 
Ð
ÕøôS ó Ü� ˜sÐ#Ô$ÜÐÔÜûðûôp ×(Ñ(ô ,^Ø&'§h§h�!—(‘(—.‘.Ô"°Bˆà˜GÓ#Ð'QÐU\Ô'\ÜÐ/°¨xÐ7TÐUÔVÜÐ6Ô7ÜÐKÔLÜÐ&Ô'ÜÐ.Ô/Ü�-Ô ÜÐ1Ó2×8Ñ8Ó:ˆCà�c‹zðEÜÐ5Ô6Ü—N’N E¨7°F¸DÐDbÐciÐbjÐBkÐ#lÐtxÒyÜ—N’N E¨:°vÐ#>ÀdÒKÜÐ-¨f¨XÐ5MÐNÔOÜ(ŸnšnÒ-DÓE�GØ×)Ñ)¨QÓ.ÜÐdÔeÜð  D÷  Eò  EäÐF×GÒGøÜ ó EÜÐ9¸'¸ÐC×DÖDûðEúà˜“ðHÜÐ5Ô6Ü—N’N E¨7°F¸DÐDcÐdjÐckÐBlÐ#mÐuyÒzÜ—N’N E¨:°vÐ#>ÀdÒKÜÐPÐQWÐPXÐXZÐ[×\Ò\øÜ ó HÜÐ<¸W¸IÐF×GÖGûðHúà˜“ðDÜÐ?Ô@Ü—N’N E¨:°t¸VÐ#DÈDÒQÜÐ:¸6¸(À"ÐE×FÒFøÜ ó DÜÐ8¸¸	ÐB×CÖCûðDúô Ð&×'Ò'äÐ1ÀaÇhÇh°!·(±(·.±.Ô2BÔTWÐXYÓTZÐ1[Ð\×]Ò]ûäó !Ü�˜A˜3Ð× Ò ûð!ús¹   ÁAK Ê)K; Ë
K8ËK3Ë3K8Ë;W-ÌBWÎ0BQÑQÑ
Q;ÑQ6Ñ,WÑ6Q;Ñ;	WÒASÓ
TÓ$S<Ó2WÓ<TÔ	WÔ3UÕ
U+ÕU&ÕWÕ&U+Õ+WÕ?AW×W-×W(×(W-c                  óÐ  • [         R                  R                  S5      (       d  [        S5        [	        S5        g  [
        R                  " / SQSS9n U R                  5        Vs/ s H  o"R                  5       (       d  M  UPM     nnU(       d  [        S5        [	        S5        g [        S	5        [        U5       H  u  pE[        US
-    SU 35        M     [        S5        [        S5        [        S5        [        S5        [        S5        [	        S5      R                  5       R                  5       nUS;  a  g [	        S[        U5       S35      R                  5       nUR                  5       (       a!  S
[        U5      s=::  a  [        U5      ::  d  O  [        S5        [	        S5        g S[        U5      S
-
   S3n US:X  a*  [        SU S35        [
        R                  " SSSU/5        O�US:X  a*  [        SU S35        [
        R                  " SSS U/5        O`US!:X  aZ  [	        S"U S#35      R                  5       R!                  5       n	U	S$:X  a)  [
        R                  " SSS%U/5        [        S&U S'35        [	        S)5        g ! [         a#  n[        SU 35        [	        S5         S nAg S nAff = fs  snf ! [         a  n[        S(5         S nAN[S nAff = f)*Nrc  z[!] Not a git repository.rR  )rd  rr  rR   r   ri  rj  z/[*] No stashed changes found. You're all clean!z
--- Saved Stashes ---r]   r2  z	
Options:z7  A. Apply a stash (Restore changes but keep the stash)z7  P. Pop a stash (Restore changes and delete the stash)z  D. Delete a stashz  C. Cancelz
Select action (A/P/D/C): )ÚAÚPÚDzEnter stash number (1-r;  z[!] Invalid stash number.zstash@{Ú}r‹  z
[*] Applying r  rd  rr  ÚapplyrŒ  z
[*] Popping ru  r�  z Are you sure you want to delete z	? (y/n): r<  Údropz[*] Dropped r>   z\
[!] Command returned an error or warning (you may need to resolve file conflicts manually).z
Press Enter...)r!   r"   r#   r'   rh   r’   r“   rQ   rw  ri   rg   rÀ   rf   r{  rj   r	   rH  )
r˜   rU   r™   Ústashesrk   Úsrn   Úidx_strÚ	stash_refÚconfs
             r   Úmanage_git_stashesr–  ¤  s‹  € Ü�7‰7�>‰>˜&×!Ñ!ÜÐ)Ô*ÜÐÔØðÜ×%Ò%Ò&>ÈÑQˆð !$§¡Ô 0ÓAÒ 0˜·J±J·L�tÑ 0€GÐAÞÜÐ?Ô@ÜÐÔØä	Ð
#Ô$Ü˜'Ö"‰ˆÜ��1‘��R˜�sˆmÖñ #ô 
ˆ,ÔÜ	Ð
CÔDÜ	Ð
CÔDÜ	Ð
Ô Ü	ˆ-ÔäÐ0Ó1×7Ñ7Ó9×?Ñ?ÓA€FØ�_Ó$ØäÐ,¬S°«\¨N¸#Ð>Ó?×EÑEÓG€GØ�?‰?×Ñ Q¬#¨g«,Õ%F¼#¸g»,Õ%FÜÐ)Ô*ÜÐÔØàœ3˜w›<¨™>Ð*¨"Ð-€IðpØ�S‹=Ü�O I ;¨cÐ2Ô3Ü�NŠN˜E 7¨G°YÐ?Õ@Ø�s‹]Ü�N 9 +¨SÐ1Ô2Ü�NŠN˜E 7¨E°9Ð=Õ>Ø�s‹]ÜÐ;¸I¸;ÀiÐPÓQ×WÑWÓY×_Ñ_ÓaˆDØ�s‹{Ü—’  w°¸	ÐBÔCÜ˜ Y K¨qÐ1Ô2ô 
Ð
Õøôa ó Ü� ˜sÐ#Ô$ÜÐÔÜûðüò
 BøôP ó pÜÐm×oÑoûðpúsH   ½J Á&KÂKÇ/K Ç5/K È%A K Ê
J>ÊJ9Ê9J>Ë
K%ËK Ë K%c            	      ó®	  • [        5       n  [        R                  " [        (       a  SOS5        [	        S5        [	        SS 5        [	        S5        U R                  5       nU R                  5       n[        UR                  5       5      nU(       d  [	        S5        O.U H(  nX   nXB:X  a  SOSn[	        S	US
 SUS    SU 35        M*     [	        S5        [	        S5        [	        S5        [	        S5        [	        S5        [	        S5        [	        S5        [	        S5        [	        S5        [        S5      nUS:X  aÊ  U(       d  [        S5        GMJ  [	        S5        [        U5       H  u  p‰[	        SUS-    SU	 35        M     [        S5      R                  5       n
U
R                  5       (       a4  S[        U
5      s=::  a  [        U5      ::  a  O  OU[        U
5      S-
     nOU
nU R                  U5        [        S5        GOÊUS :X  Ga  U(       d  [        S!5        GM  [	        S5        [        U5       H  u  p‰[	        SUS-    SU	 35        M     [        S"5      R                  5       n
U
R                  5       (       a4  S[        U
5      s=::  a  [        U5      ::  a  O  OU[        U
5      S-
     nOU
nXA;   aA  [        S#U S$35      nUR!                  5       S%:X  a  U R#                  U5        [        S&5        GOÑ[	        S'U S(35        [        S5        GOµUS):X  GaX  [        S*5      R                  5       n[        R$                  R'                  U5      (       d  [	        S+5        GO[        S,5      R                  5       nU(       d<  [        R$                  R)                  UR+                  [        R,                  5      5      n[	        S-5        [	        S.5        [	        S/5        [	        S05        [        S15      nUS :X  a  S2O	US):X  a  S3OS4nU R/                  XN[        R$                  R1                  U5      5        [	        S5U S6[        R$                  R1                  U5       35        [        S5        OVUS7:X  a  [3        5         [        S5        O:US8:X  a  [5        5         O)US9:X  a  [7        5         OUS::X  a  [9        5         OUS;:X  a  g GMË  )<NÚclsÚclearrú   zENVIRONMENT MANAGERrù   z No environments installed.z(Active)r   z - rü   z [r?   ra   r  z1. Set Active Environmentz2. Delete Environmentz3. Add Existing Environmentz4. List Environment Detailsz&5. Open Terminal in Active Environmentz6. Switch Git Branchz7. Manage Git Stashesz8. Exitz
Select option: rq  z+No environments to activate. Press Enter...z
Available Environments:z  r]   r2  z2
Enter name or number of environment to activate: rR  r=  z)No environments to delete. Press Enter...z0
Enter name or number of environment to DELETE: z!Are you sure you want to delete 'z' and its files? (y/n): r<  zDeleted. Press Enter...r8   r9   rE  z3Enter the path to the existing environment folder: z[!] Error: Path does not exist.z'Enter a nickname for this environment: z
Select Environment Type:z1. venvz2. uvz3. condazChoice (Default 1): r   r   r   z[*] Registered 'z' at Ú4Ú5Ú6Ú7Ú8)r   r!   r:  r–   r'   rZ   r5   rR   rS   rh   rg   ri   r{  rj   rf   r;   rH  rV   r"   r#   ÚbasenameÚrstripÚseprJ   rA   r  ra  r‰  r–  )r  r   r   rS   r:   r   Ústatusrn   rk   rl   rƒ  r•  r"   Út_choicerY  s                  r   Ú	do_manager¤  Þ  sæ  € Ü‹m€GØ
Ü
�	Š	Ÿ6š6‘% wÔ/ÜÐjÔkÜÐ& sÐ+Ô-ÜÐjÔkØ× Ñ Ó"ˆØ×#Ñ#Ó%ˆÜ�D—I‘I“KÓ ˆæÜÐ/Õ0ã�Ø‘z�Ø'+£~™¸2�Ü˜˜D ˜: R¨¨V© ~°R¸°xÐ@ÖAñ ô
 	ÐjÔkÜÐ)Ô*ÜÐ%Ô&ÜÐ+Ô,ÜÐ+Ô,ÜÐ6Ô7ÜÐ$Ô%ÜÐ%Ô&ÜˆiÔäÐ*Ó+ˆà�S‹=ÞÜÐCÔDÚÜÐ-Ô.Ü! $ž‘�Ü˜˜1˜Q™3˜%˜r ! �oÖ&ñ (äÐMÓN×TÑTÓVˆCØ�{‰{�}‰} ¤c¨#£hÕ!;´#°d³)Ö!;ØœC ›H Q™JÑ'‘à�Ø×Ñ˜tÔ$ÜÐ"Ö#à�sŒ]ÞÜÐAÔBÚÜÐ-Ô.Ü! $ž‘�Ü˜˜1˜Q™3˜%˜r ! �oÖ&ñ (äÐKÓL×RÑRÓTˆCØ�{‰{�}‰} ¤c¨#£hÕ!;´#°d³)Ö!;ØœC ›H Q™JÑ'‘à�à‹|ÜÐ@ÀÀÐF^Ð_Ó`�Ø—:‘:“< 3Ó&Ø×&Ñ& tÔ,ÜÐ3Ô4ùäÐ)¨$¨¨|Ð<Ô=ÜÐ&Ö'à�sŒ]ÜÐNÓO×UÑUÓWˆDÜ—7‘7—>‘> $×'Ñ'ÜÐ7Ö8äÐFÓG×MÑMÓO�Þ¤B§G¡G×$4Ñ$4°T·[±[ÄÇÁÓ5HÓ$I˜TäÐ2Ô3Ü�iÔ Ü�g”Ü�jÔ!Ü Ð!7Ó8�Ø!)¨S£™ÀÈSÃ±gÐV\�Ø—‘ ¬b¯g©g¯o©o¸dÓ.CÔDÜÐ(¨¨¨e´B·G±G·O±OÀDÓ4IÐ3JÐKÔLÜÐ"Õ#à�s‹]ÜŒMÜÐ"Õ#à�s‹]Ü�Oà�s‹]ÜÕà�s‹]ÜÕ à�s‹]ØòE r   c                 ó2  • [        5       n[        S5        [        SS 5        [        S5        UR                  5       nUR                  5       U   n[	        5       u  pEU S   [        XE5         n[        SU S   S   US   5      n[        S	U S   S
   US
   5      n[        SU S   S   US   5      n	[        SU S   S   US   5      n
[        SU S   S   UR                  S5      5      n[        SU S   S   US   5      n[        X#S   US   XxXšX¼US   U 5        g )Nrø   zWAN2GP MANUAL COMPONENT UPGRADErù   rú   r>  r?  r  r   r@  r  rA  r  rB  r  rC  r  rD  r  r?   r"   r  )	r   r'   rp   rZ   rš   rÄ   r7  r4   r/  )r(  r  r  rð   rÂ   rÃ   r6  r!  r"  r#  r$  r%  r&  s                r   Ú
do_upgrader¦  D  sM  € Ü‹m€GÜ	ˆ-ÔÜ	Ð.¨sÐ3Ô5Ü	ˆ&„Mà×)Ñ)Ó+€HØ× Ñ Ó" 8Ñ,€Hä#“~Ñ€HØ
�Ñ
 ¤°Ó!BÑ
C€CäÐ  &¨Ñ"6°xÑ"@À#ÀhÁ-ÓP€DÜ�? F¨<Ñ$8¸Ñ$AÀ3ÀwÁ<ÓP€GÜ�H˜f \Ñ2°8Ñ<¸cÀ(¹mÓL€HÜÐ" F¨<Ñ$8¸Ñ$@À#ÀfÁ+ÓN€FÜÐ&¨¨|Ñ(<¸XÑ(FÈÏÉÐPXÓHYÓZ€HÜÐ$ f¨\Ñ&:¸7Ñ&CÀSÈÁ\ÓR€Gä�( VÑ,¨h°vÑ.>ÀÈxÐaiÐtwð  yBñ  uCð  EKõ  Lr   c                  ód  • Sn Sn[         (       aK   [        R                  " / SQS[        R                  S9R	                  5       nU(       a  [        U5      S-  n OH [        SS5       nU H,  nSU;   d  M  [        UR                  5       S   5      nUS-  n   O   S S S 5        U S:X  a  [        S5        Sn  [        R                  " / SQS[        R                  S9R	                  5       n[        UR                  S5      S   5      S-  nX4$ !    [        R                  " SSS[        R                  S9nUR                  5        H-  nS	U;   d  M  [        UR                  S
5      S   5      S-  n    MÒ      NÖ!     NÛ= f= f! , (       d  f       Nï= f!    Nö= f!   [        S5        Sn X4$ = f)Nr   )Ú
powershellz
-NoProfilez-Commandz:(Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemoryr   r€   i   @z2wmic computersystem get TotalPhysicalMemory /valueTr‰   zTotalPhysicalMemory=rÒ   r]   z/proc/meminfor    ÚMemTotali   z=[!] Warning: Could not detect System RAM. Defaulting to 16GB.é   )r‡   z--query-gpu=memory.totalz--format=csv,noheader,nounitsrƒ   i   zE[!] Warning: Could not detect VRAM via nvidia-smi. Defaulting to 8GB.é   )r–   r’   r“   r”   ri   rj   rw  r•   r%   Úfloatr'   )Úram_gbÚvram_gbr˜   r™   r)   Úkb_vals         r   Úget_system_specsr°  Y  s¨  € Ø€FØ€Gç‚vð	Ü×)Ò)ÚvØ ¬×);Ñ);ñ÷ ‰e‹gð ö Ü˜S› WÑ-�øð	Ü�o sÔ+¨qÛ�DØ! TÕ)Ü!& t§z¡z£|°A¡Ó!7˜Ø!'¨7Ñ!3˜Ùñ	 ÷ ,ð �ƒ{ÜÐMÔNØˆðÜ×%Ò%ÚWØ¤Z×%7Ñ%7ñ
÷ ‰%‹'ð 	ô ˜Ÿ	™	 $›¨Ñ*Ó+¨dÑ2ˆð
 ˆ?ÐøðI	ð
Ü ×-Ò-ØHØ¨¼×9KÑ9Kñ�ð  ŸN™NÖ,�DØ-°Õ5Ü!$ T§Z¡Z°£_°QÑ%7Ó!8¸GÑ!D˜Ûó -øðÚý÷ ,Õ+ûð 	‘ûðÜÐUÔVØ‰àˆ?Ðúsm   ‘A	D ÁF Á(
FÁ6%FÂF Â7AF ÄFÄ<E9Å!E9Å5E9Å9E>Å;FÅ>FÆ
FÆF ÆF ÆFÆF/c           	      ó  • Sn[         R                  R                  U5      (       a  g [        S5        [	        5       u  p4[        S[        U5       S[        U5       S35        US:„  nUS:„  nUS:„  nUS	:„  nS
n	U(       a
  U(       a  Sn	O.U(       a  Sn	O$U(       a
  U(       a  Sn	OU(       a
  U(       a  Sn	OS
n	US   R                  U 0 5      n
U
R                  SS5      nU(       d  SU ;   d  SU ;   d  SU ;   a  SnOSU ;   a  SnSnUUU	U	U	S.n [        US5       n[        R                  " XÞSS9  S S S 5        [        SU	 SU SU S35        g ! , (       d  f       N$= f! [         a  n[        SU 35         S nAg S nAff = f) Nzwgp_config.jsonz9
[*] Auto-generating wgp_config.json based on hardware...z    Detected: z	GB RAM / zGB VRAMé<   é   é   é   é   r]   r  é   r-   r>  Ú	attentionr   r�   rŸ   r¡   Úsage2r£   r  )Úattention_modeÚcompileÚvideo_profileÚimage_profileÚaudio_profiler,   r.   z     Created config with Profile z, Attention: 'z', Compile: 'Ú'z[!] Error writing config: )r!   r"   r#   r'   r°  rj   r4   r%   r&   r0   rQ   )Úprofile_keyÚconfig_dataÚWGP_CONFIG_FILEÚramÚvramÚhas_high_ramÚhas_mid_ramÚhas_huge_vramÚhas_high_vramÚpidÚprof_settingsÚ	attn_modeÚcompile_modeÚ
config_outr)   rU   s                   r   rG  rG  ‹  s†  € Ø'€Oä	‡w�w‡~�~�o×&Ñ&Øä	Ð
FÔGä Ó"�I€CÜ	ˆNœ3˜s›8˜* I¬c°$«i¨[¸Ð
@ÔAà˜‘8€LØ˜‘(€KØ˜2‘I€MØ˜2‘I€Mà
€CæžØ‰Þ	Ø‰Þ	žØ‰Þ	žØ‰àˆà Ñ/×3Ñ3°KÀÓD€Mà×!Ñ! +¨rÓ2€IÞØ�;Ó $¨+Ó"5¸ÀÓ9LØ‰IØ�[Ó ØˆIà€Lð $ØØØØñ€Jð0Ü�/ 3Ô'¨1Ü�IŠI�j¨AÒ.÷ (äÐ0°°°^ÀIÀ;ÈmÐ\hÐ[iÐijÐkÕl÷ (Õ'ûô ó 0ÜÐ*¨1¨#Ð.×/Ñ/ûð0ús0   ÄE ÄEÄ0E Å
EÅE Å
FÅ)E<Å<Fc            
      óä  • [         (       d  g / n [        R                  R                  SS5      n[        R                  R                  SS5      n[        R                  R                  SS5      n[        R                  R                  US5      [        R                  R                  US5      S4 H{  n[        R                  R                  US5      n[        R                  R                  U5      (       d  MI  U R                  U[        R                  R                  US	5      U/5          O   U(       a0  U R                  [        R                  R                  US
S5      5        U(       a0  U R                  [        R                  R                  USS5      5        U(       aT  U R                  [        R                  R                  USSS5      [        R                  R                  USSSS	5      /5        [        R                  R                  SS5      nU  H@  nU(       d  M  [        R                  R                  U5      (       d  M2  Xv;  d  M9  U SU 3nMB     U[        R                  S'   g )NrS  r   ÚLOCALAPPDATAÚAPPDATArT  rV  zC:\ProgramData\Miniconda3rU  r   z.localr   r   ÚProgramsÚPythonÚ	PyManagerÚ	Python311ÚPATHÚ;)	r–   r!   rÓ   r4   r"   rD   r#   ÚextendÚappend)r^  r]  Ú	local_appÚappdatarL  Úc_binÚcurrent_pathrM  s           r   Úinject_system_pathsrÝ  Å  s¦  € ßŠ6Øà€EÜ�:‰:�>‰>˜-¨Ó,€DÜ—
‘
—‘˜~¨rÓ2€IÜ�j‰j�n‰n˜Y¨Ó+€Gä—‘—‘˜d LÓ1´2·7±7·<±<ÀÀkÓ3RÐTpÓqˆÜ—‘—‘˜T :Ó.ˆÜ�7‰7�>‰>˜%× Ó Ø�L‰L˜%¤§¡§¡¨d°IÓ!>ÀÐEÔFÙñ	 rö ˆU�\‰\œ"Ÿ'™'Ÿ,™, t¨X°uÓ=Ô>Þ�—‘œRŸW™WŸ\™\¨'°4¸Ó?Ô@æØ�‰Ü�G‰G�L‰L˜ J°¸+ÓFÜ�G‰G�L‰L˜ J°¸+ÀyÓQð
ô 	ô
 —:‘:—>‘> &¨"Ó-€LÛˆßˆ1”—‘—‘ ×"Ó" qÕ'<Ø˜S  , Ð0ŠLñ ð &„B‡J�JˆvÒr   c                  ó&  • [        S5        [        R                  R                  S5      (       d  [	        S5         [
        R                  " / SQ[
        R                  [
        R                  S9  [	        S5         [
        R                  " / SQS[
        R                  [
        R                  S	9  S
n [        SU  S35        [	        SU  35        [	        SU  35        [	        SU  SU  35        g !    N„= f! [
        R                   a    Sn  N\f = f)Nz"[*] Repairing WAN2GP repository...rc  zgit init)rd  Úremotery  Úoriginz*https://github.com/deepbeepmeep/Wan2GP.git)rg  r‚   zgit fetch origin)rd  ú	rev-parsez--verifyzorigin/mainTrf  ÚmainÚmasterz0[*] Force resetting local files to match origin/r  zgit reset --hard origin/zgit branch -M z$git branch --set-upstream-to=origin/r_   )	r'   r!   r"   r#   rN   r’   r	   r”   r|  )Údefault_branchs    r   Úrepair_git_reporå  ä  s  € Ü	Ð
.Ô/Ü�7‰7�>‰>˜&×!Ñ!Ü�
ÔðÜ�ŠÒgÔpz÷  qCñ  qCô  LV÷  L^ñ  L^ò  	_ô ÐÔð"Ü�ŠÒFÈdÔ[e×[mÑ[mô  wA÷  wIñ  wIò  	JØˆô 
Ð<¸^Ð<LÈCÐ
PÔQÜÐ& ~Ð&6Ð7Ô8Üˆn˜^Ð,Ð-Ô.ÜÐ2°>Ð2BÀ!ÀNÐCSÐTÕUøðÙûô ×(Ñ(ó "Ø!Šð"ús   ¼4C0 Á<7C7 Ã0C4Ã7DÄDÚ__main__rK  )r
   rÕ   Úupgrader¢  ÚmanageÚget_env_info)Úchoicesz--envr   z/Type of env for install (venv, uv, conda, none))ÚdefaultÚhelpz--autoÚ
store_truezRun 1-click automatic install)Úactionrì  ré  r]   z	ENV_INFO|r?   Ú|r"   r¢  rè  r>  r
   zHardware Detected: rb   rc   rÕ   Frc  z[*] No .git folder found.Tz[*] Checking for updates...)rd  rá  rl  r   r€   rd  Úpullrt  z
[!] 'git pull' failed.z$[*] Attempting automatic recovery...z8
[*] Updates found. Installing/Verifying requirements...rê   r  zD
[*] Code is already up to date. Skipping requirements installation.rç  r¨   )Lr!   rd   r&   r’   ÚargparserO   r‘   ry   r$   r:   r–   r"   rD   Ú_PY_PATHrí   rî   r   rz   rš   rÄ   rÉ   rÎ   rN   rÞ   rè   rö   r  r/  r7  rN  rP  ra  r‰  r–  r¤  r¦  r°  rG  rÝ  rå  rr   ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚcfgrK  r  r5   r   rZ   r4   re   rð   r'   rÂ   rÃ   rÀ  ÚprofileÚautorÑ   rp   r  Úneeds_installr#   r“   r”   ri   Úold_headr	   Únew_headr|  Úinstall_fmtrÝ   rå   rw   r   r   Ú<module>rÿ     s½  ðÛ 	Û 
Û Û Û Û Û à!€Ø€	Ø	�‰�D‰€æDJˆQˆr�w‰w�|‰|˜G Y°Ó=Ð>¸aÑ@ÐRSÐTV×T[ÑT[×T`ÑT`ÐahÐjoÐqyÓTzÐS{Ð{|ÐP}€ð <ØØYñð 3ØØ�Z˜Ð/ñð >Ø�w‰w�|‰|˜G \Ó2Ø7ñð Þ!‰x yØ ññ!€ð.Ð ÷:kñ kòZ:ò1 òfò"(ò
ô
@ò&Gò:òEò"$òL=%ô~	#ò:!òxHò.5Lònsòj8òtdòLLò*0òd80òt&ò>Vð. ˆzÔÙÔØ×$Ò$Ó&€FØ
×Ñ˜Ò(lÐÑmØ
×Ñ˜¨Ð6gÐÑhØ
×Ñ˜¨Ð<[ÐÑ\Ø×ÑÓ€DÙ
‹-€Cà‡y�y�NÓ"Ù“-ˆØ×#Ñ#Ó%ˆæ˜W×.Ñ.Ó0×4Ñ4°V×<Ñ<Ø�HŠH�QŒKà×$Ñ$Ó& vÑ.ˆÙ�	˜( 6Ñ*Ð+¨1¨X°fÑ-=Ð,>Ð?Ô@Ø�Š�Œà‡y�y�HÓÙŒØ�Š�Œà‡y�y�HÓÙŒØ�Š�Œá#“~Ñ€HˆfÙ! (¨FÓ3€KØ�.Ñ! +Ñ.€Gà‡y�y�IÓÙÐ# H :¨R°¨x°qÐ9Ô:Ø�9�9Ù˜DŸH™H c¨;Õ7á" 4§8¡8¨S°+Õ>à	�‰�hÔ	Ù“-ˆØ×-Ñ-Ó/ˆØ×$Ñ$Ó& xÑ0ˆàˆà�w‰w�~‰~˜f×%Ñ%ÙÐ-Ô.ÙÔØ ‰MáÐ/Ô0ðØ%×2Ò2Ò3OÐZaÐjt×j|Ñj|Ñ}÷  Dñ  Dó  F�ð%Ø—’  v˜°dÒ;Ø%×2Ò2Ò3OÐZaÐjt×j|Ñj|Ñ}÷  Dñ  Dó  F�à˜xÓ'®xØ$(�Mö ÙÐMÔNØ'¨°Ñ(8Ñ9¸)ÑDˆKØ!×(Ñ(¨X°fÑ-=Ð(Ð>ˆGÙ�w�iÐ3Ð4Õ5áÐYÕZà	�‰�iÓ	Ù�3�ð 
 ð] øðlØ’ûð ×0Ñ0ó %ÙÐ0Ô1ÙÐ<Ô=ÙÔ!Ø $’ð	%ús   Í,P( Í>AP1 Ð(P.Ð1)QÑQ