§
    ƒÛgñ$  ã                   ót  — d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d
Z ede j        j                             e j         ¦  «        fg¦  «         G d„ de!¦  «        ¦   «         Z" G d„ de¦  «        Z#e$dk    r ej%        ¦   «          dS dS )é    N)ÚTestCaseÚunittest)Ú
cpu_target)ÚCompilerBaseÚFlags)ÚPassManager)ÚtypesÚirÚbytecodeÚcompilerÚir_utilsÚregistry)ÚExtractByteCodeÚTranslateByteCodeÚ	FixupArgsÚIRProcessing)ÚNopythonTypeInferenceÚtype_inference_stageÚDeadCodeElimination)Újitclassé   Úvalc                   ó   — e Zd Zd„ ZdS )ÚDummyc                 ó   — || _         d S ©N)r   )Úselfr   s     úO/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_ir_utils.pyÚ__init__zDummy.__init__   s   € ØˆŒˆˆó    N)Ú__name__Ú
__module__Ú__qualname__r   © r    r   r   r      s#   € € € € € ðð ð ð ð r    r   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestIrUtilszA
    Tests ir handling utility functions like find_callname.
    c                 ó„  — d„ }t          j        |¦  «        }t          j        }t          j        }t          |||dd¦  «        }t          j        ||j        d         j	        d         j
        |j        ¦  «        }|                      t          |t          ¦  «        ot          |¦  «        dk    o|d         dk    ¦  «         dS )zGTest matching of an object method (other than Array see #3449)
        c                  óZ   — t          dg¦  «        } | j                             d¦  «         d S )Né   é   )r   r   Úappend)Úds    r   Ú	test_funcz2TestIrUtils.test_obj_func_match.<locals>.test_func!   s$   € Ý�q�c‘
”
ˆAØŒE�LŠL˜‰OŒOˆOˆOˆOr    r$   Nr   é   r*   r+   )r   Úrun_frontendr   Útyping_contextÚtarget_contextr   r   Úfind_callnameÚblocksÚbodyÚvalueÚtypemapÚ
assertTrueÚ
isinstanceÚtupleÚlen)r   r-   Útest_irÚ	typingctxÚ	targetctxÚ
typing_resÚmatched_calls          r   Útest_obj_func_matchzTestIrUtils.test_obj_func_match   sÏ   € ð	ð 	ð 	õ Ô'¨	Ñ2Ô2ˆÝÔ-ˆ	ÝÔ-ˆ	Ý)Ø�y '¨2¨tñ5ô 5ˆ
åÔ-Ø�W”^ AÔ&Ô+¨AÔ.Ô4°jÔ6HñJô Jˆà�Š�
 <µÑ7Ô7ð 4Ý˜LÑ)Ô)¨QÒ.ð4à$ Qœ¨8Ò3ñ	5ô 	5ð 	5ð 	5ð 	5r    c                 ó  ‡ —  G d„ dt           ¦  «        }ˆ fd„}ˆ fd„}d„ }|                     t          j        f¦  «        }|                     |¦  «        } ||¦  «        }|                     t          j        f¦  «        }|                     |d¬¦  «        } ||¦  «         ‰                      t          |j        d         j        ¦  «        t          |¦  «        z
  t          |j        d         j        ¦  «        ¦  «         d S )	Nc                   ó:   — e Zd Zeddi dddfd„¦   «         Zdd„ZdS )ú6TestIrUtils.test_dead_code_elimination.<locals>.TesterNc           	      óž   — |st          ¦   «         }d|_        |€t          j        j        }|€t          j        j        } | |||||||¦  «        S )NT)r   Únrtr   r   r0   r1   )ÚclsÚargsÚreturn_typeÚflagsÚlocalsÚlibraryr0   r1   s           r   Úmk_pipelinezBTestIrUtils.test_dead_code_elimination.<locals>.Tester.mk_pipeline4   sa   € ð ð $Ý!™GœG�EØ �”	Ø!Ð)Ý%-Ô%8Ô%G�NØ!Ð)Ý%-Ô%8Ô%G�NØ�s˜>¨>¸7ÀDØ&¨¨vñ7ô 7ð 7r    Fc                 óJ  — t           j                             |¦  «        }|| j        _        t          ¦   «                              | j        ¦  «         | j        }d}t          |¦  «        }|                     t          d¦  «         |                     t          d¦  «         |                     t          d¦  «         |                     t          d¦  «         |du r|                     t          d¦  «         |                     ¦   «          |                     |¦  «         |j        S )z7
                Compile and return IR
                ÚDCE_testingzanalyzing bytecodezfix up argszprocessing IRznopython frontendTzDCE after typing)r   ÚFunctionIdentityÚfrom_functionÚstateÚfunc_idr   Úrun_passr   Úadd_passr   r   r   r   r   ÚfinalizeÚrunÚfunc_ir)r   ÚfuncÚDCErR   rQ   ÚnameÚpms          r   Úcompile_to_irzDTestIrUtils.test_dead_code_elimination.<locals>.Tester.compile_to_irB   sð   € õ #Ô3×AÒAÀ$ÑGÔG�Ø%,�”
Ô"ÝÑ!Ô!×*Ò*¨4¬:Ñ6Ô6Ð6Øœ
�à$�Ý  Ñ&Ô&�Ø—’Õ-Ð/CÑDÔDÐDØ—’�I }Ñ5Ô5Ð5Ø—’�L¨/Ñ:Ô:Ð:Ø—’Õ1Ð3FÑGÔGÐGØ˜$�;�;Ø—K’KÕ 3Ð5GÑHÔHÐHØ—’‘”�Ø—’�u‘”�Ø”}Ð$r    )F)r!   r"   r#   ÚclassmethodrL   r\   r$   r    r   ÚTesterrC   2   sU   € € € € € àØ37¸tÈBØ$(¸Ø+/ð7ð 7ð 7ñ Œ[ð7ð%ð %ð %ð %ð %ð %r    r^   c                 óV  •— ‰                      t          | j        ¦  «        d¦  «         | j        d         }g }|                     t          j        ¦  «        D ]X}t          t          |dd ¦  «        t          j        ¦  «        r-dt          |j	        dd¦  «        v r| 
                    |¦  «         ŒY‰                      t          |¦  «        d¦  «         |D ]R}|                      |j        ¦  «        }‰                     t          d|j	        j        z  d	¦  «        |j        ¦  «         ŒS|S )
Nr)   r   ÚtargetÚdeadrZ   Ú r*   z0x%sé   )ÚassertEqualr:   r3   Ú
find_instsr
   ÚAssignr8   ÚgetattrÚVarr`   r+   Úget_definitionr5   r7   ÚintrZ   )Úthe_irÚblockÚdeadsÚxr,   Ú	const_valr   s         €r   Úcheck_initial_irz@TestIrUtils.test_dead_code_elimination.<locals>.check_initial_irW   s  ø€ ð ×Ò�S ¤Ñ/Ô/°Ñ3Ô3Ð3Ø”M !Ô$ˆEØˆEØ×%Ò%¥b¤iÑ0Ô0ð (ð (�Ý�g a¨°4Ñ8Ô8½"¼&ÑAÔAð (Ø¥¨¬°6¸2Ñ!>Ô!>Ð>Ð>ØŸš Q™œ˜øà×Ò�S ™ZœZ¨Ñ+Ô+Ð+Øð 1ð 1�à"×1Ò1°!´'Ñ:Ô:�	Ø—’¥ F¨Q¬X¬]Ñ$:¸BÑ ?Ô ?Ø )¤ñ1ô 1ð 1ð 1ð ˆLr    c                 óx  •— ‰                      t          | j        ¦  «        d¦  «         | j        d         }g }g }|                     t          j        ¦  «        D ]–}t          t          |dd ¦  «        t          j        ¦  «        r-dt          |j	        dd¦  «        v r| 
                    |¦  «         t          t          |dd ¦  «        t          j        ¦  «        r| 
                    |¦  «         Œ—‰                      t          |¦  «        d¦  «         |D ]#}‰                     |j        j        dv¦  «         Œ$d S )	Nr)   r   r`   ra   rZ   rb   r5   )é­Þ  ì   ­^[= )rd   r:   r3   re   r
   rf   r8   rg   rh   r`   r+   ÚConstr7   r5   )rk   rl   rm   Úconstsrn   r   s        €r   Úcheck_dce_irz<TestIrUtils.test_dead_code_elimination.<locals>.check_dce_irp   s-  ø€ Ø×Ò�S ¤Ñ/Ô/°Ñ3Ô3Ð3Ø”M !Ô$ˆEØˆEØˆFØ×%Ò%¥b¤iÑ0Ô0ð %ð %�Ý�g a¨°4Ñ8Ô8½"¼&ÑAÔAð (Ø¥¨¬°6¸2Ñ!>Ô!>Ð>Ð>ØŸš Q™œ˜Ý�g a¨°$Ñ7Ô7½¼ÑBÔBð %Ø—M’M !Ñ$Ô$Ð$øØ×Ò�S ™ZœZ¨Ñ+Ô+Ð+ð ð Kð K�Ø—’ ¤¤Ð5IÐ IÑJÔJÐJÐJðKð Kr    c                 ó,   — | dz   }d}|dz   }d}||z  }|S )Nr)   rr   r*   rs   r$   )rn   Úyra   ÚzÚdeaddeadÚrets         r   Úfooz3TestIrUtils.test_dead_code_elimination.<locals>.foo‚   s,   € Ø�A‘ˆAØˆDØ�A‘ˆAØ!ˆHØ�a‘%ˆCØˆJr    T)rY   r   )	r   rL   r	   Úintpr\   rd   r:   r3   r4   )	r   r^   rp   rv   r|   Útest_pipelineÚno_dceÚremovedÚw_dces	   `        r   Útest_dead_code_eliminationz&TestIrUtils.test_dead_code_elimination0   sF  ø€ ð#	%ð #	%ð #	%ð #	%ð #	%•\ñ #	%ô #	%ð #	%ðJ	ð 	ð 	ð 	ð 	ð2	Kð 	Kð 	Kð 	Kð 	Kð$	ð 	ð 	ð ×*Ò*­E¬J¨=Ñ9Ô9ˆØ×,Ò,¨SÑ1Ô1ˆØ"Ð" 6Ñ*Ô*ˆà×*Ò*­E¬J¨=Ñ9Ô9ˆØ×+Ò+¨C°TÐ+Ñ:Ô:ˆØˆ�UÑÔÐð 	×Ò�˜Vœ]¨1Ô-Ô2Ñ3Ô3µc¸'±l´lÑBÝ˜Uœ\¨!œ_Ô1Ñ2Ô2ñ	4ô 	4ð 	4ð 	4ð 	4r    c                 ó  ‡— dŠˆfd„}t          j        |¦  «        }|j        d         }d}d}|j        D ] }t	          |t
          j        ¦  «        r5|j        j        dk    r%t          j
        t          j        ||j        ¦  «        }t	          |t
          j        ¦  «        r5|j        j        dk    r%t          j
        t          j        ||j        ¦  «        }Œ¡|                      |t          ¦  «         |                      |‰¦  «         dS )z–
        Test find_const() for values in globals (ir.Global) and freevars
        (ir.FreeVar) that are considered constants for compilation.
        é   c                 ó&   •— t           }‰}| |z   |z   S r   )ÚGLOBAL_B)ÚaÚbÚcÚ	FREEVAR_Cs      €r   r|   z/TestIrUtils.test_find_const_global.<locals>.foo�   s   ø€ ÝˆAØˆAØ�q‘5˜1‘9Ðr    r   Nrˆ   r‰   )r   r/   r3   r4   r8   r
   rf   r`   rZ   r   ÚguardÚ
find_constrd   r†   )r   r|   Úf_irrl   Úconst_bÚconst_cÚinstrŠ   s          @r   Útest_find_const_globalz"TestIrUtils.test_find_const_global–   s  ø€ ð
 ˆ	ð	ð 	ð 	ð 	ð 	õ
 Ô$ SÑ)Ô)ˆØ”˜A”ˆØˆØˆà”Jð 	<ð 	<ˆDÝ˜$¥¤	Ñ*Ô*ð <¨t¬{Ô/?À3Ò/FÐ/FÝ"œ.ÝÔ'¨¨t¬{ñ<ô <�å˜$¥¤	Ñ*Ô*ð <¨t¬{Ô/?À3Ò/FÐ/FÝ"œ.ÝÔ'¨¨t¬{ñ<ô <�øð 	×Ò˜¥(Ñ+Ô+Ð+Ø×Ò˜ )Ñ,Ô,Ð,Ð,Ð,r    c                 ó¾   ‡ — d„ }d„ }d„ }ˆ fd„} ||¦  «        } ||¦  «        } ||¦  «        }‰                       ||¦  «         ‰                      ||¦  «         dS )z tests flatten_labels c                 óÌ   — d}| dk    r|dz  }| dk    rdS nE| dk     r0| dk    r|dz  }t          d¦  «        D ]}|dz  }|d	k     r nŒ|d
z  }nt          d¦  «        ‚d}d	}d}d}|S )Nr   é   r)   é   é5   éè  r„   é
   r*   r.   úsome stringé   ©ÚrangeÚ
ValueError©r‡   Úaccrn   Úpy310_defeat1Úpy310_defeat2Úpy310_defeat3Úpy310_defeat4s          r   r|   z,TestIrUtils.test_flatten_labels.<locals>.foo´   s«   € ØˆCØ�1ŠuˆuØ�q‘�Ø�r’6�6Ø˜2ð à�T’�Ø˜’7�7Ø˜1‘H�CÝ˜r™œð ð �AØ˜1‘H�CØ˜Q’w�wØ˜ð ð ˜1‘H�Cøå  Ñ/Ô/Ð/àˆMØˆMØˆMØˆMØˆJr    c                 ó  — d}d}| dk    r|dz  }|dz  }| dk    r|dz  }dS nT| dk     r?| dk    r
|dz  }|dz  }t          d¦  «        D ]}|dz  }|dz  }|d	k     r nŒ|dz  }|d
z  }nt          d¦  «        ‚d}d	}d}d}|S )Nr   r„   r”   r)   r•   r–   r—   r˜   r*   r.   r™   rš   r›   )r‡   rŸ   ry   rn   r    r¡   r¢   r£   s           r   Úbarz,TestIrUtils.test_flatten_labels.<locals>.barÌ   sß   € ØˆCØˆAØ�1ŠuˆuØ�q‘�Ø�R‘�Ø�r’6�6Ø˜‘G�AØ˜2ð ð �T’�Ø˜’7�7Ø˜‘G�AØ˜1‘H�CÝ˜r™œð ð �AØ˜‘G�AØ˜1‘H�CØ˜Q’w�wØ˜ð ð ˜‘G�AØ˜1‘H�Cøå  Ñ/Ô/Ð/ØˆMØˆMØˆMØˆMØˆJr    c                 óÎ   — d}| dk    r|dz  }| dk    rdS dS | dk     r0| dk    r|dz  }t          d	¦  «        D ]}|dz  }|d
k     r nŒ|dz  }nt          d¦  «        ‚d}d
}d}d}|S )Nr   r”   r)   r•   r–   é7   r—   r„   r˜   r*   r.   r™   rš   r›   rž   s          r   Úbazz,TestIrUtils.test_flatten_labels.<locals>.bazé   s«   € ØˆCØ�1ŠuˆuØ�q‘�Ø�r’6�6Ø˜2à˜2Ø�T’�Ø˜’7�7Ø˜1‘H�CÝ˜r™œð ð �AØ˜1‘H�CØ˜Q’w�wØ˜ð ð ˜1‘H�Cøå  Ñ/Ô/Ð/ØˆMØˆMØˆMØˆMØˆJr    c                 ó4  •— t          j        | t          ¦   «         ¦  «        }t          j        |j        ¦  «        }‰                     t          |                     ¦   «         ¦  «        dz   t          |j        ¦  «        ¦  «         t          j	        |¦  «        S )Nr)   )
r   Úcompile_to_numba_irÚdictÚflatten_labelsr3   rd   ÚmaxÚkeysr:   Úcompute_cfg_from_blocks)rX   rW   Úflat_blocksr   s      €r   Úget_flat_cfgz5TestIrUtils.test_flatten_labels.<locals>.get_flat_cfg  su   ø€ ÝÔ2°4½¹¼Ñ@Ô@ˆGÝ"Ô1°'´.ÑAÔAˆKØ×Ò�S ×!1Ò!1Ñ!3Ô!3Ñ4Ô4°qÑ8½#¸g¼nÑ:MÔ:MÑNÔNÐNÝÔ3°KÑ@Ô@Ð@r    N)rd   ÚassertNotEqual)r   r|   r¥   r¨   r±   Úfoo_cfgÚbar_cfgÚbaz_cfgs   `       r   Útest_flatten_labelszTestIrUtils.test_flatten_labels²   s¯   ø€ ð	ð 	ð 	ð0	ð 	ð 	ð:	ð 	ð 	ð2	Að 	Að 	Að 	Að 	Að �,˜sÑ#Ô#ˆØ�,˜sÑ#Ô#ˆØ�,˜sÑ#Ô#ˆà×Ò˜ 'Ñ*Ô*Ð*Ø×Ò˜G WÑ-Ô-Ð-Ð-Ð-r    N)r!   r"   r#   Ú__doc__r@   r‚   r‘   r¶   r$   r    r   r&   r&      sc   € € € € € ðð ð5ð 5ð 5ð&d4ð d4ð d4ðL-ð -ð -ð8[.ð [.ð [.ð [.ð [.r    r&   Ú__main__)&ÚnumbaÚnumba.tests.supportr   r   Únumba.core.registryr   Únumba.core.compilerr   r   Únumba.core.compiler_machineryr   Ú
numba.corer	   r
   r   r   r   r   Únumba.core.untyped_passesr   r   r   r   Únumba.core.typed_passesr   r   r   Únumba.experimentalr   r†   ÚcoreÚListr}   Úobjectr   r&   r!   Úmainr$   r    r   ú<module>rÆ      sæ  ðØ €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø *Ð *Ð *Ð *Ð *Ð *Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HðAð Að Að Að Að Að Að Að Að Að Að AðPð Pð Pð Pð Pð Pð Pð Pð Pð Pà 'Ð 'Ð 'Ð 'Ð 'Ð 'ð €ð 
€ˆE�5”:Ô#×(Ò(¨¬Ñ4Ô4Ð5Ð
6Ñ7Ô7ðð ð ð ð ˆFñ ô ñ 8Ô7ðð
u.ð u.ð u.ð u.ð u.�(ñ u.ô u.ð u.ðp ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr    