
    UHj                       d Z ddlm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 ddlmZ  e	e      j!                         j"                  d   Zed	z  Zed
z  ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZdddZddZddZddZddZedk(  r e        yy)z;Summarize unclassified layer0/layer1 tile pairs by tileset.    )annotationsN)Counterdefaultdict)Path)	load_maps)load   outdatac                    | dkD  rdS dS )Nr   passblock )tilelayer1infos      ;/home/exedev/hwanse/tools/summarize_tile_pair_class_gaps.pyfallback_kindr      s    AX6*7*    c                   t        t              }t        d       }t        | j                               D ]O  \  }}|j	                  d      xs |j	                  d      gd   }|j	                  |i       }	t        |	j	                  dg             t        |	j	                  dg             z  }
|	j	                  dg       D ch c]  }t        |       c}|	j	                  dg       D ch c]  }t        |       c}z  }t        t        |d	   d   |d	   d
               D ]a  \  }\  }}||f}||
v s||v r||   |xx   d
z  cc<   t        ||   |         |k  s;||   |   j                  |||d   z  ||d   z  d       c R g }t        |      D ]]  }||   j                  |      D ]D  \  \  }}}|j                  ||||t        ||| ||   ||f   d   d            ||   ||f   d       F _ |S c c}w c c}w )Nc                      t        t              S )N)r   listr   r   r   <lambda>zsummarize.<locals>.<lambda>   s    Q\]aQb r   layerTilesetstilesetr   r   r   	passPairs
blockPairslayersr	   width)mapxyr    )r   r   r   countfallbackKindexamples)r   r   sorteditemsgetsettuple	enumerateziplenappendmost_commonr   )mapsclasseslimit_per_tilesetexample_limitcountersr%   map_namer   r   entryknown_tilespairknown_pairsindexr   r   rowsr#   s                     r   	summarizer<      sI    5@4HH=HIb=cH . $88O,E)1D0EqIGR(%))FB/03uyy"7M3NN/4yyb/IJtuT{J$)IIlB$?N
 E$KN
 
 &/s4>!3Dd8nUVFW/X%Y 
	!E>D&&>D{"dk&9Wd#q(#8G$T*+m;!$'..#g.$w-/0 
	& D(# 	%-g%6%B%BCT%U 	!NT6EKK"  -dFD'ARTXZ`SaAbcdAefkAl<m n$W-tVn= 		 K5 K N
s   G7)G<c                    g d}| D ]R  }dj                  fd|d   D              }|j                  d|d    d|d    d|d	    d|d
    d|d    d| d       T |j                  d       dj                  |      S )N)z# Tile Pair Class Gaps z:Generated from `out/maps.js` and `data/tile_classes.json`.r>   zThese are the highest-use unclassified `layer0/layer1` pairs. Use these rows when a `layer0` tile is mixed and should be classified with `passPairs` or `blockPairs`.r>   z9| tileset | tile | layer1 | count | fallback | examples |z(| --- | ---: | ---: | ---: | --- | --- |z, c              3     K   | ]:  }d |d    d|d    d|d    d d|d    d|d    d|d    d	|d    d|d    d
 < yw)[r     r!   ,r"   ](z/game.html?map=z&startTile=z&focusTile=z&collision=1&overview=1)Nr   ).0point
web_prefixs     r   	<genexpr>zmarkdown.<locals>.<genexpr>N   s~      
  e~QuSzl!E#J<r*_UZ[`UaTb%*QuSzl+eCj\5QT:,Vnp
s   A Ar%   | r    | r   r   r#   r$   z |r>   
)joinr.   )r;   rF   linesrowr%   s    `   r   markdownrN   A   s    
E  	
99 
 Z
 

 	Y CK=CM?#c'l^SV>"#3xj4	
	
 
LL99Ur   c                    i }| D ]&  }|j                  |d   g       j                  |       ( t        |      D ci c]  }|||   
 c}S c c}w )Nr   )
setdefaultr.   r&   )r;   groupedrM   r   s       r   rows_by_tilesetrR   [   sW    %'G ;3y>2.55c:;5;G_E'GWW%%EEEs   Ac           	        |j                  dd       g }t        |       j                         D ]Y  \  }}|| dz  }|j                  t	        |d      d       |j                  |t        |      t        d |D              |d       [ |S )	NT)parentsexist_okz.mdz	../../webutf-8encodingc              3  &   K   | ]	  }|d      yw)r#   Nr   )rD   rM   s     r   rG   z&write_tileset_pages.<locals>.<genexpr>k   s     =G=s   )r   r;   usespath)mkdirrR   r'   
write_textrN   r.   r-   sum)r;   out_dir
index_rowsr   tileset_rowsr[   s         r   write_tileset_pagesrb   b   s    MM$M.J!0!6!<!<!> G9C({;gN%===	
 	 r   c                   g d}| D ]X  }|d   j                  |      }|j                  d|d    d|d    d|d    d|j                   d	|j                          d
       Z |j                  d       dj	                  |      S )N)z# Tile Pair Class Gap Indexr>   z/Generated from `out/tile_pair_class_gaps.json`.r>   z | tileset | rows | uses | page |z| --- | ---: | ---: | --- |r[   rH   r   rI   r;   rZ   z | [rC   z) |r>   rJ   )relative_tor.   nameas_posixrK   )r`   r_   rL   rM   rels        r   index_markdownrh   q   s    E  o&k%%g.r#i.)S[MS[MchhZWYZ]ZfZfZhYiilmno 
LL99Ur   c                    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
        dz         | j                  dt        d       | j                  dt        d       | j                         }t        t        |j                        t        |j                        |j                  |j                        }|j                   j#                  t%        j&                  |dd      dz   d       |j(                  j#                  t+        |      d       t-        ||j.                        }|j.                  dz  j#                  t1        ||j.                        d       t3        dt5        |       d|j(                          y )N)descriptionz--mapszmaps.js)typedefaultz	--classesztile_classes.jsonz
--json-outztile_pair_class_gaps.jsonz--outztile_pair_class_gaps.mdz--split-dirtile_pair_class_gapsz--limit-per-tileset    z--example-limit   F   )ensure_asciiindentrJ   rV   rW   zindex.mdzwrote z tile pair class gap rows -> )argparseArgumentParser__doc__add_argumentr   OUTDATAint
parse_argsr<   r   r0   load_tile_classesr1   r2   r3   json_outr]   jsondumpsr
   rN   rb   	split_dirrh   printr-   )parserargsr;   r`   s       r   mainr      s   $$9F
tS9_E
$?R8RS
4?Z9Z[
dC:S4ST
D#@V:VW
-CD
)Q?DYtyy)+<T\\+JDLbLbdhdvdvwDMMTZZ5KdR]deHH9$T4>>:J	^^j ,,^J-Wbi,j	F3t9+:488*
EFr   __main__)r   ry   r   ry   r   dictreturnstr)rn   ro   )
r0   zdict[str, dict]r1   zdict[str, dict[str, list[int]]]r2   ry   r3   ry   r   
list[dict])z../web)r;   r   rF   r   r   r   )r;   r   r   zdict[str, list[dict]])r;   r   r_   r   r   r   )r`   r   r_   r   r   r   )r   None)ru   
__future__r   rs   r}   collectionsr   r   pathlibr   summarize_map_tilesr   tile_classesr   r{   __file__resolverT   ROOTrw   rx   r   r<   rN   rR   rb   rh   r   __name__r   r   r   <module>r      s    A "   ,  ) 2 H~''*
Ulf}+  	'
',' ' 	'
 'T4F G& zF r   