§
    2@Äj'  ã                   óª  — U d Z ddlmZmZmZm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mZ 	 ddlZdZn# e$ r d	ZY nw xY wed
„ ¦   «         Zg Zeg ed         f         ed<   ded         fd„Z G d„ de¦  «        Z G d„ de¦  «        Zej        d„ ¦   «         Zer6 e	d¬¦  «         G d„ dej        j        ¦  «        ¦   «         Zdededefd„Z dS dS )zw
Implement code coverage support.

Currently contains logic to extend ``coverage`` with lines covered by the
compiler.
é    )ÚOptionalÚSequenceÚCallableÚno_type_check)ÚMapping)Ú	dataclassÚfield)ÚABCÚabstractmethod)ÚirÚconfigNTFc                  óT   — d} t           rt          j                             ¦   «         } | S )z>Get active coverage instance or return None if not found.
    N)Úcoverage_availableÚcoverageÚCoverageÚcurrent)Úcovs    úLC:\Projects\Historical\venv\Lib\site-packages\numba/misc/coverage_support.pyÚget_active_coverager      s*   € ð €CÝð *ÝÔ×'Ò'Ñ)Ô)ˆØ€Jó    ÚNotifyLocBaseÚ_the_registryÚreturnc                  óx   — t           j        sg S t          t          d„ d„ t          D ¦   «         ¦  «        ¦  «        S )zC
    Returns a list of the registered NotifyLocBase instances.
    c                 ó
   — | d uS ©N© )Úxs    r   ú<lambda>z+get_registered_loc_notify.<locals>.<lambda>,   s
   €  ¨$ € r   c              3   ó*   K  — | ]} |¦   «         V — Œd S r   r   )Ú.0Úfactorys     r   ú	<genexpr>z,get_registered_loc_notify.<locals>.<genexpr>-   s(   è è € Ð?Ð? g˜˜™	œ	Ð?Ð?Ð?Ð?Ð?Ð?r   )r   ÚJIT_COVERAGEÚlistÚfilterr   r   r   r   Úget_registered_loc_notifyr'   %   sN   € õ Ôð àˆ	Ý•Ð.Ð.Ø?Ð?µÐ?Ñ?Ô?ñAô Añ Bô Bð Br   c                   óT   — e Zd ZdZedej        ddfd„¦   «         Zedd„¦   «         ZdS )r   z<Interface for notifying visiting of a ``numba.core.ir.Loc``.Úlocr   Nc                 ó   — d S r   r   )Úselfr)   s     r   ÚnotifyzNotifyLocBase.notify3   ó   € àˆr   c                 ó   — d S r   r   ©r+   s    r   ÚclosezNotifyLocBase.close7   r-   r   ©r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚLocr,   r0   r   r   r   r   r   0   sh   € € € € € ØFÐFàð˜"œ&ð  Tð ð ð ñ „^ðð ðð ð ñ „^ðð ð r   c                   ó4   — e Zd ZdZd„ Zdej        fd„Zd„ ZdS )ÚNotifyCompilerCoveragez“
    Use to notify ``coverage`` about compiled lines.

    The compiled lines are under the "numba_compiled" context in the coverage
    data.
    c                 óv  — || _         |j        j                             ¦   «         }|                     t          |j        |j        |j        |j	        |j
        |j        |j        |j        |j        |j        j        ¬¦
  «
        ¦  «         t!          di |¤Ž| _        |j                             | j        ¦  «         d S )N)
ÚdataÚ	lock_dataÚunlock_dataÚ
trace_arcsÚshould_traceÚshould_trace_cacheÚwarnÚshould_start_contextÚswitch_contextÚpacked_arcsr   )Ú
_collectorÚcoreÚtracer_kwargsÚcopyÚupdateÚdictr:   r;   r<   Úbranchr>   r?   r@   rA   rB   rC   ÚNumbaTracerÚ_tracerÚtracersÚappend)r+   Ú	collectorrF   s      r   Ú__init__zNotifyCompilerCoverage.__init__D   s½   € Ø#ˆŒð "œÔ4×9Ò9Ñ;Ô;ˆØ×ÒÝØ”^Ø#Ô-Ø%Ô1Ø$Ô+Ø&Ô3Ø#,Ô#?Ø”^Ø%.Ô%CØ(Ô7Ø%œNÔ6ðñ ô ñ	
ô 	
ð 	
õ #Ð3Ð3 ]Ð3Ð3ˆŒØÔ× Ò  ¤Ñ.Ô.Ð.Ð.Ð.r   r)   c                 óÊ   — | j         }|j                             d¦  «        rA|                     d¦  «         |                     |¦  «         |                     d ¦  «         d S d S )Nz.pyÚnumba_compiled)rL   ÚfilenameÚendswithrB   Útrace)r+   r)   Útracers      r   r,   zNotifyCompilerCoverage.notifyZ   sl   € Ø”ˆØŒ<× Ò  Ñ'Ô'ð 	(Ø×!Ò!Ð"2Ñ3Ô3Ð3Ø�LŠL˜ÑÔÐØ×!Ò! $Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(r   c                 ó   — d S r   r   r/   s    r   r0   zNotifyCompilerCoverage.closea   s   € Øˆr   N)	r2   r3   r4   r5   rP   r   r6   r,   r0   r   r   r   r8   r8   <   sY   € € € € € ðð ð/ð /ð /ð,(˜"œ&ð (ð (ð (ð (ðð ð ð ð r   r8   c                  ód   — t          ¦   «         } | �| j        }|j        rt          |¦  «        S d S d S r   )r   rD   rM   r8   )r   Úcols     r   Ú_register_coverage_notifierrZ   e   sB   € å
Ñ
Ô
€CØ
€ØŒnˆàŒ;ð 	/Ý)¨#Ñ.Ô.Ð.ð	 €ð	/ð 	/r   )Úkw_onlyc                   óð  — e Zd ZU dZej        j        ed<   eed<   ej        j	        ed<   e
eej        j        dz  f         ed<   ej        j        dz  ed<   eedz  gdf         dz  ed<   eg df         ed	<   eg df         ed
<   ej        j        ed<   eed<   dZee         ed<    ed¬¦  «        Zeed<   dej        j        dz  fd„Zdd„Zdefd„Zdd„Zdeeef         dz  fd„Zdej        ddfd„ZdS )rK   a   
        Not actually a tracer as in the coverage implementation, which will
        setup a Python trace function. This implementation pretends to trace
        but instead receives fake trace events for each line the compiler has
        visited.

        See coverage.PyTracer
        r:   r=   r>   Nr?   rA   rB   r;   r<   r@   rC   Útool_idF)ÚdefaultÚ	_activityr   c                 ó   — dS )zPStart this tracer, return a trace function if based on
            sys.settrace.Nr   r/   s    r   ÚstartzNumbaTracer.start�   s	   € ð �4r   c                 ó   — dS )zStop this tracer.Nr   r/   s    r   ÚstopzNumbaTracer.stop’   ó   € à�4r   c                 ó   — | j         S )zHas there been any activity?©r_   r/   s    r   ÚactivityzNumbaTracer.activity–   s
   € à”>Ð!r   c                 ó   — d| _         dS )zReset the activity() flag.FNrf   r/   s    r   Úreset_activityzNumbaTracer.reset_activityš   s   € à"ˆDŒNˆNˆNr   c                 ó   — dS )z+Return a dictionary of statistics, or None.Nr   r/   s    r   Ú	get_statszNumbaTracer.get_statsž   rd   r   r)   c                 óX  — | j                              |j        ¦  «        }|€*|                      |j        d¦  «        }|| j         |j        <   |j        sdS |j        }|                      ¦   «          | j                             |t          ¦   «         ¦  «        }| j
        rW| j        r.|                     t          |j        |j        ¦  «        ¦  «         n<|                     |j        |j        f¦  «         n|                     |j        ¦  «         |                      ¦   «          d| _        dS )z8Insert coverage data given source location.
            NT)r?   ÚgetrS   r>   rU   Úsource_filenamer;   r:   Ú
setdefaultÚsetr=   rC   ÚaddÚ
_pack_arcsÚliner<   r_   )r+   r)   ÚdispÚ	tracenameÚcur_file_datas        r   rU   zNumbaTracer.trace¢   s  € ð Ô*×.Ò.¨s¬|Ñ<Ô<ˆDØˆ|Ø×(Ò(¨¬°tÑ<Ô<�Ø8<�Ô'¨¬Ñ5Ø”:ð à�àÔ,ˆIØ�NŠNÑÔÐØ œI×0Ò0°½C¹E¼EÑBÔBˆMØŒð ,ØÔ#ð <Ø!×%Ò%¥j°´¸3¼8Ñ&DÔ&DÑEÔEÐEÐEà!×%Ò% s¤x°´Ð&:Ñ;Ô;Ð;Ð;à×!Ò! #¤(Ñ+Ô+Ð+Ø×ÒÑÔÐà!ˆDŒNˆNˆNr   r1   )r2   r3   r4   r5   r   ÚtypesÚ
TTraceDataÚ__annotations__ÚboolÚTShouldTraceFnr   ÚstrÚTFileDispositionÚTShouldStartContextFnr   ÚTWarnFnr]   r   Úintr	   r_   ÚTTraceFnra   rc   rg   ri   rI   rk   r   r6   rU   r   r   r   rK   rK   q   sÞ  € € € € € € ð	ð 	ð ŒnÔ'Ð'Ð'Ñ'ØÐÐÑØ”nÔ3Ð3Ð3Ñ3Ø#Ø�”Ô0°4Ñ7Ð7ô
ð 	
ð 	
ñ 	
ð 'œnÔBÀTÑIÐIÐIÑIØ  #¨¡* ¨tÐ!3Ô4°tÑ;Ð;Ð;Ñ;Ø˜B ˜HÔ%Ð%Ð%Ñ%Ø˜b $˜hÔ'Ð'Ð'Ñ'ØŒnÔ$Ð$Ð$Ñ$ØÐÐÑà!%ˆ�˜#”Ð%Ð%Ñ%à˜%¨Ð.Ñ.Ô.ˆ	�4Ð.Ð.Ñ.ð	˜8œ>Ô2°TÑ9ð 	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð	"˜dð 	"ð 	"ð 	"ð 	"ð	#ð 	#ð 	#ð 	#ð	˜t C¨ Hœ~°Ñ4ð 	ð 	ð 	ð 	ð	"˜RœVð 	"¨ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"r   rK   Úl1Úl2c                 óX   — d}| dk     r|dz  }|  } |dk     r|dz  }| }||dz  | z   z  }|S )zãPack arcs into a single integer for compatibility with .packed_arcs
        option.

        See
        https://github.com/nedbat/coveragepy/blob/e7c05fe91ee36c0c94e144bb88d25db4fc3d02fd/coverage/ctracer/tracer.c#L171
        r   l        l        é   r   )r‚   rƒ   Úpackeds      r   rr   rr   ¼   sT   € ð ˆØ�Š6ˆ6Ø�gÑˆFØ�ˆBØ�Š6ˆ6Ø�gÑˆFØ�ˆBØ�2˜‘8˜r‘/Ñ!ˆØˆr   )!r5   Útypingr   r   r   r   Úcollections.abcr   Údataclassesr   r	   Úabcr
   r   Ú
numba.corer   r   r   r   ÚImportErrorr   r   ry   r'   r   r8   rN   rZ   rw   ÚTracerrK   r€   rr   r   r   r   ú<module>rŽ      sF  ððð ð ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø #Ð #Ð #Ð #Ð #Ð #Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðØ€O€O€Oð ÐÐøð ð ð ð ØÐÐÐðøøøð ðð ñ „ðð :<€ˆx˜˜H _Ô5Ð5Ô6Ð ;Ð ;Ñ ;ðB 8¨OÔ#<ð Bð Bð Bð Bð	ð 	ð 	ð 	ð 	�Cñ 	ô 	ð 	ð&ð &ð &ð &ð &˜]ñ &ô &ð &ðR Ôð/ð /ñ Ôð/ð ð \à€Y�tÐÑÔðH"ð H"ð H"ð H"ð H"�h”nÔ+ñ H"ô H"ñ ÔðH"ðT�sð  ð ¨ð ð ð ð ð ð ð[\ð \s   ¯6 ¶A ¿A 