
    N j<                    ^   S SK Jr  S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  \(       a  S S	KJrJr  S
rSrSrSrSr " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S S\5      r%SS jr&g)     )annotations)TYPE_CHECKING)tabulate)DebugHandler	fetch_allformat_jsonNavLinkResponseRoute)tcpstore_client)build_db)	JobConfig)
CollectiveDatabaseGroup
MembershipNCCLCall)FrontendServerHTTPRequestHandlerz
{% extends "base.html" %}
{% block header %}
  <h1>{% block title %}Index{% endblock %}</h1>
{% endblock %}
{% block content %}
Hi
{% endblock %}
    aQ  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}py-spy Stack Traces{% endblock %}</h1>
{% endblock %}
{% block content %}
    <form action="" method="get">
        <input type="checkbox" id="native" name="native" value="1"/>
        <label for="native">Native</label>
        <input type="checkbox" id="subprocesses" name="subprocesses" value="1"/>
        <label for="subprocesses">Subprocesses</label>
        <input type="submit" value="Submit">
    </form>

    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ resp.text }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    ag  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{ title }}{% endblock %}</h1>
{% endblock %}
{% block content %}
    <h2>Groups</h2>
    {{ groups | safe }}
    <h2>Memberships</h2>
    {{ memberships | safe }}
    <h2>Collectives</h2>
    {{ collectives | safe }}
    <h2>NCCL Calls</h2>
    {{ ncclcalls | safe }}
{% endblock %}
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}torch.profiler{% endblock %}</h1>
{% endblock %}

{% block content %}
    <form action="" method="get">
        <label for="duration">Duration (seconds):</label>
        <input type="number" id="duration" name="duration" value="{{ duration }}" min="1" max="60">
        <input type="submit" value="Submit">
    </form>

    <script>
    function stringToArrayBuffer(str) {
        const encoder = new TextEncoder();
        return encoder.encode(str).buffer;
    }
    async function openPerfetto(data) {
        const ui = window.open('https://ui.perfetto.dev/#!/');
        if (!ui) { alert('Popup blocked. Allow popups for this page and click again.'); return; }

        // Perfetto readiness handshake: PING until we receive PONG
        await new Promise((resolve, reject) => {
        const onMsg = (e) => {
            if (e.source === ui && e.data === 'PONG') {
            window.removeEventListener('message', onMsg);
            clearInterval(pinger);
            resolve();
            }
        };
        window.addEventListener('message', onMsg);
        const pinger = setInterval(() => { try { ui.postMessage('PING', '*'); } catch (_e) {} }, 250);
        setTimeout(() => { clearInterval(pinger); window.removeEventListener('message', onMsg); reject(); }, 20000);
        }).catch(() => { alert('Perfetto UI did not respond. Try again.'); return; });

        ui.postMessage({
        perfetto: {
            buffer: stringToArrayBuffer(JSON.stringify(data)),
            title: "torch profiler",
            fileName: "trace.json",
        }
        }, '*');
    }
    </script>

    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <script>
            function run{{ i }}() {
                var data = {{ resp.text | safe }};
                openPerfetto(data);
            }
            </script>

            <button onclick="run{{ i }}()">View {{ i }}</button>
        {% endif %}
    {% endfor %}
{% endblock %}
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}TCPStore Keys{% endblock %}</h1>
{% endblock %}
{% block content %}
    <pre>
    {% for k, v in zip(keys, values) -%}
{{ k }}: {{ v | truncate(100) }}
    {% endfor %}
    </pre>
{% endblock %}
    c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)IndexHandler   c                0    [        SU R                  5      /$ )N/r   _handleselfs    x/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/distributed/debug/_debug_handlers.pyroutesIndexHandler.routes   s    c4<<())    c                    [        SS5      /$ )Nr   Homer	   r   s    r   	nav_linksIndexHandler.nav_links   s    V$%%r"   c                    S[         0$ Nz
index.html)INDEX_TEMPLATEr   s    r   	templatesIndexHandler.templates   s    n--r"   c                8    UR                   R                  S5      $ r)   )frontendrender_template)r   reqs     r   r   IndexHandler._handle   s    ||++L99r"    Nreturnzlist[Route]r4   zlist[NavLink]r4   zdict[str, str]r0   r   r4   bytes	__name__
__module____qualname____firstlineno__r    r&   r+   r   __static_attributes__r2   r"   r   r   r      s    *&.:r"   r   c                  F    \ rS rSrS	S jrS
S jrSS jrSS jrSS jrSr	g)StacksHandler   c                0    [        SU R                  5      /$ )N/stacksr   r   s    r   r    StacksHandler.routes   s    i.//r"   c                    [        SS5      /$ )NrC   zPython Stack Tracesr%   r   s    r   r&   StacksHandler.nav_links   s    	#89::r"   c                R    [        S5      u  p#UR                  R                  SSX#S9$ )Ndump_tracebackzraw_resp.htmlStackstitleaddrsrespsr   r.   r/   r   r0   rL   rM   s       r   r   StacksHandler._handle   s2     !12||++85 , 
 	
r"   c                &   [        S5      u  p/ n[        [        X5      5       HZ  u  nu  pVUR                  SU SU S35        UR                  UR                  S:X  a  UR
                  OSUR                   35        M\     SR                  U5      $ )NrH   	=== Rank :  ===   Error: 
r   	enumeratezipappendstatus_codetextjoinr   rL   rM   partsiaddrresps          r   dumpStacksHandler.dump   s     !12(U):;OA|LL9QCr$t45LL!--4		GDDTDTCU:V  <
 yyr"   c                    g)Nstacksr2   r   s    r   dump_filenameStacksHandler.dump_filename   s    r"   r2   Nr3   r5   r7   r4   z
str | Noner4   str
r:   r;   r<   r=   r    r&   r   rd   rh   r>   r2   r"   r   r@   r@      s    0;
 r"   r@   c                  P    \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)PySpyHandler   c                0    [        SU R                  5      /$ )N/pyspy_dumpr   r   s    r   r    PySpyHandler.routes   s    mT\\233r"   c                    [        SS5      /$ )Nrr   zpy-spy Stacksr%   r   s    r   r&   PySpyHandler.nav_links   s    788r"   c                    S[         0$ )Npyspy_dump.html)PYSPY_DUMP_TEMPLATEr   s    r   r+   PySpyHandler.templates   s    !#677r"   c                p    [        SUR                  5       5      u  p#UR                  R                  SUUS9$ )N
pyspy_dumprw   rL   rM   )r   get_raw_queryr.   r/   rO   s       r   r   PySpyHandler._handle   s>     s/@/@/BC||++ , 
 	
r"   c                &   [        S5      u  p/ n[        [        X5      5       HZ  u  nu  pVUR                  SU SU S35        UR                  UR                  S:X  a  UR
                  OSUR                   35        M\     SR                  U5      $ )Nr{   rR   rS   rT   rU   rV   rW   rX   r_   s          r   rd   PySpyHandler.dump   s     .(U):;OA|LL9QCr$t45LL!--4		GDDTDTCU:V  <
 yyr"   c                    g)Nr{   r2   r   s    r   rh   PySpyHandler.dump_filename   s    r"   r2   Nr3   r5   r6   r7   rj   rk   r:   r;   r<   r=   r    r&   r+   r   rd   rh   r>   r2   r"   r   ro   ro      s     498
 r"   ro   c                      \ rS rSrSS jrSS jrSS jr\SS j5       r        SS jr	SS jr
SS jrSS	 jrSS
 jrSS jrSS jrSrg)FlightRecorderHandler   c                    [        SU R                  5      [        SU R                  5      [        SU R                  5      [        SU R                  5      /$ )N	/fr_trace/fr_trace_json/fr_trace_nccl/fr_trace_nccl_json)r   _handle_fr_trace_handle_fr_trace_json_handle_fr_trace_nccl_handle_fr_trace_nccl_jsonr   s    r   r    FlightRecorderHandler.routes   sO    +t445"D$>$>?"D$>$>?')H)HI	
 	
r"   c                ^    [        SS5      [        SS5      [        SS5      [        SS5      /$ )Nr   zFlightRecorder CPUr   z(JSON)r   FlightRecorder NCCLr   r%   r   s    r   r&   FlightRecorderHandler.nav_links   s9    K!56$h/$&;<)84	
 	
r"   c                    S[         0$ )Nfr_trace.html)FR_TRACE_TEMPLATEr   s    r   r+   FlightRecorderHandler.templates      !233r"   c                R   [        5       nUR                  / S9nSUl        SUl        0 n[	        U5       H?  u  pVUR                  5         UX   S.UR                  5       EnSU;  a  / US'   XtSU S3'   MA     [        [        UR                  5       5      5      S   n[        XCU5      $ )N)argsT)rank	host_nameentriesr   z.jsonversion)r   
parse_argsallow_incomplete_ranksverboserY   raise_for_statusjsonnextitervaluesr   )	rL   rM   configr   detailsr   rc   rd   r   s	            r   	_build_dbFlightRecorderHandler._build_db
  s      b )&*##E*JD!!#"[ ))+D
 $"$Y*.d4&&' + tGNN,-.y9w//r"   c                T   U R                  X#5      nUR                  SS[        UR                  [        R
                  SS9[        UR                  [        R
                  SS9[        UR                  [        R
                  SS9[        UR                  [        R
                  SS9S9$ )Nr   FlightRecorderhtmlheaderstablefmt)rK   groupsmembershipscollectives	ncclcalls)r   r/   r   r   r   _fieldsr   r   r   r   r   r   )r   serverrL   rM   dbs        r   _render_tables$FlightRecorderHandler._render_tables!  s     ^^E)%%"BIIu}}vN 
(:(:V !
(:(:V r||X5E5EPVW & 
 	
r"   c                h    [        S5      u  p#U R                  UR                  U[        U5      5      $ )Nfr_trace_jsonr   r   r.   listrO   s       r   r   &FlightRecorderHandler._handle_fr_trace2  s+     1""3<<UDDr"   c                T    [        S5      u  p#UR                  R                  SSUUS9$ )Nr   json_resp.htmlr   rJ   rN   rO   s       r   r   +FlightRecorderHandler._handle_fr_trace_json6  s6     1||++"	 , 
 	
r"   c                j    [        SS5      u  p#U R                  UR                  U[        U5      5      $ )Ndump_nccl_trace_jsononlyactive=truer   rO   s       r   r   +FlightRecorderHandler._handle_fr_trace_nccl?  s/     !79JK""3<<UDDr"   c                V    [        SS5      u  p#UR                  R                  SSUUS9$ )Nr   r   r   r   rJ   rN   rO   s       r   r   0FlightRecorderHandler._handle_fr_trace_nccl_jsonC  s:     !79JK||++'	 , 
 	
r"   c                   / n[        S5      u  p#U R                  U[        U5      5      nUR                  SS[	        UR
                  [        R                  SS9S[	        UR                  [        R                  SS9S[	        UR                  [        R                  SS9S[	        UR                  [        R                  SS9/	5         [        S	S
5      u  pVU R                  U[        U5      5      nUR                  SSS[	        UR
                  [        R                  SS9S[	        UR                  [        R                  SS9S[	        UR                  [        R                  SS9S[	        UR                  [        R                  SS9/
5        SR!                  U5      $ ! [         a    UR                  S5         N.f = f)Nr   z=== FR Trace ===z--- Groups ---plainr   z--- Memberships ---z--- Collectives ---z--- NCCL Calls ---r   r    z=== FR Trace NCCL ===z1
=== FR Trace NCCL ===
Failed to fetch NCCL tracerW   )r   r   r   extendr   r   r   r   r   r   r   r   r   r   	Exceptionr[   r^   )r   r`   rL   rM   r   
nccl_addrs
nccl_respsnccl_dbs           r   rd   FlightRecorderHandler.dumpL  s    1^^E4;/" EMMGL%1C1CgV%1C1CgV$x/?/?'R
	
 	P%.&(9&"J nnZj1ABGLL+$W^^U]]WU)++ * 2 2!(
 *++ * 2 2!(
 ))) ( 0 0!(%: yy  	PLLNO	Ps   
CF# #G Gc                    g)Nfr_tracer2   r   s    r   rh   #FlightRecorderHandler.dump_filename      r"   r2   Nr3   r5   r6   )rL   	list[str]rM   list[Response]r4   r   )r   r   rL   r   rM   r   r4   r8   r7   rj   rk   )r:   r;   r<   r=   r    r&   r+   staticmethodr   r   r   r   r   r   rd   rh   r>   r2   r"   r   r   r      sk    

4 0 0,
$
-6
?M
	
"E
E
5 nr"   r   c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)ProfilerHandleri  c                0    [        SU R                  5      /$ )N/profiler   r   s    r   r    ProfilerHandler.routes  s    j$,,/00r"   c                    [        SS5      /$ )Nr   ztorch profilerr%   r   s    r   r&   ProfilerHandler.nav_links  s    
$4566r"   c                    S[         0$ )Nprofile.html)PROFILE_TEMPLATEr   s    r   r+   ProfilerHandler.templates  s     011r"   c                    UR                  SS[        S9n[        SSU 35      u  p4UR                  R	                  SX4S9$ )Ndurationg      ?)defaulttypetorch_profilez	duration=r   r|   )get_query_argfloatr   r.   r/   )r   r0   r   rL   rM   s        r   r   ProfilerHandler._handle  sH    $$Z5$I IhZ2HI||++N%+UUr"   r2   Nr3   r5   r6   r7   r9   r2   r"   r   r   r     s    172Vr"   r   c                  F    \ rS rSrS	S jrS
S jrSS jrSS jrSS jrSr	g)WaitCountersHandleri  c                0    [        SU R                  5      /$ )N/wait_countersr   r   s    r   r    WaitCountersHandler.routes  s    &566r"   c                    [        SS5      /$ )Nr   Wait Countersr%   r   s    r   r&   WaitCountersHandler.nav_links  s    (/:;;r"   c                R    [        S5      u  p#UR                  R                  SSX#S9$ )Nwait_counter_valuesr   r   rJ   rN   rO   s       r   r   WaitCountersHandler._handle  s2     !67||++O5 , 
 	
r"   c                Z   [        S5      u  p/ n[        [        X5      5       Ht  u  nu  pVUR                  SU SU S35        UR                  S:X  a&  UR                  [        UR                  5      5        MV  UR                  SUR                   35        Mv     SR                  U5      $ )Nr   rR   rS   rT   rU   rV   rW   )r   rY   rZ   r[   r\   r   r]   r^   r_   s          r   rd   WaitCountersHandler.dump  s     !67(U):;OA|LL9QCr$t453&[34wt'7'7&89:  < yyr"   c                    g)Nwait_countersr2   r   s    r   rh   !WaitCountersHandler.dump_filename  s    r"   r2   Nr3   r5   r7   rj   rk   rm   r2   r"   r   r   r     s    7<
	 r"   r   c                  P    \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)TCPStoreHandleri  c                0    [        SU R                  5      /$ )N	/tcpstorer   r   s    r   r    TCPStoreHandler.routes  s    k4<<011r"   c                    [        SS5      /$ )Nr   TCPStorer%   r   s    r   r&   TCPStoreHandler.nav_links  s    Z011r"   c                    S[         0$ )Ntcpstore.html)TCPSTORE_TEMPLATEr   s    r   r+   TCPStoreHandler.templates  r   r"   c                    [        SS9nUR                  5       nUR                  5         UR                  U5       Vs/ s H  n[	        U5      PM     nnUR
                  R                  SX5S9$ s  snf )Nr   prefixr  )keysr   )r   	list_keyssort	multi_getreprr.   r/   )r   r0   storer
  vr   s         r   r   TCPStoreHandler._handle  sc    r* 		#(??4#89#8a$q'#89||++O$+VV :s   A.c                (   [        SS9nUR                  5       nUR                  5         UR                  U5       Vs/ s H  n[	        U5      PM     nn[        X$5       VVs/ s H  u  pSU SU 3PM     nnnSR                  U5      $ s  snf s  snnf )Nr   r  rS   rW   )r   r  r  r  r  rZ   r^   )r   r  r
  r  r   kr`   s          r   rd   TCPStoreHandler.dump  s    r* 		#(??4#89#8a$q'#89),T):;):A3b):;yy :;s   B	"Bc                    g)Ntcpstorer2   r   s    r   rh   TCPStoreHandler.dump_filename  r   r"   r2   Nr3   r5   r6   r7   rj   rk   r   r2   r"   r   r   r     s!    224W r"   r   c                     [        5       [        5       [        5       [        5       [	        5       [        5       [        5       /$ )N)r   r@   ro   r   r   r   r   r2   r"   r   default_handlersr    s3     r"   N)r4   zlist[DebugHandler])'
__future__r   typingr   r   !torch.distributed.debug._frontendr   r   r   r	   r
   r   torch.distributed.debug._storer   4torch.distributed.flight_recorder.components.builderr   ;torch.distributed.flight_recorder.components.config_managerr   2torch.distributed.flight_recorder.components.typesr   r   r   r   r   r   r   r*   rx   r   r   r  r   r@   ro   r   r   r   r   r  r2   r"   r   <module>r!     s    "     ; I Q  T 4 "? B (:< :L 6< @NL NbVl V , 8l :	r"   