Ë
    èÿæi>  ã                   óÖ   — 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.                  «        yy)é    N)Úcontextmanager)ÚnjitÚtypes)ÚNumbaInvalidConfigWarning)Ú_parse_refprune_flags)Úoverride_configÚTestCasec              #   óV   K  — t        d| «      5  d –— d d d «       y # 1 sw Y   y xY w­w)NÚLLVM_REFPRUNE_FLAGS)r   )Úflagss    ús/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_refop_pruning.pyÚset_refprune_flagsr      s   è ø€ ä	Ð.°Õ	6Û÷ 
7×	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y	)
ÚTestRefOpPruningFc                 óè  — t        dd«      5   t        g |¢­«      |«      j                  g |¢­   }ddd«       j                  j	                  dd«      }| j                  |«       |j                  «       D ]m  \  }}t        ||d«      }| j                  |«       d|› �}	|r/|dk(  r| j                  |d|	¬«       ŒE| j                  |d|	¬«       ŒZ| j                  |d|	¬«       Œo y# 1 sw Y   Œ·xY w)	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Ø#”4˜
˜&™
Ó# DÓ)×3Ñ3°J°f±JÑ?ˆD÷ 8ð —‘×"Ñ" =°$Ó7ˆØ×Ñ˜VÔ$à×%Ñ%Ö'‰DˆAˆqÜ˜6 1 dÓ+ˆDØ× Ñ  Ô&Ø$ Q CÐ(ˆCÙØ˜Ò&Ø×+Ñ+¨D°!¸Ð+Õ=à×&Ñ& t¨Q°CÐ&Õ8à× Ñ   q¨cÐ Õ2ñ (÷ 8Ð7ús   �%C(Ã(C1c                 óN   — d„ }| j                  |t        j                  d¬«       y )Nc                 óv   — t        j                  | «      }d}| dkD  r|dd  }||d   z  }|S |d d }||d   z  }|S )Nr   é   é   éÿÿÿÿ©ÚnpÚzeros)ÚnÚaÚaccÚbÚcs        r   r!   z1TestRefOpPruning.test_basic_block_1.<locals>.func<   sY   € Ü—‘˜“ˆAØˆCØ�1ŠuØ�a�b�E�Ø�q˜‘t‘�ð ˆJð �c�r�F�Ø�q˜‘t‘�ØˆJó    T)Ú
basicblock©r)   r   Úintp©r    r!   s     r   Útest_basic_block_1z#TestRefOpPruning.test_basic_block_18   s   € ò		ð 	�
‰
�4œ%Ÿ*™*°$ˆ
Õ7r7   c           	      ó”   — d„ }t        d«      5  | j                  |t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 ód   — t        j                  | «      }d}| dkD  r|j                  «       }|dz   S )Nr   é   r-   )r0   ÚonesÚsum)r2   r3   Úxs      r   r!   z-TestRefOpPruning.test_diamond_1.<locals>.funcL   s/   € Ü—‘˜“
ˆAØˆAØ�1ŠuØ—E‘E“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Ø�J‰J�tœeŸj™j°dÀDØ#°%ð ô 9÷ 2×1Ñ1úó	   �&>¾Ac           	      ó”   — d„ }t        d«      5  | j                  |t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 óÊ   — g }t        | «      D ]&  }|j                  t        j                  |«      «       Œ( d}|D ]%  }||j	                  «       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[   sZ   € ØˆCÜ˜1–X�Ø—
‘
œ2Ÿ9™9 Q›<Õ(ð àˆAÛ�Ø�S—W‘W“Y ! c§h¡h¡,Ñ/Ñ/‘ð àˆHr7   rC   TFrD   rG   r;   s     r   Útest_diamond_2zTestRefOpPruning.test_diamond_2X   s@   € ò	ô  Ð 0Õ1Ø�J‰J�tœeŸj™j°dÀDØ#°%ð ô 9÷ 2×1Ñ1úrI   c                 óP   — d„ }| j                  |t        j                  dd¬«       y )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   sF   € Ü—‘˜“ˆAÜ—‘˜“ˆAØ�A�ˆAØˆCÛ�Ø�q˜‘t‘‘ð àˆJr7   T)r8   rF   r9   r;   s     r   Útest_fanout_1zTestRefOpPruning.test_fanout_1i   s!   € ò	ð 	�
‰
�4œ%Ÿ*™*°$¸tˆ
ÕDr7   c           	      ó”   — d„ }t        d«      5  | j                  |t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 ó€   — t        j                  | «      }t        j                  | «      }||f}|D ]
  }| sŒt        ‚ |S ©N)r0   r1   Ú
ValueError)r2   r3   r5   rB   rR   s        r   r!   z,TestRefOpPruning.test_fanout_2.<locals>.funcz   s?   € Ü—‘˜“ˆAÜ—‘˜“ˆAØ�A�ˆAÛ�ÚÜ$Ð$ð ð ˆHr7   zper_bb,fanoutTFrD   rG   r;   s     r   Útest_fanout_2zTestRefOpPruning.test_fanout_2w   s?   € ò	ô   Õ0Ø�J‰J�tœeŸj™j°dÀEØ"°ð ô 8÷ 1×0Ñ0úrI   c           	      ó”   — d„ }t        d«      5  | j                  |t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 óŒ   — t        j                  | «      }d}t        j                  |«      D ]  }||j                  «       z  }Œ y)Nr   r-   )r0   rO   ÚnditerÚitem)r2   Úaryr6   r'   s       r   r!   z,TestRefOpPruning.test_fanout_3.<locals>.funcŠ   s:   € Ü—)‘)˜A“,ˆCàˆAô —Y‘Y˜s–^�Ø�Q—V‘V“X‘‘ð $àr7   zper_bb,fanout_raiseTFrD   rG   r;   s     r   Útest_fanout_3zTestRefOpPruning.test_fanout_3‡   s@   € ò	ô  Ð 5Õ6Ø�J‰J�tœeŸj™j°dÀEØ#°$ð ô 8÷ 7×6Ñ6úrI   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r)   r	   Úrun_test_in_subprocessr<   rH   rT   rW   r\   rb   © r7   r   r   r      s«   „ à!Ðò3ð> ×$Ñ$ñ8ó %ð8ð  ×$Ñ$ñ9ó %ð9ð ×$Ñ$ñ9ó %ð9ð  ×$Ñ$ñEó %ðEð ×$Ñ$ñ8ó %ð8ð ×$Ñ$ñ8ó %ñ8r7   r   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestRefPruneFlagsc                 ó8   — t        j                  dt        «       y )NÚerror)ÚwarningsÚsimplefilterr   ©r    s    r   ÚsetUpzTestRefPruneFlags.setUpš   s   € Ü×Ñ˜gÔ'@ÕAr7   c                 ó,   — t        j                  «        y rZ   )rm   Úresetwarningsro   s    r   ÚtearDownzTestRefPruneFlags.tearDown�   s   € Ü×ÑÕ r7   c                 ó  — t        d«      5  | j                  t        «      5 }t        «       }d d d «       | j	                  t        j                  «      d«       | j                  dt        |j                  d   j                  «      «       | j                  dt        |j                  d   j                  «      «       | j	                  t        j                  j                  «       d d d «       y # 1 sw Y   ŒÅxY w# 1 sw Y   y xY w)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Ø×!Ñ!Ô";Ô<ÀÜ.Ó0�÷ =à×ÑœS §¡Ó-¨qÔ1Ø�M‰M˜%¤ R§[¡[°¡^×%;Ñ%;Ó!<Ô=Ø�M‰M˜%¤ R§[¡[°¡^×%;Ñ%;Ó!<Ô=Ø×Ñ˜V¤T×%;Ñ%;×%BÑ%BÔC÷ 2Ð1ß<Ð<ú÷ 2Ð1ús"   ŒC=¢C1­B;C=Ã1C:	Ã6C=Ã=Dc                 ó¬   — t        d«      5  t        «       }| j                  |t        j                  j
                  «       d d d «       y # 1 sw Y   y xY w)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Ü*Ó,ˆFØ×Ñ˜V¤T×%;Ñ%;×%?Ñ%?Ô@÷ H×GÑGúó   Œ5A
Á
Ac                 ó¬   — t        d«      5  t        «       }| j                  |t        j                  j
                  «       d d d «       y # 1 sw Y   y xY w)NÚallrƒ   r…   s     r   Útest_the_all_flagz#TestRefPruneFlags.test_the_all_flag®   s:   € Ü Õ&Ü*Ó,ˆFØ×Ñ˜V¤T×%;Ñ%;×%?Ñ%?Ô@÷ '×&Ñ&úr‡   c                 óÊ   — t        d«      5  t        «       }t        j                  }| j	                  ||j
                  |j                  z  «       d d d «       y # 1 sw Y   y xY w)Nzper_bb, fanout)r   r   r|   r}   r   r~   ÚFANOUT)r    r€   Úenumclss      r   Útest_some_flagsz!TestRefPruneFlags.test_some_flags³   sG   € ÜÐ 0Õ1Ü*Ó,ˆFÜ×,Ñ,ˆGØ×Ñ˜V W§^¡^°g·n±nÑ%DÔE÷ 2×1Ñ1ús   ŒAAÁA"N)	rc   rd   re   rp   rs   r�   r†   rŠ   rŽ   rh   r7   r   rj   rj   ™   s%   „ òBò!òDòAò
Aó
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š      sl   ðÛ Û Ý %ã å ç Ý 7Ý 4ß 9ð ñó ðô
A8�xô A8ôHF˜ô FðB ˆzÒØ€H‡M�M…Oð r7   