
    #h                         S SK r S SKrS SKJr  S SKJrJrJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKrS SKJrJrJrJrJrJr  S SKJrJr  S	S
KJrJrJrJr  SS/rSr \ RB                  RE                  5       (       a  SOSr#\ RH                  " S5        \" SS5      r% " S S5      r&\S4S jr'S r(S r)S r*S r+\+r,S r-S r.SS.S jr/S r0S  r1S! r2S" r3g)#    N)
namedtuple)ProcessPoolExecutorThreadPoolExecutoras_completed)partial)Pool	cpu_count)Path)	BarColumnProgressTaskProgressColumn
TextColumnTimeElapsedColumnTimeRemainingColumn)U_CHECK_MARKU_CROSSED_SWORDS   )identity
memory_useprogram_nametry_readparallel_procprocessing_loopz	ERROR.log
i   __Taskzpayload args kwargsc                   0    \ rS rSrS r\S 5       rS rSrg)ParprocResult$   c                 V    Xl         S U l        S U l        SU l        SU l        SU l        g )Nr   )payloadoutcome	exception	linecounttimememory)selfr!   s     R/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/util/parproc.py__init__ParprocResult.__init__%   s*    	    c                     U R                   S L $ N)r#   r'   s    r(   successParprocResult.success-   s    ~~%%r+   c                 ,    [        U R                  5      $ r-   )str__dict__r.   s    r(   __str__ParprocResult.__str__1   s    4==!!r+   )r#   r$   r&   r"   r!   r%   N)	__name__
__module____qualname____firstlineno__r)   propertyr/   r4   __static_attributes__ r+   r(   r   r   $   s      & &"r+   r   Fc                    [         R                  " 5       n[        UR                  5      n U " UR                  /UR                  Q70 UR
                  D6n[        5       Ul        [        US5      (       a  UR                  Ul	        O1[        [        UR                  5      R                  5       5      Ul	        U" U5      Ul        [         R                  " 5       U-
  Ul         U$ ! [         a      [         R                  " 5       U-
  Ul         g [         a  nXul         S nAN\S nAff = f! [         R                  " 5       U-
  Ul         f = f)Nr$   )r%   process_timer   r!   argskwargsr   r&   hasattrr$   lenr   
splitlinesr"   KeyboardInterrupt	Exceptionr#   )processtaskpickablereraise
start_timeresultr"   es           r(   process_payloadrM   5   s   ""$J4<<(F7$,,BBdkkB"7K((&00F"8DLL#9#D#D#FGF!'* '')J6M   '')J6   '')J6s6   BC% %
D'/D* 	D'D"D* "D''D* *E	c           	   #     #    [        S[        5       5      nUS-  n[        S[        U5      U5       Vs/ s H	  oRXUU-    PM     nnU HV  nU " US9 nU V	s/ s H  oR	                  X5      PM     n
n	[        U
5       H  nUR                  5       v   M     S S S 5        MX     g s  snf s  sn	f ! , (       d  f       Mt  = f7f)N      r   )max_workers)maxr	   rangerB   submitr   rK   )executorrF   tasksnworkersnichunkschunkexrG   futuresfutures               r(   _executor_pmapr_   J   s     1ik"H1A&+As5z1&=>&=A!en&=F>(+r<ABEDyy/EGB&w/mmo% 0 ,+  ? C ,+s:   2B?B#B?B-B(0&B-B?(B--
B<	7B?c              #   @   #    [        [        X5       S h  vN   g  N7fr-   )r_   r   rF   rV   s     r(   _thread_pmaprb   U   s     0'AAA   c              #   @   #    [        [        X5       S h  vN   g  N7fr-   )r_   r   ra   s     r(   _process_pmapre   Y   s     17BBBrc   c              #     #    [        S[        5       5      nUS-  n[        S[        U5      U5       Vs/ s H	  oAXDU-    PM     nn[	        S U 5       5      n[        U5      U:w  a  [        S[        U5      U4-  5      eU H.  n[        US9 nUR                  X5       S h  vN   S S S 5        M0     g s  snf  N! , (       d  f       MI  = f7f)NrO      r   c              3   8   #    U  H  n[        U5      v   M     g 7fr-   )rB   ).0cs     r(   	<genexpr>_imap_pmap.<locals>.<genexpr>c   s     '1As   z*number of chunked tasks different %d != %d)	processes)rR   r	   rS   rB   sumRuntimeErrorr   imap_unordered)	rF   rV   rW   rX   rY   rZ   countr[   pools	            r(   
_imap_pmaprs   ]   s     1ik"H1A&+As5z1&=>&=A!en&=F>'''E
5zUG3u:W\J]]^^H%**7::: &%  ? ; &%s;   2CB5A
CB<#B:$B<(C:B<<
C	Cc              /     #    UR                  S[        5      nUR                  SS5      nUR                  SS5      n[        [        XUS9nU  Vs/ s H  n[	        XrU5      PM     nn [        U5      S:X  a  U" US   5      v   g U(       a  [        O[        n	U	" X5       S h  vN   g s  snf  N
! [         a     g f = f7f)	NrH   parallelTrI   F)rH   rI   rO   r   )	popr   r   rM   r   rB   _pmapmaprD   )
payloadsrF   r?   r@   rH   ru   rI   r!   rV   pmaps
             r(   r   r   n   s     zz*h/Hzz*d+HjjE*Gow7SG:BC(wVG6*(ECu:?%(##$5#DG+++ D , sT   ACB*&C)B1 CB1 $B/%B1 )C/B1 1
B>;C=B>>Cc                     [        [        S[        5        35      [        5       [	        5       [        5       [        5       [        S5      SSS9nUR                  SU S9nX4$ )Nz[progress.description]z([progress.description]{task.description}rO   g      >@)refresh_per_secondspeed_estimate_period )total)r   r   r   r   r   r   r   add_task)r   progressrG   s      r(   _build_progressbarr      sd    +LN+;<==>"
H Ru-D>r+   )rI   c          	   /     #     [        U 5      nSnSn[        R                  " 5       n[        X/UQ70 UD6n	U	=(       d    / n	Sn
SnSn[        U5      u  pUS:X  a  [        R
                  nO[        [        5      R                  S5      nU   U	 GH  nUc  M	  U
S-  n
[        R                  " 5       U-
  n[        UR                  5      R                  nUR                  (       a
  S[         3nO	S[         3nUR                  USU SU 3S9  UR                  (       aG  [        US9   [        S	UR                  US9  [        UR                  US9  U(       a  UR                  eO4UR&                  b'  US-  nUUR(                  -  nUUR                  -  nUv   UR+                  5         GM     UR                  USSS9  UR-                  5         S S S 5        [/        XX{X5        g ! [          a+    [        S
[#        UR                  5      R$                  US9   Nf = f! , (       d  f       NT= f! [0         a     g f = f7f)Nr   rO   wz[red]z[green] )advancedescriptionfilezERROR:	EXCEPTIONr~   )rB   r%   r   r   sysstderrr
   ERROR_LOG_FILENAMEopenr!   namer#   r   r   updateprintrE   typer6   r"   r$   flushstopfile_process_summaryrD   )	filenamesrF   rI   r?   r@   r   
total_timerun_timerJ   resultsrq   success_countsuccess_linecountr   progress_tasklogrK   filenameicons                      r(   r   r      s%    <I
YY[
	DTDVD-R"4U";A:**C)*//4C!>
!YY[:5
/44##"#3"45D$\N3D!#'&( 4    ##sOVhSAf..S9 $... ^^/!Q&M%)9)99%+H L		E "H OOM1"OEMMOM N 	8<M	
 % Vk40@0@+A+J+JQTUV1 XT  sg   H?BH/ BH))G&A>HH/ %H?&2HHHH
H,(H/ /
H<9H?;H<<H?c                 n   U R                   nX-  nU R                  [        5       -   S-  nX!-
  S-  U-  SU-  -  nSS[        SU-  5      -  -  n[	        SX4-  USS	U-  -  [        U5       S
3[        U 5      U(       a  SU-  OS[        U5      R                  S-   S S [        R                  [        S9	  g )Ni   g?g?z[%-24s]#   z%3d/%-3dz%3d%%d   ETAz%3dMiBr~   P                                                                                (   )r   end)r!   r&   r   roundr   format_hoursformat_minutesr
   r   r   r   EOLCH)	latest_resultrq   r   r   r   percent	mb_memoryetabars	            r(   file_process_progressr      s    $$HmG%%
4+FI=C
*
,e
<C
sU2<00
1C	e^#3=!
S!}% )9r	h		x	'"-ZZ
r+   c                 H    U R                   S-  S SU R                   S-  S 3$ )N<   z3.0f:z04.1fr%   )rK   s    r(   r   r      s+    kkBt$AfkkB&6u%=>>r+   c                 4    U S-  S SU S-  S-  S SU S-  S 3$ )Ni  z2.0fr   r   z02.0fr<   r   s    r(   r   r      s3    dl4 42:"3E!:!D2Ie;LMMr+   c                    SnSnU  H.  nUS-  n[        [        U5      R                  5       5      n	Xy-  nM0     Xc-
  n
SnSR                  S UR                  5        5       5      nUR	                  UUUUU
US:w  a  SU-  U-  OS[        U5      [        U5      5      n[        [        S-   US9  [        XS9  [        [        S-   [        R                  S9  U
(       a;  [        R                  " S	UR                   S
35        [        [        R                  S9  U[        R                  :w  a  [        U[        R                  S9  U
(       a  [        R                  " S5        g g )Nr   rO   aH          -----------------------------------------------------------------------
        {:12,d}   files input
        {:12,d}   source lines input
        {:12,d}   total lines processed
        {:12,d}   successes
        {:12,d}   failures
        {:12.1f}%  success rate
         {:>13s}  time
         {:>13s}  run time
    r   c              3   @   #    U  H  oR                  5       v   M     g 7fr-   )strip)ri   ss     r(   rk   'file_process_summary.<locals>.<genexpr>  s     J0I1WWYY0Is   r   r   r   z$[red bold]FAILURES logged to [green]!)rB   r   rC   joinformatr   r   r   r   r   richr   exit)r   r   r   r   r   r   	filecountr$   fnamenlinesfailuressummary_textsummarys                r(   r   r      s6    IIQ	Xe_//12		  (H
L 99J0G0G0IJJL!!+4>mi'qZ X	G 
%(
%	'	%(
,

9#((1EF3::
cjjgCJJ' r+   )4r   r%   collectionsr   concurrent.futuresr   r   r   	functoolsr   multiprocessingr   r	   pathlibr
   r   rich.progressr   r   r   r   r   r   tatsu.util.unicode_charactersr   r   utilr   r   r   r   __all__r   r   isattyr   setrecursionlimitr   r   rM   r_   rb   re   rs   rw   r   r   r   r   r   r   r   r<   r+   r(   <module>r      s    
  " T T  +   
 @ ?-
. ! 

!!##   e 	H3	4" "" -5e *&BC; 	$  8= =@,?N.r+   