Ë
    èÿæi¤t  ã                   óú   — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	Z	d dl
Z
d dlmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	„ d
e«      Z G d„ de«      Zedk(  r e	j<                  «        yy)é    )Ú
namedtupleN)Údedent)ÚTestCaseÚoverride_configÚignore_internal_warnings)ÚjitÚnjit)Útypes)Údefault_manager)ÚNumbaDebugInfoWarningc                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestDebugInfozF
    These tests only checks the compiled assembly for debuginfo.
    c                 óF   — |j                  |«       |j                  |«      S ©N)ÚcompileÚinspect_asm©ÚselfÚfnÚsigs      úo/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_debuginfo.pyÚ_getasmzTestDebugInfo._getasm   s   € Ø
�
‰
�3ŒØ�~‰~˜cÓ"Ð"ó    c                 óª   — | j                  ||¬«      }t        j                  d|t        j                  «      }|d u}| j	                  ||d|z  ¬«       y )N©r   z\.section.+debugzdebug info not found in:
%s)Úmsg)r   ÚreÚsearchÚIÚassertEqual)r   r   r   ÚexpectÚasmÚmÚgots          r   Ú_checkzTestDebugInfo._check    sO   € Ø�l‰l˜2 3ˆlÓ'ˆÜ�I‰IÐ)¨3´·±Ó5ˆØ�tˆmˆØ×Ñ˜ Ð*HÈ3Ñ*NÐÕOr   c                 óp   — t        dd¬«      d„ «       }| j                  |t        j                  fd¬«       y )NTF©ÚnopythonÚdebugc                 ó   — | S r   © ©Úxs    r   Úfooz3TestDebugInfo.test_no_debuginfo_in_asm.<locals>.foo'   ó   € àˆHr   ©r   r!   ©r   r%   r
   Úint32©r   r.   s     r   Útest_no_debuginfo_in_asmz&TestDebugInfo.test_no_debuginfo_in_asm&   s5   € Ü	�d %Ô	(ñ	ó 
)ð	ð 	�‰�CœeŸk™k˜^°EˆÕ:r   c                 óp   — t        dd¬«      d„ «       }| j                  |t        j                  fd¬«       y )NTr'   c                 ó   — | S r   r+   r,   s    r   r.   z0TestDebugInfo.test_debuginfo_in_asm.<locals>.foo.   r/   r   r0   r1   r3   s     r   Útest_debuginfo_in_asmz#TestDebugInfo.test_debuginfo_in_asm-   s5   € Ü	�d $Ô	'ñ	ó 
(ð	ð 	�‰�CœeŸk™k˜^°DˆÕ9r   c                 ó  — t        dd«      5  t        d¬«      d„ «       }| j                  |t        j                  fd¬«       t        dd¬«      d	„ «       }| j                  |t        j                  fd¬«       d d d «       y # 1 sw Y   y xY w)
NÚDEBUGINFO_DEFAULTé   T)r(   c                 ó   — | S r   r+   r,   s    r   r.   z4TestDebugInfo.test_environment_override.<locals>.foo7   ó   € à�r   r0   Fr'   c                 ó   — | S r   r+   r,   s    r   Úbarz4TestDebugInfo.test_environment_override.<locals>.bar=   r<   r   )r   r   r%   r
   r2   )r   r.   r>   s      r   Útest_environment_overridez'TestDebugInfo.test_environment_override4   s{   € ÜÐ0°!Õ4ä˜$Ôñó  ðà�K‰K˜¤%§+¡+ ¸ˆKÔ=ô ˜$ eÔ,ñó -ðà�K‰K˜¤%§+¡+ ¸ˆKÔ>÷ 5×4Ñ4ús   �A,BÂBc                 ó„  ‡‡— t        d¬«      d„ «       Št        d¬«      d„ «       Št         ˆˆfd„«       }t        dd«      5   |t        j                  «      }d d d «       | j	                  |j                  t        j                  «      «       |j                  |j                  d	   «      }t        j                  |«      }|j                  |j                  d	      j                  j                  }|j                  D �cg c]  }|j                  |k(  sŒ|‘Œ }}| j                  t!        |«      d«       |d	   }g }	|j"                  D ]K  }
|
j$                  D ]:  }|j&                  d
k(  sŒ|	j)                  t+        |«      j-                  «       «       Œ< ŒM d}d}‰j                  ‰j                  d	      j                  j                  }|	D ]<  }|st/        j0                  d|«      rd}|rŒ t/        j0                  d|› d�|«      sŒ;d}Œ> | j3                  |«       | j3                  |«       y # 1 sw Y   �ŒÙxY wc c}w )NT)Úforceinlinec                 ó,   — t        j                  | «      S r   )ÚmathÚsinr,   s    r   r>   z:TestDebugInfo.test_llvm_inliner_flag_conflict.<locals>.barG   ó   € ä—8‘8˜A“;Ðr   Fc                 ó,   — t        j                  | «      S r   )rC   Úcosr,   s    r   Úbazz:TestDebugInfo.test_llvm_inliner_flag_conflict.<locals>.bazK   rE   r   c                 ó,   •—  ‰| «      } ‰| «      }||fS r   r+   )r-   ÚaÚbr>   rH   s      €€r   r.   z:TestDebugInfo.test_llvm_inliner_flag_conflict.<locals>.fooO   s   ø€ á�A“ˆAÙ�A“ˆAØ�a�4ˆKr   r9   r:   r   Úcallz.*llvm.sin.f64.*z.*)r	   r   ÚnpÚpiÚassertPreciseEqualÚpy_funcÚinspect_llvmÚ
signaturesÚllvmÚparse_assemblyÚ	overloadsÚfndescÚmangled_nameÚ	functionsÚnamer    ÚlenÚblocksÚinstructionsÚopcodeÚappendÚstrÚstripr   ÚmatchÚ
assertTrue)r   r.   ÚresultÚfull_irÚmodulerY   r-   ÚfuncsÚfuncÚf_namesÚblkÚstmtÚ	found_sinÚ	found_bazÚbaz_namer>   rH   s                  @@r   Útest_llvm_inliner_flag_conflictz-TestDebugInfo.test_llvm_inliner_flag_conflictB   sö  ù€ ô
 
˜$Ô	ñ	ó 
 ð	ô 
˜%Ô	 ñ	ó 
!ð	ô 
ô	ó 
ð	ô Ð0°!Õ4ÙœŸ™“ZˆF÷ 5ð 	×Ñ ¨¯©´B·E±EÓ(:Ô;ð ×"Ñ" 3§>¡>°!Ñ#4Ó5ˆÜ×$Ñ$ WÓ-ˆØ�}‰}˜SŸ^™^¨AÑ.Ñ/×6Ñ6×CÑCˆØ"×,Ò,Ó?Ñ,�q°·±¸$³’Ð,ˆÐ?Ø×Ñœ˜U› QÔ'Ø�Q‰xˆð ˆØ—;”;ˆCØ×(Ô(�Ø—;‘; &Ó(à—N‘N¤3 t£9§?¡?Ó#4Õ5ñ )ð ð ˆ	Øˆ	Ø—=‘= §¡°Ñ!2Ñ3×:Ñ:×GÑGˆÛˆAÙ¤§¡Ð*<¸aÔ!@Ø �	Ú¤§¡¨B¨x¨j¸Ð*;¸QÕ!?Ø ‘	ð	 ð 	�‰˜	Ô"Ø�‰˜	Õ"÷E 5Ñ4üò @s   ÁH0ÄH=ÄH=È0H:N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r4   r7   r?   rn   r+   r   r   r   r      s&   „ ñò#òPò;ò:ò?ó6#r   r   c                   óÖ   — e Zd ZdZddiZd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
 ej                  e¬
«      d„ «       Z ej                  e¬
«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestDebugInfoEmissionz1 Tests that debug info is emitted correctly.
    Ú	NUMBA_OPTÚ0c                 óŠ   — t        dd«      5  |j                  |«       |j                  |«      cd d d «       S # 1 sw Y   y xY w)NÚOPTr   )r   r   rQ   r   s      r   Ú_get_llvmirz!TestDebugInfoEmission._get_llvmir�   s/   € Ü˜U AÕ&Ø�J‰J�sŒOØ—?‘? 3Ó'÷ '×&Ò&ús	   �"9¹Ac                 óÈ   — | j                  ||«      j                  «       }t        j                  d«      }g }|D ]%  }|j	                  |«      sŒ|j                  |«       Œ' |S )Nz![0-9]+ =.*)ry   Ú
splitlinesr   r   ra   r^   )r   r   r   ÚllÚmeta_reÚmetadataÚlines          r   Ú_get_metadataz#TestDebugInfoEmission._get_metadata†   sY   € Ø×Ñ˜b #Ó&×1Ñ1Ó3ˆÜ—*‘*˜^Ó,ˆØˆÛˆDØ�}‰}˜TÕ"Ø—‘ Õ%ð ð ˆr   c                 óª   — t        «       }t        j                  d«      }|D ].  }|j                  |«      }|sŒ|j	                  «       \  }}|||<   Œ0 |S )zdGets the map of DI label to md, e.g.
        '!33' -> '!{!"branch_weights", i32 1, i32 99}'
        z(![0-9]+) = (.*))Údictr   r   ra   Úgroups)r   r~   Úmetadata_definition_mapÚmeta_definition_splitr   ÚmatchedÚdbg_valÚinfos           r   Ú_get_metadata_mapz'TestDebugInfoEmission._get_metadata_map�   s\   € ô #'£&ÐÜ "§
¡
Ð+>Ó ?ÐÛˆDØ+×1Ñ1°$Ó7ˆGÚØ '§¡Ó 0‘�˜Ø37Ð'¨Ò0ð	 ð
 'Ð&r   c                 óî   — | j                  |«      }t        «       }|j                  «       D ]F  }t        j                  d|«      }|sŒt        |j                  d«      «      }|j                  |«       ŒH |S )Nz!DILocation\(line: (\d+),r:   )r‰   ÚsetÚvaluesr   ra   ÚintÚgroupÚadd)r   r~   Ú
md_def_mapÚlinesÚmdr#   Úlns          r   Ú_get_lines_from_debuginfoz/TestDebugInfoEmission._get_lines_from_debuginfoœ   sc   € à×+Ñ+¨HÓ5ˆ
ä“ˆØ×#Ñ#Ö%ˆBÜ—‘Ð5°rÓ:ˆAÚÜ˜Ÿ™ ›“_�Ø—	‘	˜"•ð	 &ð
 ˆr   c                 óÊ   — t        d¬«      d„ «       }| j                  |d¬«      }|d   }| j                  d|d d «       | j                  d	|«       | j                  d
|«       y )NT©r)   c                   ó   — y r   r+   r+   r   r   r.   z/TestDebugInfoEmission.test_DW_LANG.<locals>.fooª   ó   € àr   r+   r   r   z!0é   z,!DICompileUnit(language: DW_LANG_C_plus_pluszproducer: "clang (Numba)")r	   r€   r    ÚassertIn)r   r.   r~   ÚDICompileUnits       r   Útest_DW_LANGz"TestDebugInfoEmission.test_DW_LANG¨   sq   € ä	�DÔ	ñ	ó 
ð	ð ×%Ñ% c¨rÐ%Ó2ˆØ  ™ˆØ×Ñ˜˜}¨R¨aÐ0Ô1Ø�‰ÐDØ#ô	%à�‰Ð1°=ÕAr   c           
      óh  — t        dd¬«      d„ «       }t        j                  f}| j                  ||¬«      }| j	                  ||¬«      }t        j                  |«      }|j                  |j                  d      j                  j                  }|j                  D �cg c]  }|j                  |k(  sŒ|‘Œ }}| j                  t        |«      d«       |d   }	|	j                  D �cg c]  }|‘Œ }
}| j!                  t        |
«      d«       |
d   }|j"                  D �cg c]  }|j$                  dvsŒ|‘Œ }}h d	£}d
}|D ]H  }|j$                  |v r!|j'                  |j$                  «       |rŒ/d}Œ2|sŒ5|sŒ8| j)                  d«       ŒJ | j+                  |d«       t-        «       }t/        j0                  d«      }d}|D ]·  }t3        |«      }|j5                  |«      }|s-d}| j7                  t9        |D �cg c]  }||v ‘Œ c}«      «       ŒN|j;                  «       }| j                  t        |«      d«       |d   }t=        |dd «      }|dk\  r| j7                  ||k\  «       |}|j?                  |«       Œ¹ tA        jB                  |«      \  }}| jE                  |«      }g d¢}|D �cg c]
  }|dz   |z   ‘Œ }}tG        tI        |d„ ¬«      |«      D ]  \  }}||   } | jK                  d|› �| «       Œ! d}!t/        j0                  |!«      }"|jM                  «       D ]g  }#|"j5                  |#«      }|sŒ|j;                  «       }| j                  t        |«      d«       t=        |d   «      }$|dz   }%| j                  |$|%«        y | j)                  d«       yc c}w c c}w c c}w c c}w c c}w )z: Tests that DILocation information is reasonable.
        TÚnumpy)r)   Úerror_modelc                 ó:   — | dz   }|dz  }||z  }t        |«       |S )Ng®Gáz®ó?g¸…ëQ¸@)Úprint)rJ   rK   ÚcÚds       r   r.   z2TestDebugInfoEmission.test_DILocation.<locals>.foo¸   s)   € à�D‘ˆAØ�D‘ˆAØ�A‘ˆAÜ�!ŒHØˆHr   r   r   r:   )rL   ÚloadÚstore>   ÚfaddÚfdivÚfmulFzMath opcodes are not contiguouszMath opcodes were not foundz.*!dbg (![0-9]+).*$éÿÿÿÿ)zalloca zstore N)r   r:   r™   é   r™   c                 ó   — t        | dd  «      S ©Nr:   )r�   r,   s    r   Ú<lambda>z7TestDebugInfoEmission.test_DILocation.<locals>.<lambda>  s   € ¼sÀ1ÀQÀRÀ5¼zr   )Úkeyzline: z1.*!DILocalVariable\(name: "a",.*line: ([0-9]+),.*z%Assertion on DILocalVariable not made)'r	   r
   Úfloat64r€   ry   rS   rT   rU   rR   rV   rW   rX   rY   r    rZ   r[   ÚassertGreaterr\   r]   ÚremoveÚfailÚassertFalser‹   r   r   r_   ra   rb   Úanyrƒ   r�   r�   ÚinspectÚgetsourcelinesr‰   ÚzipÚsortedrš   rŒ   )&r   r.   r   r~   rd   re   rY   r-   rf   rg   r[   ÚblockÚinstrsÚ	op_expectÚstartedÚline2dbgÚ
re_dbg_refÚfoundÚinstrÚinst_as_strr†   Úacceptedrƒ   r‡   Úint_dbg_valÚpysrcÚpysrc_line_startr„   ÚoffsetsÚ
pyln_rangeÚkÚline_noÚdilocation_infoÚexprÚmatch_local_var_aÚentryÚdbg_lineÚdeflines&                                         r   Útest_DILocationz%TestDebugInfoEmission.test_DILocationµ   s¯  € ô 
�D gÔ	.ñ	ó 
/ð	ô2 �}‰}ÐˆØ×%Ñ% c¨sÐ%Ó3ˆØ×"Ñ" 3¨CÐ"Ó0ˆä×$Ñ$ WÓ-ˆà�}‰}˜SŸ^™^¨AÑ.Ñ/×6Ñ6×CÑCˆØ"×,Ò,Ó?Ñ,�q°·±¸$³’Ð,ˆÐ?Ø×Ñœ˜U› QÔ'Ø�Q‰xˆØ!Ÿ[š[Ó)™[˜’!˜[ˆÐ)Ø×Ñœ3˜v›;¨Ô*Ø�q‘	ˆð #×/Ò/ó -Ñ/˜°1·8±8Ø+ò4,’!Ð/ˆð -â,ˆ	ØˆÛˆAØ�x‰x˜9Ñ$Ø× Ñ  §¡Ô*ÚØ"‘GÚšwØ—	‘	Ð;Õ<ð ð 	×Ñ˜Ð$AÔBô
 “5ˆÜ—Z‘ZÐ 6Ó7ˆ
ØˆÛˆEÜ˜e›*ˆKØ ×&Ñ& {Ó3ˆGÙð 1�Ø—‘¤¹xÓ$H¹x¸! Q¨+Ò%5¸xÑ$HÓ IÔJØØ—^‘^Ó%ˆFØ×ÑœS ›[¨!Ô,Ø˜Q‘iˆGÜ˜g a b˜kÓ*ˆKØ˜ŠzØ—‘ ¨uÑ 4Ô5ØˆEð �L‰L˜Õ!ð' ô* #*×"8Ñ"8¸Ó"=ÑˆÐð #'×"8Ñ"8¸Ó"BÐò
ˆñ
 9@Ó@¹°1Ð&¨Ñ*¨QÓ.¸ˆ
Ð@ô  ¤ xÑ5IÔ JØ *ö,‰LˆQ�à5°aÑ8ˆOØ�M‰M˜F 7 )Ð,¨oÕ>ð,ð DˆÜŸJ™J tÓ,ÐØ,×3Ñ3Ö5ˆEØ'×-Ñ-¨eÓ4ˆGÚØ Ÿ™Ó)�Ø× Ñ ¤ V£¨aÔ0Ü˜v a™y›>�ð +¨QÑ.�Ø× Ñ  ¨7Ô3Ùð 6ð �I‰IÐ=Õ>ùòm @ùò *ùò
-ùò6 %Iùò4 As*   ÂNÂ3NÃ'	N Ä N%Ä4N%Ç9N*Ê-N/)Úenvvarsc                 óð  — t        d¬«      d„ «       } |d«       |j                  |j                  d   «      }t        j                  |«      }|j
                  |j                  d      j                  j                  }|j                  D �cg c]  }|j                  |k(  sŒ|‘Œ }}| j                  t        |«      d«       |d   }|j                  D �cg c]  }|‘Œ }}| j                  t        |«      d«       |\  }	}
|	j                  D �cg c]  }|‘Œ }}|d   }| j                  |j                  d	«       |j                  D �cg c]  }|‘Œ }}| j                  t        |«      d«       |d   }t!        |«      j#                  d
«      d   j%                  «       }| j                  ||
j                  «       | j'                  t!        |«      j)                  |«      «       y c c}w c c}w c c}w c c}w )NTr–   c                 ó   — | dz   S r¬   r+   ©rJ   s    r   r.   z<TestDebugInfoEmission.test_DILocation_entry_blk.<locals>.fooA  s   € à�q‘5ˆLr   é{   r   r:   r™   r©   ÚbrÚ:)r	   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r    rZ   r[   r\   r]   Úoperandsr_   Úsplitr`   rb   Úendswith)r   r.   rd   re   rY   r-   rf   rg   r[   Úentry_blockÚ
body_blockÚentry_instrÚujmpÚujmp_operandsÚtarget_dataÚtargets                   r   Útest_DILocation_entry_blkz/TestDebugInfoEmission.test_DILocation_entry_blk1  sÂ  € ô  
�DÔ	ñ	ó 
ð	áˆCŒà×"Ñ" 3§>¡>°!Ñ#4Ó5ˆô ×$Ñ$ WÓ-ˆØ�}‰}˜SŸ^™^¨AÑ.Ñ/×6Ñ6×CÑCˆØ"×,Ò,Ó?Ñ,�q°·±¸$³’Ð,ˆÐ?Ø×Ñœ˜U› QÔ'Ø�Q‰xˆØ!Ÿ[š[Ó)™[˜’!˜[ˆÐ)Ø×Ñœ˜V› aÔ(Ø"(Ñˆ�Zð #.×":Ò":Ó;Ñ":˜Q’qÐ":ˆÐ;Ø˜2‰ˆØ×Ñ˜Ÿ™ dÔ+Ø$(§M¢MÓ2¡M˜qš MˆÐ2Ø×Ñœ˜]Ó+¨QÔ/Ø# AÑ&ˆÜ�[Ó!×'Ñ'¨Ó,¨QÑ/×5Ñ5Ó7ˆà×Ñ˜ §¡Ô1à�‰œ˜D›	×*Ñ*¨6Ó2Õ3ùò' @ùò *ùò <ùò 3s   ÂG$Â!G$Ã	G)Ä	G.Å	G3c                 ój  ‡— t        d¬«      d„ «       Št        d¬«      ˆfd„«       }t        j                  ddd…   f}| j                  ||¬«      }d}|j	                  «       D ];  }|j                  «       }|j                  d	«      sŒ%| j                  |d
«       |dz  }Œ= | j                  |d«       y)zË This tests that decref's generated from `ir.Del`s as variables go
        out of scope do not have debuginfo associated with them (the location of
        `ir.Del` is an implementation detail).
        Tr–   c                   ó   — y r   r+   r,   s    r   Úsinkz:TestDebugInfoEmission.test_DILocation_decref.<locals>.sinkq  r˜   r   c                 óB   •— | | f}| d   dk(  r	 ‰|«       y|d   d   }|S )Nr   é   r+   )rJ   r-   Úzrå   s      €r   r.   z9TestDebugInfoEmission.test_DILocation_decref.<locals>.foov  s3   ø€ à�A�ˆAØ�‰t�qŠyÙ�Q”ØØ�!‘�Q‘ˆAØˆHr   Nr:   r   r   zcall void @NRT_decrefz.*meminfo\.[0-9]+\)$)	r	   r
   r¯   ry   r{   r`   Ú
startswithÚassertRegexr°   )r   r.   r   rd   Úcountr   Úline_strippedrå   s          @r   Útest_DILocation_decrefz,TestDebugInfoEmission.test_DILocation_decrefj  sÁ   ø€ ô 
�DÔ	ñ	ó 
ð	ô 
�DÔ	ó	ó 
ð	ô �}‰}™S˜q˜SÑ!Ð#ˆØ×"Ñ" 3¨CÐ"Ó0ˆð ˆØ×&Ñ&Ö(ˆDØ ŸJ™J›LˆMØ×'Ñ'Ð(?Õ@Ø× Ñ  Ð'>Ô?Ø˜‘
‘ð	 )ð
 	×Ñ˜5 !Õ$r   c                 ó  — t        d¬«      d„ «       }t        j                  f}| j                  ||¬«      }t	        j
                  |«      \  }}d}t        j                  |«      }t        «       }|D ]^  }	|j                  |	«      }
|
sŒ|
j                  «       }| j                  t        |«      d«       |j                  t        |d   «      «       Œ` | j                  t        |«      d«       | j                  ||«       y	)
z� Tests that DILocation information for undefined vars is associated
        with the line of the function definition (so it ends up in the prologue)
        Tr–   c                 ó&   — | r	| dkD  rd}S dz  }|S )Nr   r:   r+   )Únr¢   s     r   r.   z<TestDebugInfoEmission.test_DILocation_undefined.<locals>.foo�  s&   € áØ�q’5Ø�AØ�ð �Q‘�Ø�r   r   z:.*!DILocalVariable\(name: "c\$?[0-9]?",.*line: ([0-9]+),.*r:   r   rª   N)r	   r
   Úintpr€   rµ   r¶   r   r   r‹   ra   rƒ   r    rZ   r�   r�   rš   )r   r.   r   r~   rÄ   rÅ   rË   ÚmatcherÚassociated_linesr’   ra   rƒ   s               r   Útest_DILocation_undefinedz/TestDebugInfoEmission.test_DILocation_undefined‹  sæ   € ô 
�DÔ	ñ	ó 
ð	ô �z‰zˆmˆØ×%Ñ% c¨sÐ%Ó3ˆÜ")×"8Ñ"8¸Ó"=ÑˆÐàLˆÜ—*‘*˜TÓ"ˆÜ›5ÐÛˆBØ—M‘M "Ó%ˆEÚØŸ™›�Ø× Ñ ¤ V£¨aÔ0Ø ×$Ñ$¤S¨°©£^Õ4ð ð 	×ÑœÐ-Ó.°Ô2Ø�‰Ð&Ð(8Õ9r   c                 ó¤  — t        d¬«      d„ «       }t        j                  f}| j                  ||¬«      }t	        j
                  |«      \  }}d}t        j                  |«      }t        «       }|D ]^  }	|j                  |	«      }
|
sŒ|
j                  «       }| j                  t        |«      d«       |j                  t        |d   «      «       Œ` | j                  t        |«      d«       t        «       }t        |«      D ]  \  }}d	|v sŒ|j                  ||z   «       Œ  | j                  t        |«      d«       | j                  ||«       y
)zi Tests that DILocation information for versions of variables matches
        up to their definition site.Tr–   c                 ó$   — | rd}nd}d}d}d}d}|S )Né   r:   r™   rª   é   r+   )rð   r¢   Úpy310_defeat1Úpy310_defeat2Úpy310_defeat3Úpy310_defeat4s         r   r.   zFTestDebugInfoEmission.test_DILocation_versioned_variables.<locals>.foo±  s(   € áØ‘à�àˆMØˆMØˆMØˆMØˆHr   r   z9.*!DILocalVariable\(name: "c\$[0-9]?",.*line: ([0-9]+),.*r:   r   r™   zc = N)r	   r
   rñ   r€   rµ   r¶   r   r   r‹   ra   rƒ   r    rZ   r�   r�   Ú	enumerate)r   r.   r   r~   rÄ   rÅ   rË   rò   ró   r’   ra   rƒ   Úpy_linesÚixÚpylns                  r   Ú#test_DILocation_versioned_variablesz9TestDebugInfoEmission.test_DILocation_versioned_variables«  s7  € ô 
�DÔ	ñ
	ó 
ð
	ô �z‰zˆmˆØ×%Ñ% c¨sÐ%Ó3ˆÜ")×"8Ñ"8¸Ó"=ÑˆÐð LˆÜ—*‘*˜TÓ"ˆÜ›5ÐÛˆBØ—M‘M "Ó%ˆEÚØŸ™›�Ø× Ñ ¤ V£¨aÔ0Ø ×$Ñ$¤S¨°©£^Õ4ð ð 	×ÑœÐ-Ó.°Ô2ô “5ˆÜ! %Ö(‰HˆB�Ø˜Š~Ø—‘˜RÐ"2Ñ2Õ3ð )ð 	×Ñœ˜X›¨Ô*ð 	×ÑÐ)¨8Õ4r   c                 óð  ‡— t        dd«      }t        j                   |ddd«      t        j                   |ddd«      t        j                   |dd	d
«      t        j
                   |ddd
«      t        j                   |ddd
«      t        j                   |ddd
«      t        j                   |dd	d«      t        j                   |ddd«      t        j                   |ddd«      t        j                   |ddd«      t        j                   |ddd«      t        j                   |ddd«      i}|j                  «       D �]3  \  Š}t        d¬«      ˆfd„«       }| j!                  |d¬«      }| j#                  |«      }|j                  «       D ]  \  }}d|v sŒ||   }	 n J d«       ‚t%        j&                  d |	«      j)                  «       d   }
||
   }d!|j*                  v r=d"|j,                  › d#|j.                  › d$|j*                  › d%�}| j1                  ||«       Œà|j.                  dk(  rd&nd'}d(|j*                  › d)|j,                  › d*|› d+|› d,|j.                  › �
}| j3                  ||«       �Œ6 y-).z@ Tests that dwarf info is correctly emitted for numeric scalars.ÚDIzname bits encodingÚfloat32é    ÚDW_ATE_floatr¯   é@   Úint8é   ÚDW_ATE_signedÚint16é   r2   Úint64Úuint8ÚDW_ATE_unsignedÚuint16Úuint32Úuint64Ú	complex64ÚDW_TAG_structure_typeÚ
complex128é€   Tr–   c                  ó   •—  ‰d«      } | S )Né
   r+   )rJ   Útys    €r   r.   z7TestDebugInfoEmission.test_numeric_scalars.<locals>.fooï  s   ø€ á�r“F�Ø�r   r+   r   úDILocalVariable(name: "a"r   úmissing DILocalVariable 'a'ú.*type: (![0-9]+).*ÚDW_ATEz!DIBasicType(name: "ú	", size: z, encoding: Ú)ÚfloatÚdoublezdistinct !DICompositeType(tag: z	, name: "z ({z, z})", size: N)r   rM   r  r¯   r  r  r2   r  r  r  r  r  r  r  Úitemsr	   r€   r‰   r   ra   rƒ   ÚencodingrY   Úbitsr    rš   )r   r  Ú
type_infosÚ
dwarf_infor.   r~   r„   rÈ   ÚvÚlvarÚtype_markerÚ	type_declÚexpectedÚraw_fltr  s                 @r   Útest_numeric_scalarsz*TestDebugInfoEmission.test_numeric_scalarsÙ  sz  ø€ ô ˜Ð2Ó3ˆä—j‘j¡" Y°°NÓ"CÜ—j‘j¡" Y°°NÓ"CÜ—g‘g™r &¨!¨_Ó=Ü—h‘h¡ 7¨B°Ó @Ü—h‘h¡ 7¨B°Ó @Ü—h‘h¡ 7¨B°Ó @Ü—h‘h¡ 7¨AÐ/@Ó AÜ—i‘i¡ H¨bÐ2CÓ!DÜ—i‘i¡ H¨bÐ2CÓ!DÜ—i‘i¡ H¨bÐ2CÓ!DÜ—l‘l¡B {°BØ'>ó%@ä—m‘m¡R¨°cØ(?ó&AðCˆ
ð )×.Ñ.×0‰NˆB�
ä˜Ôóó ðð ×)Ñ)¨#°2Ð)Ó6ˆHØ&*×&<Ñ&<¸XÓ&FÐ#à/×5Ñ5Ö7‘��1Ø.°!Ò3Ø2°1Ñ5�DÙð 8ð
 8Ð7Ó7�qäŸ(™(Ð#8¸$Ó?×FÑFÓHÈÑKˆKØ/°Ñ<ˆIà˜:×.Ñ.Ñ.Ø2°:·?±?Ð2Cð D%Ø%/§_¡_Ð$5ð 6)Ø)3×)<Ñ)<Ð(=¸Qð@�ð × Ñ  ¨HÕ5ð &0§_¡_¸Ò%:™'À�ð$Ø$.×$7Ñ$7Ð#8ð 9&Ø&0§o¡oÐ%6ð 7"Ø") ¨"¨W¨Ið 6%Ø%/§_¡_Ð$5ð	7�ð
 —‘˜h¨	Ö2ñC 1r   c           
      ó®  — t        d¬«      d„ «       }| j                  |d¬«      }| j                  |«      }|j                  «       D ]  \  }}d|v sŒ||   } n J d«       ‚t	        j
                  d	|«      j                  «       d   }||   }| j                  d
|«       | j                  dt        t        j                  d d …d d d…f   «      › �|«       t	        j                  d«      }	|	j                  |«      j                  «       }
| j                  t        |
«      d«       |
d   }||   }d}t	        j                  |«      }|j                  |«      j                  «       }| j                  |d u«       t        j                   t        j                  d d …d d d…f   «      }| j                  t        |«      t        |j"                  «      «       t        j$                  j&                  }d|› d�}d|› d|› d�}d|› d|› dd|z  › d|› d�	}|||||||dœ}d}t	        j                  |«      }t)        |j"                  «      D ]�  \  }}|||      }| j                  d|«       | j                  d|› d�|«       |j                  |«      }|j                  «       }| j                  t        |«      d«       |d   }||   }| j+                  |||   «       Œ’ y )NTr–   c                  óP   — t        j                  dt         j                  ¬«      } | S )N)r™   rª   )Údtype)rM   Úonesr¯   rÔ   s    r   r.   z.TestDebugInfoEmission.test_arrays.<locals>.foo  s   € ä—‘˜¤b§j¡jÔ1ˆAØˆHr   r+   r   r  r   r  r  z+!DICompositeType(tag: DW_TAG_structure_typezname: "r:   z.*elements: (![0-9]+),.*zN!{(![0-9]+), (![0-9]+), (![0-9]+), (![0-9]+), (![0-9]+), (![0-9]+), (![0-9]+)}zC!DIDerivedType\(tag: DW_TAG_pointer_type, baseType: ![0-9]+, size: z\)z!DIBasicType\(name: "intr  z, encoding: DW_ATE_signed\)z>!DICompositeType\(tag: DW_TAG_array_type, name: "UniTuple\(intz x 2\) \(\[2 x iz \]\)", baseType: ![0-9]+, size: r™   z), elements: ![0-9]+, identifier: "\[2 x iz\]"\))ÚmeminfoÚparentÚnitemsÚitemsizeÚdataÚshapeÚstridesz*!DIDerivedType\(.*, baseType: (![0-9]+),.*ÚDIDerivedTypeÚ")r	   r€   r‰   r"  r   ra   rƒ   rš   r_   r
   r¯   r   r    rZ   ÚassertIsNotNoner   ÚlookupÚ_fieldsrñ   Úbitwidthrý   rê   )r   r.   r~   r„   rÈ   r'  r(  r)  r*  Úmatch_elementsÚelem_matchesÚ
elem_matchÚstruct_markersÚstruct_patternÚmatch_structÚstruct_member_matchesÚ
data_modelÚptr_sizeÚptr_reÚint_reÚ	utuple_rer+  Úbase_type_patternÚbase_type_matcherrÿ   ÚfieldÚderived_typeÚbase_type_matchÚbase_type_matchesÚbase_type_markerÚ	data_types                                  r   Útest_arraysz!TestDebugInfoEmission.test_arrays  s  € ä	�DÔ	ñ	ó 
ð	ð ×%Ñ% c¨rÐ%Ó2ˆØ"&×"8Ñ"8¸Ó"BÐà+×1Ñ1Ö3‰DˆAˆqØ*¨aÒ/Ø.¨qÑ1�Ùð 4ð
 4Ð3Ó3�1ä—h‘hÐ4°dÓ;×BÑBÓDÀQÑGˆØ+¨KÑ8ˆ	ð 	�‰ÐCÀYÔOà�‰˜¤¤E§M¡M²!±S°q°S°&Ñ$9Ó :Ð;Ð<¸iÔHô Ÿ™Ð$?Ó@ˆØ%×+Ñ+¨IÓ6×=Ñ=Ó?ˆØ×Ñœ˜\Ó*¨AÔ.Ø! !‘_ˆ
ð 1°Ñ<ˆØ@ˆÜ—z‘z .Ó1ˆØ ,× 2Ñ 2°>Ó B× IÑ IÓ KÐØ×ÑÐ2¸$Ð>Ô?Ü$×+Ñ+¬E¯M©Mº!¹S¸q¸S¸&Ñ,AÓBˆ
Ø×ÑœÐ2Ó3´S¸×9KÑ9KÓ5LÔMä—:‘:×&Ñ&ˆð/Ø/7¨j¸ð<ˆà-¨h¨Z°yÀÀ
ð K/ð /ˆð-Ø-5¨Jð 7"Ø"* ð ,Ø  8™|˜nð --Ø-5¨J°eð	=ˆ	ð
  &Ø$Ø$Ø &Ø"Ø&Ø(ñ*ˆð JÐÜŸJ™JÐ'8Ó9Ðä" :×#5Ñ#5Ö6‰IˆB�Ø2Ð3HÈÑ3LÑMˆLØ�M‰M˜/¨<Ô8Ø�M‰M˜G E 7¨!Ð,¨lÔ;Ø/×5Ñ5°lÓCˆOØ /× 6Ñ 6Ó 8ÐØ×ÑœSÐ!2Ó3°QÔ7Ø0°Ñ3ÐØ/Ð0@ÑAˆIØ×Ñ˜Y¨°©Õ8ñ 7r   c           	      óV  ‡ — ˆ fd„}d„ }d„ } t        d¬«      |«      } t        dd¬«      |«      } t        ddd¬«      |«      }|j                  j                  }i }t        d|d	z   ht	        «       t	        d
g«      ¬«      ||<   t        t	        t        |dz   |dz   «      «      t	        d
g«      t	        «       ¬«      ||<   t        d|d	z   ht	        dg«      t	        d
g«      ¬«      ||<    |«       }	|j                  «       D ]˜  \  }
}‰ j                  |
j                  «      5   |
«       }‰ j                  ||	«       ‰ j                   ||
«      |d   «        ||
«      }|d   }‰ j                  ||z  |«       |d   }‰ j                  ||z  «       d d d «       Œš y # 1 sw Y   Œ¥xY w)Nc                 óh   •— ‰j                  | | j                  d   «      }‰j                  |«      }|S )Nr   )r€   rR   r”   )r   r~   r‘   r   s      €r   Úget_debug_lineszATestDebugInfoEmission.test_debug_optnone.<locals>.get_debug_lines[  s3   ø€ Ø×)Ñ)¨"¨b¯m©m¸AÑ.>Ó?ˆHØ×2Ñ2°8Ó<ˆEØˆLr   c                 ó  — | j                   | j                  d      }|j                  }|j                  j	                  |j
                  j                  «      } t        dj                  | j                  «      j                  «       «      }|S )Nr   ó    )rU   rR   ÚlibraryÚ_final_moduleÚget_functionrV   rW   r‹   ÚjoinÚ
attributesrÙ   )r   ÚcresÚlibÚattrss       r   Úget_func_attrsz@TestDebugInfoEmission.test_debug_optnone.<locals>.get_func_attrs`  sg   € Ø—<‘< §¡¨aÑ 0Ñ1ˆDØ—,‘,ˆCØ×"Ñ"×/Ñ/°·±×0HÑ0HÓIˆBÜ˜Ÿ	™	 "§-¡-Ó0×6Ñ6Ó8Ó9ˆEØˆLr   c                  ó8   — d} d}t        | «      D ]  }||z  }Œ	 |S )Nr  r   )Úrange)rð   r¢   Úis      r   r.   z5TestDebugInfoEmission.test_debug_optnone.<locals>.foog  s(   € ØˆAØˆAÜ˜1–X�Ø�Q‘‘ð àˆHr   Tr–   ©r)   Ú_dbg_optnone)r)   rf  rA   r   r÷   s   optnone)r‘   Úmust_have_attrsÚmust_not_have_attrsr:   é   s   alwaysinliner‘   rg  rh  )r	   Ú__code__Úco_firstlinenor‚   r‹   rc  r"  ÚsubTestÚtargetoptionsr    r³   )r   rV  ra  r.   Ú	foo_debugÚfoo_debug_optnoneÚfoo_debug_optnone_inlineÚ	firstlineÚexpected_infoÚexpected_retÚudtr+  r$   r`  Ú	must_haveÚmust_not_haves   `               r   Útest_debug_optnonez(TestDebugInfoEmission.test_debug_optnoneZ  sÂ  ø€ ô	ò
	ò	ð %”D˜tÔ$ SÓ)ˆ	Ø?œD t¸$Ô?ÀÓDÐð$:¤4¨dÀØ48ô$:Ø:=ó$?Ð ð —L‘L×/Ñ/ˆ	àˆÜ#'à�i !‘mÐ$Ü›EÜ # Z LÓ 1ô	$
ˆ�iÑ ô ,0ä”e˜I¨™M¨9°q©=Ó9Ó:Ü  Ó-Ü #£ô	,
ˆÐ'Ñ(ô 37ð �i !‘mÐ$Ü Ð 1Ó2Ü # Z LÓ 1ô3
ˆÐ.Ñ/ñ “uˆà*×0Ñ0Ö2‰MˆC�Ø—‘˜c×/Ñ/Õ0Ù“e�Ø× Ñ   lÔ3ð × Ñ ¡°Ó!5°xÀÑ7HÔIñ ' sÓ+�Ø$Ð%6Ñ7�	Ø× Ñ  ¨Ñ!2°IÔ>Ø (Ð)>Ñ ?�Ø× Ñ  ¨Ñ!6Ô7÷ 1Ð0ñ 3ß0Ð0ús   Ä$A0FÆF(	c                 óú  — t        d¬«      dd„«       }t        dd«      5   |«        d d d «       | j                  |t        j                  d «      f¬«      }| j                  |«      }g }|D ]  }d|v sŒ|j                  |«       Œ | j                  t        |«      d«       |j                  «       }t        j                  d|«      }| j                  |«       |j                  «       }| j                  t        |«      d«       |d	   }	||	   }
t        j                  d
|
«      }| j                  |«       |j                  «       }| j                  t        |«      d«       |d	   j                  d«      D �cg c]  }|j                  «       ‘Œ c}d   }||   }d}| j!                  ||«       t        j                  ||«      j                  «       d	   }||   }| j                  |d«       y # 1 sw Y   �ŒÅxY wc c}w )NTr–   c                  ó   — y r   r+   )Úmissings    r   r.   z3TestDebugInfoEmission.test_omitted_arg.<locals>.foo�  r˜   r   r9   r:   r   ÚDISubroutineTypez(.*!DISubroutineType\(types: ([!0-9]+)\)$r   z!{(.*)}Ú,r©   zy^.*!DICompositeType\(tag: DW_TAG_structure_type, name: "Anonymous struct \({}\)", elements: (![0-9]+), identifier: "{}"\)z!{}r   )r	   r   r€   r
   ÚOmittedr‰   r^   r    rZ   Úpopr   ra   r;  rƒ   rÙ   r`   rê   )r   r.   r~   r„   Ú
tmp_disubrr’   ÚdisubrÚdisubr_matchedÚdisubr_groupsÚdisubr_metaÚdisubr_typesÚdisubr_types_matchedÚdisubr_types_groupsr-   Ú	md_fn_argÚarg_tyÚexpected_arg_tyÚ
md_base_tyÚbase_tys                      r   Útest_omitted_argz&TestDebugInfoEmission.test_omitted_arg›  sé  € ä	�DÔ	ò	ó 
ð	ô Ð0°!Õ4ÙŒE÷ 5ð ×%Ñ% c´·±¸dÓ0CÐ/EÐ%ÓFˆØ"&×"8Ñ"8¸Ó"BÐð ˆ
ÛˆBØ! RÒ'Ø×!Ñ! "Õ%ð ð 	×Ñœ˜Z›¨!Ô,Ø—‘Ó!ˆäŸ™Ð"MØ"(ó*ˆà×Ñ˜^Ô,Ø&×-Ñ-Ó/ˆØ×Ñœ˜]Ó+¨QÔ/Ø# AÑ&ˆð /¨{Ñ;ˆÜ!Ÿx™x¨
°LÓAÐØ×Ñ˜^Ô,Ø2×9Ñ9Ó;ÐØ×ÑœÐ0Ó1°1Ô5ð )<¸AÑ(>×(DÑ(DÀSÔ(IÓJÑ(I 1�Q—W‘W•YÐ(IÑJÈ2ÑNˆ	Ø(¨Ñ3ˆð<ˆð 	×Ñ˜ Ô1Ü—X‘X˜o¨vÓ6×=Ñ=Ó?ÀÑBˆ
Ø)¨*Ñ5ˆà×Ñ˜ 5Õ*÷M 5Ñ4üò: Ks    G+Å6G8Ç+G5c                 ó6  — d}t        «       }t        t        |«      i |«        t        d¬«      |d   «      }t	        j
                  d¬«      5 }t	        j                  dt        «       t        «         |«        d d d «       | j                  t        «      d«       |d   }| j                  |j                  t        «       t        |j                  «      }| j                  d	|«       | j                  t        |j                  «      |«       y # 1 sw Y   Œ–xY w)
Nz1
        def foo():
            return 1
        Tr–   r.   ©ÚrecordÚalwaysr:   r   z"Could not find source for function)r‚   Úexecr   r	   ÚwarningsÚcatch_warningsÚsimplefilterr   r   r    rZ   Úcategoryr_   Úmessagerš   rP   )r   ÚstrsrcÚlr.   Úwr¿   r   s          r   Útest_missing_sourcez)TestDebugInfoEmission.test_missing_sourceÊ  sÙ   € ðˆô ‹FˆÜŒV�F‹^˜R Ô#ØŒd˜Ô˜q ™xÓ(ˆä×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô,AÔBÜ$Ô&ÙŒE÷ 2ð
 	×Ñœ˜Q› Ô#Ø�!‘ˆØ×Ñ˜Ÿ™Ô)>Ô?Ü�%—-‘-Ó ˆà�‰Ð:¸CÔ@à�‰”c˜#Ÿ+™+Ó&¨Õ,÷ 2Ð1ús   Á,DÄDc                 ó   — t        d¬«      d„ «       }t        j                  d¬«      5 }t        j                  dt        «       t        «         |«        d d d «       | j                  t        «      d«       | j                  ||j                  d   «      }| j                  |«      }| j                  t        |«      d«       y # 1 sw Y   ŒpxY w)NTr–   c                   ó   — yr¬   r+   r+   r   r   r.   zCTestDebugInfoEmission.test_irregularly_indented_source.<locals>.fooã  s   € ð r   rŽ  r�  r   r:   )r	   r’  r“  r”  r   r   r    rZ   r€   rR   r”   )r   r.   r™  r~   r‘   s        r   Ú test_irregularly_indented_sourcez6TestDebugInfoEmission.test_irregularly_indented_sourceá  sª   € ä	�DÔ	ñ	ó 
ð	ô ×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô,AÔBÜ$Ô&ÙŒE÷ 2ð 	×Ñœ˜Q› Ô#à×%Ñ% c¨3¯>©>¸!Ñ+<Ó=ˆØ×.Ñ.¨xÓ8ˆà×Ñœ˜U› QÕ'÷ 2Ð1ús   ©,CÃCc                 óê   — t        ddd¬«      d„ «       }t        t        |j                  «       j	                  «       «      «      d   }|j                  «       D ]  }d|v sŒ| j                  d|«       Œ y )Nzint64(boolean, boolean)Tre  c                 ó   — | r|ryy)Nr:   r™   r+   )Úcond1Úcond2s     r   ÚchoicezBTestDebugInfoEmission.test_no_if_op_bools_declared.<locals>.choiceö  s   € á™Øàr   r:   zllvm.dbg.declareÚbool)r	   ÚnextÚiterrQ   r"  r{   ÚassertNotIn)r   r¢  Úllvm_irr   s       r   Útest_no_if_op_bools_declaredz2TestDebugInfoEmission.test_no_if_op_bools_declaredõ  sr   € Ü	Ð'¨tÀ$Ô	Gñ	ó 
Hð	ô ”t˜F×/Ñ/Ó1×7Ñ7Ó9Ó:Ó;¸AÑ>ˆà×&Ñ&Ö(ˆDØ! TÒ)Ø× Ñ  ¨Õ.ñ )r   N)ro   rp   rq   rr   Ú_NUMBA_OPT_0_ENVry   r€   r‰   r”   rœ   rÐ   r   Úrun_test_in_subprocessrâ   rí   rô   r  r-  rS  rw  rŒ  rš  r�  r¨  r+   r   r   rt   rt   {   s¯   „ ñð $ SÐ)Ðò(ò
ò'ò
òBòz?ðx %€X×$Ñ$Ð-=Ô>ñ64ó ?ð64ðp %€X×$Ñ$Ð-=Ô>ñ%ó ?ð%ò@:ò@,5ò\53ònH9òT?8òB-+ò^-ò.(ó(/r   rt   Ú__main__)Úcollectionsr   rµ   r   rž   rM   rC   Útextwrapr   Úunittestr’  Únumba.tests.supportr   r   r   Únumbar   r	   Ú
numba.corer
   Únumba.core.datamodelr   Únumba.core.errorsr   Úllvmlite.bindingÚbindingrS   r   rt   ro   Úmainr+   r   r   Ú<module>r·     sn   ðÝ "Û Û 	Û Û Ý Û Û ÷;ñ ;ç Ý Ý 0Ý 3Ý ôa#�Hô a#ôHH
/˜Hô H
/ðV ˆzÒØ€H‡M�M…Oð r   