
    F	h#                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZ ej                         Z
d Zed        Zed        Zed        Zed        Zed        Zed	        Zed
        Zed        Zed        Zed        Zd Zd Z e       Zd Zd Z G d d      Z G d d      Zd Zd Zd ZddZ d Z!e"dk(  r e!        yy)z 
Benchmarking utility for ijson
    Nc                 ,    | t         | j                  <   | S N)_benchmarks__name__)fs    J/var/www/html/backend/venv/lib/python3.12/site-packages/ijson/benchmark.py	benchmarkr	      s    K

H    c                 h    ddj                  t        |       D cg c]  }d c}      z   dz   S c c}w )N   [   ,   1   ]joinrange)n_s     r   	long_listr      s-    $))584aT455<<4s   	/
c           	      r    ddj                  t        |       D cg c]	  }d||fz   c}      z   dz   S c c}w )N   {   ,
s   "key_%d": %d   }r   r   is     r   big_int_objectr      s6    &++qJA!Q7JKKdRRJ   4
c           	      r    ddj                  t        |       D cg c]	  }d||fz   c}      z   dz   S c c}w )Nr   r   s   "key_%d": %d.0r   r   r   s     r   big_decimal_objectr   #   s8    &++58La0Aq69LMMPTTTLr   c                 p    ddj                  t        |       D cg c]  }d|fz  
 c}      z   dz   S c c}w )Nr   r   s   "key_%d": nullr   r   r   s     r   big_null_objectr!   '   s5    &++qJA0A47JKKdRRJs   3
c           
          ddj                  t        |       D cg c]  }d||dz  dk(  rdndfz   c}      z   dz   S c c}w )	Nr   r   s   "key_%d": %s   r   s   trues   falser   r   r   s     r   big_bool_objectr$   +   sW    &++q 	1Q!gBB  "# # s   >
c           	      r    ddj                  t        |       D cg c]	  }d||fz   c}      z   dz   S c c}w )Nr   r      "key_%d": "value_%d"r   r   r   s     r   big_str_objectr'   1   s8    &++qRA6!Q?RSSVZZZRr   c           	      v    d}ddj                  t        |       D cg c]	  }d||fz   c}      z   dz   S c c}w )NsC   value that is very long and should cause a bit less of JSON parsingr   r   s   "key_%d": "%s"r   r   )r   str_templater   s      r   big_longstr_objectr*   5   s?    YL&++eTUhW0A|3DDWXX[___Ws   6
c           	          ddj                  t        d      D cg c]	  }d||fz   c}      z   dz   ddj                  fdt        |       D              z   dz   S c c}w )	Nr   r   
   r&   r   r   c              3   "   K   | ]  }  y wr    ).0r   templates     r   	<genexpr>z&object_with_10_keys.<locals>.<genexpr>=   s       	s   r   r   )r   r   r0   s     @r   object_with_10_keysr2   :   sm    fkkUSUY"W#:aV#C"WXX[__H&++ q  !" " #Xs   A
c                 P    ddj                  d t        |       D              z   dz   S )Nr      , c              3       K   | ]  }d   yw)s   []Nr.   r/   r   s     r   r1   zempty_lists.<locals>.<genexpr>C        5qU5   r   r   r   s    r   empty_listsr:   A   %    %**5E!H555<<r
   c                 P    ddj                  d t        |       D              z   dz   S )Nr   r4   c              3       K   | ]  }d   yw)s   {}Nr.   r6   s     r   r1   z empty_objects.<locals>.<genexpr>G   r7   r8   r   r   r9   s    r   empty_objectsr>   E   r;   r
   c                 X    | j                  d      D cg c]  }t        |    c}S c c}w N,)splitr   )snames     r   parse_benchmarksrE   I   s#    *+''#,7$K777s   'c                      t        j                         } t        j                  D ]  }	 t        j                  |      | |<    | S # t
        $ r Y +w xY wr   )collectionsOrderedDictijsonALL_BACKENDSget_backendImportError)backendsbackend_names     r   load_backendsrO   M   sZ    &&(H** 	%*%6%6|%DH\"
 O  		s   A	AAc                 r    t        j                         }| j                  d      D ]  }t        |   ||<    |S r@   )rG   rH   rB   	_backends)rC   rM   rD   s      r   parse_backendsrR   W   s9    &&(H )"4)Or
   c                     t         j                  }|j                         r"|j                  |        |j	                          y y r   )sysstdoutisattywriteflush)messagerU   s     r   _stdout_tty_write_flushrZ   ^   s.    ZZF}}W r
   c                       e Zd Zd Zd Zd Zy)progress_messagec                     || _         y r   )rY   )selfrY   s     r   __init__zprogress_message.__init__g   s	    r
   c                 0    t        | j                         | S r   )rZ   rY   r^   s    r   	__enter__zprogress_message.__enter__j   s    -r
   c                     t        d       y )Nz[K)rZ   )r^   argss     r   __exit__zprogress_message.__exit__n   s
    
+r
   N)r   
__module____qualname__r_   rb   re   r.   r
   r   r\   r\   e   s    ,r
   r\   c                        e Zd Zd ZddZd Zy)AsyncReaderc                 8    t        j                  |      | _        y r   )ioBytesIOdata)r^   rm   s     r   r_   zAsyncReader.__init__s   s    JJt$	r
   c                 @   K   | j                   j                  |      S wr   )rm   read)r^   r   s     r   ro   zAsyncReader.readv   s     yy~~a  s   c                 8    | j                   j                          y r   )rm   closera   s    r   rq   zAsyncReader.closey   s    		r
   N))r   rf   rg   r_   ro   rq   r.   r
   r   ri   ri   r   s    %!r
   ri   c                 >   K    | |g|i |2 3 d {   }
7 6 y wr   r.   )methodreadermethod_argsmethod_kwargsr   s        r   
_run_asyncrx   |   s0     &@;@-@  a@s   c                 |    t        |       }t        |      }|dz  dk(  r||dz  dz
     ||dz     z   dz  S ||dz     S )Nr#   r      g       @)sortedlen)valuessorted_valuesr   s      r   medianr      sU    6NMMA1uza1fqj)M!q&,AARGGa  r
   c                     t        |       }t        |       |t        t        |             z  t	        |       t        |       fS r   )summinfloatr|   r   max)r}   totals     r   statsr      s4    KEv;c&k 22F6NCKOOr
   c           	          t              t              k7  sJ rBj                  }t        d|d      5    j                        t	              }d d d        n!}t        j                        j                  } fd} j                  j                         D ]  \  }} j                   j                  rdz  n j                  rdz  t        |      d j                  dv r j                  f j                   j                   d j                  s j"                  d	<    j                  rd
d l}|j'                         fd}	n j                  r	 fd}	nfd}	g }
t(        j*                  }t-         j.                        D ]M  }t1        j2                   |             5 } |       } |	|       |
j5                   |       |z
         d d d        O dz  dz  }| j                  ||ft7        |
      z   t7        |
D cg c]  }||z  	 c}      z   }t9        d|z          y # 1 sw Y   xY w# 1 sw Y   xY wc c}w )NzGenerating data for benchmark z...c                  x    st        d      S  j                  rt              S t        j                        S )Nrb)open	run_asyncri   rk   rl   )rd   benchmark_funcrm   fnames   r   
get_readerz"run_benchmarks.<locals>.get_reader   s4    t$$^^t$$zz$r
   _async_coror.   )itemskvitems)multiple_values	use_floatbuf_sizer   c                     	 j                  t        | gi        j                          y # j                          w xY wr   )run_until_completerx   rq   )ru   looprt   rv   rw   s    r   runzrun_benchmarks.<locals>.run   s;    !++Jvv,e,eWd,efJJLDJJLs	   3 Ac                      ddl m}  |       } |gi }t         fdd      D ]  }|j                  |       |d d =  |j	                          y )Nr   )sendable_listc                  :    j                   j                        S r   )ro   bufsize)rd   ru   s   r   <lambda>z-run_benchmarks.<locals>.run.<locals>.<lambda>   s    &++dll*C r
   r
   )ijson.utilsr   itersendrq   )	ru   r   eventscorochunkrd   rt   rv   rw   s	   `    r   r   zrun_benchmarks.<locals>.run   sV    5&fD{DmD!"CSI "EIIe$q	" 

r
   c                 (     | gi D ]  } y r   r.   )ru   r   rt   rv   rw   s     r   r   zrun_benchmarks.<locals>.run   s$    FFF Ar
   g      @z@%.3f, %s, %s, %s, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f)boolr   r\   sizer|   osstatst_sizerM   r   rt   r   run_corogetattrprefixr   r   r   asyncionew_event_looptimeperf_counterr   
iterations
contextlibclosingappendr   print)rd   r   r   bnamer   r   rN   backendr   r   	durationsnow	iterationru   start	megabytesdurationresultsrm   r   rt   rv   rw   s   ```               @@@@@r   run_benchmarksr      sH   4;...''uNO 	!$)),Dt9D	 	 wwu~%%  "&!4!4!6 8\g >>hF]]gF&);;..++,K#33
 }}(,M*% >>))+D! !
 ]] 
 	t/ 	0I##JL1 0VF  /0 0	0
 5L5(	UL9)	BH9x'BCD 	
 	PSZZ[q8\	 	z0 0 Cs   I)I$I$II!c                     d} d}d}dj                  t              }dj                  t              }t        j                         }|j                  ddt        d| z  |        |j                  d	d
t        d|z  |       |j                  ddt        d|z  |       |j                  ddt        d|z  |       |j                  ddt        d|z  |       |j                  dddd       |j                  ddd       |j                  dddd d!"       |j                  d#d$dd d%"       |j                  d&d'g d(d)d*+       |j                  d,d-dd d.d/0       |j                  d1d2dd d3d40       |j                  d5d6d7d89       |j                         }|j                  rQd:}|d;j                  d< t        D              z  }|d=z  }|d;j                  d> t        D              z  }t        |       y t        d?       |j                  r|j                  D ]  }t        ||@        y |j                  D ]  }	t        ||	        y )ANi rz   i   rA   z-sz--sizezGSize of JSON content; actual size in bytes might differ, defaults to %d)typehelpdefaultz-Iz--iterationsz;How many times each method should be tested, defaults to %dz-Sz	--bufsizez/Buffer size used during parsing; defaults to %dz-bz--benchmarksz=Comma-separated list of benchmarks to include, defaults to %sz-Bz
--backendsz;Comma-separated list of backends to include, defaults to %sz-lz--list
store_truez&List available benchmarks and backends)actionr   inputs*zFFile to use for benchmarks rather than built-in benchmarking functions)nargsr   z-Mz--multiple-valuesFz:Content has multiple JSON values, useful when used with -i)r   r   r   z-fz--use-floatz5Parse non-integer numbers as float instead of Decimalz-mz--method)basic_parseparser   r   zThe method to benchmarkr   )choicesr   r   z-cz--coror   zBenchmark coroutine methods)r   r   destr   z-az--asyncr   z!Benchmark asyncio-enabled methodsz-pz--prefixz#Prefix (used with -M items|kvitems) )r   r   z
Backends:

c              3   &   K   | ]	  }d |z    ywz - %sNr.   r/   rD   s     r   r1   zmain.<locals>.<genexpr>  s     >D4>   z
Benchmarks:
c              3   &   K   | ]	  }d |z    ywr   r.   r   s     r   r1   zmain.<locals>.<genexpr>  s     @D4@r   z#mbytes, method, test_case, backend, time_min, time_avg, time_median, time_max, mb_per_sec_min, mb_per_sec_avg, mb_per_sec_median, mb_per_sec_max)r   )r   r   rQ   argparseArgumentParseradd_argumentintrE   rR   
parse_argslistr   r   r   
benchmarks)
	DEFAULT_NDEFAULT_ITERATIONSDEFAULT_BUFSIZEALL_BENCHMARKSrJ   parserrd   msgfilenamer	   s
             r   mainr      s   IOXXk*N88I&L$$&F
hSVYbb   n3JM__"  $ k>P  ! n3CL~]    lJ\Y   h|5  7
U  W
1,PUI  K
mL%D  F
j2^6  O
h|U'.K  M
ie(/R  T
j/T^`aDyytyy>I>>>  tyy@K@@@c
	  ^  _{{ 	1H4x0	1  	,I4+	,r
   __main__)NN)#__doc__r   rG   r   rk   r   rT   r   rI   rH   r   r	   r   r   r   r!   r$   r'   r*   r2   r:   r>   rE   rO   rQ   rR   rZ   r\   ri   rx   r   r   r   r   r   r.   r
   r   <module>r      sp      	 	 
  %k%%' = = S S U U S S # #
 [ [ ` ` " " = = = =8 O	
, 
, !PK\\5,n zF r
   