§
    ƒÛgd  ã                   óú   — d dl Z d dlZd dl mZ d dlmZ d dlZd dlmZ	 d dl
mZ d dlmZ d dlmZ d dlmZ d dl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)ÚTestCase)Úcontextmanager)Útypes)ÚNumbaInvalidConfigWarning)Úcompile_isolated)Ú_parse_refprune_flags©Úoverride_configc              #   ód   K  — t          d| ¦  «        5  d V — d d d ¦  «         d S # 1 swxY w Y   d S )NÚLLVM_REFPRUNE_FLAGSr	   )Úflagss    úT/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_refop_pruning.pyÚset_refprune_flagsr      s„   è è € å	Ð.°Ñ	6Ô	6ð ð Øˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   “%¥)¬)c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestRefOpPruningFc                 óÌ  — t          dd¦  «        5  t          |g |¢R ¦  «        }ddd¦  «         n# 1 swxY w Y   |j                             dd¦  «        }|                      |¦  «         |                     ¦   «         D ]c\  }}t          ||d¦  «        }|                      |¦  «         d|› �}	|r|                      |d|	¬¦  «         ŒK|                      |d|	¬¦  «         ŒddS )a(  
        Asserts the 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.
        ÚLLVM_REFPRUNE_PASSÚ1NÚprune_statszfailed checking r   )Úmsg)	r
   r   ÚmetadataÚgetÚassertIsNotNoneÚitemsÚgetattrÚassertGreaterÚassertEqual)
ÚselfÚfuncÚargtysÚprune_typesÚcresÚpstatsÚkÚvÚstatr   s
             r   ÚcheckzTestRefOpPruning.check   sK  € õ Ð1°3Ñ7Ô7ð 	6ð 	6Ý# D¨*¨F¨*¨*Ñ5Ô5ˆDð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6ð ”×"Ò" =°$Ñ7Ô7ˆØ×Ò˜VÑ$Ô$Ð$à×%Ò%Ñ'Ô'ð 	3ð 	3‰DˆAˆqÝ˜6 1 dÑ+Ô+ˆDØ× Ò  Ñ&Ô&Ð&Ø( QÐ(Ð(ˆCØð 3Ø×"Ò" 4¨°Ð"Ñ4Ô4Ð4Ð4à× Ò   q¨cÐ Ñ2Ô2Ð2Ð2ð	3ð 	3s   ‘1±5¸5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>.func6   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_13   s3   € ð		ð 		ð 		ð 	�
Š
�4�%œ*°$ˆ
Ñ7Ô7Ð7Ð7Ð7r5   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+   )r.   ÚonesÚsum)r0   r1   Úxs      r   r   z-TestRefOpPruning.test_diamond_1.<locals>.funcE   s3   € Ý”˜‘
”
ˆAØˆAØ�1ŠuˆuØ—E’E‘G”G�Ø�q‘5ˆLr5   úper_bb,diamondTF©r6   ÚdiamondÚfanoutÚfanout_raise©r   r'   r   r8   r9   s     r   Útest_diamond_1zTestRefOpPruning.test_diamond_1C   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Úappendr.   Úaranger?   Úsize)r0   ÚconÚir4   Úarrs        r   r   z-TestRefOpPruning.test_diamond_2.<locals>.funcS   sq   € ØˆCÝ˜1‘X”Xð )ð )�Ø—
’
�2œ9 Q™<œ<Ñ(Ô(Ð(Ð(ØˆAØð 0ð 0�Ø�S—W’W‘Y”Y ! c¤h¡,Ñ/Ñ/��ØˆHr5   rA   TFrB   rF   r9   s     r   Útest_diamond_2zTestRefOpPruning.test_diamond_2Q   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ð 	9rH   c                 óR   — d„ }|                       |t          j        dd¬¦  «         d S )Nc                 ó‚   — t          j        | ¦  «        }t          j        | ¦  «        }||f}d}|D ]}||d         z  }Œ|S )NrK   r   r-   )r0   r1   r3   r@   r2   rQ   s         r   r   z,TestRefOpPruning.test_fanout_1.<locals>.funcc   sM   € Ý”˜‘”ˆAÝ”˜‘”ˆAØ�A�ˆAØˆCØð ð �Ø�q˜”t‘��ØˆJr5   T)r6   rD   r7   r9   s     r   Útest_fanout_1zTestRefOpPruning.test_fanout_1a   s5   € ð	ð 	ð 	ð 	�
Š
�4�%œ*°$¸tˆ
ÑDÔDÐDÐDÐDr5   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)r.   r/   Ú
ValueError)r0   r1   r3   r@   rQ   s        r   r   z,TestRefOpPruning.test_fanout_2.<locals>.funcp   sL   € Ý”˜‘”ˆAÝ”˜‘”ˆAØ�A�ˆAØð %ð %�Øð %Ý$Ð$ð%àˆHr5   zper_bb,fanoutTFrB   rF   r9   s     r   Útest_fanout_2zTestRefOpPruning.test_fanout_2n   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ð 	8rH   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+   )r.   rN   ÚnditerÚitem)r0   Úaryr4   r%   s       r   r   z,TestRefOpPruning.test_fanout_3.<locals>.func   sE   € Ý”)˜A‘,”,ˆCàˆAõ ”Y˜s‘^”^ð ð �Ø�Q—V’V‘X”X‘��Ø�1r5   zper_bb,fanout_raiseTFrB   rF   r9   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ð 	8rH   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r'   r:   rG   rS   rV   r[   ra   © r5   r   r   r      s†   € € € € € à!Ðð3ð 3ð 3ð08ð 8ð 8ð 9ð 9ð 9ð9ð 9ð 9ð Eð Eð Eð8ð 8ð 8ð8ð 8ð 8ð 8ð 8r5   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ÐAr5   c                 ó,   — t          j        ¦   «          d S rY   )rk   Úresetwarningsrm   s    r   ÚtearDownzTestRefPruneFlags.tearDown’   s   € ÝÔÑ Ô Ð Ð Ð r5   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   Úlenrk   Ú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   rz   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   rz   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)	rb   rc   rd   rn   rq   r   r„   rˆ   rŒ   rf   r5   r   rh   rh   Ž   s   € € € € € ðBð Bð Bð!ð !ð !ðDð Dð DðAð Að Að
Að Að Að
Fð Fð Fð Fð Fr5   rh   Ú__main__)Úunittestrk   r   Ú
contextlibr   Únumpyr.   Úllvmlite.bindingÚbindingrz   Únumbar   Únumba.core.errorsr   Únumba.core.compilerr   Únumba.core.codegenr   Únumba.tests.supportr
   r   r   rh   rb   Úmainrf   r5   r   ú<module>r™      sZ  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø /Ð /Ð /Ð /Ð /Ð /ð ðð ñ „ðð
t8ð t8ð t8ð t8ð t8�xñ t8ô t8ð t8ðnFð Fð Fð Fð F˜ñ Fô Fð FðB ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr5   