§
    ƒÛg)  ã                   óŽ   — d Z ddlZddlmZ ddlmZm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mZ d	„ Z G d
„ dee¦  «        ZdS )z/
Tests for practical lowering specific errors.
é    N)Únjit)ÚtypesÚir)ÚCompilerBaseÚDefaultPassBuilder)ÚNopythonTypeInference)Úregister_passÚFunctionPass)ÚMemoryLeakMixinÚTestCasec                 ó   — dS )zDummy function used in testN© ©Úas    ú`/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_practical_lowering_issues.pyÚissue7507_lroundr      s   € à€Dó    c                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestLoweringc                 ó’   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }|                      ||¦  «         dS )a–  Test issues with zero-filling of refct'ed variables inside loops.

        Before the fix, the in-loop variables are always zero-filled at their
        definition location. As a result, their state from the previous
        iteration is erased. No decref is applied. To fix this, the
        zero-filling must only happen once after the alloca at the function
        entry block. The loop variables are technically defined once per
        function (one alloca per definition per function), but semantically
        defined once per assignment. Semantically, their lifetime stop only
        when the variable is re-assigned or when the function ends.
        c                 ó¨   — t          j        d¦  «        }t          | ¦  «        D ]-}|dk    rt          j        d¦  «        }|dk    r||d         z  }Œ.|S ©Né   r   é   ©ÚnpÚzerosÚrangeÚones)ÚNÚsum_vecÚnÚvecs       r   Úudtz7TestLowering.test_issue4156_loop_vars_leak.<locals>.udt!   sW   € å”h˜q‘k”kˆGÝ˜1‘X”Xð &ð &�Ø˜’6�6åœ' !™*œ*�CØ˜’6�6Ø˜s 1œvÑ%�GøàˆNr   é   N©r   Úpy_funcÚassertPreciseEqual©Úselfr$   ÚgotÚexpects       r   Útest_issue4156_loop_vars_leakz*TestLowering.test_issue4156_loop_vars_leak   sW   € õ 
ð		ð 		ñ 
Œð		ð ˆc�!‰fŒfˆØ—’˜Q‘”ˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r   c                 ó’   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }|                      ||¦  «         dS )zQVariant of test_issue4156_loop_vars_leak.

        Adding an outer loop.
        c                 óÖ   — t          j        d¦  «        }t          | ¦  «        D ]D}t          | ¦  «        D ]2}||z   }|dk    rt          j        d¦  «        }|dk    r||d         z  }Œ3ŒE|S r   r   )r    r!   ÚxÚyr"   r#   s         r   r$   z@TestLowering.test_issue4156_loop_vars_leak_variant1.<locals>.udt6   s|   € å”h˜q‘k”kˆGÝ˜1‘X”Xð *ð *�Ý˜q™œð *ð *�AØ˜A™�AØ˜A’v�vå œg a™jœj˜Ø˜A’v�vØ 3 q¤6Ñ)˜øð*ð ˆNr   r%   Nr&   r)   s       r   Ú&test_issue4156_loop_vars_leak_variant1z3TestLowering.test_issue4156_loop_vars_leak_variant11   sW   € õ
 
ð	ð 	ñ 
Œð	ð ˆc�!‰fŒfˆØ—’˜Q‘”ˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r   c                 ó’   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }|                      ||¦  «         dS )zUVariant of test_issue4156_loop_vars_leak.

        Adding deeper outer loop.
        c                 ó   — t          j        d¦  «        }t          | ¦  «        D ]Y}t          | ¦  «        D ]G}t          | ¦  «        D ]5}||z   |z   }|dk    rt          j        d¦  «        }|dk    r||d         z  }Œ6ŒHŒZ|S r   r   )r    r!   Úzr0   r1   r"   r#   s          r   r$   z@TestLowering.test_issue4156_loop_vars_leak_variant2.<locals>.udtM   sš   € å”h˜q‘k”kˆGÝ˜1‘X”Xð .ð .�Ý˜q™œð .ð .�AÝ" 1™XœXð .ð .˜Ø ™E A™I˜Ø š6˜6å"$¤'¨!¡*¤*˜CØ š6˜6Ø# s¨1¤vÑ-˜Gøð.ð.ð ˆNr   r%   Nr&   r)   s       r   Ú&test_issue4156_loop_vars_leak_variant2z3TestLowering.test_issue4156_loop_vars_leak_variant2H   óW   € õ
 
ð	ð 	ñ 
Œð	ð ˆc�!‰fŒfˆØ—’˜Q‘”ˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r   c                 ó’   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }|                      ||¦  «         dS )z_Variant of test_issue4156_loop_vars_leak.

        Adding inner loop around allocation
        c                 óú   — t          j        d¦  «        }t          | ¦  «        D ]V}t          | ¦  «        D ]D}||z   }|dk    r&t          | ¦  «        D ]}t          j        |¦  «        }Œ|dk    r||d         z  }ŒEŒW|S )Nr   r   r   )r    r!   r5   r0   r"   r1   r#   s          r   r$   z@TestLowering.test_issue4156_loop_vars_leak_variant3.<locals>.udte   s“   € å”h˜q‘k”kˆGÝ˜1‘X”Xð *ð *�Ý˜q™œð *ð *�AØ˜A™�AØ˜A’v�vÝ!& q¡¤ð -ð -˜Aå"$¤'¨!¡*¤*˜C˜CØ˜A’v�vØ 3 q¤6Ñ)˜øð*ð ˆNr   r%   Nr&   r)   s       r   Ú&test_issue4156_loop_vars_leak_variant3z3TestLowering.test_issue4156_loop_vars_leak_variant3`   r7   r   c                 ó’   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }|                      ||¦  «         dS )z]Variant of test_issue4156_loop_vars_leak.

        Interleaves loops and allocations
        c                 óÊ   — d}t          | ¦  «        D ]P}t          j        d¦  «        }t          | ¦  «        D ]}t          j        d¦  «        }Œ||d         |d         z   z  }ŒQ|S )Nr   é   )r   r   r   )r    r!   r"   r#   r5   s        r   r$   z@TestLowering.test_issue4156_loop_vars_leak_variant4.<locals>.udt}   sj   € àˆGå˜1‘X”Xð )ð )�Ý”h˜q‘k”k�Ý˜q™œð $ð $�AÝœ ™œ�A�AØ˜3˜qœ6 A a¤D™=Ñ(��àˆNr   r%   Nr&   r)   s       r   Ú&test_issue4156_loop_vars_leak_variant4z3TestLowering.test_issue4156_loop_vars_leak_variant4x   sW   € õ
 
ð		ð 		ñ 
Œð		ð ˆc�!‰fŒfˆØ—’˜Q‘”ˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r   c                 óL  ‡— t          dd¬¦  «         G d„ dt          ¦  «        ¦   «         Š G ˆfd„dt          ¦  «        }t          |¬¦  «        d„ ¦   «         }t	          j        d	¦  «        } ||¦  «        }|                     |¦  «        }|                      ||¦  «         d
S )zHTest an issue with literal type used as index of static_getitem
        F)Úmutates_CFGÚanalysis_onlyc                   ó   — e Zd ZdZd„ Zd„ ZdS )úYTestLowering.test_issue_with_literal_in_static_getitem.<locals>.ForceStaticGetitemLiteralÚforce_static_getitem_literalc                 ó.   — t          j        | ¦  «         d S ©N)r
   Ú__init__)r*   s    r   rG   zbTestLowering.test_issue_with_literal_in_static_getitem.<locals>.ForceStaticGetitemLiteral.__init__–   s   € ÝÔ% dÑ+Ô+Ð+Ð+Ð+r   c                 óB  — i }|j                              ¦   «         D ]h\  }}t          |t          j        ¦  «        rI|j        dk    r>|j        \  }}|                     |t          j	        |j
        ¦  «        f¬¦  «        }|||<   Œi|j                              |¦  «         dS )NÚstatic_getitem)ÚargsT)Ú	calltypesÚitemsÚ
isinstancer   ÚExprÚoprJ   Úreplacer   ÚliteralÚindexÚupdate)r*   ÚstateÚreplÚinstÚsigÚobjÚidxÚnew_sigs           r   Úrun_passzbTestLowering.test_issue_with_literal_in_static_getitem.<locals>.ForceStaticGetitemLiteral.run_pass™   sª   € Ø�ð "'¤×!6Ò!6Ñ!8Ô!8ð -ð -‘I�D˜#Ý" 4­¬Ñ1Ô1ð -Ø œGÐ'7Ò7Ð7Ø%(¤X™
˜˜cØ"%§+¢+°CÝ49´MÀ$Ä*Ñ4MÔ4Mð4O +ñ #Pô #P˜à%,˜˜T™
øØ”×&Ò& tÑ,Ô,Ð,Ø�tr   N)Ú__name__Ú
__module__Ú__qualname__Ú_namerG   r[   r   r   r   ÚForceStaticGetitemLiteralrC   ‘   s9   € € € € € ð 3ˆEð,ð ,ð ,ðð ð ð ð r   r`   c                   ó   •— e Zd Zˆ fd„ZdS )úNTestLowering.test_issue_with_literal_in_static_getitem.<locals>.CustomPipelinec                 óš   •— t          j        | j        ¦  «        }|                     ‰t          ¦  «         |                     ¦   «          |gS rF   )r   Údefine_nopython_pipelinerT   Úadd_pass_afterr   Úfinalize)r*   Úpmr`   s     €r   Údefine_pipelinesz_TestLowering.test_issue_with_literal_in_static_getitem.<locals>.CustomPipeline.define_pipelines¨   sG   ø€ Ý'Ô@ÀÄÑLÔL�Ø×!Ò!Ð";Ý"7ñ9ô 9ð 9à—’‘”�Ø�t�r   N)r\   r]   r^   rh   )r`   s   €r   ÚCustomPipelinerb   §   s.   ø€ € € € € ðð ð ð ð ð ð r   ri   )Úpipeline_classc                 ó   — | d         S )Nr%   r   )Úarrs    r   ÚfoozCTestLowering.test_issue_with_literal_in_static_getitem.<locals>.foo¯   s   € à�q”6ˆMr   é
   N)r	   r
   r   r   r   Úaranger'   ÚassertEqual)r*   ri   rm   rl   r+   r,   r`   s         @r   Ú)test_issue_with_literal_in_static_getitemz6TestLowering.test_issue_with_literal_in_static_getitem�   së   ø€ õ 
 5¸Ð	>Ñ	>Ô	>ð	ð 	ð 	ð 	ð 	­ñ 	ô 	ñ 
?Ô	>ð	ð*	ð 	ð 	ð 	ð 	ð 	ð 	�\ñ 	ô 	ð 	õ 
˜^Ð	,Ñ	,Ô	,ð	ð 	ñ 
-Ô	,ð	õ Œi˜‰mŒmˆØˆc�#‰hŒhˆØ—’˜SÑ!Ô!ˆØ×Ò˜˜fÑ%Ô%Ð%Ð%Ð%r   c                 óÞ   ‡— ddl m}m} ddlmŠ  |t
          ¦  «         G ˆfd„d|¦  «        ¦   «         }t          d¦  «        d„ ¦   «         }|                       |d¦  «        d	¦  «         d
S )z„
        Test a problem with BaseContext.get_function() because of changes
        related to the new style error handling.
        r   )ÚAbstractTemplateÚinfer_global©Úlower_builtinc                   ó   •— e Zd ZeZˆ fd„ZdS )ú3TestLowering.test_issue7507.<locals>.lroundTemplatec                 óŒ   •— t          j        t           j        ¦  «        } ‰t          t           j        ¦  «        d„ ¦   «         }|S )Nc                 ó^   — |                       ||d         |j        d         |j        ¦  «        S )Nr   )ÚcastrJ   Úreturn_type)ÚcontextÚbuilderrW   rJ   s       r   ÚcodegenzLTestLowering.test_issue7507.<locals>.lroundTemplate.generic.<locals>.codegenÈ   s/   € ð #Ÿ<š<¨°°a´¸#¼(À1¼+Ø(+¬ñ9ô 9ð 9r   )r   Úint64Úfloat64r   )r*   rJ   ÚkwsÚ	signaturer   rv   s        €r   Úgenericz;TestLowering.test_issue7507.<locals>.lroundTemplate.genericÄ   sH   ø€ Ý!œK­¬Ñ6Ô6�	ð �Õ/µ´Ñ?Ô?ð9ð 9ñ @Ô?ð9ð
 !Ð r   N)r\   r]   r^   r   Úkeyr„   ru   s   €r   ÚlroundTemplaterx   À   s3   ø€ € € € € à"ˆCð
!ð 
!ð 
!ð 
!ð 
!ð 
!ð 
!r   r†   zint64(float64)c                 ó    — t          | ¦  «        S rF   )r   r   s    r   rm   z(TestLowering.test_issue7507.<locals>.fooÐ   s   € å# AÑ&Ô&Ð&r   g333333@r   N)Únumba.core.typing.templatesrs   rt   Únumba.core.imputilsrv   r   r   rp   )r*   rs   rt   r†   rm   rv   s        @r   Útest_issue7507zTestLowering.test_issue7507¸   sÆ   ø€ ð
 	OÐNÐNÐNÐNÐNÐNÐNØ5Ð5Ð5Ð5Ð5Ð5à	ˆÕ&Ñ	'Ô	'ð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!Ð-ñ 	!ô 	!ñ 
(Ô	'ð	!õ 
ÐÑ	Ô	ð	'ð 	'ñ 
 Ô	ð	'ð 	×Ò˜˜˜S™œ 1Ñ%Ô%Ð%Ð%Ð%r   N)
r\   r]   r^   r-   r2   r6   r:   r>   rq   rŠ   r   r   r   r   r      s~   € € € € € ð-ð -ð -ð8-ð -ð -ð.-ð -ð -ð0-ð -ð -ð0-ð -ð -ð*)&ð )&ð )&ðV&ð &ð &ð &ð &r   r   )Ú__doc__Únumpyr   Únumbar   Ú
numba.corer   r   Únumba.core.compilerr   r   Únumba.core.typed_passesr   Únumba.core.compiler_machineryr	   r
   Únumba.tests.supportr   r   r   r   r   r   r   ú<module>r“      sð   ððð ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð	ð 	ð 	ð
@&ð @&ð @&ð @&ð @&�? Hñ @&ô @&ð @&ð @&ð @&r   