
    Mi                        S SK r S SKJrJr  S SKrS SKrS SKJr  S SKJ	r	J
r
Jr  / SQrS\S\4S jr\ R                  " S	\ R                   \ R"                  -  S
9r\ R                  " S\ R                   \ R"                  -  S
9r/ SQrSS\\   S\\   S\\   4S jjrS\S\4S jrSS\\	   \\   -  4S jjrSS\\\\         S\4S jjrS\\   S\4S jrg)    N)ListTuple)
PolygonBox)TextLineTextWordTextChar)	+-*=^_\{}textreturnc                 `   [        U 5      S:  a  U $ [        R                  " SU [        R                  5      (       al  U R	                  S5      S:X  aW  [        [         Vs/ s H  oU ;   PM	     sn5      (       d0  [        R                  " SSU 5      n [        R                  " SSU 5      n U $ s  snf )N2   z/^\s*<math(?:\s+display="inline")?.*?</math>\s*$<math   z	<math.*?> </math>)lenrematchDOTALLcountanyMATH_SYMBOLSsub)r   symbs     p/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/surya/recognition/util.pyunwrap_mathr$      s    
4y2~ 	CT299UUJJw1$l;ldT\l;<< vvlB-vvj"d+K <s   B+z(<math\b[^>]*>)(.*?)</math>flagsz(</?(?:br|u|del|mark|i|b|sup|sub)\b[^>]*>)
pliuloltabletdtrthtbodypre
text_charstags_to_filterc                 D   / n/ nSnUc  [         nU  H  nUR                  nUR                  S5      (       d  U(       a  SnUR                  U5        UR	                  S5      (       a  SR                  S U 5       5      nUSS R                  5       nUR                  S	5      nU(       d  UR                  U5        Sn/ nM  UR                  5       S
   n	X;   a  OUR                  U5        Sn/ nM  M  UR                  U5        M     U(       a  UR                  U5        U$ )NF<T>r   c              3   8   #    U  H  oR                   v   M     g 7fN)r   ).0cs     r#   	<genexpr>(filter_blacklist_tags.<locals>.<genexpr>0   s     "?;a66;s   r   /r   )	DEFAULT_TAGS_TO_FILTERr   
startswithappendendswithjoinstripextendsplit)
r1   r2   filtered_charschar_bufferin_tag	text_charcharfull_taginnertag_name_candidates
             r#   filter_blacklist_tagsrN   "   s   NKF/	~~??36Fy)}}S!!77"?;"?? 2,,.C( "))+6"F"$K%*[[]1%5"%7 #))+6 + ". !!),;  @ k*    htmlc                    S n[         R                  X5      nSn/ n[        R                  " SU[        R                  S9 H  nUR                  5       R                  S5      (       a  US-  nUR                  U5        M?  UR                  5       S:X  a!  U(       a  US-  nUR                  U5        Mr  Mt  UR                  U5        M     SR                  U5      $ )	Nc                     [         R                  SU R                  S5      5      nUR                  5       (       a  U R                  S5       U S3$ S$ )Nr      r   r   )
STRIP_TAGSr!   grouprC   )mrL   s     r#   _innerclean_math_tags.<locals>._innerQ   sB    r1771:.05!''!*eWG,E2ErO   r   z(</?math[^>]*>)r%   r   r   r   r   )	
MATH_BLOCKr!   r   rE   Ilowerr?   r@   rB   )rP   rW   cleaneddepthpartstokens         r#   clean_math_tagsr`   O   s    F nnV*G EE,gRTTB;;=##G,,QJELL[[]i'
U# 
 LL C 775>rO   linesc                 J   0 nU  HZ  n[        [        U[        5      (       a  UR                  S   O
US   S   U-  5      U-  nXB;  a  / X$'   X$   R	                  U5        M\     / n[        UR                  5       5       H!  u  pg[        US S9nUR                  U5        M#     U$ )Nr   bboxc                 Z    [        U [        5      (       a  U R                  S   $ U S   S   $ )Nr   rc   )
isinstancer   rc   )xs    r#   <lambda>!sort_text_lines.<locals>.<lambda>}   s)    jH.E.E!W1V9UV<!WrO   )key)roundre   r   rc   r@   sorteditemsrD   )	ra   	tolerancevertical_groupsline	group_keysorted_linesr   rU   sorted_groups	            r#   sort_text_linesrs   h   s     OdH-- 		!&\!_y0
  	 +)+O&"))$/  L?0023W
 	L)	 4 rO   bboxesthreshc                 Z   [        U 5      S:  a  U $ U S   /n[        S[        U 5      5       Hz  nSnXS-
     nX   n[        S5       H?  n[        Xg   S   XW   S   -
  5      U:  d  [        Xg   S   XW   S   -
  5      U:  d  M=  Sn  O   U(       a  Mg  UR                  X   5        M|     U$ )NrS   r   r   T   F)r   rangeabsr@   )rt   ru   
new_bboxesiclose	prev_bboxrc   js           r#   clean_close_polygonsr      s    
6{Q)J1c&k"q5M	yqADGAJa01F:twqzILO34v=  ufi( # rO   charsline_boxc                 T   / nS n[        U 5       H  u  pEUR                  (       d  U(       a  UR                  U5        S nM2  U(       d4  [        S0 UR	                  5       D6nUS:X  a  UR                  U5        Mk  Mm  UR                  R                  5       (       d  U(       a  UR                  U5        S nM  UR                  U5        UR                  UR                  -   Ul        U[        U 5      S-
  :X  d  M  UR                  U5        M     U(       a  UR                  U5        U$ )Nr   r    )	enumerate
bbox_validr@   r   
model_dump
merge_leftr   rC   merger   merge_right)r   r   wordswordr{   rJ   s         r#   words_from_charsr      s    EDU#T"0doo/0D Av)  ""T"D JJt		DII-DICJN"  *1 $2 TLrO   r7   )g      ?)g?)r   typingr   r   numpytorchsurya.common.polygonr   surya.recognition.schemar   r   r   r    strr$   compilerZ   SrY   rT   r>   rN   r`   dictrs   intfloatr   r   r   rO   r#   <module>r      s   	    + A A=c c " ZZ6bddRTTkJ
ZZC244RTRVRV;W
[ *d8n *d3i *[_`h[i *Z# # 24>DJ6 8d49o!6  .DN j rO   