
    UHj9a                    <   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ  e	e      j%                         j&                  d	   Zed
z  Zedz  Zdd	dddZdddddZd/dZd0d1dZd2dZd3dZd4dZd4dZd5dZd6dZ d7dZ!d8dZ"d9dZ#d:dZ$d;dZ%d<d Z&	 	 	 	 	 	 	 	 	 	 d=d!Z'd>d"Z(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d?d#Z)d@d$Z*	 	 	 dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd%Z+dCd&Z,dDdEd'Z-dFd(Z.dDdEd)Z/dFd*Z0dGd+Z1efdHd,Z2dId-Z3e4d.k(  r e3        yy)JzDSummarize geometry-only map exit candidates for manual route review.    )annotationsN)deque)Path	urlencode)	load_maps)load   outdata      topbottomleftrightr   r   r   r   c                z    t               }g }| D ])  }||v r|j                  |       |j                  |       + |S N)setaddappend)valuesseenresultvalues       :/home/exedev/hwanse/tools/summarize_map_exit_candidates.pyuniquer      sE    5DF D=e	
 M    c                "    | dt        |        S )Nz/game.html?r   )params
web_prefixs     r   web_hrefr#   "   s    \Yv%6$788r   c                R    | j                  d      xs | j                  d      gd   S )NlayerTilesetstilesetr   get)infos    r   first_tilesetr*   &   s'    HH_%>$((9*=)>BBr   c                D    || d   z  |z   }| d   d   |   | d   d   |   fS )Nwidthlayersr   r
    )r)   tile_xtile_yindexs       r   tile_atr2   *   s<    T']"V+E>!U#T(^A%6u%===r   c                H   |dk  s|dk  s|| d   k\  s|| d   k\  ryt        | ||      \  }}|j                  t        |       i       }||g|j                  dg       v ry||g|j                  dg       v ry||j                  dg       v ry||j                  d	g       v ry|dkD  S )
Nr   r,   heightF	passPairsT
blockPairspassblock)r2   r(   r*   )r)   r/   r0   tile_classeslayer0layer1entrys          r   tile_passabler=   /   s    zVaZ6T']#:fX>VT662NFF]40"5E599["55599\26662&&7B''A:r   c                      d   }||z  dz
  }||z  dz
  }|dz   |z  |dz   |z  f|dz   |z  |dz   |z  f|dz   |z  |dz   |z  f|dz   |z  |dz   |z  fg}t         fd|D              S )NtileSize               c              3  @   K   | ]  \  }}t        ||        y wr   )r=   ).0xyr)   r9   s      r   	<genexpr>z$can_stand_on_tile.<locals>.<genexpr>I   s      J41a}T1a6Js   )all)r)   r/   r0   r9   	tile_sizepixel_xpixel_ypointss   `  `    r   can_stand_on_tilerO   ?   s    Z Iy 2%Gy 2%G
A+)	#gly%@A
B,9	$w|	&AB
A+)	#gly%@A
B,9	$w|	&AB	F J6JJJr   c           	     $   | d   }| d   }t               }g }t        |      D ]  }t        |      D ]  }||f}||v st        | |||      s|j                  |       g }	t	        |g      }
|
ry|
j                         \  }}|	j                  ||f       dD ]K  \  }}||z   ||z   f}||v rt        | |d   |d   |      s*|j                  |       |
j                  |       M |
ry|j                  |	         |j                  t        d       |S )Nr,   r4   ))r
   r   )r   )r   r
   )r   rQ   r   r
   T)keyreverse)	r   ranger=   r   r   popleftr   sortlen)r)   r9   r,   r4   r   
componentsrH   rG   startcellsqueuecell_xcell_ydxdy	next_cells                   r   connected_componentsra   L   s2   ME(^F!$D.0J6] %u 	%AFE}M$1l$KHHUOE5'NE!&ff-.@ ,FB!'"frk :I D( (y|Yq\<X HHY'LL+,  e$%	%%( OOTO*r   c                n    | dk(  r|S | dk(  r|dz
  |z
  S | dk(  r|S | dk(  r|dz
  |z
  S t        d|        )Nr   r   r
   r   r   zunknown side )
ValueError)siderG   rH   r,   r4   s        r   side_distancere   i   sW    u}xzA~v~wqy1}
}TF+
,,r   c                    | dv r|S |S )N>   r   r   r.   )rd   rG   rH   s      r   side_projectionrg   u   s    ))10q0r   c                ~    | j                  d      xs i }| j                  d      dk(  xr |j                  d      du S )NsampleedgeDistancer   	standableTr'   )	candidateri   s     r   auto_triggerrm   y   s<    ]]8$*F==(A-Q&**[2IT2QQr   c                z   |j                  d      xs i }|j                  d      }|dv rIt        t        | j                  d      xs d      dz
  d      }t        |j                  dd            |z  S t        t        | j                  d      xs d      dz
  d      }t        |j                  d	d            |z  S )
Nri   rd   >   r   r   r,   r
   rG   r   r4   rH   )r(   maxintfloat)rowrl   ri   rd   denominators        r   projection_fractionrt   ~   s    ]]8$*F== D  #cggg.3!4q8!<VZZQ'(;66c#''(+0q1A5q9KC#${22r   c                4   t         j                  |j                  d      d      }t        | |      }t        ||      }t        ||z
        }|j                  d      xs i }|j                  d      |k(  }	|	rdndt	        |      rdnd|j                  d      du rdndt        |j                  d      xs d      t        t        |d	z              t        |j                  d
      xs d       t        |j                  d      xs d      t        |j                  d      xs d      g}
|d   ||j                  d      |j                  d      |j                  d      |j                  d      |j                  d      t	        |      |	t        |d      |
dS )Nrd    ri   r   r
   rk   Trj   i  	tileCountrH   rG   map   )targetpreferredSiderd   rG   rH   rk   rj   autoTrigger	sideMatchprojectionDeltarank)OPPOSITE_SIDEr(   rt   absrm   rp   round)
source_rowsource_candidate
target_rowtarget_candidatepreferred_sidesource_projectiontarget_projectionprojection_deltari   
side_matchr   s              r   target_hintr      s   "&&'7';';F'CRHN+J8HI+J8HI,/@@A!!(+1rF!%%f-?JQ*+ZZ$,!  05A6E"T)*+	!!+.3!	44FJJsO q!FJJsO q!	D U#' $$V,ZZ_ZZ_ZZ,(,,^<#$45 !115 r   c                   | D ci c]  }|d   |
 }}| D ]  j                  d      xs g D ]  g }t        g j                  d      xs g j                  d      xs g       D ]b  }|d   k(  r|j                  |      xs i j                  d      xs g }|s9t        fd|D        d       }|j                  |       d |j	                  d        |d	<     y c c}w )
Nrx   exitCandidatesblockedTargetCandidatesselectorTargetCandidatesc              3  :   K   | ]  }t        |        y wr   )r   )rF   r   rl   rr   r   s     r   rI   z&attach_target_hints.<locals>.<genexpr>   s%      , $CJ@PQs   c                    | d   S )Nr   r.   hints    r   <lambda>z%attach_target_hints.<locals>.<lambda>   s
    T&\ r   rR   c                    | d   | d   gz   S )Nr   rz   r.   r   s    r   r   z%attach_target_hints.<locals>.<lambda>   s    VX7G(G r   targetHints)r(   r   minr   rV   )	rowsrr   by_maphintsrz   target_candidatesbestrl   r   s	    `     @@r   attach_target_hintsr      s#   )-.#c%j#o.F. -!128b 	-IE  "-- 9:@b"-- :;Ar"  # SZ'#ZZ/
%/%52$:$:;K$L$RPR!(0A 2 T"##$ JJGJH',Im$+	-- /s   C-c                    | sg S g }| d   }| d   }| dd  D ]!  }||dz   kD  r|j                  ||f       |}|}# |j                  ||f       |S )Nr   r
   )r   )r   groupsrY   previousr   s        r   split_projection_groupsr      su    	F1IEayH 8a<MM5(+,E	
 MM5(#$Mr   c           	     D   | d   | d   t        fd|D              t        fd|D              z   dz  dfd}|D cg c]  }t        | |d   |d   |      s| }}t        |xs ||	      \  }}t        | ||      \  }	}
||t	        |      |	|
d
S c c}w )Nr,   r4   c              3  >   K   | ]  \  }}t        ||        y wr   rg   rF   rG   rH   rd   s      r   rI   z choose_sample.<locals>.<genexpr>   s     =tq!tQ*=   c              3  >   K   | ]  \  }}t        ||        y wr   r   r   s      r   rI   z choose_sample.<locals>.<genexpr>   s$     CrdhdeghOTXZ[]^D_Crr   r   c                b    | \  }}t        ||      }|t        t        ||      z
        fS r   )re   r   rg   )cellrG   rH   distancer4   midrd   r,   s       r   
sample_keyz!choose_sample.<locals>.sample_key   s<    1 q!UF;_T1a83>???r   r   r
   r   )rG   rH   rk   r:   r;   )r   tuple[int, int]returnztuple[int, float])r   ro   rO   r2   bool)r)   rd   rZ   r9   r   r   rk   sample_xsample_yr:   r;   r4   r   r,   s    `         @@@r   choose_sampler      s     ME(^F=u==CrlqCr@rrvw
wC@ @
 #(c$+<T47DQRGUa+bcIcY/%Z@HhT8X6NFF)_  ds   B"Bc                    | D cg c]  \  }}|	 }}}| D cg c]  \  }}|	 }}}t        |      t        |      t        |      t        |      dS c c}}w c c}}w )N)xMinyMinxMaxyMax)r   ro   )rZ   rG   _xsrH   yss         r   component_boundsr      s^    	1!	B		1!	B	BBBB	  
	s
   AAc	                   |d   |d   g }	t        |      }
dD ]  t        fd|D              }||kD  r |D cg c]  \  }}t        ||      ||z   k  r||f  }}}t        t	        |D ch c]  \  }}t        ||       c}}            }g }|D ]  \  }}|D cg c]"  \  }}|t        ||      cxk  r|k  rn n||f$ }}}|s9t        |||      }|D cg c]  \  }}dv r|n| }}}| |d    d|d    |d    d|d    d	d	d
}t        |      }d|d<   |j                  | |t        |      |
t        fd|D              t        |      dv rdnd||t        |      t        |      d|||ddt        |      t        |      d        |j                  d        |	j                  |d |         |	S c c}}w c c}}w c c}}w c c}}w )Nr,   r4   r   c              3  B   K   | ]  \  }}t        ||        y wr   re   rF   rG   rH   r4   rd   r,   s      r   rI   z0side_candidates_for_component.<locals>.<genexpr>  s"     Z1=q!UFCZ   >   r   r   rG   ,rH   1)rx   	startTile	focusTile	collisionoverviewmapExitCandidatestrialTransitionsc              3  B   K   | ]  \  }}t        ||        y wr   r   r   s      r   rI   z0side_candidates_for_component.<locals>.<genexpr>.  s%     #eQUQRTUM$1eV$L#er   )axisfromtoperpendicularFromperpendicularTomanual-review-onlyzzGeometry-only edge of a passable connected component. This is not a strict event coordinate or a confirmed map transition.)rx   rd   componentIndexcomponentSizecomponentBoundsrj   rw   spanri   r   r   promotionStatusreason	reviewUrltrialUrlc                &    | d   | d    | d   d   fS )Nrj   rw   r   r   r.   rr   s    r   r   z/side_candidates_for_component.<locals>.<lambda>B  s'    ^)<s;?O>OQTU[Q\]cQd(e r   r   )r   r   re   r   sortedrg   r   dictr   rW   ro   r#   rV   extend)namer)   component_index	componentr9   selector_targetsblocked_targets	edge_bandmax_groups_per_side
candidatesboundsmin_distancerG   rH   
side_cellsprojection_groups
group_rowsrY   endgroup_cellsri   perp_valuesr!   trial_paramsr4   rd   r,   s                           @@@r   side_candidates_for_componentr      s    ME(^FJi(F2 <<ZPYZZ)# "
1T1a7<);SS F

 

 4Fdn;o\`\]_`ODRSUV<W;o4pq
+ /	JE3 'AqOD!Q7>3> AK 
 "4{LIF (Aq ..A5K 
  &s}AfSk]; &s}AfSk]; F  <L/BL+,"1!$Y#) ##eYd#e e -#'+<#<C#!),[)9'*;'7 !,<+:#7[ &f-$\21 -/	` 	ef*%9&9:;y<<z s

 <ps   #G7G*'G
*G%
c                
   i }| D ]J  }|j                  d      }|j                  d      }|r|s*|j                  |g       j                  |       L |j                         D ci c]  \  }}|t	        |       c}}S c c}}w )Nsourcerz   )r(   
setdefaultr   itemsr   )route_blockersr   rr   r   rz   targetss         r   blocked_targets_by_sourcer   G  s    #%F 5""V&"%,,V45 <B<<>JFF7O#JJJs   %A?c                   t        |      }t        t        |      t        |      z        }g }	|D ]!  }
| j                  |
      }|s|j                  |
i       j                  d      xs g }|j                  |
g       }t	        ||      }g }t        |d |       D ]'  \  }}|j                  t        |
||||||||	             ) |j                  d        t        d |D              }|	j                  |
|d   |d   |d   t        |      |j                  d      xs |j                  d	      gd
|t        |      |||t        |      d|d       $ |	j                  d        t        |	       |	S )N	fieldMapsc                D    t         | d      | d   | d   | d    | d   d   fS )Nrd   r   rj   rw   r   r   )
SIDE_ORDERr   s    r   r   zbuild_rows.<locals>.<lambda>u  s=    3v;'$%N#[!!FF# r   r   c              3  2   K   | ]  }t        |        y wr   )rW   )rF   r   s     r   rI   zbuild_rows.<locals>.<genexpr>}  s     H	S^H   r,   r4   r?   r%   r&   tileClassLayer0r   )rx   r,   r4   r?   r&   r%   collisionModeedgeBandcomponentCountpassableTileCountr   r   priorityr   r   c                    | d    | d   fS )Nr  rx   r.   r   s    r   r   zbuild_rows.<locals>.<lambda>  s    3z?2CJ? r   )r   r   r   r(   ra   	enumerater   r   rV   sumr   r*   rW   r   r   )mapsr9   save_selector_scene_linksr   r   max_componentsr   r   source_namesr   r   r)   r   map_blocked_targetsrX   r   r   r   passable_counts                      r   
build_rowsr  R  s    0?O#783;OOPLD 0xx~488rBFF{SYWY-11$;)$=

*3J4O*P 	&OY-# $''
	 	 	 	
 HZHH']8nZ($T*!XXo6O488I;N:O.!!*o!/(8':013(
 	A0b 	II?I@Kr   c                   | j                  d      xs g }|sy|d   }|d    d|j                  d       d|j                  d       d|j                  d	       d
dj                  d |j                  d      xs g D               	S )Nr   -r   rz    rd   rG   r   rH   z score=c              3  2   K   | ]  }t        |        y wr   )str)rF   r   s     r   rI   zhint_label.<locals>.<genexpr>  s     I#e*Ir   r   )r(   join)rl   r   r   s      r   
hint_labelr    s    MM-(.BE8D>
!DHHV,-Q88C=/488C=/ *I$((62B2HbIIJ	Lr   c           
         g }| d | D ]A  }|d   }|d    d|d    d|d    dt        |       }|j                  d| d	|d
    d       C dj                  |      xs dS )Nri   rd   r  rG   r   rH    -> [z](r   ), r  )r  r   r  r   limitlinksrl   ri   labels         r   candidate_linksr    s    E' =	8$V$%Qvc{m1VC[MjQZF[E\]qr)K"8!9;<= 99U"s"r   c                p   | D cg c]
  }|d   s	| }}g d}|D ]a  }|j                  d|d    ddj                  |d         xs d ddj                  |d	         xs d dt        |d
          d|d    d       c |s|j                  d       |j                  g d       | D ]f  }|j                  d|d    d|d    d|d    d|d    d|d    d|d    ddj                  |d         xs d dt	        |d
          d|d    d       h |j                  d       dj                  |      S c c}w )Nr  )z# Map Exit Candidatesrv   znGenerated from `out/maps.js`, `data/tile_classes.json`, save-selector scene links, and current route blockers.rv   zThese rows are geometry-only review hints. `manual-review-only` means the candidate must not be promoted to normal gameplay until a strict event coordinate, hotspot, or equivalent runtime proof is found.rv   zTarget hints rank reciprocal target exits by opposite side, auto-trigger eligibility, standability, edge distance, and normalized side projection. They are trial-spawn hints only, not promotion evidence.rv   z## Blocked Route Sourcesrv   zE| map | selector target candidates | blocked targets | exits | open |z| --- | --- | --- | --- | --- |z| rx   z | r  r   r  r   r   z! | [source](../web/game.html?map=z&collision=1&overview=1) |z| - | - | - | - | - |)rv   z## All Selector Sourcesrv   zZ| map | size | tileset | components | passable tiles | selector targets | exits | status |z5| --- | ---: | --- | ---: | ---: | --- | ---: | --- |r,   rG   r4   r&   r  r  r   z |rv   
)r   r  r  r   rW   )r   rr   priority_rowsliness       r   markdownr#    s   $(<SC
OS<M<E  
UC		#.H*I J QcRRUyy678?C@s#3456 7--0ZL8RT	

 ,-	LL    
UCG~Qs8}oSY@PPS#$%S-@)A(B#yy789@SA3'()*#c2C.D-ERI	

 
LL99UO =s
   
D3D3c           
        g }| d | D ]g  }|d   }|d    d|d    d|d    dt        |       }|j                  dt        j                  |d	          d
t        j                  |       d       i dj	                  |      xs dS )Nri   rd   r  rG   r   rH   r  z	<a href="r   ">z</a>r  r  )r  r   htmlescaper  r  s         r   
html_linksr(    s    E' b	8$V$%Qvc{m1VC[MjQZF[E\]yY{-C!D ERTYHZG[[_`ab 99U"s"r   c                   | D cg c]
  }|d   s	| }}g }|D ]  }dt        j                  |d          d}|j                  dj                  dd| dt        j                  |d          d	d
t        j                  dj                  |d         xs d       dd
t        j                  dj                  |d         xs d       dd
t	        |d          dd
t        j                  |d          ddg              g }| D ]  }|j                  dj                  ddt        j                  |d          dt        j                  |d          d	d
|d    d|d    dd
t        j                  |d          dd
|d    dd
|d    dd
t        j                  dj                  |d         xs d       dd
t        |d          dd
t        j                  |d          ddg
              dj                  g dddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4|d5d6d7d2d8d4|d5d6d9d:d;      S c c}w )<Nr  z../web/game.html?map=rx   z&amp;collision=1&amp;overview=1r   z<tr>z  <td><a href="r%  z	</a></td>z  <td>r  r   r  z</td>r   r   r   z</tr>z$  <td><a href="../web/game.html?map=z!&amp;collision=1&amp;overview=1">r,   rG   r4   r&   r  r  z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z$  <title>Map Exit Candidates</title>z	  <style>zg    :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #101010; color: #eee; }z&    body { margin: 0; padding: 24px; }z,    h1 { margin: 0 0 8px; font-size: 24px; }z0    h2 { margin: 26px 0 10px; font-size: 18px; }zM    p { margin: 0 0 14px; color: #bbb; max-width: 980px; line-height: 1.45; }zX    table { width: 100%; border-collapse: collapse; margin: 0 0 16px; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }zR    th { position: sticky; top: 0; background: #181818; z-index: 1; color: #ddd; }z0    a { color: #8fd0ff; text-decoration: none; }z+    a:hover { text-decoration: underline; }z
  </style>z</head>z<body>z  <h1>Map Exit Candidates</h1>z  <p>Geometry-only review hints from passable connected components. manual-review-only rows must not be promoted until strict runtime evidence is found. Target hints only rank reciprocal trial spawn exits.</p>z   <h2>Blocked Route Sources</h2>z	  <table>z    <thead><tr><th>map</th><th>selector targets</th><th>blocked targets</th><th>exit review links</th><th>status</th></tr></thead>z    <tbody>z    </tbody>z
  </table>z  <h2>All Selector Sources</h2>z    <thead><tr><th>map</th><th>size</th><th>tileset</th><th>components</th><th>passable</th><th>selector targets</th><th>exits</th><th>status</th></tr></thead>z</body>z</html>rv   )r&  r'  r   r  r(  rW   )r   rr   r!  priority_bodysource_hrefall_bodys         r   	html_pager-    s   $(<SC
OS<M<M 
-dkk#e*.E-FFefII!+bSZ1H0ISTYYs3M/N%O%VSVWXX]^TYYs3L/M%N%URUVWW\]C(8$9:;5AS):%;<=UC 
	

 H 
II6t{{3u:7N6OOpquq|q|  ~A  BG  ~H  rI  qJ  JS  TWaHe<S^45U;-./u5012%8TYYs3M/N%O%VSVWXX]^S!1234E:S):%;<=UC 	

 99 ((( 	( 	#	(
 	Q( 	/( 	( 	r( 	1( 	7( 	;( 	X( 	c( 	t( 	](  	;!(" 	6#($ 	%(& 	'(( 	)(* 	)+(, 	\-(. 	+/(0 	1(2 	M3(4 	5(6 
7(8 	9(: 	;(< 	*=(> 	?(@ 	jA(B 	C(D 
E(F 	G(H 	I(J 	K(L 	M(N 	O( ( (? =s
   
IIc                J   i }| D ]  }g }|j                  d      xs g D ]  }|j                  d      xs i }|j                  d      xs g D ci c]  }|d   |j                  d       c}|j                  d      xs g D ci c]8  }|d   |j                  d      |j                  d      |j                  d      g: }}t        g |j                  d      xs g |j                  d	      xs g       }t        |      D 	
ci c]  \  }	}
|
|	
 c}
}	|j                  fd
       |j	                  |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      t        |      |||j                  d      d	        |j                  d      |j                  d      t        g |j                  d      xs g |j                  d	      xs g       |d||d   <    |S c c}w c c}w c c}
}	w )Nr   ri   r   rz   r   rG   rH   r   r   c                j    t        j                  |       xs g d      j                  | d      | fS )N)  r0  r0  r0  r0  r   r0  r0  r0  )tupler(   )rz   
hint_ranksoriginal_orders    r   r   zruntime_index.<locals>.<lambda><  s4    *..0Z4Z["&&vs3$ r   r   rd   rk   rj   r   )	rd   rG   rH   rk   rj   r|   r   r   statusr  )r4  r  r   exitsrx   )r(   r   r  rV   r   rm   )r   r   rr   r5  rl   ri   r   target_hintsr   r1   rz   r2  r3  s              @@r   runtime_indexr7  (  sA   F +
!128b  	I]]8,2F &MM-8>B X 00J &MM-8>B X#txx?O PPL   -- 9:@b-- :;Ar G BK7ASTvfemTNLL   LL!f-ZZ_ZZ_#ZZ4 )n =+I6"+#--(9:
 
- 	D gg/0
+ ''34:''45;  
s5zG+
X MQ Us   H=H
H
c                <   |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  dt        j                  t	        |       dd      z   dz   d	       |dz  j                  t        |       d	       y )NT)parentsexist_okzmap_exit_candidates.jsonF)r   :)ensure_ascii
separatorsr   utf-8encodingzmap_exit_candidates_runtime.jsz$window.HWANSE_MAP_EXIT_CANDIDATES = z;
map_exit_candidates.html)mkdir
write_textjsondumpsr7  r-  )r   out_dirs     r   write_outputsrG  Y  s    MM$M.))55

4e
CdJ 6  //;;.
**]4(u
T	U
	 	 <  ))55ioPW5Xr   c            
     f   t        j                  t              } | j                  dt        t
        dz         | j                  dt        t        dz         | j                  dt        t
        dz         | j                  d	t        t
        d
z         | j                  dt        t
               | j                  dt        d       | j                         }t        t        |j                        t        |j                        t        j                  |j                   j#                  d            t        j                  |j$                  j#                  d            |j&                        }t)        ||j*                         t-        dt/        |       d|j*                  dz          y )N)descriptionz--mapszmaps.js)typedefaultz	--classesztile_classes.jsonz--scene-linkszsave_selector_scene_links.jsonz--route-blockerszconfirmed_route_blockers.jsonz	--out-dirz--edge-bandr   r>  r?  )r   zwrote z map exit candidate rows -> rA  )argparseArgumentParser__doc__add_argumentr   OUTDATArp   
parse_argsr  r   r  load_tile_classesclassesrD  loadsscene_links	read_textr   r   rG  rF  printrW   )parserargsr   s      r   mainr[  h  sS   $$9F
tS9_E
$?R8RS
dCBb<bc
*sEd?de
$<
C;D$))$,,'

4##--w-?@

4&&00'0BC..D $%	F3t9+9$,,Ic:c9d
efr   __main__)r   	list[str]r   r]  )z../web)r!   zdict[str, str]r"   r  r   r  )r)   r   r   r  )r)   r   r/   rp   r0   rp   r   r   )
r)   r   r/   rp   r0   rp   r9   dict[str, dict]r   r   )r)   r   r9   r^  r   zlist[list[tuple[int, int]]])rd   r  rG   rp   rH   rp   r,   rp   r4   rp   r   rp   )rd   r  rG   rp   rH   rp   r   rp   )rl   r   r   r   )rr   r   rl   r   r   rq   )
r   r   r   r   r   r   r   r   r   r   )r   
list[dict]r   None)r   z	list[int]r   list[tuple[int, int]])
r)   r   rd   r  rZ   ra  r9   r^  r   r   )rZ   ra  r   r   )r   r  r)   r   r   rp   r   ra  r9   r^  r   r]  r   r]  r   rp   r   rp   r   r_  )r   r_  r   zdict[str, list[str]])r      r   )r  r^  r9   r^  r  r^  r   r_  r   rp   r	  rp   r   rp   r   r_  )rl   r   r   r  )rA   )r   r_  r  rp   r   r  )r   r_  r   r  )r   r_  r   r^  )r   r_  rF  r   r   r`  )r   r`  )5rN  
__future__r   rL  r&  rD  collectionsr   pathlibr   urllib.parser   summarize_map_tilesr   r9   r	   rS  __file__resolver9  ROOTrP  rQ  r   r   r   r#   r*   r2   r=   rO   ra   re   rg   rm   rt   r   r   r   r   r   r   r   r  r  r  r#  r(  r-  r7  rG  r[  __name__r.   r   r   <module>rl     s   J "      " ) 2 H~''*
Ulf}!Q;
 E7VT9C>
 
K:	-1R
3@-6

 ! "	
 
6L
L
L L %	L
 "L  L L L L L^K   ?
?!?  /? 	?
 ? ? ? ?D	#(V#HV.b 58 Yg( zF r   