HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/miniconda3/Tools/scripts/__pycache__/summarize_stats.cpython-312.pyc
�

�X�fy_����dZddlZddlZddlZddlZddlZddlmZddl	Z	ddl
Z
ejdk(rdZndZe
ej�ZdgZej ddD]-Zej#d	�r		ee�Zej)e��/ee�D��cic]\}}||��
c}}Zeeej3���Zd
Zd�Zd�Zd
�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d4d�Z$d�Z%d�Z&d�Z'd5d�Z(Gd�d�Z)d�Z*d�Z+d�Z,d�Z-d�Z.d �Z/d!�Z0d"�Z1d#�Z2d$�Z3d%�Z4d&�Z5d'�Z6d(�Z7d)�Z8d*�Z9d+�Z:d,�Z;d-�Z<d.�Z=d/�Z>d0�Z?d6d1�Z@d2�ZAeBd3k(reA�yy#e$rY��wxYwcc}}w)7zTPrint a summary of specialization stats for all files in the
default stats folders.
�N)�date�ntzc:\temp\py_stats\z/tmp/py_stats/z<0>��<)�specialization.hit�specialization.miss�execution_countc��|dk(ry||zd�S)zb
    Format a ratio as a percentage. When the denominator is 0, returns the empty
    string.
    r�z.01%�)�num�dens  � Tools\scripts\summarize_stats.py�format_ratior%s��
�a�x���c�'�$�� �c��t|�dk(rt|�dk(rgSt|�r4ttd�|D���}t|�dk7rtd��t|�r4ttd�|D���}t|�dk7rtd��t|�r!t|�rddk7rtd��t|�rd}nd}dg|dz
z}|D�cic]}|d|dd	��
}}|D�cic]}|d|dd	��
}}t|�t|�k7st|�t|�k7rtd
��t|j	��|j	�D�	cgc]	}	|	|vs�|	��c}	z}
|
D�	cgc]*}	|	g|j|	|��|j|	|�����,c}	Scc}wcc}wcc}	wcc}	w)zf
    Joins two tables together, side-by-side, where the first column in each is a
    common key.
    rc3�2K�|]}t|����y�w�N��len��.0�xs  r�	<genexpr>zjoin_rows.<locals>.<genexpr>8�����2�6�a�3�q�6�6���rzTable a is raggedc3�2K�|]}t|����y�wrrrs  rrzjoin_rows.<locals>.<genexpr>=rrzTable b is raggedzTables have different widthsrNzDuplicate keys)r�list�set�
ValueError�keys�get)�a_rows�b_rows�a_ncols�b_ncols�ncols�defaultr�a_data�b_data�kr!s           r�	join_rowsr,/s���
�6�{�a��C��K�1�,��	�
�6�{��s�2�6�2�2�3���w�<�1���0�1�1�
�6�{��s�2�6�2�2�3���w�<�1���0�1�1�
�6�{�s�6�{�w�q�z�W�Q�Z�'?��7�8�8�
�6�{���
����
���d�e�a�i� �G�#)�
*�6�a�a��d�A�a�b�E�k�6�F�
*�#)�
*�6�a�a��d�A�a�b�E�k�6�F�
*�
�6�{�c�&�k�!�S��[�C��K�%?��)�*�*�����
��V�[�[�]�!N�]��a�v�o�!�]�!N�N�D�KO�P�4�a�Q�A����A�w�'�A�&�*�*�Q��*@�A�4�P�P��+��
*��"O��Ps�,G�G�7	G
�G
�/Gc	��g}t|�D]n}|jd�r�|dvr|td�d}n|dk(r�.|dvr�3|jd�r�E|}|j|d�||d�t	|||�f��p|S)Nzspecialization.failure_kinds)rr�specialization.r	)�specialization.success�specialization.failure�
specializable�pairz>12)�sorted�
startswithr�appendr)�family_stats�total�rows�key�labels     r�calculate_specialization_statsr;Us���
�D��l�#���>�>�8�9���?�?���-�.�/�0�E�
�%�
%��
�Z�
Z��
�^�^�F�
#���E�����c�{��S�(9�#�'>��l�[^�N_�af�Ag�h�i�$��Krc	��d}dD]}||j|d�z
}�g}|r^dD]Y}|td�d}|dj�|ddz}|j|d�}|j||t	||�f��[|S)Nr)r/r0r.r)r"r�upperr5r)r6�total_attemptsr9r8r:�vals      r�(calculate_specialization_success_failurer@gs����N�D���,�*�*�3��2�2��E�
�D��H�C���-�.�/�0�E��!�H�N�N�$�u�Q�R�y�0�E��"�"�3��*�C��K�K���\�#�~�%F�G�H�	I�
�Krc	��|jdd�}dgdz}|D]>}|jd�s�|ddjd�\}}t|�}||||<�@t	|�D��cgc]	\}}||f��}	}}|	jd��g}
|	D]1\}}|s�	|
j
t|||�|t||�f��3|
Scc}}w)	Nr0r�(zspecialization.failure_kind����[T��reverse)	r"r4�split�int�	enumerate�sortr5�kind_to_textr)�namer6�defines�total_failures�
failure_kindsr9�_�index�value�failuresr8s           r�&calculate_specialization_failure_kindsrTts���!�%�%�&>��B�N��E�B�J�M����~�~�;�<���s��8�>�>�#�&���5��E�
��+�C�0�
�e���6?�}�5M�N�5M�>�E�5����5M�H�N��M�M�$�M��
�D� ���u������\�%��$�7���U�Tb�@c�d�e�!��K��Os�*Cc�D��d�vryt�fd�tD��}|dk(ryt|dd|�d��5t�|�}t	d|�t��}|r1t
dd	�t	d
|�t|�|�}t	d|�ddd�y#1swYyxYw)Nr1c3�B�K�|]}�j|d����y�w�rN�r")r�kindr6s  �rrz-print_specialization_stats.<locals>.<genexpr>�s�����<�e�d�� � ��q�)�e���r��specialization stats for � family)�Kind�Count�Ratio�Specialization attempts��r�Count:�Ratio:)�Failure kindrdre)�sum�TOTAL�Sectionr;�
emit_tabler@�print_titlerT)rLr6rMr7r8s `   r�print_specialization_statsrl�s�����l�*���<�e�<�<�E���z��	��q�5�d�V�7�C�	D�-�l�E�B���-�t�4�7��E����1�1�5��/��6�9�$��g�V�D��;�T�B�
E�	D�	D�s�AB�Bc����d�vryt�fd�tD��}t�fd�tD��}||zdk(ryt|dd|�d��5t�|�}t�|�}t	dt||��t
��}t
��}t||�}|rHtd	d
�t	d|�t|�|�}t|�|�}t	dt||��ddd�y#1swYyxYw)
Nr1c3�B�K�|]}�j|d����y�wrWrX)rrY�base_family_statss  �rrz9print_comparative_specialization_stats.<locals>.<genexpr>�� �����F���&�*�*�4��3��rZc3�B�K�|]}�j|d����y�wrWrX)rrY�head_family_statss  �rrz9print_comparative_specialization_stats.<locals>.<genexpr>�rprZrr[r\r])r^z
Base Countz
Base Ratioz
Head Countz
Head Ratiorarb�r�Base Count:�Base Ratio:�Head Count:�Head Ratio:)rfrtrurvrw)	rgrhrir;rjr,r@rkrT)	rLrorrrM�
base_total�
head_total�	base_rows�	head_rowsr8s	 ``      r�&print_comparative_specialization_statsr|�s����/�/���F��F�F�J��F��F�F�J��J��!�#��	��q�5�d�V�7�C�	D�2�3D�j�Q�	�2�3D�j�Q�	��L��i��+�	
�=�=N�O�	�<�=N�O�	���I�.����1�1�5��W�Y]�^�>�t�EV�X_�`�I�>�t�EV�X_�`�I��\��)�Y�/�
�
E�	D�	D�s
�BC6�6C?c
��tjj|�r+t|d�5}t	j
|�cddd�Stjj
|�r�tj�}tj|�D]�}ttjj||��5}|D]?}	|jd�\}}|j�}t#|�}||xx|z
cc<�A	ddd�|dxxdz
cc<��|St|d�d���#1swYyxYw#t$r2td|j��d|��tj ��Y��wxYw#1swY�sxYw)	N�r�:zUnparsable line: 'z' in  )�file�
__nfiles__rz  is not a file or directory path)�os�path�isfile�open�json�load�isdir�collections�Counter�listdir�joinrGr �print�strip�sys�stderrrH)�input�fd�stats�filename�liner9rRs       r�gather_statsr��s>��
�w�w�~�~�e��
�%��
���9�9�R�=��
�	�����u�	��#�#�%���
�
�5�)�H��b�g�g�l�l�5�(�3�4���D�!�%)�Z�Z��_�
��U��)�)�+�C���J�E��#�J�%�'�J��5�
�,��1�$��*����E�!�9�$D�E�F�F�%�
��&�!�� 2�4�:�:�<�.��x�j�Q�X[�Xb�Xb�c� �!��	5�4�s;�D-�?E7�D9�*E7�-D6�98E4	�1E7�3E4	�4E7�7F	c��td�D�cgc]}i��}}|j�D]O\}}|jd�s�|ddjd�\}}}||t	|�|jd�<�Q|Scc}w)N��opcode��]�.)�range�itemsr4�	partitionrHr�)r�rP�opcode_statsr9rR�n�rests       r�extract_opcode_statsr��s���!&�s��-��A�R��L�-��k�k�m�
��U��~�~�h�'�����W�&�&�s�+�
��1�d�05��S��V��T�Z�Z��_�-�	$�
���
.s�	A=c�N�tjt�}d|zdz}|D]~}|j�}|j	|�s�%|t|�d}|j
�\}}|t|j��j|j����|S)Nz#define rP)	r��defaultdictrr�r4rrGrHr5)�spec_src�prefixrM�startr�rLr?s       r�parse_kindsr��s����%�%�d�+�G����#�%�E����z�z�|�����u�%���C��J�K� ���J�J�L�	��c���C�I�I�K� �!�(�(�����6�
��Nrc�B�|jdd�j�S)NrP� )�replace�lower)�defnames r�prettyr��s���?�?�3��$�*�*�,�,rc�$�|dkrt||d�S|dk(rd}n.|jd�rd}n|dvrd}n|jd�rd}||D]/}|j|�s�t|t|�d	zd�cSd
t	|�zS)N�r�LOAD_SUPER_ATTR�SUPER�ATTR)�FOR_ITER�SEND�ITER�SUBSCRrzkind )r��endswithr4r�str)rYrM�opnamerLs    rrKrK�s����q�y��g�d�m�A�&�'�'�
�"�"���	����	 ���	�'�	'���	����	"�����
���?�?�6�"��$�s�6�{�1�}�~�.�/�/���S��Y��rc��d}d}d}tjD�chc]}d|vr|��
}}t|�D]K\}}d|vr�|d}t|}	d|vr||z
}�#|	|vr |j	dd�}
||
z
}|||
z
z
}�G||z
}�M|||fScc}w)Nr�__r	r1r)r��_specialized_instructionsrIr�r")r��basic�specialized�not_specialized�op�specialized_instructions�i�opcode_stat�countrL�misss           r�categorized_countsr��s���
�E��K��O��5�5� �5�r��r�>�	�5�� �$�L�1���;��K�/���-�.���a�y���k�)��u�$�O�
�-�
-��?�?�#8�!�<�D��t�#�O��5�4�<�'�K��U�N�E�2��/�;�.�.��! s�
Bc�6�td|z|�t�y)N�#�r�)rL�levels  rrkrks��	�#�e�)�T��	�Grc� �eZdZdd�Zd�Zd�Zy)riNc�^�||_||_|�|j�|_y||_yr)�titler�r��summary)�selfr�r�r�s    r�__init__zSection.__init__s)����
���
��?� �;�;�=�D�L�"�D�Lrc��t|j|j�td�td|jd�t�|S)Nz	<details>z	<summary>z
</summary>)rkr�r�r�r�)r�s r�	__enter__zSection.__enter__s6���D�J�J��
�
�+�
�k��
�k�4�<�<��6�
���rc�B�t�td�t�y)Nz
</details>r�)�argss r�__exit__zSection.__exit__s��
��
�l��
�r)�N)�__name__�
__module__�__qualname__r�r�r�rrrriris��#��rric�P�t|t�rt|d�St|�S)Nz,d)�
isinstancerH�formatr��rs r�to_strr�"s!���!�S���a�����1�v�
rc�r�t|�}d}d}|D]/}d}|jd�r
|dd}|dz
}||dzz
}||dzz
}�1t|�t|�|D]O}|�(t|�|k7rtdt	|�zdz��tddjd�|D��d��Qt�y)	N�|�---rrCz | z!Wrong number of elements in row '�'c3�2K�|]}t|����y�wr)r�)rr�s  rrzemit_table.<locals>.<genexpr>8s����5��A�f�Q�i��r)rr�r�r r�r�)�headerr8�width�header_line�
under_line�item�under�rows        rrjrj(s�����K�E��K��J������=�=������9�D��S�L�E��t�e�|�#���e�c�k�!�
�
�
�+��	�*�������S��U�!2��@�3�s�8�K�c�Q�R�R�
�c�5�:�:�5��5�5�s�;��
�Grc
�j�g}t|�D]A\}}d|vs�|d}d}d|vr|jd�}|j|t||f��C|j	d��d}g}|D]F\}}	}||z
}|r
t||�}nd}|j|	|t||�t||�|f��H|S)Nr	rr1rTrEr)rIr"r5r�rJr)
r�r7�countsr�r�r�r��
cumulativer8rLs
          r�calculate_execution_countsr�;s���
�F�#�L�1���;���+�� 1�2�E��D��k�1�"���'<�=���M�M�5�&��)�T�2�3�
2��K�K��K���J�
�D�%����d��e��
����e�,�D��D����T�5�,�u�e�"<�!�*�e�4�d�<�	=�
 &��Krc�x�tdd��5t||�}td|�ddd�y#1swYyxYw)N�Execution counts�%execution counts for all instructions�r�)�Namerd�Self:�Cumulative:zMiss ratio:)rir�rj)r�r7r8s   r�emit_execution_countsr�Qs5��	�#�-T�	U�)�,��>���E��	
�
V�	U�	U�s�0�9c	�B�tdd��5t||�}t||�}td�|D��}td�|D��}t|j	��t|j	��z}g}	gd�}
|D]d}|j||
�}|j||
�}
|ddk(rd}n|
d|dz
|dz}|	j
||d|
dd	|zd
�d�f��f|	jd��
�td|	�ddd�y#1swYyxYw)Nr�r�r�c3�0K�|]}|d|ddf���y�w�rrNrrs  rrz4emit_comparative_execution_counts.<locals>.<genexpr>_�����:�	�1�!�A�$��!�"���	���c3�0K�|]}|d|ddf���y�wr�rrs  rrz4emit_comparative_execution_counts.<locals>.<genexpr>`r�r�)r�0.0%r�rrr�dz0.1f�%c�8�tt|ddd��S�NrC)�abs�floatr�s r�<lambda>z3emit_comparative_execution_counts.<locals>.<lambda>ps���U�1�R�5��"�:�%6�!7� 7r�r9)r�rtrvzChange:)	rir��dictrr!r"r5rJrj)�base_opcode_statsrx�head_opcode_statsryrzr{�	base_data�	head_data�opcodesr8r(r��
base_entry�
head_entry�changes               r�!emit_comparative_execution_countsrYs)��
�#�-T�	U�.�/@�*�M�	�.�/@�*�M�	��:�	�:�:�	��:�	�:�:�	��i�n�n�&�'�#�i�n�n�.>�*?�?����(���F�"���v�w�7�J�"���v�w�7�J��!�}��!���$�Q�-�*�Q�-�7�:�a�=�H���K�K���A��
�1�
���J�t�$�A�&�(�
)��	
�	�	�7�	�8��=��	
�-
V�	U�	U�s�C>D�Dc���tjjtjjt�d�}t|�5}t
|�}ddd�|S#1swYSxYw)Nz../../Python/specialize.c�r�r�r��dirname�__file__r�r�)�	spec_pathr�rMs   r�get_definesrwsL�������R�W�W�_�_�X�6�8S�T�I�	
�i��H��h�'��
��N�
��N�s�
A#�#A-c��t�}tdd��5t|�D]\}}t|}t	|||��	ddd�y#1swYyxYw�NzSpecialization statszspecialization stats by familyr�)rrirIr�rl)r�rMr�r�rLs     r�emit_specialization_statsr}sJ���m�G�	�'�1Q�	R�'��5�N�A�{��!�9�D�&�t�[�'�B�6�
S�	R�	R�s�*A�Ac���t�}tdd��5tt||��D]\}\}}t|}t||||��!	ddd�y#1swYyxYwr)rrirI�zipr�r|)r	r
rMr��base_opcode_stat�head_opcode_statrLs       r�%emit_comparative_specialization_statsr�sa���m�G�	�'�1Q�	R�7@��EV�Xi�Aj�7k�3�A�3� �"2��!�9�D�2�4�9I�K[�]d�e�8l�
S�	R�	R�s�8A�A#c�x�t|�\}}}d|t||�fd|t||�fd|t||�fgS)N�BasiczNot specialized�Specialized)r�r)r�r7r�r�r�s     r�&calculate_specialization_effectivenessr#�sP��*<�\�*J�'�E�?�K�	�%��e�U�3�4�	�O�\�/�5�-Q�R�	��\�+�u�%E�F��rc
��td�5t||�}td|�dD]�\}}d}g}t|�D]@\}}|dk(rd|vr�|j	|d�}|j|t|f�||z
}�B|jd��|s�mt|�d	�d
�5|ddD�	�
cgc]\}	}
|
|	t|	|�f��}}	}
td|�ddd���	ddd�ycc}
}	w#1swY��xYw#1swYyxYw)
N�Specialization effectiveness)�Instructionsrdre))�Deferredzspecialization.deferred)�Missesrrr(r1TrEz by instructionr[�
)r�rdre)	rir#rjrIr"r5r�rJr)r�r7r8r��fieldr�r�r�rRr�rLs           r�emit_specialization_overviewr+�s��	�/�	0�5�l�E�J���7��>�h�L�E�5��E��F�"+�L�"9���;��H�$��K�)G��#����q�1���
�
�u�f�Q�i�0�1�����
#:�
�K�K��K�%����w�o�6��:�\b�cf�df�\g�i�\g�=�E�SW�d�E�<��u�+E�F�\g�D�i��;�T�B�;�:�i�
1�	0�� j�;�:��
1�	0�s<�BC:�C:�#	C.�,C(�C.�
C:�(C.�.C7�3C:�:Dc��td�5t||�}t||�}tdt||��ddd�y#1swYyxYw)Nr%)r&rtrurvrw)rir#rjr,)r	rxr
ryrzr{s      r�(emit_comparative_specialization_overviewr-�sF��	�/�	0�:�;L�j�Y�	�:�;L�j�Y�	��X��i��+�	
�
1�	0�	0�s�/A�A
c���tjjtjjt�d�}t|�5}t
|d��}ddd�|S#1swYSxYw)Nz../../Include/pystats.h�	EVAL_CALL)r�r)�
stats_path�	stats_srcrMs   r�get_stats_definesr2�sO�������b�g�g�o�o�h�7�9R�S�J�	
�j�	�Y��i��<��
��N�
��N�s�
A%�%A/c	�D�t�}d}|j�D]\}}d|vs�||z
}g}�|j�D]�\}}d|vrj||t||�f��)|j	d�s�;|ddjd�\}}t
|�}|dzt||d�zdz}j||t||�f���|j�D]5\}}|j	d�s�j||t||�f��7S)	NrzCalls tozCalls rCrDz (�)�Frame)r2r�r5rr4rGrHr�)	r�rMr7r9rRr8rLrQr:s	         r�calculate_call_statsr6�s���!�G�
�E��k�k�m�
��U�����U�N�E��D�$��k�k�m�
��U�����K�K��e�\�%��%?�@�A�
�^�^�H�
%��c�r�(�.�.��-�K�D�%���Z�E��4�K�&�����):�";�;�c�A�E��K�K���|�E�5�'A�B�C�$��k�k�m�
��U��>�>�'�"��K�K��e�\�%��%?�@�A�$��Krc�v�tdd��5t|�}td|�ddd�y#1swYyxYw)N�
Call stats�Inlined calls and frame statsr�rc)rir6rj�r�r8s  r�emit_call_statsr;�s/��	��'F�	G�#�E�*���+�T�2�
H�	G�	G���/�8c���tdd��5t|�}t|�}t||�}|jd���t	d|�ddd�y#1swYyxYw)Nr8r9r�c�&�t|ddd�Sr)rr�s rrz-emit_comparative_call_stats.<locals>.<lambda>�s���q��u�S�b�z�!2� 2rrrs)rir6r,rJrj)�
base_stats�
head_statsrzr{r8s     r�emit_comparative_call_statsrA�sW��	��'F�	G�(��4�	�(��4�	���I�.���	�	�2�	�3��L��	
�
H�	G�	G�s�AA�A"c�^�|jd�}|jd�|jd�z}|jd�|jd�z}|jd�|jd�z}g}|j�D]�\}}|jd�s�d	|vr
t||�}n5d
|vr
t||�}n$d|vr
t||�}nd|vr
t||�}nd
}|ddj	�}	|	dj�|	ddz}	|j
|	||f���|S)NzObject new valueszObject allocationsz Object allocations from freelistzObject interpreter increfszObject increfszObject interpreter decrefszObject decrefs�Object�materialize�allocations�increfs�decrefsr�rr)r"r�r4rr�r=r5)
r��total_materializations�total_allocations�
total_increfs�
total_decrefsr8r9rR�ratior:s
          r�calculate_object_statsrN�s/��"�Y�Y�':�;���	�	�"6�7�%�)�)�Df�:g�g���I�I�:�;�e�i�i�HX�>Y�Y�M��I�I�:�;�e�i�i�HX�>Y�Y�M�
�D��k�k�m�
��U��>�>�(�#���#�$�U�,B�C���#�%�$�U�,=�>���#�%�$�U�M�:���#�%�$�U�M�:�������G�M�M�O�E��!�H�N�N�$�u�Q�R�y�0�E��K�K���u�-�.�$��Krc�v�tdd��5t|�}td|�ddd�y#1swYyxYw)N�Object stats�+allocations, frees and dict materializatonsr�rc)rirNrjr:s  r�emit_object_statsrR�s/��	��)V�	W�%�e�,���,�d�3�
X�	W�	W�r<c��tdd��5t|�}t|�}tdt||��ddd�y#1swYyxYw)NrPrQr�rs)rirNrjr,)r?r@rzr{s    r�emit_comparative_object_statsrT�sC��	��)V�	W�*�:�6�	�*�:�6�	��T�V_�`i�kt�Vu�v�
X�	W�	W�s�-A�A
c�2�d}|D]}d|vs�||dz
}�|S)Nrr	r)r�r7r�s   r�	get_totalrV�s0��
�E�#����+��[�!2�3�3�E�$��Lrc���g}t|�D]n\}}|dk(r�|j�D]P\}}|jd�s�|ddjd�\}}}|s�3|j	||t|�ff��R�pt
dd��5|jd�	�d}	g}
tj|d
�D]L\}}|\}}
|	|z
}	|
j	t|dzt|
z|t||�t|	|�f��Ntd|
�ddd�t
d
d��5tjtj�}tjtj�}tj�}tj�}|D]5\}\}}|s�||||<||||<||xx|z
cc<||xx|z
cc<�7t j�D]�\}}||}||}|dk(r|dk(r�dx}}|r5||j#d�D��cgc]\}}t||||zd�f��}}}|r5||j#d�D��cgc]\}}t||||zd�f��}}}t
|dd|���5td|�td|�ddd���	ddd�y#1swY���xYwcc}}wcc}}w#1swY��xYw#1swYyxYw)Nr�
pair_count�r�zPair countszPair counts for top 100 pairsr�TrErr�)�Pairrdr�r�zPredecessor/Successor Pairsz0Top 5 predecessors and successors of each opcoder�z.1%r[z Successors and predecessors for )�Predecessorsrd�Percentage:)�
Successorsrdr])rIr�r4r�r5rHrirJ�	itertools�islicer�rrjr�r�r��opmap�most_common)r�r7�pair_countsr�r�r9rRrrPr�r8r�r2�j�predecessors�
successors�total_predecessors�total_successors�first�secondrL�total1�total2�	pred_rows�	succ_rows�pred�succs                           r�emit_pair_countsrqs���K�#�L�1���;���6��%�+�+�-�J�C���~�~�l�+��b�c�(�,�,�S�1���1�a���&�&���3�q�6�{�';�<�	.�2�
��(G�	H������&��
���&�-�-�k�3�?�M�U�D��D�A�q��%��J��K�K����S��6�!�9�4�e�\�%�QV�=W�%�j�%�8�:�
;�@�
	�=��	
�
I�
�.�8j�	k�"�.�.�{�/B�/B�C�� �,�,�[�-@�-@�A�
�(�0�0�2��&�.�.�0��&1�"�E�?�E�6��.3��V�$�U�+�,1�
�5�!�&�)�"�6�*�e�3�*� ��'�5�0�'�'2��{�{�}�G�D�!�'��*�F�%�a�(�F���{�v��{��$&�&�I�	��2>�q�/�2M�2M�a�2P�R�2P��$��%�T�l�E�e�F�l�3�5G�I�2P��R��2<�Q�-�2K�2K�A�2N�P�2N��$��%�T�l�E�e�F�l�3�5G�I�2N��P���q�$D�T�F�"K�L��D����B���	M�L�%�
l�	k�
I�	H��<R��P�L�L��/
l�	k�sW�BJ0�)A<K�&A8K�J=
�9K�K
�0K�K	�
K�0J:�=K�	K�K�Kc�"�t|�}t|�}t||�t||�t	|�t||�t
|�t|�tdd��5tdd|dfg�ddd�y#1swYyxYw)Nz
Meta statszMeta statisticsr�)rrdzNumber of data filesr�)
r�rVr�rqrr+r;rRrirj)r�r�r7s   r�output_single_statsrs8s{��'��.�L��l�#�E��,��.��\�5�)��l�+� ��u�5��E���e��	��'8�	9��>�%;�U�<�=P�$Q�#R�S�
:�	9�	9�s�)B�Bc���t|�}t|�}t|�}t|�}t||||�t||�t	||||�t||�t
||�yr)r�rVrrr-rArT)r?r@r	rxr
rys      r�output_comparative_statsruEsz��,�Z�8���,�-�J�,�Z�8���,�-�J�%��:�'8�*��*��,��-��:�'8�*�� �
�J�7�!�*�j�9rc�\�t|�dk(r2t|d�}|�tj||�t	|�nCt|�dk(r5|�td��t|d�}t|d�}t
||�td�tdtj��y)Nrrr�z5Can not output to JSON when there are multiple inputsr�zStats gathered on:)
rr�r��dumprsr rur�r�today)�inputs�json_outputr�r?r@s     r�output_statsr{Xs���
�6�{�a���V�A�Y�'���"��I�I�e�[�)��E�"�	�V���	��"��G��
�"�&��)�,�
�!�&��)�,�
� ��Z�8�	�%�L�	�
��
�
��-rc	�v�tjd��}|jddttgdt�d���|jdd	tj
d
�d��|j
�}t|j�d
kDrtd��t|j|j��y)NzSummarize pystats results)�descriptionry�*aU
        Input source(s).
        For each entry, if a .json file, the output provided by --json-output from a previous run;
        if a directory, a directory containing raw pystats .txt files.
        If one source is provided, its stats are printed.
        If two sources are provided, comparative stats are printed.
        Default is z
.
        )�nargs�typer(�helpz
--json-output�?�wz3Output complete raw results to the given JSON file.)rr�r�r�z0-2 arguments may be provided.)rz)�argparse�ArgumentParser�add_argumentr��DEFAULT_DIR�FileType�
parse_argsrryr r{rz)�parserr�s  r�mainr�ks���
�
$�
$�1L�
M�F�
�����
��
�� �=�!	�
��
������
�
�
�s�
#�
B�	������D�
�4�;�;��!���9�:�:�����$�*:�*:�;r�__main__)�	SPEC_FAIL)r�r)C�__doc__r�r�r��os.pathr�r��datetimerr_r�rLr��iterr�r�r�r4�next�
StopIterationr5rIrarr3r�rhrr,r;r@rTrlr|r�r�r�r�rKr�rkrir�rjr�r�rrrrr#r+r-r2r6r;rArNrRrTrVrqrsrur{r�r�)r�rLs00r�<module>r�s��������
���
��7�7�d�?�(�K�"�K��6�3�3�4��
����M�M�!�"��D����s��	���$�D��M�M�$��

�!*�&� 1�2� 1�W�Q���q�� 1�2���V�E�K�K�M�
"�#��F��!�$Q�L�$��$C� �8G�0�
�-�� /�,���,��&�,
�
�<�C�f��C�(
���(3�
	
��.4�
w��3�j
T�:�&.�&<�@�z���F���c�	��	��	3s�2E�
E�E�E