
    Mi%                        S SK r S SKJr  S SKrS SKJr  S SKJs  Jr	  S SK
Jr  S\\   S\\   4S jrS rSES	 jr0 S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-S.S/S0S1S2S3S4S5S6S7S8.Er\" S9S:9S; 5       rSFS<\S=\4S> jjrS?\\R(                  -  S\4S@ jrSA\R.                  SB\4SC jrSA\R.                  SB\4SD jrg)G    N)List)	lru_cache)
PolygonBoxboxesreturnc                 D   / nU  GH  nUR                    Vs/ s H  o3S   PM	     nnUR                    Vs/ s H  o3S   PM	     nn[        U5      [        U5      :X  d  [        U5      [        U5      :X  a  Mr  UR                  nSnU  Hl  nUR                   UR                   :X  a  M  UR                  n	Xi:X  a  M2  US   U	S   :  d  M@  US   U	S   :  d  MN  US   U	S   ::  d  M\  US   U	S   ::  d  Mj  Sn  O   U(       a  M  UR	                  U5        GM     U$ s  snf s  snf )Nr      F      T)polygonmaxminbboxappend)
r   	new_boxesbox_objpointxsysbox	containedother_box_obj	other_boxs
             k/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/surya/common/util.pyclean_boxesr      s   I$+OO4O5AhO4$+OO4O5AhO4r7c"gRCG!3ll	"M$$7%**IA)A,&Fil*Fil*Fil* 	 # yW%1 2 1 54s
   DDc                     Uu  p4Uu  pVXS-  nXd-  n[         R                  " U 5      n	[        U	S   U-  5      U	S'   [        U	S   U-  5      U	S'   [        U	S   U-  5      U	S'   [        U	S   U-  5      U	S'   U	$ )Nr   r	   r
   r   )copydeepcopyint)
r   processor_size
image_size
page_widthpage_height	img_width
img_heightwidth_scalerheight_scalernew_bboxs
             r   rescale_bboxr)   )   s    ,J&I)L,M}}T"HhqkL01HQKhqkM12HQKhqkL01HQKhqkM12HQKO    c                 R    SU-
  nSU-   nU S   U-  U S   U-  U S   U-  U S   U-  /$ )Nr	   r   r
   r    )r   expansion_factorexpansion_lowexpansion_highs       r   expand_bboxr0   8   sR    ((M))NQ-Q-Q. Q. 	 r*   latinz<SCRIPT-LATIN>punctuationz<SCRIPT-PUNCTUATION>cyrillicz<SCRIPT-CYRILLIC>arabicz<SCRIPT-ARABIC>chinesez<SCRIPT-CHINESE>japanesez<SCRIPT-JAPANESE>koreanz<SCRIPT-KOREAN>symbolsz<SCRIPT-SYMBOLS>greekz<SCRIPT-GREEK>armenianz<SCRIPT-ARMENIAN>hebrewz<SCRIPT-HEBREW>
devanagariz<SCRIPT-DEVANAGARI>bengaliz<SCRIPT-BENGALI>gurmukhiz<SCRIPT-GURMUKHI>gujaratiz<SCRIPT-GUJARATI>oriyaz<SCRIPT-ORIYA>tamilz<SCRIPT-TAMIL>z<SCRIPT-TELUGU>z<SCRIPT-KANNADA>z<SCRIPT-MALAYALAM>z<SCRIPT-SINHALA>z<SCRIPT-THAI>z<SCRIPT-LAO>z<SCRIPT-MYANMAR>z<SCRIPT-GEORGIAN>z<SCRIPT-ETHIOPIC>z<SCRIPT-KHMER>z<SCRIPT-MONGOLIAN>z<SCRIPT-MATH>)telugukannada	malayalamsinhalathailaomyanmargeorgianethiopickhmer	mongolianmathr	   )maxsizec                  v   0 S/ SQ_S/ SQ_SSS/_S/ S	Q_S
/ SQ_SS/_S/ SQ_S/ SQ_SS/_SS/_SS/_SS/_SS/_SS/_SS/_S S!/_S"S#/_S$/S%/S&/S'/S(/S)/S*/S+/S,/S-/S./S/.En 0 nU R                  5        H;  u  p#[        5       nU H"  u  pVUR                  [        XVS0-   5      5        M$     XAU'   M=     X4$ )1Nr1   ))A   Z   )a   z   )      )   i  )i  iO  )iP  i  )i  i  )i   io  )i   i  )i`,  i,  )i   i  r2   ))    rW   )!   /   )0   9   ):   @   )[   `   ){      )i    io   r3   )i   i  )i   i/  r4   ))i   i  )iP  i  )i  i  r5   ))i N  i  )i 4  iM  )i   iߦ r6   )i@0  i0  r7   ))i   i  )i01  i1  )i   i  r8   ))ip   i   )i   i   )i !  iO!  )iP!  i!  )i!  i!  )i "  i"  )i #  i#  )i %  i%  )i%  i%  )i%  i%  )i &  i&  )i '  i'  )i'  i'  )i)  i)  )i *  i*  )i  i r9   )ip  i  r:   )i0  i  r;   )i  i  r<   )i 	  i	  r=   )i	  i	  r>   )i 
  i
  r?   )i
  i
  r@   )i   i  rA   )i  i  )i   i  )i  i  )i   i  )i  i  )i   i  )i  i  )i   i  )i  i  )i   i  )i  i  )i   i  )rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r	   )itemssetupdaterange)script_categoriesflat_rangescategoryrangeschar_setstartends          r   script_rangesrm   b   s   \ 
\  	 
!\4 	
5\> 	 
?\J 	 
K\V 	
W\^ 	 
_\j 	 
k\P 	"#Q\R 	%&S\T 	#$U\V 	'(W\X 	$%Y\Z 	%&[\\ 	%&]\^ 	"#_\` 	"#a\b $$$%&'$%!" !$%%&%&"#&'w\~ K-3355 JEOOE%q12 ! !)H 6 ))r*   textmax_scriptsc                    [        5       u  p#UR                  5        Vs0 s H  oDS_M     nnU  H:  nUR                  5        H#  u  pG[        U5      U;   d  M  XT==   S-  ss'     M8     M<     [	        UR                  5       S SS9nU V	s/ s H  oS   S:  d  M  U	S   PM     nn	SU ;   a  UR                  SS5        US U $ s  snf s  sn	f )Nr   r	   c                     U S   $ )Nr	   r,   )xs    r   <lambda>!get_top_scripts.<locals>.<lambda>   s    1Q4r*   T)keyreversez<mathrM   )rm   keysrb   ordsortedinsert)
rn   ro   rf   rg   rh   
char_countcharrj   top_scriptstss
             r   get_top_scriptsr      s    %2_".?.D.D.FG.F(A+.FJG"-"3"3"5H4yH$$)$ #6  ))+NK#.<;RQ%!)52a5;K<$1f%|$$ H =s   CC	Cdevicec                 b   [         R                  R                  5       (       d  gS[        U 5      ;  a  g[         R                  R                  nUc  g[        [        [        UR                  S5      5      5      nUS:  a  g[         R                  R                  5       u  p4X4S-  -   nUS:  a  gg)NFcuda.)   r   
   g       @T)
torchr   is_availablestrversiontuplemapr   splitget_device_capability)r   cuda_version_strcuda_versionmajorminorcompute_capabilitys         r   is_flash_attn_2_supportedr      s    ::""$$S[  }}))S"2"8"8"=>?Lg ::335LE+Cr*   tensor
batch_sizec                     U R                   S   nX!:  a  U $ X-
  nUS:  a  U $ U SS  R                  USS5      n[        R                  " X/SS9$ )Nr   r	   )dim)shaperepeatr   cat)r   r   current_batch_sizepad_sizelast_rows        r   pad_to_batch_size_repeatr      sa    a'.H!| bc{!!(Aq1H 99f'Q//r*   c                     U R                   S   nX!:  a  U $ X-
  nSU R                  5       S-
  -  SU4-   n[        R                  " XSSS9$ )Nr   )r   r   r	   constant)modevalue)r   r   Fpad)r   r   r   r   paddings        r   pad_to_batch_sizer     sT    a'.H

q()QM9G55z;;r*   )g{Gz?)   )r   typingr   r   	functoolsr   torch.nn.functionalnn
functionalr   surya.common.polygonr   r   r)   r0   SCRIPT_TOKEN_MAPPINGrm   r   r   r   r   boolr   Tensorr   r   r,   r*   r   <module>r      s         +tJ' D,< <) # 	
 ! #  !  #  ' ! # #  !" #$  !%!!##%; @ 1j* j*X%# %C % cELL&8 T 00U\\ 0s 0 <ell < <r*   