§
    2@Äjù  ã                   óê   — d dl Z d dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZ ed„ ¦   «         Z G d„ d	e¦  «        Z G d
„ de¦  «        Zedk    r e j        ¦   «          dS dS )é    N)Úcontextmanager)ÚnjitÚtypes)ÚNumbaInvalidConfigWarning)Ú_parse_refprune_flags)Úoverride_configÚTestCasec              #   ód   K  — t          d| ¦  «        5  d V — d d d ¦  «         d S # 1 swxY w Y   d S )NÚLLVM_REFPRUNE_FLAGS)r   )Úflagss    úOC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_refop_pruning.pyÚset_refprune_flagsr      s„   è è € å	Ð.°Ñ	6Ô	6ð ð Øˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   “%¥)¬)c                   óØ   — e Zd ZdZd„ Zej        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Z	ej        d„ ¦   «         Z
ej        d„ ¦   «         Zej        d„ ¦   «         Zd	S )
ÚTestRefOpPruningFc                 ó6  — t          dd¦  «        5   t          g |¢R ¦  «        |¦  «        j        g |¢R          }ddd¦  «         n# 1 swxY w Y   |j                             dd¦  «        }|                      |¦  «         |                     ¦   «         D ]‚\  }}t          ||d¦  «        }|                      |¦  «         d|› �}	|r8|dk    r|                      |d|	¬¦  «         ŒQ|  	                    |d|	¬¦  «         Œj|  
                    |d|	¬¦  «         ŒƒdS )	aÙ  
        Asserts the func compiled with argument types "argtys" reports
        refop pruning statistics. The **prune_types** kwargs list each kind
        of pruning and whether the stat should be zero (False) or >0 (True).

        Note: The exact statistic varies across platform.

        NOTE: Tests using this `check` method need to run in subprocesses as
        `njit` sets up the module pass manager etc once and the overrides have
        no effect else.
        ÚLLVM_REFPRUNE_PASSÚ1NÚprune_statszfailed checking Úfanout_raiser   )Úmsg)r   r   Ú	overloadsÚmetadataÚgetÚassertIsNotNoneÚitemsÚgetattrÚassertGreaterEqualÚassertGreaterÚassertEqual)
ÚselfÚfuncÚargtysÚprune_typesÚcresÚpstatsÚkÚvÚstatr   s
             r   ÚcheckzTestRefOpPruning.check   s›  € õ Ð1°3Ñ7Ô7ð 	@ð 	@Ø#•4˜
˜&˜
˜
Ñ#Ô# DÑ)Ô)Ô3°J°f°J°JÔ?ˆDð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð ”×"Ò" =°$Ñ7Ô7ˆØ×Ò˜VÑ$Ô$Ð$à×%Ò%Ñ'Ô'ð 
	3ð 
	3‰DˆAˆqÝ˜6 1 dÑ+Ô+ˆDØ× Ò  Ñ&Ô&Ð&Ø( QÐ(Ð(ˆCØð 3Ø˜Ò&Ð&Ø×+Ò+¨D°!¸Ð+Ñ=Ô=Ð=Ð=à×&Ò& t¨Q°CÐ&Ñ8Ô8Ð8Ð8à× Ò   q¨cÐ Ñ2Ô2Ð2Ð2ð
	3ð 
	3s   ‘*AÁAÁAc                 óP   — d„ }|                       |t          j        d¬¦  «         d S )Nc                 ó”   — t          j        | ¦  «        }d}| dk    r|dd …         }||d         z  }n|d d…         }||d         z  }|S )Nr   é   é   éÿÿÿÿ©ÚnpÚzeros)ÚnÚaÚaccÚbÚcs        r   r!   z1TestRefOpPruning.test_basic_block_1.<locals>.func<   sX   € Ý”˜‘”ˆAØˆCØ�1ŠuˆuØ�a�b�b”E�Ø�q˜”t‘��à�c�r�c”F�Ø�q˜”t‘�ØˆJó    T)Ú
basicblock©r)   r   Úintp©r    r!   s     r   Útest_basic_block_1z#TestRefOpPruning.test_basic_block_18   s3   € ð		ð 		ð 		ð 	�
Š
�4�%œ*°$ˆ
Ñ7Ô7Ð7Ð7Ð7r7   c           	      ó¦   — d„ }t          d¦  «        5  |                      |t          j        dddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ól   — t          j        | ¦  «        }d}| dk    r|                     ¦   «         }|dz   S )Nr   é   r-   )r0   ÚonesÚsum)r2   r3   Úxs      r   r!   z-TestRefOpPruning.test_diamond_1.<locals>.funcL   s3   € Ý”˜‘
”
ˆAØˆAØ�1ŠuˆuØ—E’E‘G”G�Ø�q‘5ˆLr7   úper_bb,diamondTF©r8   ÚdiamondÚfanoutr   ©r   r)   r   r:   r;   s     r   Útest_diamond_1zTestRefOpPruning.test_diamond_1I   s°   € ð	ð 	ð 	õ  Ð 0Ñ1Ô1ð 	9ð 	9Ø�JŠJ�t�eœj°dÀDØ#°%ð ñ 9ô 9ð 9ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ó   “&AÁA
ÁA
c           	      ó¦   — d„ }t          d¦  «        5  |                      |t          j        dddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 óÎ   — g }t          | ¦  «        D ])}|                     t          j        |¦  «        ¦  «         Œ*d}|D ]$}||                     ¦   «         d|j        z   z  z  }Œ%|S )Nç        r-   )ÚrangeÚappendr0   ÚarangerA   Úsize)r2   ÚconÚir6   Úarrs        r   r!   z-TestRefOpPruning.test_diamond_2.<locals>.func[   sq   € ØˆCÝ˜1‘X”Xð )ð )�Ø—
’
�2œ9 Q™<œ<Ñ(Ô(Ð(Ð(ØˆAØð 0ð 0�Ø�S—W’W‘Y”Y ! c¤h¡,Ñ/Ñ/��ØˆHr7   rC   TFrD   rG   r;   s     r   Útest_diamond_2zTestRefOpPruning.test_diamond_2X   s°   € ð	ð 	ð 	õ  Ð 0Ñ1Ô1ð 	9ð 	9Ø�JŠJ�t�eœj°dÀDØ#°%ð ñ 9ô 9ð 9ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9rI   c                 óR   — d„ }|                       |t          j        dd¬¦  «         d S )Nc                 ó‚   — t          j        | ¦  «        }t          j        | ¦  «        }||f}d}|D ]}||d         z  }Œ|S )NrL   r   r/   )r2   r3   r5   rB   r4   rR   s         r   r!   z,TestRefOpPruning.test_fanout_1.<locals>.funcl   sM   € Ý”˜‘”ˆAÝ”˜‘”ˆAØ�A�ˆAØˆCØð ð �Ø�q˜”t‘��ØˆJr7   T)r8   rF   r9   r;   s     r   Útest_fanout_1zTestRefOpPruning.test_fanout_1i   s5   € ð	ð 	ð 	ð 	�
Š
�4�%œ*°$¸tˆ
ÑDÔDÐDÐDÐDr7   c           	      ó¦   — d„ }t          d¦  «        5  |                      |t          j        dddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 óz   — t          j        | ¦  «        }t          j        | ¦  «        }||f}|D ]}| rt          ‚Œ|S ©N)r0   r1   Ú
ValueError)r2   r3   r5   rB   rR   s        r   r!   z,TestRefOpPruning.test_fanout_2.<locals>.funcz   sL   € Ý”˜‘”ˆAÝ”˜‘”ˆAØ�A�ˆAØð %ð %�Øð %Ý$Ð$ð%àˆHr7   zper_bb,fanoutTFrD   rG   r;   s     r   Útest_fanout_2zTestRefOpPruning.test_fanout_2w   s¯   € ð	ð 	ð 	õ   Ñ0Ô0ð 	8ð 	8Ø�JŠJ�t�eœj°dÀEØ"°ð ñ 8ô 8ð 8ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8rI   c           	      ó¦   — d„ }t          d¦  «        5  |                      |t          j        dddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 óŽ   — t          j        | ¦  «        }d}t          j        |¦  «        D ]}||                     ¦   «         z  }ŒdS )Nr   r-   )r0   rO   ÚnditerÚitem)r2   Úaryr6   r'   s       r   r!   z,TestRefOpPruning.test_fanout_3.<locals>.funcŠ   sE   € Ý”)˜A‘,”,ˆCàˆAõ ”Y˜s‘^”^ð ð �Ø�Q—V’V‘X”X‘��Ø�1r7   zper_bb,fanout_raiseTFrD   rG   r;   s     r   Útest_fanout_3zTestRefOpPruning.test_fanout_3‡   s°   € ð	ð 	ð 	õ  Ð 5Ñ6Ô6ð 	8ð 	8Ø�JŠJ�t�eœj°dÀEØ#°$ð ñ 8ô 8ð 8ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8rI   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r)   r	   Úrun_test_in_subprocessr<   rH   rT   rW   r\   rb   © r7   r   r   r      sæ   € € € € € à!Ðð3ð 3ð 3ð> Ô$ð8ð 8ñ %Ô$ð8ð  Ô$ð9ð 9ñ %Ô$ð9ð Ô$ð9ð 9ñ %Ô$ð9ð  Ô$ðEð Eñ %Ô$ðEð Ô$ð8ð 8ñ %Ô$ð8ð Ô$ð8ð 8ñ %Ô$ð8ð 8ð 8r7   r   c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestRefPruneFlagsc                 ó:   — t          j        dt          ¦  «         d S )NÚerror)ÚwarningsÚsimplefilterr   ©r    s    r   ÚsetUpzTestRefPruneFlags.setUpš   s   € ÝÔ˜gÕ'@ÑAÔAÐAÐAÐAr7   c                 ó,   — t          j        ¦   «          d S rZ   )rm   Úresetwarningsro   s    r   ÚtearDownzTestRefPruneFlags.tearDown�   s   € ÝÔÑ Ô Ð Ð Ð r7   c                 ó<  — t          d¦  «        5  |                      t          ¦  «        5 }t          ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         |                      dt          |j        d         j	        ¦  «        ¦  «         |                      dt          |j        d         j	        ¦  «        ¦  «         |                      |t          j        j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzabc,per_bb,cder?   Úabcr   Úcder-   )r   ÚassertWarnsr   r   r   Úlenrm   ÚassertInÚstrÚmessageÚllvmÚRefPruneSubpassesÚPER_BB)r    ÚcmÚoptvals      r   Útest_warn_invalid_flagsz)TestRefPruneFlags.test_warn_invalid_flags    s�  € ÝÐ 0Ñ1Ô1ð 	Dð 	DØ×!Ò!Õ";Ñ<Ô<ð 1ÀÝ.Ñ0Ô0�ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1à×Ò�S ¤Ñ-Ô-¨qÑ1Ô1Ð1Ø�MŠM˜%¥ R¤[°¤^Ô%;Ñ!<Ô!<Ñ=Ô=Ð=Ø�MŠM˜%¥ R¤[°¤^Ô%;Ñ!<Ô!<Ñ=Ô=Ð=Ø×Ò˜V¥TÔ%;Ô%BÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Ds4   �D«AºDÁA
	Á
DÁA
	ÁB6DÄDÄDc                 ó¼   — t          d¦  «        5  t          ¦   «         }|                      |t          j        j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz$per_bb, diamond, fanout,fanout_raise©r   r   r   r|   r}   ÚALL©r    r€   s     r   Útest_valid_flagz!TestRefPruneFlags.test_valid_flag©   s°   € ÝÐ FÑGÔGð 	Að 	AÝ*Ñ,Ô,ˆFØ×Ò˜V¥TÔ%;Ô%?Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	Aó   �4AÁAÁAc                 ó¼   — t          d¦  «        5  t          ¦   «         }|                      |t          j        j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚallrƒ   r…   s     r   Útest_the_all_flagz#TestRefPruneFlags.test_the_all_flag®   s¯   € Ý Ñ&Ô&ð 	Að 	AÝ*Ñ,Ô,ˆFØ×Ò˜V¥TÔ%;Ô%?Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	Ar‡   c                 óÐ   — t          d¦  «        5  t          ¦   «         }t          j        }|                      ||j        |j        z  ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzper_bb, fanout)r   r   r|   r}   r   r~   ÚFANOUT)r    r€   Úenumclss      r   Útest_some_flagsz!TestRefPruneFlags.test_some_flags³   s»   € ÝÐ 0Ñ1Ô1ð 	Fð 	FÝ*Ñ,Ô,ˆFÝÔ,ˆGØ×Ò˜V W¤^°g´nÑ%DÑEÔEÐEð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fs   �>AÁAÁ"AN)	rc   rd   re   rp   rs   r�   r†   rŠ   rŽ   rh   r7   r   rj   rj   ™   s   € € € € € ðBð Bð Bð!ð !ð !ðDð Dð DðAð Að Að
Að Að Að
Fð Fð Fð Fð Fr7   rj   Ú__main__)Úunittestrm   Ú
contextlibr   Únumpyr0   Úllvmlite.bindingÚbindingr|   Únumbar   r   Únumba.core.errorsr   Únumba.core.codegenr   Únumba.tests.supportr   r	   r   r   rj   rc   Úmainrh   r7   r   ú<module>rš      sB  ðØ €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð ðð ñ „ðð
A8ð A8ð A8ð A8ð A8�xñ A8ô A8ð A8ðHFð Fð Fð Fð F˜ñ Fô Fð FðB ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr7   