§
    1@Äj£l  ã                   óö  — d dl Z d dlmZmZ d dlZd dlZd dlZd dlmZm	Z	 d dl
mZmZmZ d dlmZ edv r	d dlmZ dZned	v rn ee¦  «        ‚ ed
dg¦  «        Z edd¦  «        ZdZd„ Zd„ Zd„ Z eej        ¦  «        Z eej        ¦  «        Zeez  Z e eddg¦  «        ¦  «        Z ej!        Z!ej"        Z" G d„ de#¦  «        Z$dZ%dZ&dZ'ej(         )                    d¦  «        Z*edv rd„ Z+nedv rd„ Z+n ee¦  «        ‚d„ Z, G d„ de#¦  «        Z- G d„ de#¦  «        Z.d „ Z/ G d!„ d"e.¦  «        Z0 G d#„ d$e0¦  «        Z1ed%k    re0Z2nedv re1Z2ned%k     re.Z2n ee¦  «        ‚ G d&„ d'ej3        ¦  «        Z4dS )(é    N)Ú
namedtupleÚOrderedDict)ÚCodeTypeÚ
ModuleType)ÚerrorsÚutilsÚ	serialize)Ú	PYVERSION)©é   é   ©r   é   ©r   é   ©r   é   )Ú_inline_cache_entriesé   ©©r   é
   ©r   é   Úopcode_infoÚargsizeÚ_ExceptionTableEntryzstart end target depth lastic                 óL   — t          | dd¦  «        }|rt          | |¦  «        S | S )z°
    Objects that wraps function should provide a "__numba__" magic attribute
    that contains a name of an attribute that contains the actual python
    function object.
    Ú	__numba__N©Úgetattr)ÚobjÚattrs     úDC:\Projects\Historical\venv\Lib\site-packages\numba/core/bytecode.pyÚget_function_objectr%   !   s2   € õ �3˜ TÑ*Ô*€DØð "Ý�s˜DÑ!Ô!Ð!Ø€Jó    c           	      óB   — t          | dt          | dd¦  «        ¦  «        S )z"Shamelessly borrowed from llpythonÚ__code__Ú	func_codeNr    )r"   s    r$   Úget_code_objectr*   -   s    € å�3˜
¥G¨C°¸dÑ$CÔ$CÑDÔDÐDr&   c                 ó€   — g }| D ]8}t           j                             |¦  «        }|�|                     |¦  «         Œ9|S ©N)ÚdisÚopmapÚgetÚappend)ÚseqÚlstÚsÚcs       r$   Ú_as_opcodesr5   2   sC   € Ø
€CØð ð ˆÝŒI�MŠM˜!ÑÔˆØˆ=Ø�JŠJ�q‰MŒMˆMøØ€Jr&   ÚRETURN_VALUEÚRAISE_VARARGSc                   ój   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
ed„ ¦   «         Zd	S )
ÚByteCodeInstzÄ
    Attributes
    ----------
    - offset:
        byte offset of opcode
    - opcode:
        opcode integer value
    - arg:
        instruction arg
    - lineno:
        -1 means unknown
    )ÚoffsetÚnextÚopcodeÚopnameÚargÚlinenoc                 óz   — || _         || _        || _        t          j        |         | _        || _        d| _        d S )Néÿÿÿÿ)r:   r;   r<   r-   r=   r>   r?   ©Úselfr:   r<   r>   Ú
nextoffsets        r$   Ú__init__zByteCodeInst.__init__R   s7   € ØˆŒØˆŒ	ØˆŒÝ”j Ô(ˆŒØˆŒØˆŒˆˆr&   c                 ó   — | j         t          v S r,   )r<   ÚJUMP_OPS©rC   s    r$   Úis_jumpzByteCodeInst.is_jumpZ   ó   € àŒ{�hÐ&Ð&r&   c                 ó   — | j         t          v S r,   )r<   ÚTERM_OPSrH   s    r$   Úis_terminatorzByteCodeInst.is_terminator^   rJ   r&   c                 ó*  — | j         sJ ‚t          dv r&| j        d„ dD ¦   «         v r| j        | j        dz  z
  S n‚t          dv r)| j        d„ dD ¦   «         v r| j        | j        dz
  dz  z
  S nPt          d	v r)| j        d
„ dD ¦   «         v r| j        | j        dz
  dz  z
  S nt          dv rnt          t          ¦  «        ‚t          dv r=| j        t          v r| j        | j        dz  z   S | j        t          v sJ ‚| j        dz  dz
  S t          t          ¦  «        ‚)N©r   r   r   c              3   ó:   K  — | ]}t           j        |         V — Œd S r,   ©r-   r.   ©Ú.0Úks     r$   ú	<genexpr>z/ByteCodeInst.get_jump_target.<locals>.<genexpr>m   sD   è è € ð Hð HØ#$õ  #œy¨œ|ð Hð Hð Hð Hð Hð Hr&   )ÚJUMP_BACKWARDÚJUMP_BACKWARD_NO_INTERRUPTr   ©r   c              3   ó:   K  — | ]}t           j        |         V — Œd S r,   rQ   rR   s     r$   rU   z/ByteCodeInst.get_jump_target.<locals>.<genexpr>r   s<   è è € ð ;ð ;Ø#$õ  #œy¨œ|ð ;ð ;ð ;ð ;ð ;ð ;r&   )rV   é   )r   c              3   ó:   K  — | ]}t           j        |         V — Œd S r,   rQ   rR   s     r$   rU   z/ByteCodeInst.get_jump_target.<locals>.<genexpr>v   sD   è è € ð Lð LØ#$õ  #œy¨œ|ð Lð Lð Lð Lð Lð Lr&   )rV   ÚPOP_JUMP_BACKWARD_IF_TRUEÚPOP_JUMP_BACKWARD_IF_FALSEÚPOP_JUMP_BACKWARD_IF_NONEÚPOP_JUMP_BACKWARD_IF_NOT_NONE©r   )r   r   r   r   r   r   )	rI   r
   r<   r;   r>   r:   ÚNotImplementedErrorÚJREL_OPSÚJABS_OPSrH   s    r$   Úget_jump_targetzByteCodeInst.get_jump_targetb   s   € ð Œ|ÐÐˆ|ÝÐ3Ð3Ð3ØŒ{ð Hð Hð)GðHñ Hô Hð Hð Hð ”y D¤H¨q¡LÑ1Ð1ðHõ ˜*Ð$Ð$ØŒ{ð ;ð ;Ø(9ð;ñ ;ô ;ð ;ð ;à”{ d¤h°¡l°aÑ%7Ñ7Ð7ð;õ ˜+Ð%Ð%ØŒ{ð Lð Lð)KðLñ Lô Lð Lð Lð ”{ d¤h°¡l°aÑ%7Ñ7Ð7ðLõ ˜*Ð$Ð$Øå%¥iÑ0Ô0Ð0åÐNÐNÐNØŒ{�hÐ&Ð&Ø”y 4¤8¨a¡<Ñ/Ð/à”{¥hÐ.Ð.Ð.Ð.Ø”x !‘| aÑ'Ð'å%¥iÑ0Ô0Ð0r&   c                 ó0   — d| j         | j        | j        fz  S )Nz%s(arg=%s, lineno=%d))r=   r>   r?   rH   s    r$   Ú__repr__zByteCodeInst.__repr__‹   s   € Ø&¨$¬+°t´xÀÄÐ)MÑMÐMr&   c                 óX   — | j                              d¦  «        rdS | j         dk    rdS dS )zREffect of the block stack
        Returns +1 (push), 0 (none) or -1 (pop)
        ÚSETUP_rZ   Ú	POP_BLOCKrA   r   )r=   Ú
startswithrH   s    r$   Úblock_effectzByteCodeInst.block_effectŽ   s8   € ð
 Œ;×!Ò! (Ñ+Ô+ð 	Ø�1ØŒ[˜KÒ'Ð'Ø�2à�1r&   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rE   ÚpropertyrI   rM   rd   rf   rk   © r&   r$   r9   r9   C   s¨   € € € € € ðð ð F€Iðð ð ð ð'ð 'ñ „Xð'ð ð'ð 'ñ „Xð'ð'1ð '1ð '1ðRNð Nð Nð ð	ð 	ñ „Xð	ð 	ð 	r&   r9   rZ   ÚNOPrO   c              #   ó&  K  — g }t          j        | ¦  «        D ]\  }}}}|                     |||f¦  «         Œ t          |¦  «        D ]H\  }\  }}}|dz   t	          |¦  «        k     r||dz            d         }nt	          | ¦  «        }||||fV — ŒId S )NrZ   r   )r-   Ú_unpack_opargsr0   Ú	enumerateÚlen)ÚcodeÚbufÚiÚstart_offsetÚopr>   Únext_offsets          r$   ru   ru   ¤   sÀ   è è € ØˆÝ(+Ô(:¸4Ñ(@Ô(@ð 	0ð 	0Ñ$ˆAˆ|˜R Ø�JŠJ˜ b¨#Ð.Ñ/Ô/Ð/Ð/Ý*3°C©.¬.ð 	7ð 	7Ñ&ˆAÑ&�˜b #Ø�1‰u•s˜3‘x”xÒÐØ! ! a¡%œj¨œm��å! $™iœi�Ø  S¨+Ð6Ð6Ð6Ð6Ð6ð	7ð 	7r&   ©r   r   r   c              #   ó�  K  — d}t          | ¦  «        }dx}}||k     �r'| |         }|t          z  }|t          k    r©| |         |z  }t          t          ¦  «        D ]}|| ||z            d|z  z  z  }Œ|t          z  }t
          dv r|t          |         t          z  z  }nt
          dv rnt          t
          ¦  «        ‚|t          k    r|t          ||fV — |dt          z  z  }|}ŒÌnLd}|t          z  }t
          dv r|t          |         t          z  z  }nt
          dv rnt          t
          ¦  «        ‚d}||||fV — |}||k     �°%dS dS )zp
        Returns a 4-int-tuple of
        (bytecode offset, opcode, argument, offset of next bytecode).
        r   é   rX   r   N)rw   ÚCODE_LENÚHAVE_ARGUMENTÚrangeÚARG_LENr
   r   Ú	INSTR_LENra   ÚEXTENDED_ARGÚ
OPCODE_NOPÚ
NO_ARG_LEN)rx   Úextended_argÚnr:   rz   r|   r>   Újs           r$   ru   ru   ²   s’  è è € ð
 ˆÝ�‰IŒIˆØˆˆ�Ø�!Še‰eØ�a”ˆBØ•‰MˆAØ•]Ò"Ð"Ø˜1”g Ñ,�Ý�w™œð 2ð 2�AØ˜4  A¡œ;¨1¨q©5Ñ1Ñ1�C�CØ•W‘�Ý 
Ð*Ð*ð Õ.¨rÔ2µYÑ>Ñ>�A�AÝÐ"4Ð4Ð4Øå-­iÑ8Ô8Ð8Ø�Ò%Ð%ð "¥:¨s°AÐ6Ð6Ð6Ð6Ø#&¨!­g©+Ñ#5�LØ�FØð &ð �Ø•Z‘�Ý 
Ð*Ð*ð Õ.¨rÔ2µYÑ>Ñ>�A�AÝÐ"4Ð4Ð4Øå-­iÑ8Ô8Ð8àˆLØ˜2˜s AÐ&Ð&Ð&Ð&ØˆFða �!Še‰eˆeˆeˆeˆer&   c              #   ó˜   K  — dt           dt          fV — | D ]2\  }}}}|t          v r
|t          z  }|t          z   |||t          z   fV — Œ3dS )zpPatch the bytecode stream.

    - Adds a NOP bytecode at the start to avoid jump target being at the entry.
    r   N)r‡   Ú_FIXED_OFFSETrc   )Ú	bc_streamr:   r<   r>   rD   s        r$   Ú_patched_opargsr�   ï   sz   è è € ð �j˜$¥Ð
.Ð.Ð.Ð.à+4ð Nð NÑ'ˆ�˜˜Zà•XÐÐØ•=Ñ ˆCØ•}Ñ$ f¨c°:ÅÑ3MÐMÐMÐMÐMÐMð	Nð Nr&   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ ZeZd„ ZdS )ÚByteCodeIterc                 ó„   — || _         t          t          t          | j         j        ¦  «        ¦  «        ¦  «        | _        d S r,   )rx   Úiterr�   ru   Úco_code)rC   rx   s     r$   rE   zByteCodeIter.__init__ÿ   s1   € ØˆŒ	Ý�­¸¼	Ô8IÑ)JÔ)JÑKÔKÑLÔLˆŒ	ˆ	ˆ	r&   c                 ó   — | S r,   rr   rH   s    r$   Ú__iter__zByteCodeIter.__iter__  s   € Øˆr&   c                 ó*   — t          | j        ¦  «        S r,   )r;   r“   rH   s    r$   Ú_fetch_opcodezByteCodeIter._fetch_opcode  s   € Ý�D”I‰ŒÐr&   c                 ó^   — |                       ¦   «         \  }}}}|t          ||||¬¦  «        fS )N)r:   r<   r>   rD   )r˜   r9   rB   s        r$   r;   zByteCodeIter.next	  sC   € Ø*.×*<Ò*<Ñ*>Ô*>Ñ'ˆ�˜˜ZØ•|¨6¸&ÀcØ/9ð;ñ ;ô ;ð ;ð 	;r&   c                 ór   — d}t          |¦  «        D ]$}t          | j        ¦  «        \  }}||d|z  z  z  }Œ%|S )Nr   r€   )rƒ   r;   r“   )rC   Úsizery   rz   Ú_offsetÚbytes         r$   Úread_argzByteCodeIter.read_arg  sF   € ØˆÝ�t‘”ð 	#ð 	#ˆAÝ  ¤™OœO‰MˆG�TØ�4˜A ™E‘?Ñ"ˆCˆCØˆ
r&   N)	rl   rm   rn   rE   r–   r˜   r;   Ú__next__rž   rr   r&   r$   r‘   r‘   þ   si   € € € € € ðMð Mð Mðð ð ðð ð ð;ð ;ð ;ð
 €Hðð ð ð ð r&   r‘   c                   óf   — e Zd ZdZdZd„ Zed„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ Zed	„ ¦   «         Zd
„ ZdS )Ú	_ByteCodezF
    The decoded bytecode of a function, and related information.
    )	Úfunc_idÚco_namesÚco_varnamesÚ	co_constsÚco_cellvarsÚco_freevarsÚexception_entriesÚtableÚlabelsc                 ó¾  — |j         }t          d„ t          j        |j        ¦  «        D ¦   «         ¦  «        }|                     d¦  «         t          t          |¦  «        ¦  «        }|                      ||¦  «         || _	        |j
        | _
        |j        | _        |j        | _        |j        | _        |j        | _        || _        t!          |¦  «        | _        d S )Nc              3   ó*   K  — | ]}|t           z   V — Œd S r,   )r�   )rS   Úxs     r$   rU   z%_ByteCode.__init__.<locals>.<genexpr>#  s'   è è € ÐMÐM¨1�Q�Ñ&ÐMÐMÐMÐMÐMÐMr&   r   )rx   Úsetr-   Ú
findlabelsr”   Úaddr   r‘   Ú_compute_linenor¢   r£   r¤   r¥   r¦   r§   r©   Úsortedrª   )rC   r¢   rx   rª   r©   s        r$   rE   z_ByteCode.__init__   s¿   € ØŒ|ˆåÐMÐMµ´¸t¼|Ñ0LÔ0LÐMÑMÔMÑMÔMˆØ�
Š
�1‰Œˆõ �L¨Ñ.Ô.Ñ/Ô/ˆØ×Ò˜U DÑ)Ô)Ð)àˆŒØœˆŒØÔ+ˆÔØœˆŒØÔ+ˆÔØÔ+ˆÔàˆŒ
Ý˜V‘n”nˆŒˆˆr&   c                 óî   — t          j        |¦  «        D ] \  }}|t          z   }||v r|||         _        Œ!|j        }|                     ¦   «         D ]#}|j        �|j        dk    r|j        }Œ||_        Œ$|S )zI
        Compute the line numbers for all bytecode instructions.
        Nr   )r-   Úfindlinestartsr�   r?   Úco_firstlinenoÚvalues)Úclsr©   rx   r:   r?   Ú
adj_offsetÚknownÚinsts           r$   r±   z_ByteCode._compute_lineno4  s‘   € õ
 "Ô0°Ñ6Ô6ð 	2ð 	2‰NˆF�FØ¥-Ñ/ˆJØ˜UÐ"Ð"Ø+1��jÔ!Ô(øð Ô#ˆØ—L’L‘N”Nð 	$ð 	$ˆDØŒ{Ð&¨4¬;¸!Ò+;Ð+;Øœ��à#�”�Øˆr&   c                 óN   — t          | j                             ¦   «         ¦  «        S r,   )r“   r©   r¶   rH   s    r$   r–   z_ByteCode.__iter__G  s   € Ý�D”J×%Ò%Ñ'Ô'Ñ(Ô(Ð(r&   c                 ó   — | j         |         S r,   ©r©   ©rC   r:   s     r$   Ú__getitem__z_ByteCode.__getitem__J  s   € ØŒz˜&Ô!Ð!r&   c                 ó   — || j         v S r,   r½   r¾   s     r$   Ú__contains__z_ByteCode.__contains__M  s   € Ø˜œÐ#Ð#r&   c                 ó€   ‡ ‡— ˆ fd„Šd                      ˆfd„‰ j                             ¦   «         D ¦   «         ¦  «        S )Nc                 ó4   •— | d         j         ‰j        v rdS dS )NrZ   ú>ú )r:   rª   )rz   rC   s    €r$   Úlabel_markerz$_ByteCode.dump.<locals>.label_markerQ  s    ø€ Ø�ŒtŒ{˜dœkÐ)Ð)Ø�sà�sr&   ú
c              3   ó^   •K  — | ]'}|d          j         dk    ¯d ‰|¦  «        f|z   z  V — Œ(dS )rZ   ÚCACHEz
%s %10s	%sN)r=   )rS   rz   rÆ   s     €r$   rU   z!_ByteCode.dump.<locals>.<genexpr>W  sU   øè è € ð 4ð 4ØØ˜aœDœK¨7Ò2Ð2ð '¨<¨<¸©?¬?Ð*<¸qÑ*@ÑAà2Ð2Ð2Ð2ð4ð 4r&   )Újoinr©   Úitems)rC   rÆ   s   `@r$   Údumpz_ByteCode.dumpP  si   øø€ ð	ð 	ð 	ð 	ð 	ð �yŠyð 4ð 4ð 4ð 4Ø"&¤*×"2Ò"2Ñ"4Ô"4ð4ñ 4ô 4ñ 4ô 4ð 	4r&   c           	      ó4  — i }|j         }|                     dt          j        ¦  «        }t	          |t
          ¦  «        r|j        }|                     ¦   «         D ]R}|j        dk    rE|t          |j
        ¦  «                 }	|	|vr'	 ||	         }
n# t          $ r ||	         }
Y nw xY w|
||	<   ŒS|D ]h}t	          |t          ¦  «        rQt          t          |¦  «        ¦  «        }|                     |                      |||j        |j        ¦  «        ¦  «         Œi|S )za
        Compute the globals used by the function with the given
        bytecode table.
        Ú__builtins__ÚLOAD_GLOBAL)Ú__globals__r/   r   ÚbuiltinsÚ
isinstancer   Ú__dict__r¶   r=   Ú_fix_LOAD_GLOBAL_argr>   ÚKeyErrorr   r   r‘   ÚupdateÚ_compute_used_globalsr¥   r£   )r·   Úfuncr©   r¥   r£   ÚdÚglobsrÑ   rº   ÚnameÚvalueÚcoÚsubtables                r$   r×   z_ByteCode._compute_used_globals[  s=  € ð ˆØÔ ˆØ—9’9˜^­U¬^Ñ<Ô<ˆÝ�h¥
Ñ+Ô+ð 	)ØÔ(ˆHà—L’L‘N”Nð 	$ð 	$ˆDØŒ{˜mÒ+Ð+ØÕ 4°T´XÑ >Ô >Ô?�Ø˜q�=�=ð/Ø % d¤˜˜øÝ#ð /ð /ð /Ø (¨¤˜˜˜ð/øøøà#�A�d‘Gøàð 	Oð 	OˆBÝ˜"�hÑ'Ô'ð OÝ&¥|°BÑ'7Ô'7Ñ8Ô8�Ø—’˜×2Ò2°4¸Ø35´<ÀÄñNô Nñ Oô Oð Oøàˆs   ÂBÂB$Â#B$c                 ód   — |                       | j        j        | j        | j        | j        ¦  «        S )zv
        Get a {name: value} map of the globals used by this code
        object and any nested code objects.
        )r×   r¢   rØ   r©   r¥   r£   rH   s    r$   Úget_used_globalsz_ByteCode.get_used_globalsx  s3   € ð
 ×)Ò)¨$¬,Ô*;¸T¼ZØ*.¬.¸$¼-ñIô Ið 	Ir&   N)rl   rm   rn   ro   rp   rE   Úclassmethodr±   r–   r¿   rÁ   rÌ   r×   rà   rr   r&   r$   r¡   r¡     sº   € € € € € ðð ð$€Ið%ð %ð %ð( ðð ñ „[ðð$)ð )ð )ð"ð "ð "ð$ð $ð $ð	4ð 	4ð 	4ð ðð ñ „[ðð8Ið Ið Ið Ið Ir&   r¡   c                 ó\   — t           dv r| dz	  S t           dv r| S t          t           ¦  «        ‚)N)r   r   r   r   r   rZ   r`   )r
   ra   )r>   s    r$   rÔ   rÔ   �  s5   € ÝÐAÐAÐAØ�a‰xˆÝ	�jÐ	 Ð	 Øˆ
å!¥)Ñ,Ô,Ð,r&   c                   ó:   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zd„ Zˆ xZS )ÚByteCodePy311c                 óÔ   •— t          ¦   «                              |¦  «         t          j        |j        ¦  «        j        }t          t          | j        |¦  «        ¦  «        | _        d S r,   )	ÚsuperrE   r-   ÚBytecoderx   r¨   ÚtupleÚmapÚfixup_eh)rC   r¢   ÚentriesÚ	__class__s      €r$   rE   zByteCodePy311.__init__Œ  sQ   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ý”,˜wœ|Ñ,Ô,Ô>ˆÝ!&¥s¨4¬=¸'Ñ'BÔ'BÑ!CÔ!CˆÔÐÐr&   c                 óš   — t          j        | j        t          z   | j        t          z   | j        t          z   | j        | j        ¬¦  «        }|S )N)ÚstartÚendÚtargetÚdepthÚlasti)r-   r   rî   r�   rï   rð   rñ   rò   )ÚentÚouts     r$   rê   zByteCodePy311.fixup_eh‘  sH   € õ Ô&Ø”)�mÑ+°´½=Ñ1HØ”:¥Ñ-Ø”) 3¤9ð
ñ 
ô 
ˆð
 ˆ
r&   c                 ó¼   — g }| j         D ]8}|j        |cxk    r|j        k     rn Œ|                     |j        |f¦  «         Œ9|rt          |¦  «        d         }|S dS )zN
        Returns the exception entry for the given instruction offset
        rZ   N)r¨   rî   rï   r0   rñ   Úmax)rC   r:   Ú
candidatesró   s       r$   Úfind_exception_entryz"ByteCodePy311.find_exception_entryœ  s„   € ð ˆ
ØÔ)ð 	4ð 	4ˆCØŒy˜FÐ,Ð,Ò,Ð, S¤WÒ,Ð,Ð,Ð,Ð,Ø×!Ò! 3¤9¨cÐ"2Ñ3Ô3Ð3øØð 	Ý�j‘/”/ !Ô$ˆCØˆJð	ð 	r&   )rl   rm   rn   rE   Ústaticmethodrê   rø   Ú__classcell__©rì   s   @r$   rä   rä   Š  sg   ø€ € € € € ðDð Dð Dð Dð Dð
 ðð ñ „\ðð
ð 
ð 
ð 
ð 
ð 
ð 
r&   rä   c                   ó:   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zd„ Zˆ xZS )ÚByteCodePy312c                 ó^  •‡ ‡— t          ¦   «                              |¦  «         d ‰ _        ˆ fd„t          j        |j        ¦  «        j        D ¦   «         }‰                      |¦  «        }|j        r't          d„ |D ¦   «         ¦  «        Šˆfd„|D ¦   «         }t          |¦  «        ‰ _        d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rr   )rê   )rS   ÚerC   s     €r$   ú
<listcomp>z*ByteCodePy312.__init__.<locals>.<listcomp>²  s1   ø€ ð ð ð ¨�4—=’= Ñ#Ô#ð ð ð r&   c                 ó   — g | ]	}|j         ‘Œ
S rr   ©rð   )rS   r   s     r$   r  z*ByteCodePy312.__init__.<locals>.<listcomp>¾  s   € Ð'BÐ'BÐ'B°Q¨¬Ð'BÐ'BÐ'Br&   c                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS rr   r  )rS   r   Úmax_exception_targets     €r$   r  z*ByteCodePy312.__init__.<locals>.<listcomp>Á  s&   ø€ ÐNÐNÐN˜Q¨Q¬XÐ9MÒ-MÐ-M�qÐ-MÐ-MÐ-Mr&   )ræ   rE   Ú_ordered_offsetsr-   rç   rx   r¨   Úremove_build_list_swap_patternÚis_generatorrö   rè   )rC   r¢   rë   r  rì   s   `  @€r$   rE   zByteCodePy312.__init__«  sÎ   øøø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!ð !%ˆÔðð ð ð Ý”< ¤Ñ-Ô-Ô?ðñ ô ˆð ×5Ò5°gÑ>Ô>ˆð Ôð 	Oå#&Ð'BÐ'B¸'Ð'BÑ'BÔ'BÑ#CÔ#CÐ ð OÐNÐNÐN 'ÐNÑNÔNˆGå!& w¡¤ˆÔÐÐr&   c                 óJ   — | j         sd„ | j        D ¦   «         | _         | j         S )Nc                 ó   — g | ]}|‘ŒS rr   rr   )rS   Úos     r$   r  z1ByteCodePy312.ordered_offsets.<locals>.<listcomp>É  s   € Ð$;Ð$;Ð$;¨1 QÐ$;Ð$;Ð$;r&   )r  r©   rH   s    r$   Úordered_offsetszByteCodePy312.ordered_offsetsÅ  s.   € àÔ$ð 	<à$;Ð$;°´
Ð$;Ñ$;Ô$;ˆDÔ!ØÔ$Ð$r&   c                 ód  — dt           dt          fd„}t          ¦   «         }d}|�rÌd}t          ¦   «         }|                     ¦   «         D �]£}| j                             |j        ¦  «        }| j        | j        |                  }|j        dvrŒD| j        | j        |dz                     }	|	j        dk    s|	j	        d	k    rŒv| j        | j        |d	z                     }	|	j        d
k    rpt          dv r.t          j        dd…         dk    r|                     |	¦  «         nt          dv rnt          t          ¦  «        ‚| j        | j        |dz                     }	|	j        dk    s�Œt          dv rû| j                             |j        ¦  «        }
|
�Ú|
j        dk    rÏt#          |¦  «        D ]\  }}||u r nŒd}|�°|dz   t%          |¦  «        k     rš||dz            j        |j        k    r�||dz            j        |
j        k    rh||dz            }|j        |j        k    sJ ‚t          |j        |j        |j        |j        |j        ¦  «        ||<   |                     |dz   ¦  «         d}�Œt          dv rÕ| j                             |j        ¦  «        }| j        | j        |d	z
                    }|j        dk    s�Œm| j        | j        |dz
                    }	t          dv r|	j        dk    s�Œžn+t          dv r|	j        dk    s�Œµnt          t          ¦  «        ‚| j        | j        |                  }	|	j        dk    s|	j	        d	k    r�Œún•t          dv rx| j                             |j        ¦  «        }| j        | j        |dz
                    }|j        dk    s�ŒK| j        | j        |                  }	|	j        dk    s|	j	        d	k    r�Œ{nt          t          ¦  «        ‚ |||¦  «        }d}||z  }�Œ¥|�°Ì|D ];}t1          |j        t4          j        d         d|j        ¦  «        | j        |j        <   Œ<|S )a/   Find the following bytecode pattern:

            BUILD_{LIST, MAP, SET}
            SWAP(2)
            FOR_ITER
            ...
            END_FOR
            SWAP(2)

            This pattern indicates that a list/dict/set comprehension has
            been inlined. In this case we can skip the exception blocks
            entirely along with the dead exceptions that it points to.
            A pair of exception that sandwiches these exception will
            also be merged into a single exception.

            Update for Python 3.13, the ending of the pattern has a extra
            POP_TOP:

            ...
            END_FOR
            POP_TOP
            SWAP(2)

            Update for Python 3.13.1, there's now a GET_ITER before FOR_ITER.
            This patch the GET_ITER to NOP to minimize changes downstream
            (e.g. array-comprehension).

            Update for Python 3.15, a ternary ``x if c else y`` in a
            comprehension inserts NOT_TAKEN and splits the exception
            table into two same-target entries:

                ExceptionTable:
                  L1 to L3 -> L9   # ends at NOT_TAKEN
                  L4 to L8 -> L9   # resumes after NOT_TAKEN

            Merge those halves so the pattern below still matches
            (e.g. array-comprehension).
        rë   Úentry_to_removec                 ó¨  ‡— |                       ‰¦  «        dz
  }|                       ‰¦  «        dz   }|dk    rw|t          | ¦  «        k     rd| |         }| |         }|j        |j        k    rDt          |j        |j        |j        |j        |j        ¦  «        | |<   |                      |¦  «         |                      ‰¦  «         ˆfd„| D ¦   «         } | S )NrZ   r   c                 ó4   •— g | ]}|j         ‰j        k    °|‘ŒS rr   )rî   rð   )rS   r   r  s     €r$   r  zbByteCodePy312.remove_build_list_swap_pattern.<locals>.pop_and_merge_exceptions.<locals>.<listcomp>  s5   ø€ ð Að Að A˜QØœg¨Ô)?Ò?Ð?ð Ø?Ð?Ð?r&   )	Úindexrw   rð   r   rî   rï   rñ   rò   Úremove)rë   r  Úlower_entry_idxÚupper_entry_idxÚlower_entryÚupper_entrys    `    r$   Úpop_and_merge_exceptionszNByteCodePy312.remove_build_list_swap_pattern.<locals>.pop_and_merge_exceptionsó  sý   ø€ à%Ÿmšm¨OÑ<Ô<¸qÑ@ˆOØ%Ÿmšm¨OÑ<Ô<¸qÑ@ˆOð  !Ò#Ð#¨½#¸g¹,¼,Ò(FÐ(FØ% oÔ6�Ø% oÔ6�ØÔ%¨Ô);Ò;Ð;Ý/CØ#Ô)Ø#œØ#Ô*Ø#Ô)Ø#Ô)ñ0+ô 0+�G˜OÑ,ð —N’N ;Ñ/Ô/Ð/ð �NŠN˜?Ñ+Ô+Ð+ðAð Að Að A 'ð Añ Aô AˆGàˆNr&   TF)Ú
BUILD_LISTÚ	BUILD_MAPÚ	BUILD_SETrZ   ÚSWAPr   ÚGET_ITER)r   r   r   Nr   )r   r   é   )r   ÚFOR_ITERÚ	NOT_TAKENrO   ÚEND_FOR)r   ÚPOP_TOP)r   r   ÚPOP_ITERr~   rs   )Úlistr   r®   Úcopyr  r  rî   r©   r=   r>   r
   ÚsysÚversion_infor°   ra   r/   rï   rv   rw   rð   r;   rñ   rò   Úpopr9   r:   r-   r.   )rC   rë   r  Úchange_to_nopÚwork_remainingÚcurrent_nop_fixesÚentryr  Ú	curr_instÚ	next_instÚend_instrz   r   Únxtrº   s                  r$   r  z,ByteCodePy312.remove_build_list_swap_patternÌ  s©  € ðN	­dð 	Ý6Jð	ð 	ð 	ð 	õ2 ™œˆØˆØñ r	3ð #ˆNÝ #¡¤ÐØ Ÿš™œð m3ñ m3�ð Ô,×2Ò2°5´;Ñ?Ô?�ð !œJ tÔ';¸EÔ'BÔC�	ØÔ#ð ,9ð 9ð 9ð ð !œJ tÔ';¸EÀA¹IÔ'FÔG�	Ø Ô'¨6Ò1Ð1°i´mÀqÒ6HÐ6HØØ œJ tÔ';¸EÀA¹IÔ'FÔG�	ð
 Ô# zÒ1Ð1õ
 !Ð$?Ð?Ð?ÝÔ+¨B¨Q¨BÔ/°:Ò=Ð=à-×1Ò1°)Ñ<Ô<Ð<øÝ" jÐ0Ð0Øå1µ)Ñ<Ô<Ð<à $¤
¨4Ô+?ÀÈÁ	Ô+JÔ K�Ià Ô'¨:Ò5Ð5Ùå 
Ð*Ð*ð  $œzŸ~š~¨e¬iÑ8Ô8�HØ Ð,Ø (¤°;Ò >Ð >Ý$-¨gÑ$6Ô$6ð %ð %™D˜A˜qØ  E˜z˜zØ % ð  *ð !%˜AØ˜MØ$%¨¡E­C°©L¬LÒ$8Ð$8Ø$+¨A°©E¤NÔ$9¸U¼\Ò$IÐ$IØ$+¨A°©E¤NÔ$8¸H¼MÒ$IÐ$IØ")¨!¨a©%¤.˜CØ#(¤;°#´)Ò#;Ð#;Ð#;Ð#;Ý)=Ø %¤¨S¬W°e´lØ %¤¨S¬Yñ*8ô *8˜G A™Jð $ŸKšK¨¨A©Ñ.Ô.Ð.Ø-1˜NÙ$åÐ ;Ð;Ð;ð !Ô0×6Ò6°u´yÑAÔA�EØ $¤
¨4Ô+?ÀÈÁ	Ô+JÔ K�IØ$Ô+¨yÒ8Ð8Ù Ø $¤
¨4Ô+?ÀÈÁ	Ô+JÔ K�IÝ  KÐ/Ð/Ø(Ô/°9Ò<Ð<Ù$ð  =å"Ð&8Ð8Ð8Ø(Ô/°:Ò=Ð=Ù$ð  >õ 2µ)Ñ<Ô<Ð<à $¤
¨4Ô+?ÀÔ+FÔ G�IØ$Ô+¨vÒ5Ð5¸)¼-È1Ò:LÐ:LÙ øÝÐ"=Ð=Ð=ð !Ô0×6Ò6°u´yÑAÔA�EØ $¤
¨4Ô+?ÀÈÁ	Ô+JÔ K�IØ$Ô+¨yÒ8Ð8Ù à $¤
¨4Ô+?ÀÔ+FÔ G�IØ$Ô+¨vÒ5Ð5¸)¼-È1Ò:LÐ:LÙ øå-­iÑ8Ô8Ð8ð 3Ð2°7¸EÑBÔB�Ø!%�ð Ð!2Ñ2�‘ðe ñ r	3ðj "ð 	>ð 	>ˆDÝ&2°4´;Ý36´9¸UÔ3CØ37Ø37´9ñ'>ô '>ˆDŒJ�t”{Ñ#Ð#ð ˆr&   )rl   rm   rn   rE   rq   r  r  rú   rû   s   @r$   rý   rý   ©  si   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð4 ð%ð %ñ „Xð%ð|ð |ð |ð |ð |ð |ð |r&   rý   r   c                   ój   — e Zd ZdZ ej        d¦  «        Zed„ ¦   «         Zd„ Z	d„ Z
ed„ ¦   «         ZdS )ÚFunctionIdentityzÏ
    A function's identity and metadata.

    Note this typically represents a function whose bytecode is
    being compiled, not necessarily the top-level user function
    (the two might be distinct).
    rZ   c                 ó  — t          |¦  «        }t          |¦  «        }t          j        |¦  «        }|st	          j        d|z  ¦  «        ‚	 |j        }n# t          $ r
 |j        }Y nw xY w | ¦   «         }||_	        ||_
        |                     d¦  «        d         |_        ||_        t          j        |¦  «        |_        |j        €t          j        n|j        j        |_        t          j        |¦  «        |_        ||_        |j        |_        |j        |_        t5          |j        ¦  «        |_        t;          |j        ¦  «        |_        t?          | j         ¦  «        }d !                    |j
        |¦  «        |_"        ||_#        |S )zD
        Create the FunctionIdentity of the given function.
        z %s does not provide its bytecodeú.rA   Nz{}${})$r%   r*   r   Úpysignaturer   ÚByteCodeSupportErrorrn   ÚAttributeErrorrl   rØ   Úfunc_qualnameÚsplitÚ	func_namerx   ÚinspectÚ	getmoduleÚmoduleÚ_dynamic_modnameÚmodnameÚisgeneratorfunctionr  ÚpysigÚco_filenameÚfilenamerµ   Úfirstlinenorw   Ú
parametersÚ	arg_countr#  Ú	arg_namesr;   Ú_unique_idsÚformatÚunique_nameÚ	unique_id)r·   ÚpyfuncrØ   rx   r@  r7  rC   Úuids           r$   Úfrom_functionzFunctionIdentity.from_functionŸ  s„  € õ
 # 6Ñ*Ô*ˆÝ˜tÑ$Ô$ˆÝÔ! $Ñ'Ô'ˆØð 	;ÝÔ-Ø2°TÑ9ñ;ô ;ð ;ð	*Ø Ô-ˆMˆMøÝð 	*ð 	*ð 	*Ø œMˆMˆMˆMð	*øøøð ˆs‰uŒuˆØˆŒ	Ø*ˆÔØ&×,Ò,¨SÑ1Ô1°"Ô5ˆŒØˆŒ	ÝÔ'¨Ñ-Ô-ˆŒàœ;Ð.õ Ô.Ð.à!œ[Ô1ð 	Œõ $Ô7¸Ñ=Ô=ˆÔØˆŒ
ØÔ(ˆŒØÔ.ˆÔÝ˜UÔ-Ñ.Ô.ˆŒÝ˜eÔ.Ñ/Ô/ˆŒõ
 �3”?Ñ#Ô#ˆØ"Ÿ>š>¨$Ô*<¸cÑBÔBˆÔØˆŒàˆs   ÁA ÁA)Á(A)c                 ó6   — |                       | j        ¦  «        S )z:Copy the object and increment the unique counter.
        )rM  rØ   rH   s    r$   ÚderivezFunctionIdentity.deriveÉ  s   € ð ×!Ò! $¤)Ñ,Ô,Ð,r&   c                 ó,   — t          | j        ¬¦  «        S )ú4
        NOTE: part of ReduceMixin protocol
        )rK  )ÚdictrØ   rH   s    r$   Ú_reduce_stateszFunctionIdentity._reduce_statesÎ  s   € õ ˜4œ9Ð%Ñ%Ô%Ð%r&   c                 ó,   — |                       |¦  «        S )rQ  )rM  )r·   rK  s     r$   Ú_rebuildzFunctionIdentity._rebuildÔ  s   € ð
 × Ò  Ñ(Ô(Ð(r&   N)rl   rm   rn   ro   Ú	itertoolsÚcountrG  rá   rM  rO  rS  rU  rr   r&   r$   r1  r1  •  s„   € € € € € ðð ð "�)”/ !Ñ$Ô$€Kàð'ð 'ñ „[ð'ðR-ð -ð -ð
&ð &ð &ð ð)ð )ñ „[ð)ð )ð )r&   r1  )5r%  Úcollectionsr   r   r-   r:  rV  Útypesr   r   Ú
numba.corer   r   r	   Únumba.core.utilsr
   r<   r   r…   ra   r   r   r�   r%   r*   r5   Ú	frozensetÚhasjrelrb   Úhasjabsrc   rG   rL   r†   r‚   Úobjectr9   r�   r„   rˆ   r=   r  r‡   ru   r�   r‘   r¡   rÔ   rä   rý   ÚByteCodeÚReduceMixinr1  rr   r&   r$   ú<module>rb     s´  ðØ 
€
€
€
Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø 
€
€
€
Ø €€€Ø Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø &Ð &Ð &Ð &Ð &Ð &ð Ð4Ð4Ð4Ø,Ð,Ð,Ð,Ð,Ð,à€I€IØÐ$Ð$Ð$Øà
Ð
˜iÑ
(Ô
(Ð(ð ˆj˜¨¨Ñ4Ô4€Ø!�zÐ"8Ø"@ñBô BÐ ð €ð	ð 	ð 	ðEð Eð Eð
ð ð ð ˆ9�S”[Ñ!Ô!€Øˆ9�S”[Ñ!Ô!€Ø�hÑ€Øˆ9�[�[ .°/Ð!BÑCÔCÑDÔD€ØÔ€ØÔ!€ðUð Uð Uð Uð U�6ñ Uô Uð Uðp €Ø
€Ø€
àŒZ×Ò˜eÑ$Ô$€
ð Ð+Ð+Ð+ð	7ð 	7ð 	7ð 	7ð Ð-Ð-Ð-ð8ð 8ð 8ð 8ðt Ð
˜iÑ
(Ô
(Ð(ðNð Nð Nðð ð ð ð �6ñ ô ð ð4fIð fIð fIð fIð fI�ñ fIô fIð fIðR-ð -ð -ðð ð ð ð �Iñ ô ð ð>_ð _ð _ð _ð _�Mñ _ô _ð _ðD �ÒÐØ€H€HØÐ6Ð6Ð6Ø€H€HØ�ÒÐØ€H€Hà
Ð
˜iÑ
(Ô
(Ð(ðD)ð D)ð D)ð D)ð D)�yÔ,ñ D)ô D)ð D)ð D)ð D)r&   