
    UHj.                    ^   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 ddl	m
Z
  ee      j                         j                  d   Zedz  ZdZd	Zd
dddddddddddddddgZ ej&                  d      Zd"dZd#dZd$dZd%dZd&dZd'dZd(dZd(dZd)dZd*d Zed!k(  r e        yy)+zKSummarize current selector scene-record adjacency around the route blocker.    )annotationsN)Path)Any   outmap1_01amap2_02dtop   )sidexybottom   /   left      right"      z^map\d+_\d+[a-z]\.cns$c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     J/home/exedev/hwanse/tools/summarize_save_selector_scene_record_sequence.py	load_jsonr#      s*    ;;=::dnngn677    c                    t         j                  |       ry| j                  d      ry| j                  d      ry| j                  d      ryy)	Nz	field-mapmap_tilesetcara_	characterface_faceresource)FIELD_MAP_REmatch
startswith)names    r"   cns_kindr1       sC    $vwwr$   c           	        g }| D ]  }|j                  d      }|j                  d      }t        |t              rt        |t              sFt        D ]  }|d   }|d   }||f||fk(  r8|j	                  i ||j                  d      |j                  d      dd       N||f||fk(  sX|j	                  i ||j                  d      |j                  d      d	d         |S )
Nu16Lou16Hir   r   vaHexvalueHexzx,y)r5   r6   r   zy,x)get
isinstanceintGEOMETRY_EXIT_SAMPLESappend)wordshitswordlohisampler   r   s           r"   geometry_word_hitsrB   ,   s    D yXXgXXg"c"*R*=+ 	yFsAsABxAq6!wvw0AtxxXbOcqvwxbaV#wvw0AtxxXbOcqvwx	yy Kr$   c                   | || }|r|d   ni }|D cg c]e  }|j                  d      rR|j                  d      |j                  d      t        |j                  d      xs d      |j                  d      du dg }}|D cg c]i  }|j                  d      s|j                  d      rE|j                  d      |j                  d	      |j                  d      |j                  d      du d
k }}|D cg c]g  }|j                  d      sT|j                  d      sC|j                  d      |j                  d	      |j                  d      |j                  d      di }}|j                  d      xs dj                  d      |j                  d      |j                  d      |j                  d      |r|d   j                  dd      dz   n|t        |      |t	        |D 	ch c]  }	|	d   	 c}	      t        d |D              |D 	cg c]  }	|	d   r	|	d    c}	||d d t        |      dS c c}w c c}w c c}w c c}	w c c}	w )Nr   cnsr5    fieldMapRecordStartT)r5   r0   kindrF   pointerr6   )r5   r6   rD   rF   r3   r4   )r5   r6   r3   r4   z.cns
sceneIdHexindexr   rG   c              3  ,   K   | ]  }|d    s	d  yw)rF   r   N ).0entrys     r"   	<genexpr>z$summarize_segment.<locals>.<genexpr>g   s     "^G\A]1"^s   
r0   r   )maprecordVaHexrI   wordStartIndexwordEndIndexExclusive
dwordCount
cnsEntriescnsKindsfieldMapRecordCountresourceCnspointerEntriescommandValueSamplegeometryExitWordHits)r7   r1   removesuffixlensortedsumrB   )
r<   start_index	end_indexsegmentstartr>   cns_entriespointer_entriescommand_valuesrO   s
             r"   summarize_segmentrh   =   s<   K	*G!GAJrE 	 88E? XXg&HHUOTXXe_23#'88,A#Bd#J		
	K 	" 	 88I$((5/ XXg&,88E?#'88,A#Bd#J		
	O 	" 	 xx	"488E? XXg&,XXg&XXg&		
	N 	 		% &B44V<yy)ii-))G,DK!!<q!@Q\'l!{CeE&MCD""^+"^^3>c%eLaFbfc),Sb1 27 ; =			$ Dcs&   A*H4A.H97A,H>'I
IIc                   t        | j                  d      xs g d       }t        |      D cg c]  \  }}|j                  d      s| }}}g }t        |      D ]E  \  }}|dz   t        |      k  r||dz      n
t        |      }|j	                  t        |||             G |D 	ci c]  }	|	j                  d      |	 }
}	t        d t        |      D        d       }t        d t        |      D        d       }|
j                  t              xs i }|
j                  t              xs i }|d uxr ||dz   k(  }g }|q|o|j                  d	      }|j                  d
      }t        |t              r=t        |t              r-|D cg c]"  }||j                  dd      cxk  r|k  rn n|$ }}t        |      |j                  dg       z   }| j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      ||D 	cg c]  }	|	j                  d       c}	||t        |      |t        |      d|rddS ddS c c}}w c c}	w c c}w c c}	w )Nr<   c                &    | j                  dd      S )NrJ   r   r7   )items    r"   <lambda>z'summarize_leaf_stream.<locals>.<lambda>p   s    DHHWa<P r$   )keyrF   r   rQ   c              3  X   K   | ]"  \  }}|j                  d       t        k(  s| $ ywrQ   N)r7   SOURCErN   rJ   rc   s      r"   rP   z(summarize_leaf_stream.<locals>.<genexpr>w   &     i>5'GKKX]L^bhLhi    **c              3  X   K   | ]"  \  }}|j                  d       t        k(  s| $ ywrp   )r7   TARGETrr   s      r"   rP   z(summarize_leaf_stream.<locals>.<genexpr>x   rs   rt   rT   rS   rJ   rK   r\   leafPointerHexselectorsourcetargetsourceRecordVaHextargetRecordVaHexblockedz-scene-record-adjacency-without-strict-hotspotz(scene-record-list-without-strict-hotspot)rw   rx   ry   rz   r{   r|   sourceToTargetAdjacentrecordSequencesourceSegmenttargetSegmentbetweenSourceAndTargetWordCountr\   geometryExitWordHitCountpromotionStatusclassification)r_   r7   	enumerater^   r;   rh   nextrq   rv   r8   r9   rB   )rowr<   rJ   r>   field_startssegmentsoffsetrd   endrc   by_mapsource_indextarget_indexsource_segmenttarget_segmentsource_to_target_adjacentbetween_words
source_endtarget_startgeometry_hitss                       r"   summarize_leaf_streamr   o   s   3777#)r/PQE-6u-=akeTJ_A`EaLaH"<0 >*01*s<7H*Hl6A:&cRWj)%<=> :BBggkk% ')BFBiYx5HikopLiYx5HikopLZZ'-2NZZ'-2N ,D 8 ]\\\]M]=]ML$<#''(?@
%))*:;j#&:lC+H!&'2!6EE M  '}58J8JKace8ffM''"23GGJ'''(#''(# WW%89 WW%89";=EF'7;;u-F''+.}+= -$'$6$ ) <! $ 7% + b
 C Gs   I1
I1*I7	'I<5Jc           
        | D cg c]=  }|j                  d      t        k(  r#|j                  d      t        k(  rt        |      ? }}t	        d |D              }t	        d |D              }dt        t        t        |      |||ddd	S c c}w )	Nry   rz   c              3  D   K   | ]  }|j                  d       sd  yw)r~   r   Nrk   rN   r   s     r"   rP   z build_summary.<locals>.<genexpr>   s     Pscgg6N.OPs     c              3  @   K   | ]  }|j                  d d        yw)r   r   Nrk   r   s     r"   rP   z build_summary.<locals>.<genexpr>   s     TSWW%?CTs   zFcurrent selector 2:0 scene-record sequence around map1_01a -> map2_02dr}   aI  map1_01a and map2_02d appear as adjacent field-map scene records in the current selector leaf streams, but the source record has no geometry-exit coordinate word matching the routeAssist samples and no strict hotspot row between the two field-map records. This remains selector scene-list adjacency, not a normal tile transition.)	scopery   rz   rowCountadjacentSceneRecordCountr   rowsr   
conclusion)r7   rq   rv   r   r`   r^   )leaf_streamsr   r   adjacent_countgeometry_hit_counts        r"   build_summaryr      s      778&3778+<+F 	c"D 
 PdPPNTtTTYI$2$6$ s   AB
c                H   ddd| d    d| d    d| d    d	d
| d    d| d    d| d    d| d    d	d| d    dddg}| d   D ]8  }|j                  d      xs i }|j                  d      xs i }dj                  |j                  d      xs g       }dj                  |j                  d      xs g       }|j                  d|j                  d       ddj                  |j                  d      xs g        d|j                  d        d!|j                  d"       d#|j                  d        d!|j                  d"       d|xs d$ d%|xs d$ d%|j                  d       d%|j                  d&       d'       ; |j                  d       d(j                  |      S ))Nz%# Save Selector Scene Record SequencerE   z	- scope: r   z- source-target: `ry    -> rz   `z- leaf streams: r   z- adjacent scene records: r   z- geometry exit word hits: r   z- promotion: `r   z- conclusion: r   zn| leaf | sequence | source record | target record | source resources | target resources | coord hits | class |z2| --- | --- | --- | --- | --- | --- | ---: | --- |r   r   r   , rY   z| `rw   z` | r   z | `rR   z` `rI   z` | `-z | r   z |
)r7   joinr;   )summarylinesr   ry   rz   source_resourcestarget_resourcess          r"   markdownr      s   /

GG$%&
WX./tGH4E3FaH
7:./0
$W-G%H$IJ
%g.H&I%JK
!234A6
./0
x<E v 
)/R)/R99VZZ%>%D"E99VZZ%>%D"E#''*+,DSWWEU=V=\Z\1]0^ _

=)*#fjj.F-G H

=)*#fjj.F-Gt&3's+;+Bs*C3ww1233sww?O7P6QQS	U	

 
LL99Ur$   c                2   g }| d   D ]  }|j                  d      xs i }|j                  d      xs i }|j                  dt        j                  |j                  d      xs d       dt        j                  dj	                  |j                  d	      xs g              d
t        j                  |j                  d      xs d       dt        j                  |j                  d      xs d       d
t        j                  |j                  d      xs d       dt        j                  |j                  d      xs d       dt        j                  dj	                  |j                  d      xs g       xs d       dt        j                  dj	                  |j                  d      xs g       xs d       d|j                  d       dt        j                  |j                  d      xs d       d        dj	                  dddddddddddd d!d"d#d$d%t        j                  | d&          d'd(| d)    d*| d    d+t        j                  | d,          d-d.t        j                  | d/          d'd0d1d2j	                  |       d3d4d5d2g      S )6Nr   r   r   z<tr><td><code>rw   r   z</code></td><td>r   r   z</td><td><code>rR   z</code><br>rI   z	</td><td>r   rY   r   r   z
</td></tr>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">z4  <title>Save Selector Scene Record Sequence</title>z	  <style>z^    body { margin: 24px; background: #101010; color: #eee; font: 14px system-ui, sans-serif; }z5    table { border-collapse: collapse; width: 100%; }zM    th, td { border: 1px solid #333; padding: 6px 8px; vertical-align: top; }z    th { background: #1d1d1d; }z    code { color: #f5d76e; }z
  </style>z</head>z<body>z.  <h1>Save Selector Scene Record Sequence</h1>z  <p>Scope: r   z</p>z#  <p>Adjacent scene records: <code>r   z(</code>. Geometry exit word hits: <code>z</code>. Promotion: <code>r   z</code>.</p>z  <p>r   z  <table><thead><tr><th>leaf</th><th>sequence</th><th>source</th><th>target</th><th>source resources</th><th>target resources</th><th>coord hits</th><th>class</th></tr></thead>z	  <tbody>rE   z</tbody></table>z</body>z</html>)r7   r;   htmlescaper   )r   r   r   ry   rz   s        r"   	html_pager      s   Dv 
)/R)/RSWW-=%>%E#FG H;;v{{3773C+D+JKLM NVZZ%>%E#FG{SWS^S^_e_i_ijv_w_~{~S  SA AVZZ%>%E#FG{SWS^S^_e_i_ijv_w_~{~S  SA A;;tyyM)B)HbIPSQR S;;tyyM)B)HbIPSQR S77567 8;;sww'78?C@A B		

 99"P>h?W)&8
t{{77#345T:
-g6P.Q-RRz  |C  D^  |_  {`  `z  {  {F  {F  GN  O`  Ga  {b  zc  co  	p
GL12348 	{
BGGDM?"23
1  r$   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz(save_selector_scene_record_sequence.jsonF   )ensure_asciiindentr   r   r   (save_selector_scene_record_sequence.html)mkdir
write_textr   dumpsr   )r   out_dirs     r"   write_outputsr     sf    MM$M.99EE

7q9D@ F  99EEiPWFXcjEkr$   c                 n   t        j                  t              } | j                  dt        t
        dz         | j                  dt        t
               | j                         }t        t        |j                  g             }t        ||j                         t        d|j                  dz          y )N)descriptionz--leaf-streamszsave_selector_leaf_streams.json)typedefaultz	--out-dirz-wrote save selector scene record sequence -> r   )argparseArgumentParser__doc__add_argumentr   OUT
parse_argsr   r#   r   r   r   print)parserargsr   s      r"   mainr     s    $$9F
(tSCd=de
$<DId&7&7<=G'4<<(	9$,,Is:s9t
uvr$   __main__)r    r   r!   r   returnr   )r0   strr   r   )r<   
list[dict]r   r   )r<   r   ra   r9   rb   r9   r   dict)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   None)r   r   ) r   
__future__r   r   r   r   repathlibr   typingr   __file__resolver   ROOTr   rq   rv   r:   compiler-   r#   r1   rB   rh   r   r   r   r   r   r   __name__rM   r$   r"   <module>r      s    Q "    	   H~''*
Ul		!$BR(!"%2B'	  rzz348	"/d+\4>*Zlw zF r$   