o
    ïT·j)  ã                   @   s^   d Z ddlZddlZddlZddlmZ ddlmZ G dd„ dejƒZ	e
dkr-e ¡  dS dS )z>Microbenchmarks for JSON format parsing and custom enum names.é    N)Újson_format)Újson_enumval_custom_string_pb2c                   @   s   e Zd ZdZdd„ ZdS )ÚJsonFormatBenchmarkz(Microbenchmarks for JSON format parsing.c           ,   
      s€  g d¢‰g d¢‰ g d¢‰dd  g d¢d ¡ d ‰dd  g d	¢d ¡ d ‰dd  g d
¢d ¡ d ‰d}d}d‰d}t ¡ ‰tdƒD ]}ˆ D ]}ˆ ¡  t |ˆ¡ qGqC‡‡‡fdd„}‡ ‡‡fdd„}‡‡‡fdd„}‡‡‡fdd„}	‡‡‡fdd„}
‡‡‡fdd„}dtj|ˆjd�t	ˆƒˆ fdtj|ˆjd�t	ˆ ƒˆ fdtj|ˆjd�t	ˆƒˆ fdtj|	ˆjd�|ˆ fd tj|
ˆjd�|ˆ fd!tj|ˆjd�|ˆ fg}d"d#„ |D ƒ}t|ƒD ]}|D ]\}}}|| }|j|d$�}||  
|d% | ¡ qäqàd&d'„ }||d ƒ\}}}}||d ƒ\}}}}||d ƒ\}}}}||d ƒ\} }!}"}#||d  ƒ\}$}%}&}'||d! ƒ\}(})}*}+td(|d)›d*|d)›d+|d)›d,|d)›d-�	ƒ td.|d)›d*|d)›d+|d)›d,|d)›d-�	ƒ td/|d)›d*|d)›d+|d)›d,|d)›d-�	ƒ td0|!d)›d1| d)›d2|"d)›d,|#d)›d3�	ƒ td4|%d)›d1|$d)›d2|&d)›d,|'d)›d3�	ƒ td5|)d)›d1|(d)›d2|*d)›d,|+d)›d3�	ƒ d6S )7zFBenchmarks parsing of default, custom, and unknown enum names in JSON.)z{"armor":"ARMOR_GREAT_HELM"}z{"armor":"ARMOR_GAUNTLET"}z{"armor":"ARMOR_PLATE"}z{"armor":"ARMOR_COIF"}z{"armor":"ARMOR_PAULDRON"}z{"armor":"ARMOR_SABATON"}z{"armor":"ARMOR_HACHI_MAI_DO"})z{"armor":"gr8 helm"}z{"armor":"a\"b"}z{"armor":"\"plate\""}z{"armor":""}z{"armor":"p\taul\ndron"}z{"armor":"sabaton"}z{"armor":"8"})z{"armor":"UNKNOWN_1"}z{"armor":"UNKNOWN_2"}z{"armor":"UNKNOWN_3"}z{"armor":"UNKNOWN_4"}z{"armor":"UNKNOWN_5"}z{"armor":"UNKNOWN_6"}z{"armor":"UNKNOWN_7"}z{"armors":[ú,)z"ARMOR_GREAT_HELM"z"ARMOR_GAUNTLET"z"ARMOR_PLATE"z"ARMOR_COIF"z"ARMOR_PAULDRON"z"ARMOR_SABATON"z"ARMOR_HACHI_MAI_DO"é   z]})z
"gr8 helm"z"a\"b"z"\"plate\""z""z"p\taul\ndron"z	"sabaton"z"8")z"UNKNOWN_1"z"UNKNOWN_2"z"UNKNOWN_3"z"UNKNOWN_4"z"UNKNOWN_5"z"UNKNOWN_6"z"UNKNOWN_7"é
   éd   éb   éÈ   c                     ó0   ˆ D ]} t ˆƒD ]}ˆ ¡  t | ˆ¡ qqd S ©N©ÚrangeÚClearr   ÚParse©ÚpÚ_)Údefault_payloadsÚmsgÚ
num_parses© úq/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/google/protobuf/internal/json_format_benchmark.pyÚrun_defr   ó   þÿz>JsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_defc                     r   r   r   r   )Úcustom_payloadsr   r   r   r   Úrun_custx   r   z?JsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_custc                     s4   ˆD ]} t ˆƒD ]}ˆ  ¡  tj| ˆ dd� qqd S ©NT)Úignore_unknown_fieldsr   r   )r   r   Úunknown_payloadsr   r   Úrun_unk~   s   þÿz>JsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_unkc                     ó&   t ˆƒD ]} ˆ  ¡  t ˆˆ ¡ qd S r   r   ©r   )r   r   Úrepeated_default_payloadr   r   Úrun_rep_def„   ó   þzBJsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_rep_defc                     r!   r   r   r"   )r   r   Úrepeated_custom_payloadr   r   Úrun_rep_cust‰   r%   zCJsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_rep_custc                     s*   t ˆƒD ]} ˆ  ¡  tjˆˆ dd� qd S r   r   r"   )r   r   Úrepeated_unknown_payloadr   r   Úrun_rep_unkŽ   s   ÿþzBJsonFormatBenchmark.test_benchmark_parse_json.<locals>.run_rep_unkr   )Úsetupr   r    r$   r'   r)   c                 S   s   i | ]\}}}|g “qS r   r   )Ú.0Únamer   r   r   r   Ú
<dictcomp>·   s    zAJsonFormatBenchmark.test_benchmark_parse_json.<locals>.<dictcomp>)Únumberg    €„.Ac                 S   s\   t | ƒdk rtdt | ƒ› d�ƒ‚t | ¡}t | ¡}t | ¡}tj| dd�d }||||fS )Nr   zInsufficient samples (zB) for statistical calculations. At least 100 samples are required.)Únr	   )ÚlenÚ
ValueErrorÚ
statisticsÚmedianÚmeanÚstdevÚ	quantiles)ÚsamplesÚmed_valÚmean_valÚ	stdev_valÚp99_valr   r   r   Ústats¾   s   ÿ


z<JsonFormatBenchmark.test_benchmark_parse_json.<locals>.statsz2
[BENCHMARK] ParseJsonDefault:                med z.2fz us/op | p99 z us/op | mean u    Â± z us/opz1[BENCHMARK] ParseJsonCustom:                 med z1[BENCHMARK] ParseJsonUnknownIgnored:         med z1[BENCHMARK] ParseRepeatedJsonDefault:        med z us/item | p99 z us/item | mean z us/itemz1[BENCHMARK] ParseRepeatedJsonCustom:         med z1[BENCHMARK] ParseRepeatedJsonUnknownIgnored: med N)Újoinr   ÚKnightr   r   r   r   ÚtimeitÚTimerr0   ÚappendÚprint),ÚselfÚ
iterationsÚtrialsÚ	num_itemsr   r   r   r   r    r$   r'   r)   Ú
benchmarksÚbenchmark_samplesr,   ÚtimerÚnum_ops_per_batchÚ	total_opsÚelapsedr<   Úp99_defÚmed_defÚmean_defÚstd_defÚp99_custÚmed_custÚ	mean_custÚstd_custÚp99_unkÚmed_unkÚmean_unkÚstd_unkÚp99_rep_defÚmed_rep_defÚmean_rep_defÚstd_rep_defÚp99_rep_custÚmed_rep_custÚmean_rep_custÚstd_rep_custÚp99_rep_unkÚmed_rep_unkÚmean_rep_unkÚstd_rep_unkr   )r   r   r   r   r&   r#   r(   r   r   Útest_benchmark_parse_json   s<  			÷ÿÿóÿ	÷ÿÿóÿ	÷ÿÿóÿþ	
ý
ý
ýýýýæ"ýÿÿÿÿ
ÿÿþÿ
ÿÿÿÿÿÿþþÿÿÿþþÿÿÿþþÿÿÿþþÿz-JsonFormatBenchmark.test_benchmark_parse_jsonN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__re   r   r   r   r   r      s    r   Ú__main__)ri   r2   r?   ÚunittestÚgoogle.protobufr   Úgoogle.protobuf.jsonr   ÚTestCaser   rf   Úmainr   r   r   r   Ú<module>   s    gÿ