§
    ji½j>   ã                  óœ  — d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZ  eej        d¦  «        rej                             d¬	¦  «         ej                             ej                             ej                             e¦  «        d
d
¦  «        ¦  «        Zej                             de¦  «         ddlmZ  G d„ de¦  «        Z edd¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z  G d„ d¦  «        Z!dd„Z"e#dk    r ej$         e"¦   «         ¦  «         dS dS )u¥  
Meridian Graph Topology & Passive Tree Inspector for FreeExile.
Audits the 1,500-node Huyáº¿t Cá»‘t Ma Ä�á»“ (Passive Skill Tree) and Quest DAGs:
- Shortest Path (Dijkstra algorithm)
- Island Node Detection (Reachability from Origin)
- Overpowered Synergy Proximity (Keystones within <= 3 nodes)
- Topological Clustering and Mermaid Diagram generation.
Adheres to Clean Architecture, Zero-Drift, and <= 350 lines limit.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚEnum)ÚDictÚListÚOptionalÚSetÚTupleÚreconfigurezutf-8)Úencodingz..)Úget_canonical_passive_nodesc                  ó   — e Zd ZdZdZdZdZdS )ÚNodeTypeÚORIGINÚMINORÚNOTABLEÚKEYSTONEN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © ó    ú=C:\Projects\FreeExile\tools\world\meridian_graph_inspector.pyr   r      s"   € € € € € Ø€FØ€EØ€GØ€H€H€Hr   r   T)ÚslotsÚfrozenc                  óF   — e Zd ZU ded<   ded<   ded<   ded<   dZded	<   d
S )ÚMeridianNodeÚstrÚnode_idÚnamer   Ú	node_typeÚ
cluster_idé   ÚintÚ
point_costN)r   r   r   Ú__annotations__r&   r   r   r   r   r   &   sJ   € € € € € € à€L€L�LØ€I€I�IØÐÐÑØ€O€O�OØ€JÐÐÐÑÐÐr   r   )r   c                  óL   — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   dS )ÚMeridianTopologyReportr%   Útotal_nodesÚtotal_edgesÚkeystone_countú	List[str]Úisolated_nodeszList[Tuple[str, str, int]]Úoverpowered_synergiesÚboolÚis_validN)r   r   r   r'   r   r   r   r)   r)   /   sU   € € € € € € àÐÐÑØÐÐÑØÐÐÑØÐÐÑØ5Ð5Ð5Ñ5Ø€N€N�N€N€Nr   r)   c                  óV   — e Zd ZdZd„ Zd!d„Zd"d#d„Zd$d„Zd%d„Zd&d'd„Z	d(d)d„Z
d*d„Zd S )+ÚMeridianGraphInspectorzIZero-dependency Graph Theory Engine for Passive Skill Trees & Quest DAGs.c                ó"   — i | _         i | _        d S ©N)ÚnodesÚadj)Úselfs    r   Ú__init__zMeridianGraphInspector.__init__<   s   € Ø.0ˆŒ
Ø.0ˆŒˆˆr   Únoder   ÚreturnÚNonec                ób   — || j         |j        <   |j        | j        vri | j        |j        <   d S d S r5   )r6   r    r7   )r8   r:   s     r   Úadd_nodezMeridianGraphInspector.add_node@   s;   € Ø#'ˆŒ
�4”<Ñ ØŒ<˜tœxÐ'Ð'Ø%'ˆDŒH�T”\Ñ"Ð"Ð"ð (Ð'r   r$   TÚur   ÚvÚweightr%   Úbidirectionalr0   c                óš   — || j         vr
i | j         |<   || j         vr
i | j         |<   || j         |         |<   |r|| j         |         |<   d S d S r5   )r7   )r8   r?   r@   rA   rB   s        r   Úadd_edgezMeridianGraphInspector.add_edgeE   sf   € Ø�D”HÐÐØˆDŒH�Q‰KØ�D”HÐÐØˆDŒH�Q‰KØˆŒ�Œ�A‰Øð 	$Ø#ˆDŒH�QŒK˜‰NˆNˆNð	$ð 	$r   c                ó(  — t          ¦   «         }|                      t          ddt          j        d¦  «        ¦  «         |D ]^}|j        rt          j        nt          j        }|                      t          d|j        › �|j	        |d|j        dz  › �¦  «        ¦  «         Œ_|  
                    ddd¦  «         |  
                    dd	d¦  «         |  
                    dd
d¦  «         |  
                    d	dd¦  «         |  
                    d
dd¦  «         dS )zCLoads canonical passives and synthesizes the core cluster topology.Únode_origin_dantianu   Khá»Ÿi NguyÃªn Ä�an Ä�iá»�nÚCLUSTER_ROOTÚnode_passive_ÚCLUSTER_é   Únode_passive_301r$   Únode_passive_302Únode_passive_303é   Únode_passive_304N)r   r>   r   r   r   Úspecial_mechanicr   r   r    Úname_virD   )r8   ÚpassivesÚpÚntypes       r   Úload_canonical_meridian_treez3MeridianGraphInspector.load_canonical_meridian_treeN   s"  € å.Ñ0Ô0ˆà�Š•lÐ#8Ð:WÕYaÔYhÐjxÑyÔyÑzÔzÐzð ð 	sð 	sˆAØ)*Ô);ÐQ•HÔ%Ð%ÅÔAQˆEØ�MŠM�,Ð'B°q´yÐ'BÐ'BÀAÄIÈuÐVpÐabÔajÐmnÑanÐVpÐVpÑqÔqÑrÔrÐrÐrð 	�ŠÐ+Ð-?ÀÑCÔCÐCØ�ŠÐ+Ð-?ÀÑCÔCÐCØ�ŠÐ(Ð*<¸aÑ@Ô@Ð@Ø�ŠÐ(Ð*<¸aÑ@Ô@Ð@Ø�ŠÐ(Ð*<¸aÑ@Ô@Ð@Ð@Ð@r   ÚstartÚendúTuple[int, List[str]]c                óŒ  — || j         vs	|| j         vrdg fS d||gfg}t          ¦   «         }|r”t          j        |¦  «        \  }}}||k    r||fS ||v rŒ)|                     |¦  «         | j                             |i ¦  «                             ¦   «         D ](\  }}	||vrt          j        |||	z   |||gz   f¦  «         Œ)|°”dg fS )zDCalculates shortest distance and node path using Dijkstra algorithm.i?B r   )	r6   ÚsetÚheapqÚheappopÚaddr7   ÚgetÚitemsÚheappush)
r8   rV   rW   ÚpqÚvisitedÚcostÚcurrÚpathÚneighborrA   s
             r   Údijkstra_shortest_pathz-MeridianGraphInspector.dijkstra_shortest_path`   s  € à˜œ
Ð"Ð" c°´Ð&;Ð&;Ø˜2�:Ðà12°E¸E¸7Ð0CÐ/DˆÝ™EœEˆàð 
	UÝ$œ}¨RÑ0Ô0ÑˆD�$˜Ø�sŠ{ˆ{Ø˜T�zÐ!Ø�wˆˆØØ�KŠK˜ÑÔÐà$(¤H§L¢L°°rÑ$:Ô$:×$@Ò$@Ñ$BÔ$Bð Uð UÑ �˜&Ø 7Ð*Ð*Ý”N 2¨¨v©°xÀÈÈ
ÑARÐ'SÑTÔTÐTøð ð 
	Uð �rˆzÐr   rF   Ú	origin_idr-   c                ó~  ‡— || j         vr&t          | j                              ¦   «         ¦  «        S t          ¦   «         Š|g}|rh|                     d¦  «        }|‰v rŒ‰                     |¦  «         | j                             |i ¦  «        D ]}|‰vr|                     |¦  «         Œ|°hˆfd„| j         D ¦   «         S )z:Finds unreachable island nodes using Breadth-First Search.r   c                ó   •— g | ]}|‰v¯|‘Œ	S r   r   )Ú.0Únidrb   s     €r   ú
<listcomp>z>MeridianGraphInspector.find_isolated_nodes.<locals>.<listcomp>‡   s#   ø€ Ð@Ð@Ð@˜¨S¸Ð-?Ð-?�Ð-?Ð-?Ð-?r   )	r6   ÚlistÚkeysrZ   Úpopr]   r7   r^   Úappend)r8   rh   Úqueuerd   rf   rb   s        @r   Úfind_isolated_nodesz*MeridianGraphInspector.find_isolated_nodesv   sÕ   ø€ à˜DœJÐ&Ð&Ý˜œ
ŸšÑ)Ô)Ñ*Ô*Ð*å™EœEˆØ%˜;ˆàð 	+Ø—9’9˜Q‘<”<ˆDØ�wˆˆØØ�KŠK˜ÑÔÐØ œHŸLšL¨¨rÑ2Ô2ð +ð +�Ø 7Ð*Ð*Ø—L’L Ñ*Ô*Ð*øð ð 	+ð AÐ@Ð@Ð@˜tœzÐ@Ñ@Ô@Ð@r   é   Úmin_keystone_distr)   c                ó¢  — |                       |¦  «        }d„ | j                             ¦   «         D ¦   «         }g }t          t	          |¦  «        ¦  «        D ]l}t          |dz   t	          |¦  «        ¦  «        D ]I}||         ||         }	}|                      ||	¦  «        \  }
}|
|k     r|                     ||	|
f¦  «         ŒJŒmt          d„ | j         	                    ¦   «         D ¦   «         ¦  «        dz  }t	          |¦  «        dk    ot	          |¦  «        dk    }t          t	          | j        ¦  «        |t	          |¦  «        |||¬¦  «        S )z>Audits graph connectivity and overpowered proximity synergies.c                óB   — g | ]\  }}|j         t          j        k    ¯|‘ŒS r   )r"   r   r   )rk   rl   Úns      r   rm   z9MeridianGraphInspector.audit_topology.<locals>.<listcomp>Œ   s+   € Ð^Ð^Ð^™V˜S !¸Q¼[ÍHÔL]Ò=]Ð=]�SÐ=]Ð=]Ð=]r   r$   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r5   )Úlen)rk   Ú	neighborss     r   ú	<genexpr>z8MeridianGraphInspector.audit_topology.<locals>.<genexpr>–   s(   è è € ÐLÐL¨Y�#˜i™.œ.ÐLÐLÐLÐLÐLÐLr   rN   r   )r*   r+   r,   r.   r/   r1   )rs   r6   r_   Úrangerz   rg   rq   Úsumr7   Úvaluesr)   )r8   rh   ru   ÚisolatedÚ	keystonesÚ	synergiesÚiÚjÚk1Úk2ÚdistÚ_r+   r1   s                 r   Úaudit_topologyz%MeridianGraphInspector.audit_topology‰   sX  € à×+Ò+¨IÑ6Ô6ˆØ^Ð^ t¤z×'7Ò'7Ñ'9Ô'9Ð^Ñ^Ô^ˆ	à02ˆ	Ý•s˜9‘~”~Ñ&Ô&ð 	5ð 	5ˆAÝ˜1˜q™5¥# i¡.¤.Ñ1Ô1ð 5ð 5�Ø" 1œ y°¤|�B�Ø×5Ò5°b¸"Ñ=Ô=‘��aØÐ+Ò+Ð+Ø×$Ò$ b¨"¨d ^Ñ4Ô4Ð4øð	5õ ÐLÐL¸$¼(¿/º/Ñ:KÔ:KÐLÑLÔLÑLÔLÐPQÑQˆÝ�x‘=”= AÒ%Ð=­#¨i©.¬.¸AÒ*=ˆå%Ý˜DœJ™œØ#Ý˜y™>œ>Ø#Ø"+Øð
ñ 
ô 
ð 	
r   c                ó  — dg}t          ¦   «         }| j                             ¦   «         D ]Å\  }}| j                             |¦  «        }|r|j        n|}|                     ¦   «         D ]†\  }}t          t          ||g¦  «        ¦  «        }	|	|vr_|                     |	¦  «         | j                             |¦  «        }
|
r|
j        n|}| 	                    d|› d|› d|› d|› d|› d�¦  «         Œ‡ŒÆd 
                    |¦  «        S )z9Exports graph topology as clean Markdown Mermaid diagram.zflowchart LRz    z["z"] ---|zpts| z"]ú
)rZ   r7   r_   r6   r^   r!   ÚtupleÚsortedr]   rq   Újoin)r8   ÚlinesÚ
seen_edgesr?   r{   Úu_nodeÚu_labelr@   ÚwÚ	edge_pairÚv_nodeÚv_labels               r   Úexport_mermaidz%MeridianGraphInspector.export_mermaid¢   s&  € àÐ ˆÝ+.©5¬5ˆ
à œHŸNšNÑ,Ô,ð 		Wð 		W‰LˆAˆyØ”Z—^’^ AÑ&Ô&ˆFØ%+Ð2�f”k�k°ˆGØ!ŸšÑ)Ô)ð Wð W‘��1Ý!¥&¨!¨Q¨¡.¤.Ñ1Ô1�	Ø JÐ.Ð.Ø—N’N 9Ñ-Ô-Ð-Ø!œZŸ^š^¨AÑ.Ô.�FØ-3Ð:˜fœk˜k¸�GØ—L’LÐ!U¨Ð!UÐ!U¨WÐ!UÐ!U¸QÐ!UÐ!UÀQÐ!UÐ!UÈ'Ð!UÐ!UÐ!UÑVÔVÐVøðWð �yŠy˜ÑÔÐr   N)r:   r   r;   r<   )r$   T)
r?   r   r@   r   rA   r%   rB   r0   r;   r<   )r;   r<   )rV   r   rW   r   r;   rX   )rF   )rh   r   r;   r-   )rF   rt   )rh   r   ru   r%   r;   r)   )r;   r   )r   r   r   Ú__doc__r9   r>   rD   rU   rg   rs   r‰   r—   r   r   r   r3   r3   9   sÍ   € € € € € ØSÐSð1ð 1ð 1ð(ð (ð (ð (ð
$ð $ð $ð $ð $ðAð Að Að Að$ð ð ð ð,Að Að Að Að Að&
ð 
ð 
ð 
ð 
ð2 ð  ð  ð  ð  ð  r   r3   r;   r%   c            
     ó”  — t          j        d¬¦  «        } |                      dddd¬¦  «         |                      ddd	¬
¦  «         |                      ¦   «         }t	          ¦   «         }|                     ¦   «          |                     ¦   «         }t          d¦  «         t          d¦  «         t          d¦  «         t          d|j        rdnd› �¦  «         t          d|j	        › �¦  «         t          d|j
        › �¦  «         t          d|j        › �¦  «         t          dt          |j        ¦  «        › �¦  «         t          dt          |j        ¦  «        › �¦  «         t          d¦  «         |j        r+t          d¦  «         |j        D ]}t          d|› �¦  «         Œ|j        r6t          d¦  «         |j        D ]\  }}}t          d|› d|› d|› d�¦  «         Œ |j        r?t          d¦  «         t          |                     ¦   «         ¦  «         t          d¦  «         t          d¦  «         t          d¦  «         dS ) Nz"Meridian Graph Topology Inspector.)Údescriptionz--audit-allÚ
store_trueTz"Run full topology integrity audit.)ÚactionÚdefaultÚhelpz	--mermaidzPrint Mermaid flowchart syntax.)rœ   rž   zA=================================================================u7    FREEEXILE HUYáº¾T Cá»�T MA Ä�á»’ GRAPH TOPOLOGY AUDIT zStatus:               z[PASS]z[WARN]zTotal Graph Nodes:    zTotal Web Edges:      zKeystones Count:      zIsolated Nodes:       zOverpowered Synergies:zA-----------------------------------------------------------------z [WARN] UNREACHABLE ISLAND NODES:z   * z5[WARN] OVERPOWERED KEYSTONE PROXIMITY (Distance < 4):z <---> z : z ptsz!
--- MERMAID TOPOLOGY DIAGRAM ---z!--------------------------------
z.SUCCESS: Passive Tree Graph Topology Verified.r   )ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr3   rU   r‰   Úprintr1   r*   r+   r,   rz   r.   r/   Úmermaidr—   )ÚparserÚargsÚ	inspectorÚreportÚisor…   r†   r‡   s           r   Úmainrª   ´   sv  € ÝÔ$Ð1UÐVÑVÔV€FØ
×Ò˜¨lÀDÐOsÐÑtÔtÐtØ
×Ò˜¨LÐ?`ÐÑaÔaÐaØ×ÒÑÔ€Då&Ñ(Ô(€IØ×*Ò*Ñ,Ô,Ð,Ø×%Ò%Ñ'Ô'€Få	ˆ(�O„O€OÝ	Ð
CÑDÔDÐDÝ	ˆ(�O„O€OÝ	Ð
N¨v¬Ð#L 8 8ÀHÐ
NÐ
NÑOÔOÐOÝ	Ð
7 6Ô#5Ð
7Ð
7Ñ8Ô8Ð8Ý	Ð
7 6Ô#5Ð
7Ð
7Ñ8Ô8Ð8Ý	Ð
: 6Ô#8Ð
:Ð
:Ñ;Ô;Ð;Ý	Ð
?¥3 vÔ'<Ñ#=Ô#=Ð
?Ð
?Ñ@Ô@Ð@Ý	Ð
F¥3 vÔ'CÑ#DÔ#DÐ
FÐ
FÑGÔGÐGÝ	ˆ(�O„O€OàÔð !ÝÐ0Ñ1Ô1Ð1ØÔ(ð 	!ð 	!ˆCÝ�-˜#�-�-Ñ Ô Ð Ð àÔ#ð 8ÝÐEÑFÔFÐFØ"Ô8ð 	8ð 	8‰LˆB��DÝÐ6˜"Ð6Ð6 RÐ6Ð6¨DÐ6Ð6Ð6Ñ7Ô7Ð7Ð7à„|ð 4ÝÐ2Ñ3Ô3Ð3Ýˆi×&Ò&Ñ(Ô(Ñ)Ô)Ð)ÝÐ2Ñ3Ô3Ð3å	ˆ(�O„O€OÝ	Ð
:Ñ;Ô;Ð;Øˆ1r   Ú__main__)r;   r%   )%r˜   Ú
__future__r   ÚsysÚosr[   rŸ   Údataclassesr   r   Úenumr   Útypingr   r   r	   r
   r   ÚhasattrÚstdoutr   re   ÚabspathrŽ   ÚdirnameÚ__file__ÚPROJECT_ROOTÚinsertÚserver.world.skill_tag_catalogr   r   r   r)   r3   rª   r   Úexitr   r   r   ú<module>r»      sP  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à
€7ˆ3Œ:�}Ñ%Ô%ð -Ø„J×Ò GÐÑ,Ô,Ð,ð Œw�Š˜rœwŸ|š|¨B¬G¯OªO¸HÑ,EÔ,EÀtÈTÑRÔRÑSÔS€Ø „‡‚��<Ñ  Ô  Ð  à FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ˆtñ ô ð ð €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�ÐÑÔðð ð ð ð ñ ô ñ Ôððx ð x ð x ð x ð x ñ x ô x ð x ðv&ð &ð &ð &ðR ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr   