
    sh                    $   S SK JrJr  S SKrS SKrS SKJr  S SKrS SKJ	r	J
r
  S SKJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJrJrJrJr  S SKJ r   S SK!J"r"  S S	K#J$r$J%r%  S S
K&J'r'  S SK(J)r)  \" SS5      r* " S S\+5      r, " S S\,5      r-S r.g)    )
namedtupledefaultdictN)partial)Constant	IRBuilder)typingutilstypesir	debuginfofuncdesc
generatorsconfigir_utilscgutilsremoverefctpasstargetconfig)LoweringErrornew_error_contextTypingErrorLiteralTypingErrorUnsupportedErrorNumbaDebugInfoWarning)default_mangler)Environment)compute_use_defsmust_use_alloca)get_func_body_first_lineno)get_registered_loc_notify_VarArgItem)varargindexc                       \ rS rSrSrS S jr\S 5       rS rS r	S r
S	 rS
 rS rS rS S jrS!S jrS!S jrS rS rS rS rS rS rS"S jrS rS rS rS\R:                  SS4S jrS rS r Sr!g)#	BaseLower   z
Lower IR to LLVM
Nc                    X l         X0l        [        R                  " UR                  R                  5       5      U l        X@l        UR                  U l        XPl        [        R                  R                  5       U l        U R                   R                  U R                  R                  5      U l        [         R"                  " U R                  5      U l        0 U l        0 U l        0 U l        [-        U R                  R/                  5       5      U l        SU l        UR5                  U R$                  U R                  S9U l        U R6                  R8                  (       a  U R6                  R:                  O[<        R>                  nU RA                  5       U l!        U R                  RD                  nU" U R                  UR2                  RF                  UUS9U l        [I        5       U l%        U RM                  5         g )N)environmentfndesc)modulefilepathcgctxdirectives_only)'libraryr)   r	   	SortedMapblocksitemsfunc_irgenerator_infometadatar   ConfigStacktop_or_noneflagscreate_ir_moduleunique_namer*   r   from_fndescenvblkmappending_phisvarmapminkeysfirstblkloc	subtargetcontextenable_debuginfo	DIBuilderr   DummyDIBuilder_compute_def_locationdefn_locdbg_directives_onlyfilenamer   _loc_notify_registryinit)selfrD   r.   r)   r2   r4   dibuilderclsr-   s           g/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/lowering.py__init__BaseLower.__init__   sz   oognn&:&:&<=%44 !--99;
 ll33DKK4K4KL **4;;7 DKK,,./
 ((TXX04 ) =
  <<88 ..&55 	
 224**88%T[[/6{{/C/C,36EG %>$?! 			    c                 .    U R                   R                  $ N)rD   	call_convrN   s    rP   rV   BaseLower.call_convO   s    ||%%%rS   c                     g rU    rW   s    rP   rM   BaseLower.initS   s    rS   c                 4   U R                   b  gU R                  R                  U R                  5      U l         U R                  R	                  U R                  5      U l        U R
                  R                  U l        U R
                  R                  U l        g)zM
Init the Python API and Environment Manager for the function being
lowered.
N)	pyapirD   get_python_apibuilderget_env_managerenv_managerenv_bodyenv_ptrenvargrW   s    rP   
init_pyapiBaseLower.init_pyapiV   sn    
 ::!\\00>
  <<77E((11&&..rS   c                    U R                   R                  R                  U R                   R                  R                  S-   5      nU R                  R
                  (       a  U R                   R                  R                  n[        U5      nUb,  US-
  nU R                   R                  R                  U5      nU$ SU R                   R                  R                   S3n[        R                  " [        U5      5        U$ )N   z$Could not find source for function: z+. Debug line information may be inaccurate.)r2   rB   with_linenolinerD   rE   func_idfuncr   warningswarnr   )rN   rI   fnoptional_lnooffsetmsgs         rP   rH   BaseLower._compute_def_locationd   s     <<##//0@0@0E0E0IJ<<((%%**B5b9L'%)<<++77? 	 >,,..334 5,, 3C89rS   c                    SU l         U R                  R                  U R                  R                  U R
                  R                  U R
                  R                  U R
                  R                  U R                  R                  S9  U R                  R                  R                  nU R                  R                  =(       a    U R                  R                  (       + nU(       a  SU;  a  UR                  S5        ggg)z$
Called before lowering all blocks.
N)functionqualnameargnamesargtypesrj   alwaysinlinenoinline)r]   r   mark_subprogramr_   ru   r)   rv   argsrx   rI   rj   
attributesr7   rJ   add)rN   r}   
full_debugs      rP   	pre_lowerBaseLower.pre_lowerw   s     
&&0E0E040D0D040@0@040D0D,0MM,>,>	 	' 	@ \\**55
ZZ))P$**2P2P.P
.
:NN:& ;:rS   c                 ~    U R                   R                  5         U R                   H  nUR                  5         M     g)z%
Called after all blocks are lowered
N)r   finalizerL   close)rN   notifys     rP   
post_lowerBaseLower.post_lower   s-     	!//FLLN 0rS   c                     g)z!
Called before lowering a block.
NrZ   rN   blocks     rP   	pre_blockBaseLower.pre_block       rS   c                     g)z 
Called after lowering a block.
NrZ   r   s     rP   
post_blockBaseLower.post_block   r   rS   c           	          U R                   R                  U R                  XUX@R                  R                  R
                  S9  g )NrB   	func_name)rV   return_dynamic_user_excr_   r2   rk   r   )rN   	exc_classexc_argsnb_typesrB   s        rP   return_dynamic_exception"BaseLower.return_dynamic_exception   s7    ..LL)x||33== 	/ 	
rS   c                     U R                   R                  U R                  XX0R                  R                  R
                  S9  g)z+Propagate exception to the caller.
        r   N)rV   return_user_excr_   r2   rk   r   rN   r   r   rB   s       rP   return_exceptionBaseLower.return_exception   s7     	&&LL)||33== 	' 	
rS   c                     U R                   R                  U R                  XX0R                  R                  R
                  S9  g)z5Set exception state in the current function.
        r   N)rV   set_static_user_excr_   r2   rk   r   r   s       rP   set_exceptionBaseLower.set_exception   s7     	**LL)||33== 	+ 	
rS   c                     U R                   R                  U R                  5      nU R                   R                  U R                  U5        g)z7Emit a pointer to hold the Environment object.
        N)rD   get_env_namer)   declare_env_globalr*   )rN   envnames     rP   emit_environment_object!BaseLower.emit_environment_object   s4     ,,++DKK8''W=rS   c                    U R                  5         U R                  c#  S U l        U R                  U R                  5        OU R                  U 5      U l        U R                  R                  U l        U R                  R                  U 5        U R                  R                  U 5        U R                  R                  (       a  U R                  R                  U 5        [        R                  (       a+  [        R                  " U R                  U R                  5        U R                   R"                  (       aA  U R                  c4  [$        R&                  " U R(                  U R                   U R                  S9  U R                   R+                  U R                  U R,                  5        U R,                  R/                  U R                  5        g )N)rD   r)   )r   r3   genlowerlower_normal_functionr)   GeneratorLowergentypelower_init_funclower_next_funchas_finalizerlower_finalize_funcr   	DUMP_LLVMr	   	dump_llvmr*   rD   
enable_nrtr   remove_unnecessary_nrt_usageru   post_loweringr.   add_ir_modulerW   s    rP   lowerBaseLower.lower   s+   $$&& DM&&t{{3 //5DM==00DLMM))$/MM))$/||))11$7OODKK5 <<""t':':'B88AE@DM
 	""4;;= 	""4;;/rS   c                     U R                   R                  U R                  U R                  R                  U R
                  5      U l        U R                  $ rU   )rV   decode_argumentsr_   r)   rx   ru   fnargsrW   s    rP   extract_function_arguments$BaseLower.extract_function_arguments   s?    nn55dll6:kk6J6J6:mmE {{rS   c                 t   U R                  U5        U R                  5         U R                  5       n[        R                  " U R
                  5         U R
                  R                  U5        U R
                  R                  U R                  U R                     5        SSS5        g! , (       d  f       g= f)z
Lower non-generator *fndesc*.
N)
setup_functionr   lower_function_bodyr   suspend_emissionr_   position_at_endbranchr<   rA   )rN   r)   entry_block_tails      rP   r   BaseLower.lower_normal_function   s     	F# 	'')335
 ''5LL(()9:LLDMM :; 655s   AB))
B7c                 P   U R                    H0  nSU-  nU R                  R                  U5      U R                  U'   M2     U R	                  5         U R
                  R                  nU R                  SR                  U R                  R                  5      5        [        U R                   R                  5       5       HT  u  pU R                  U   nU R
                  R                  U5        U R                  SU 35        U R                  U5        MV     U R                  5         U$ )z@
Lower the current function's body, and return the entry block.
zB%sz# function begin: {0}z# lower block: )r0   ru   append_basic_blockr<   r   r_   basic_blockdebug_printformatr)   r9   sortedr1   r   lower_blockr   )rN   rq   bnamer   r   bbs         rP   r   BaseLower.lower_function_body   s    
 kkFFNE"&--"B"B5"IDKK " 	<<33077KK##% 	& $DKK$5$5$78MFV$BLL((,vh78U#	 9
 	rS   c                 D   U R                  U5        UR                   H\  nUR                  U l        [        [        U R                  S9n[        SUU R                  US9   U R                  U5        SSS5        M^     U R                  U5        g! , (       d  f       M  = f)z
Lower the given block.
rB   zlowering "{inst}" at {loc})instrB   errcls_N)r   bodyrB   r   r   r   
lower_instr   )rN   r   r   defaulterrclss       rP   r   BaseLower.lower_block
  s     	uJJDxxDH#Mtxx@M"#?d'+xxH%H H  	H Hs    B
B	c                 N   U R                   (       aO  U R                  R                  U R                  U R                   R                  U R
                  U R                  US9  U R                  R                  U R                  U R                  U R
                  U R                  US9  g)z@
Create CPython wrapper(s) around this function (or generator).
)release_gilN)r   rD   create_cpython_wrapperr.   gendescr;   call_helperr)   )rN   r   s     rP   r    BaseLower.create_cpython_wrapper  s     ==LL//040E0E04$:J:J<G 0 I 	++DLL$++,0HHd6F6F8C 	, 	ErS   c                     U R                   (       a  [        S5      eU R                  R                  U R                  U R
                  U R                  U R                  5        g)z(
Create C wrapper around this function.
z(generator as a first-class function typeN)r   r   rD   create_cfunc_wrapperr.   r)   r;   r   rW   s    rP   r   BaseLower.create_cfunc_wrapper$  sE     =="#MNN))$,,*.((D4D4D	FrS   c                    U R                   R                  U R                  U5      U l        U R                  R
                  (       a>  U R                  R                  nSU;  a"  UR                  S5        UR                  S5        U R                  R                  S5      U l	        [        U R                  5      U l        U R                  R                  U R                  5      U l        g )Nry   optnonerz   entry)rD   declare_functionr*   ru   r7   dbg_optnoner}   r~   r   entry_blockr   r_   rV   init_call_helperr   )rN   r)   attrsets      rP   r   BaseLower.setup_function-  s    55dkk6J::!!mm..GW,I&J'==;;GD !1!12>>::4<<HrS   c                 4    U R                   R                  U   $ rU   )r)   typemap)rN   varnames     rP   typeofBaseLower.typeof9  s    {{""7++rS   rB   returnc                 L    U R                    H  nUR                  U5        M     g)zKCalled when a new instruction with the given `loc` is about to be
lowered.
N)rL   r   )rN   rB   
notify_objs      rP   
notify_locBaseLower.notify_loc<  s"     33Jc" 4rS   c                     [         R                  (       aA  U R                  R                  U R                  SU R
                  R                   SU 35        g g )Nz
DEBUGJIT [z]: )r   	DEBUG_JITrD   r   r_   r)   rv   )rN   rr   s     rP   r   BaseLower.debug_printC  sD    LL$$
4;;+?+?*@C5IK rS   c                 h   [         R                  " U5      U R                  R                  U   4nU R                  R                  5       U R                  U5      4n[        R                  " [         R                  /UQ76 nU R                  R                  [        U5      nU" U R                  U5        g)zHelper to emit ``print(msg, varname)`` for debugging.

Parameters
----------
msg : str
    Literal string to be printed.
varname : str
    A variable name whose value will be printed.
N)r
   literalr)   r   rD   get_dummy_valueloadvarr   	signaturenoneget_functionprintr_   )rN   rr   r   argtysr|   sigimpls          rP   print_variableBaseLower.print_variableH  s     MM#KK(

 LL((*LL!
 uzz3F3||((4T\\4 rS   )rL   r<   r0   r_   r   rD   r   rI   r   r;   rb   ra   rd   rA   r7   r   r)   r2   ru   r3   r   r   r.   rB   r4   r*   r=   r]   r>   rU   )NN)F)"__name__
__module____qualname____firstlineno____doc__rQ   propertyrV   rM   re   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Locr   r   r  __static_attributes__rZ   rS   rP   r$   r$      s    /b & &/&',




>0<<" 2EF
I,#bff # #K
!rS   r$   c                   0  ^  \ rS rSr\R
                  rU 4S jr\S 5       rS r	U 4S jr
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S  r%S(S! jr&S" r'S# r(S(S$ jr)S% r*S& r+S'r,U =r-$ ))Loweri`  c                 B   > [         TU ]  5         U R                  5         g rU   )superrM   _find_singly_assigned_variable)rN   	__class__s    rP   rM   
Lower.initc  s    ++-rS   c                     U R                   c  gU R                   R                  =(       a    U R                   R                  (       + $ )zFlags that the SROA like optimisation that Numba performs (which
prevent alloca and subsequent load/store for locals) should be disabled.
Currently, this is conditional solely on the presence of a request for
the emission of debug information.F)r7   r   rJ   rW   s    rP   _disable_sroa_like_optLower._disable_sroa_like_opth  s3     ::zz##JDJJ,J,J(JJrS   c                    U R                   nUR                  n[        5       nU R                   R                  R                  (       Gdj  [        U5      n[        U5      n[        [        5      nUR                  R                  5        H!  u  pxU H  n	Xi   R                  U5        M     M#     [        [        5      n
UR                  R                  5        H!  u  pxU H  n	X   R                  U5        M     M#     U H  n	X;  d  M
  [        Xi   5      S:X  d  M  [        X   5      S:X  d  M0  Xi   u  nU R                  U   R                  [        R                  5      nU Vs/ s H!  nUR                   R"                  U	:X  d  M  UPM#     nn[        U5      S:X  d  M  UR                  U	5        M     X0l        0 U l        g s  snf )Nrh   r   )r2   r0   setrk   is_generatorr   r   r   defmapr1   r~   usemaplen
find_instsr   Assigntargetname_singly_assigned_vars_blk_local_varmap)rN   r2   r0   savuse_defsalloca_varsvar_assign_mapblkvlvarvar_use_mapdefblkassign_stmtsstmtassignss                  rP   r  $Lower._find_singly_assigned_variables  sx   ,,e||##000'/H)&1K )-N#??002C"'++C0  3
 &c*K#??002C$((-  3
 &)c.2E.F!.K;+,1 $2#6'+{{6':'E'Ebii'P4@ #?LD&*kk&6&6#&= $(L #?w<1,GGCL & &)"!##?s   #GGc                    > SSK Jn  [        [        U ]  U5        Xl        XR                  :X  a  U R                  U R                     nU R                  R                  U5        [        5       nU R                  R                  5        HV  nUR                  [        R                  5       H0  nUR                   U;  d  M  UR#                  UR                   5        M2     MX     U H%  nU R%                  U5      nU R'                  Xg5        M'     UR)                  SS9 H  n[*        R,                  " [*        R.                  U R0                  UR2                  5      n	U	c  MB  [5        U	[        R6                  5      (       d  Mc  U	R                   UR8                  L d  M~  [5        UR:                  [        R<                  5      (       d  M  U R                  UR:                  R>                     n
SU
0U R                  l           g    g )Nr   )ehcall)opr  )!numba.core.unsafer1  r  r  r   _cur_ir_blockrA   r<   r_   r   r  r0   valuesr  r   Delvaluer~   r   _alloca_var
find_exprsr   guardget_definitionr2   rl   
isinstanceGlobalexception_check
terminatorBranchtruebr_in_try_block)rN   r   r1  r   	all_namesxr   fetyper2  defn	targetblkr  s              rP   r   Lower.pre_block  st   (eT$U+"MM!
 T]]+BLL((,I++-))"&&1Awwi/!agg. 2 . "T*  . " $$$/D>>''tyyD JtRYY$?$?::!3!33!%"2"2BII>>$(KK0@0@0G0G$H	 7?	5J2 0rS   c                 >     U R                   ?g ! [         a     g f = frU   )r_   rC  AttributeErrorr   s     rP   r   Lower.post_block  s#    	* 		s    
c                    U R                   R                  U R                  U R                  R                  5        U R                  U R                  5        U R                  [        U5      5        [        U[        R                  5      (       a  U R                  UR                  R                  5      nU R                  X!5      nS n[        UR                  [        R                   5      (       aS  U R                   R                  U R                  U R"                  R                  5        UR                  R$                  S-   nU R'                  X1R                  R                  US9  g [        U[        R(                  5      (       Ga  U R+                  UR,                  R                  5      nU R.                  UR0                     nU R.                  UR2                     nU R                  UR,                  R                  5      nU R4                  R7                  U R                  XX[8        R:                  5      n	U	R<                  [>        R                  RA                  S5      :X  d   SU	R<                  -  5       eU R                  RC                  XU5        g [        U[        RD                  5      (       a5  U R.                  UR                     n
U R                  RG                  U
5        g [        U[        RH                  5      (       Ga<  U RJ                  (       a  U RL                  RO                  U 5        g U R+                  UR                  R                  5      nU R                  UR                  R                  5      nU RP                  RR                  n[        U[8        RT                  5      (       a(  U RV                  RY                  U R                  X+U5        g X+:X  d   SR[                  X5      5       eU R4                  R]                  U R                  X#5      nU RV                  R_                  U R                  U5        g [        U[        R`                  5      (       a  g [        U[        Rb                  5      (       a  U RP                  Rd                  U   nUc   e U R4                  Rg                  SU5      nU R+                  UR                  R                  5      n
U R+                  UR                  R                  5      nU R                  UR                  R                  5      nU R4                  R7                  U R                  UUURh                  S   5      nU" U R                  XR$                  U45      $ [        U[        Rp                  5      (       a  U Rs                  U5        g [        U[        Rt                  5      (       aP  U RP                  Rd                  U   nUc   eU Rm                  UR                  UR$                  UR                  U5      $ [        U[        Rv                  5      (       aP  U RP                  Rd                  U   nUc   eU Rm                  URx                  URz                  UR                  U5      $ [        U[        R|                  5      (       Ga  U R+                  UR                  R                  5      n
U R+                  UR$                  R                  5      nU R                  UR                  R                  5      nU R                  UR$                  R                  5      nU RP                  Rd                  U   nUc   e[~        R                  nU R4                  R                  R                  U5      nUR                  U R4                  R                  URh                  0 5      nU R4                  Rg                  UU5      nUURh                  S   :X  d   eU R4                  R7                  U R                  UUURh                  S   5      nU" U R                  U
U45      $ [        U[        R                  5      (       a  U R                  UR                  5        g [        U[        R                  5      (       Ga6  U R+                  UR                  R                  5      n
U R+                  UR                  R                  5      nU RP                  Rd                  U   nU R                  UR                  R                  5      nU R                  UR                  R                  5      nUc   eURh                  S   U:X  d   eU R4                  R                  UR                  U5      nU R4                  R7                  U R                  UUURh                  S   5      nU" U R                  X45      $ [        U[        R                  5      (       a  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g [k        [=        U5      5      e! [j         a5    U Rm                  UR                  URn                  UR                  U5      s $ f = f)Nrh   )argidxzcond is not i1: %sz)type '{}' does not match return type '{}'static_setitem   r   )Qr   mark_locationr_   rB   rj   r   r   strr=  r   r  r   r  r   lower_assignr8  ArgrI   r"   storevarrA  r   condr<   rB  falsebrrD   castr
   booleantypellvmliteIntTypecbranchJumpr   Returnr3   r   return_from_generatorr)   restypeOptionalrV   return_optional_valuer   get_return_valuereturn_valuePopBlockStaticSetItem	calltypesr   r|   NotImplementedErrorlower_setitem	index_varPrintlower_printSetItemStoreMapdctkeyDelItemoperatordelitemtyping_contextresolve_value_typeget_call_typer7  delvarSetAttrget_setattrattrDynamicRaiselower_dynamic_raiseDynamicTryRaiselower_try_dynamic_raiseStaticRaiselower_static_raiseStaticTryRaiselower_static_try_raise)rN   r   tyvalrN  rV  trflcondtypredr  otyretvalr   r  r8  valuetyr"   targettyindextyr3  fnopcallsigs                          rP   r   Lower.lower_inst  s   $$T\\488==A!T#dBII&&T[[--.B##B-CF $**bff--,,T\\4==;M;MN))A-MM#{{//M?bii((<<		/DT[[)BT\\*B[[0F<<$$T\\4OD99 3 3A 66 3%		136LL  2.bgg&&[[-FLL'bii((""33D9,,tzz/C++djjoo.C$$B"enn--44T\\2CP9 M;BB3KM9\\224<<IFNN''f=bkk**b..//--d3I(((G||001A9M
 dkk&6&67TZZ__5++djjoo6))$,,w*3..*;=DLL6::u*EFFbhh''T"bjj))--d3I(((%%dkk4::tzz&/1 1 bkk**--d3I(((%%dhh$**iPPbjj))\\$++"2"23FLL1E{{4;;#3#34Hkk$**//2G--d3I(((!!B<<..AA"ED((++Y^^RG <<,,T7;Dy~~a0000LL%%dllE7&/nnQ&79E vuo66bff%%KK

#bjj))\\$++"2"23FLL1E--d3I{{4;;#3#34Hkk$**//2G(((>>!$000<<++DIIyAD LL%%dllE7&/nnQ&79E vo66boo..$$T*b0011((.bnn--##D)b//00''- &d4j11c ' A))$++t~~*.**iA AAs   %j/ /<k.-k.c                 F   U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      n	U R                  UR                  5      n
[        R                  nU R
                  R                  R                  U5      nUR                  U R
                  R                  UR                  0 5      nU R
                  R                  X5      n[        U[        R                  5      (       a2  U R
                  R                  U R                  XXUR                   5      nO1[        R"                  nU" U5      U" UR                  S   5      :X  d   eU R
                  R                  U R                  XzUR                  S   5      nU R
                  R                  U R                  XiUR                  S   5      nU" U R                  XWU45      $ )Nr   rh   rP  )r   r   r   rs  setitemrD   ru  rv  rw  r|   r   r=  r
   rb  rX  r_   rZ  	unliteral)rN   
target_varrk  	value_varr   r  r8  r"   r  r  r  r3  r  r  r  uls                   rP   rj  Lower.lower_setitemS  s   joo.Y^^,Y^^,;;z/++inn-++inn-||**==bA$$LL''
 ||((7 h//\\&&t||V'/}}6F Bh<2innQ&7#8888!!$,,"+.."35!!$,,"+.."35 DLL6%"899rS   c                 &    U R                  U5        g rU   )r  rN   r   s     rP   r  Lower.lower_try_dynamic_raiser  s     	##D)rS   c                    UR                   n/ n/ nU H  n[        U[        R                  5      (       aH  U R	                  UR
                  5      nU R                  UR
                  5      nU R                  Xg5        OS nUnUR                  U5        UR                  U5        M     U R                  UR                  [        U5      [        U5      U R                  S9  g Nr   )r   r=  r   Varr   r   r   increfappendr   r   tuplerB   )rN   r   r   r|   r   exc_argtypr  s           rP   r}  Lower.lower_dynamic_raisew  s    ==G'266**kk',,/ll7<<0C%OOC KK   	%%dnneDk&+Ho488 	& 	ErS   c                     UR                   c  U R                  S U R                  S9  g U R                  UR                   UR                  U R                  S9  g r  )r   r   rB   r   r  s     rP   r  Lower.lower_static_raise  sD    >>!!!$DHH!5!!$..$--TXX!NrS   c                     UR                   c  U R                  S U R                  S9  g U R                  UR                   UR                  U R                  S9  g r  )r   r   rB   r   r  s     rP   r  Lower.lower_static_try_raise  sD    >>!t2t~~t}}$((KrS   c                 $   UR                   n[        U[        R                  [        R                  [        R
                  45      (       aD  U R                  R                  U R                  UUR                   5      nU R                  X5        U$ [        U[        R                  5      (       a  U R                  X5      $ [        U[        R                  5      (       ap  U R                  UR                  5      nU R                  UR                  5      nU R                  R!                  U R                  XVU5      nU R                  X5        U$ [        U[        R"                  5      (       Ga;  [$        R&                  " U R                  5         U R                  SUR                  -   5      n[        U[(        R*                  5      (       a  UR                   nU R                  R,                  n	U	R/                  U5      n
U R                  R                  U R                  X5      nU R                  R!                  U R                  XU5      nO@U R0                  UR2                     nU R                  R!                  U R                  XWU5      nU R                  X5        UsS S S 5        $ [        U[        R4                  5      (       a$  U R7                  X5      nU R                  X5        U$ [9        [;        U5      U5      e! , (       d  f       N#= f)Nzarg.)r8  r=  r   Constr>  FreeVarrD   get_constant_genericr_   r  Expr
lower_exprr  r   r   r   rX  rT  r   r   r
   Omittedru  !resolve_value_type_prefer_literalr   r"   Yieldlower_yieldri  rZ  )rN   r  r   r8  resr  r  argtypyvaltyctxvaltyconsts               rP   rS  Lower.lower_assign  s'   

ebhh		2::>??,,33DLL"49KKACKK Jrww''??2--rvv&&,,uzz*C++ejj)C,,##DLL#B?CKK Jrvv&& ++DLL9 FUZZ$78eU]]33!KKE LL77E!CCEJE LL==eE ,,++DLL%KC++ekk2C,,++DLL#bICB$% :9( rxx((""2-CKK J!$u+u553 :9s   DL
Lc                    U R                   R                  UR                     nUR                  UL d   e[        R
                  " XUR                  5      nUR                  5         U R                  UR                  R                  5      nU R                  UR                  R                  5      nU R                  R                  nU R                  R                  U R                   XVU5      nU R                  R#                  U R                   Xx5      n	U R$                  R'                  U R                   U	5        UR)                  5         U R                  R+                  U R                   US 5      $ rU   )r3   yield_pointsr"   r   r   
LowerYield	live_varslower_yield_suspendr   r8  r   r   r   
yield_typerD   rX  r_   rd  rV   re  lower_yield_resumer  )
rN   rettyr   ypyr  r  actual_rettypyretr  s
             rP   r  Lower.lower_yield  s     --djj9ww$!!$BLL9	ll4::??+kk$**//*// ||  sG ..LL-

 	##DLL&9 	
||00udKKrS   c                 R  ^ ^^^ T R                   R                  R                  T5      mUR                  nUR                  nUR
                  nUR                  nT R                  UR                  5      nT R                  UR                  5      n	T R                  UR                  5      nT R                  UR                  5      nT R                  R                  U   mT R                   R                  T R                  XHTR                  S   5      nT R                   R                  T R                  XYTR                  S   5      nUU U4S jn
UU U4S jnU" [        U5      [        U5      4Xg45      nUb  U
" U5      $ U" [        U5      U	4Xe45      nUb  U
" U5      $ U" U[        U5      4XG45      nUb  U
" U5      $ TR!                  T R                   R                  TR                  0 5      nT R                   R#                  TU5      nU" T R                  XE45      nU
" U5      $ )Nr   rh   c                 h   > TR                   R                  TR                  U TR                  T5      $ rU   )rD   rX  r_   return_type)r  restyrN   r   s    rP   cast_result&Lower.lower_binop.<locals>.cast_result  s/    <<$$T\\3%.%:%:EC CrS   c                   > [        S U 5       5      (       a  g  [        T[        R                  5      (       a(  TR	                  TR
                  R                  U 0 5      nO"[        R                  " TR                  /U Q76 n  TR
                  R                  TU5      nU" TR                  U5      $ ! [         a     g f = f! [         a     g f = f)Nc              3   D   #    U  H  o[         R                  L v   M     g 7frU   )r   	UNDEFINED).0as     rP   	<genexpr>=Lower.lower_binop.<locals>.try_static_impl.<locals>.<genexpr>  s     3d$ds    )anyr=  r
   Functionrw  rD   ru  r   r   r  r   r   r_   ri  )tysr|   
static_sigstatic_implr3  rN   r   s       rP   try_static_impl*Lower.lower_binop.<locals>.try_static_impl  s    3d333b%..11!#!1!1$,,2M2M25r";J "(!1!1)2G2G!N#!NJ"ll77JG"4<<66	  
 ' s*   AB4 "!B4 .C 4
C C
CC)rD   ru  rv  lhsrhs
static_lhs
static_rhsr   r   r   r)   rh  rX  r_   r|   _lit_or_omittedrw  r   )rN   r  exprr3  r  r  r  r  ltyrtyr  r  r  r  r  r   s   `` `           @rP   lower_binopLower.lower_binop  s    \\((;;B?hhhh__
__
kk#((#kk#((#ll388$ll388$ KK))$/	llc	q8IJllc	q8IJ	C
	" Z(/**EF$
 ?s##Z(#.
 ?s##/*-.
 ?s## t||::INNBO||((S14<<#,3rS   c                    U R                  UR                  5      nU R                  UR                  5      n[        R                  nU R                  R
                  R                  U5      n	U	R                  U R                  R
                  UR                  0 5      n
U R                  R                  X5      nXg4nU R                  UR                  5      U R                  UR                  5      4n[        XUR                  5       VVVs/ s H-  u  pnU R                  R                  U R                  XU5      PM/     nnnnU" U R                  U5      nU R                  R                  U R                  UUR                  U5      $ s  snnnf rU   )r   r   rs  getitemrD   ru  rv  rw  r|   r   r   ziprX  r_   r  )rN   r  r  r8  r"   r   basevalindexvalr3  r  r  r  argvalsargtypsavatftcastvalsr  s                      rP   lower_getitemLower.lower_getitem*  sF   ,,uzz*<<

+||**==bA$$LL''
 ||((7%;;uzz*;;uzz*, '*'*3..':;':
 LL%%dllBB?': 	 ; 4<<*||  s!*!6!6!&( 	(	;s   4Fc                    [        U[        5      (       a|  U R                  UR                  R                  5      UR
                     nU R                  R                  U R                  UR                  R                  5      UR
                  5      nO6U R                  UR                  5      nU R                  UR                  5      nU R                  R                  U R                  XCU5      $ )zP
Cast a Numba IR variable to the given Numba type, returning a
low-level value.
)r=  r    r   r!   r   r"   r_   extract_valuer   rD   rX  )rN   r)  r  vartyr  s        rP   	_cast_varLower._cast_var@  s    
 c;''KK

0;E,,,,T\\#**//-J-0YY8C KK)E,,sxx(C||  s2>>rS   c                 :  ^ ^ U(       am  T R                  UR                  5      n[        U[        R                  5      (       d   eU[        [        U5      5       Vs/ s H  n[        XG5      PM     sn-   nTR                  nUcQ  U(       a  [        SU< 35      e[        UTR                  5       V	V
s/ s H  u  pT R                  X5      PM     nn	n
U$ U U4S jnU U4S jnU U4S jn[        R                  " UU[        U5      UUU5      nU$ s  snf s  sn
n	f )Nz+unsupported keyword arguments when calling c                 B   > TR                  UTR                  U    5      $ rU   )r  r|   )r"   paramr)  rN   r   s      rP   normal_handler,Lower.fold_call_args.<locals>.normal_handler`  s    ~~c9>>%+@AArS   c                 l   > TR                   R                  TR                  TR                  U    U5      $ rU   )rD   r  r_   r|   )r"   r  defaultrN   r   s      rP   default_handler-Lower.fold_call_args.<locals>.default_handlerc  s0    ||88LL).."7B BrS   c                   > TR                   U    n[        U[        R                  5      (       d   U5       e[	        X#5       VVs/ s H  u  pETR                  XE5      PM     nnn[        R                  " TR                  U5      $ s  snnf rU   )	r|   r=  r
   	BaseTupler  r  r   make_anonymous_structr_   )	r"   r  vars
stararg_tyr)  sigtyr6  rN   r   s	          rP   stararg_handler-Lower.fold_call_args.<locals>.stararg_handlerg  s|    &^^E2
!*eoo>>J
J>,/,AC,Ajc ..4,A  C44T\\6JJCs   B)r   r   r=  r
   r  ranger  r    pysigri  r  r|   r  r   fold_argumentsdict)rN   fntyr   pos_argsr!   kw_args	tp_varargir	  r)  r  r  r  r  r  s   ` `            rP   fold_call_argsLower.fold_call_argsN  s    FKK0Ii9999,1#i.,A#C,Aq $/v#9,A#C CH =)?C+F G G *-Xy~~)FH)F:3 ~~c1)F  H, 'BBK ++E,4d7m,:,;,;	=G
 ?#CHs   D5Dc                    U R                   R                  U   nUR                  [        R                  :X  d   eU R
                  R                  R                  [        5      n[        UR                  5      n[        UR                  5      n[        [        U5      5       HR  nXaR                  ;   d  M  UR                  U   n[        U[        5      (       d  M:  [        R                   " U5      XF'   MT     ["        R$                  " UR                  /UQ76 nUR'                  UR(                  S9nU R+                  X2XQR,                  0 5      n	U R
                  R/                  [        U5      n
U
" U R0                  U	5        g)z
Lower a ir.Print()
)r	  N)r)   rh  r  r
   r   rD   ru  rv  r   listr|   r  r  constsr=  rR  r   r   r   replacer	  r  r!   r   r_   )rN   r   r  r  pos_tysr  r  r  	fixed_sigr  r  s              rP   rm  Lower.lower_printu  s    kk##D)%**,,,||**==eD sxx.		?s8}%AKKAeS))!&u!5GJ	 & $$S__?w?	%%CII%6	%%d;;K||((	:T\\7#rS   c                 ^   U R                   R                  U   nU R                  SR                  U5      5        [	        UR
                  [        R                  5      (       a  U R                  R                  5       $ U R                  UR                  R                  5      n[	        U[        R                  5      (       a  U R                  XBU5      nO[	        U[        R                  5      (       a  U R!                  XBU5      nO[	        U[        R"                  5      (       a  U R%                  XBU5      nOv[	        U[        R&                  5      (       a  U R)                  XBU5      nOD[	        U[        R*                  5      (       a  U R-                  XBU5      nOU R/                  XBU5      nUcM  UR
                  [        R0                  :X  a  U R                  R                  5       nO[3        SU R4                  S9eU R                  R7                  U R8                  XSR
                  U5      $ )Nz# lower_call: expr = {0}z2non-void function returns None from implementation)rr   rB   )r)   rh  r   r   r=  r  r
   PhantomrD   r   r   rl   r   ObjModeDispatcher_lower_call_ObjModeDispatcherExternalFunction_lower_call_ExternalFunctionExternalFunctionPointer#_lower_call_ExternalFunctionPointerRecursiveCall_lower_call_RecursiveCallFunctionType_lower_call_FunctionType_lower_call_normalvoidr   rB   rX  r_   )rN   r  r  r   r  r  s         rP   
lower_callLower.lower_call  s   KK))$/	3::4@Ai++U]];;<<//11{{499>>*dE334444TKCe445533D	JCe;;<<::I'C e112200YGCe0011//IFC ))$i@C
 ;$$

2ll224#L 
 ||  s4I4I!&( 	(rS   c           	         SSK Jn  U R                  5         U R                  R	                  5       nUR
                   Vs/ s H  ofR                  PM     nnU Vs/ s H  o`R                  U5      PM     nnU Vs/ s H  o`R                  U5      PM     n	n[        X5       H  u  pU R                  X5        M     [        X5       VVs/ s H+  u  pU R                  R                  XU R                  5      PM-     nnnU" U R                  5      R                  X5      nU R                  R                  X5      n[        R                   " U R"                  U5      nU R"                  R%                  U5       u  nnU   U H  nU R                  R'                  U5        M      U R                  R)                  U5        U R*                  R-                  U R"                  5        S S S 5        U   U R                  R/                  UR0                  R2                  U5      nUR4                  nU R                  R'                  U5        U H  nU R                  R'                  U5        M      [7        UR8                  5      (       a  UR9                  5         U R                  R)                  U5        U R"                  R;                  UR<                  5         U R*                  R-                  U R"                  5        S S S 5        UsS S S 5        sS S S 5        $ s  snf s  snf s  snf s  snnf ! , (       d  f       GNN= f! , (       d  f       NI= f! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nr   )ObjModeUtils)numba.core.pythonapir+  re   r]   
gil_ensurer|   r   r   r   r  r  from_native_valuera   load_dispatchercall_function_objargsr   is_nullr_   if_elsedecrefgil_releaserV   
return_excto_native_value
dispatcheroutput_typesr8  callablecleanupif_thenis_error)rN   r  r  r   r+  	gil_stater  rw   rx   	argvaluesvr  atypavalargobjscalleeret_objhas_exceptionthenorelseobjnativeoutputs                          rP   r  #Lower._lower_call_ObjModeDispatcher  s   5JJ))+	$(II.IqFFI.,45HqKKNH5.67h\\!_h	7-EAKK . &)%=?%=zt :://040@0@B%= 	 ?
 djj)99$I**226Cg>]]""=1^dF "CJJ%%c* # 

&&y1 ))$,,7  33OO00   

!!'*"CJJ%%c* # FNN++NN$ 

&&y1 \\))&//:NN--dll; ; 1  21! /57
? B ;:+  211sm   LL:L	2L"6M&<A%L(!
M&+C&M&L:7	M 	M&(
L7	2M&:
MM
M	M&&
M4c                    U R                  S5        U R                  XUR                  UR                  UR                  5      n[
        R                  " UR                  UR                  R                  UR                  R                  5      nU R                  R                  U R                  R                  U5      nU R                  R                  U R                  XeR                  U5      $ )Nz# external function)r   r  r|   r!   kwsr   ExternalFunctionDescriptorsymbolr  r  rD   declare_external_functionr_   r*   call_external_functionrx   )rN   r  r  r   r  r)   rl   s          rP   r  "Lower._lower_call_ExternalFunction  s    ./%%TYYTXX
 44KK--txx}}>||55LL)||22LL$
 	
rS   c                    U R                  S5        U R                  XUR                  UR                  UR                  5      nU R                  UR                  R                  5      nUR                  (       GaU  U R                  5         U R                  R                  5       n/ n/ n[        UR                  R                  UR                  U5       H  u  pnU	[        R                  :X  a[  U R!                  X5        U R                  R#                  XU R$                  5      nUR'                  U5        UR'                  U5        Mu  UR'                  U5        M     U R(                  R+                  U R,                  XWUR.                  5      nU H  nU R                  R1                  U5        M      U R                  R3                  U5        U$ U R(                  R+                  U R,                  XTUR.                  5      nU$ )Nz## calling external function pointer)r   r  r|   r!   rM  r   rl   r   requires_gilre   r]   r-  r  r  r
   ffi_forced_objectr  r.  ra   r  rD   call_function_pointerr_   cconvr3  r4  )rN   r  r  r   r  pointerr=  
newargvalspyvalsexptypgottyprA  rH  r  s                 rP   r!  )Lower._lower_call_ExternalFunctionPointer
  s   >?%%TYYTXX
 ,,tyy~~.OO

--/IJF(+DHHMM9>>,3)5$ U444KK-**66d&6&6C %%c*MM#&%%d+)5 ,,44g4::C 

!!#&  JJ""9- 
 ,,44g

C 
rS   c                 z   U R                  XUR                  UR                  UR                  5      nUR	                  UR                  5      nU R
                  R                  =(       d    [        nU R                  R                  nU" UR                  UR                  XuR                  S9nU R                  R                  R                  R                  U5      (       a3  U R
                  R!                  U R                  U R                  X45      n	U	$ U R
                  R#                  U R                  XU5      n	U	$ )N)abi_tagsuid)r  r|   r!   rM  get_overloadsrD   manglerr   r)   r_  rv   r`  r_   ru   r   
startswithcall_internalcall_unresolved)
rN   r  r  r   r  rec_ovrb  r_  mangled_namer  s
             rP   r#  Lower._lower_call_RecursiveCall7  s    %%TYYTXX
 ##INN3,,&&9/;;''v	(0jjB <<  %%00>>,,,,dkk9C 
 ,,..lwC 
rS   c                    U R                  S5        [        R                  " U5      nUR                  U5      (       d%  [	        SU S[        R
                  " U5       35      eU R                  XUR                  UR                  UR                  5      nU R                  UR                  UR                  R                  XE5      $ )Nz## calling first-class function typez%mismatch of function types: expected z	 but got )r   r
   r  check_signaturer   r$  r  r|   r!   rM  )_Lower__call_first_class_function_pointerftyperl   r   )rN   r  r  r   r  r  s         rP   r%  Lower._lower_call_FunctionTypeL  s    >?ooi(##I.."!F)E,>,>s,C+DFG G %%tyy$++txx
 77JJ		
 	
rS   c           	         U R                   nU R                  nU R                  U5      n[        R                  " U R                  U5      5      " XVUS9nUR                  n	SU 3U	l        Un
[        R                  " UU
R                  UR                  5      5      nUR                  [        R                  " Xi5      SS9nU u  pU   U R                  XU5      nUR                  X5      nUR                  UU5        SSS5        U   U
R                   R#                  UR                  UR$                  5      R'                  5       nUR)                  U	U5      nU
R                   R+                  XoUR                  UR$                  U5      u  nn[        R,                  " UUR.                  5         UR                   R1                  UU5        SSS5        UR                  UU5        SSS5        SSS5        UR3                  U5      $ ! , (       d  f       GN= f! , (       d  f       NS= f! , (       d  f       NJ= f! , (       d  f       NS= f)as  
Calls a first-class function pointer.

This function is responsible for calling a first-class function pointer,
which can either be a JIT-compiled function or a Python function. It
determines if a JIT address is available, and if so, calls the function
using the JIT address. Otherwise, it calls the function using a function
pointer obtained from the `__get_first_class_function_pointer` method.

Args:
    ftype: The type of the function.
    fname: The name of the function.
    sig: The signature of the function.
    argvals: The argument values to pass to the function.

Returns:
    The result of calling the function.
r8  jit_addr_of_FlikelyN)rD   r_   r   r   create_struct_proxyr   jit_addrr   alloca_onceget_value_typer  r2  r1  (_Lower__get_first_class_function_pointerr2  storerV   get_function_typer|   
as_pointerbitcastcall_functionif_unlikelyr<  return_status_propagateload)rN   rl  fnamer  r  rD   r_   fstructstructrt  ctxres_slotif_jit_addr_is_nullrF  rG  func_ptrr  lltystatuss                      rP   #__call_first_class_function_pointer)Lower.__call_first_class_function_pointer[  s   & ,,,,,,u%,,T[[-?@G
 ??&ug.&&w'*'9'9#//'JL &ooOOG. . 
 !NTBB#'ll85c8,	  }}66OOHH *,  #??8T:!mm99s' ((&//B%%==gvN Cc8,  !( ||H%%'   CB  ! sU   H:6H=
H:B'H).HH)%H:
H	H:
H&"H))
H7	3H::
Ic           
      d   SSK Jn  U R                  R                  U5      nU R	                  U5      nU R
                  R                  USSU-  S9n[        R                  " U R
                  USU-  S9nU R
                  R                  [        R                  " U R
                  U5      SS9 u  pU	   U R                  5         U R                  R                  5       nU R
                  R                  USS	U-  S9nU" U R                  U R
                  XS
S9nU R
                  R                  [        R                  " U R
                  U5      SS9   U R                  [         U S34U R"                  S9  S S S 5        U R                  R%                  U5      nU R
                  R'                  U R
                  R)                  X5      U5        U R                  R+                  U5        U R                  R-                  U5        S S S 5        U
   U R
                  R'                  U R
                  R)                  Xu5      U5        S S S 5        S S S 5        U R
                  R/                  U5      $ ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NS= f! , (       d  f       N\= f)Nr   )lower_get_wrapper_addressz
addr_of_%s)r   z
fptr_of_%sFrq  rh   zpyaddr_of_%signore)failure_modez function address is null)r   rB   ) numba.experimental.function_typer  rD   rv  r   r_   r  r   ru  r2  r1  re   r]   r-  r;  r   RuntimeErrorrB   long_as_voidptrrx  r{  r3  r4  r  )rN   rl  r  r  r  r  r  addrfptrrF  rG  r=  pyaddraddr1addr2s                  rP   "__get_first_class_function_pointer(Lower.__get_first_class_function_pointer  s6   N||**51,,u%||))'1/;u/E * G ""4<<(4(>@\\!!d3 " !/$! JJ113	33Q'51 4 3 2LL$,,!)+ \\))e<U * L))$%*G+D"E!G HH * &L 

2259""4<<#7#7#DdK

!!%(

&&y1- . ""4<<#7#7#CTJ 58 ||  &&L L . 5 sV   -J!2BI?$I.5BI?
J!6JJ!.
I<8I??
J		J!
J	J!!
J/c                    U R                  SR                  U5      5        U R                  SR                  U5      5        [        U[        R                  5      (       a  UR
                  R                  nO2U R                  XUR                  UR                  UR                  5      nUR                  nUb6  SSKJn  U" U5      nUR                  R                  nUR                  X5      n	OU R                   R                  X5      n	UR"                  (       a4  U R%                  UR
                  R&                  5      n
U
/[)        U5      -   nU	" U R*                  X@R,                  5      nU$ )Nz# calling normal function: {0}z# signature: {0}r   )resolve_dispatcher_from_str)r   r   r=  r
   r  rl   r|   r  r!   rM  r  numba.core.target_extensionr  targetdescrtarget_contextr   rD   recvrr   r   r  r_   rB   )rN   r  r  r   r  tnamer  disphw_ctxr  the_selfr  s               rP   r&  Lower._lower_call_normal  s   9@@FG+229=>dE3344iinnG))DKKG O.u5D%%44F&&t7D<<,,T=D?? ||DIINN3Hj4=0G4<<((3
rS   c                 $   UR                   S:X  a  U R                  XUR                  5      $ UR                   S:X  an  U R                  UR                  R
                  5      nUR                  (       a  U R                  XUR                  5      $ U R                  XUR                  5      $ UR                   S:X  Ga)  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      nU R                  R                  R                  UR                  5      nU R                  R                  U   nU R                  R                  Xg5      nU R                  R!                  U R"                  XEUR$                  S   5      nU" U R"                  U/5      n	U R                  R!                  U R"                  U	UR&                  U5      n	U	$ UR                   S:X  a  U R)                  X5      n	U	$ UR                   S:X  a  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
U R                  R+                  U R"                  XJ5      n	U R-                  X5        U	$ UR                   S:X  a  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
U R                  R/                  U R"                  XJ5      n	U R-                  X5        U	$ UR                   S;   Ga  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
U R                  R                  U   nU R                  R                  UR                   U5      nUR$                  u  nU R                  R!                  U R"                  XJU5      nU" U R"                  U45      n	U R                  R!                  U R"                  XR&                  U5      n	U	$ UR                   S	:X  Ga_  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
[1        U
[2        R4                  5      (       a=  U R                  R!                  U R"                  XJU
R6                  5      nU
R6                  n
[1        U
[2        R8                  5      (       a  X:X  d   eU R-                  X5        U$ U
R:                  R<                  nU R                  R?                  U5      n[2        R@                  " U[2        RB                  5      n[D        RF                  " U
R:                  U
5      nU R                  R                  S
U5      n[D        RF                  " XR:                  5      nU R                  R                  SU5      nU" U R"                  U45      n[I        URJ                  5       H  nU" U R"                  U45      nU R                  R/                  U R"                  UU5      n[L        RN                  " U R"                  U R"                  RQ                  U5      5         U RS                  [T        U RV                  S9  S S S 5        U R                  R+                  U R"                  UU5      nU R"                  RY                  UUU5      nM     U" U R"                  U45      nU R                  R/                  U R"                  UU5      n[L        RN                  " U R"                  U5         U RS                  [T        U RV                  S9  S S S 5        U R[                  U
R:                  U5        U$ UR                   S:X  Ga  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
[1        U[2        R\                  5      (       au  U R                  R!                  U R"                  XJUR^                  5      nU R                  Ra                  U R"                  UUR^                  5      n	U R-                  X5        U	$ U R                  Rc                  XRd                  5      nU R                  R                  Rg                  U
URd                  5      nUc  U R                  Ri                  5       $ U" U R                  U R"                  XURd                  5      n	U R                  R!                  U R"                  U	UU5      n	U	$ UR                   S:X  a  [D        RF                  " UU R                  UR                  R
                  5      [k        URl                  5      5      n U R                  R                  SU5      nU" U R"                  U R                  UR                  R
                  5      URl                  45      $ UR                   S:X  a  [D        RF                  " UU R                  UR                  R
                  5      U R                  URl                  R
                  5      5      nU R                  R                  SU5      nU" U R"                  U R                  UR                  R
                  5      U R                  URl                  R
                  5      45      $ UR                   S:X  aA  U R                  R                  U   nU Rs                  XUR                  URl                  U5      $ UR                   S:X  a  URt                   Vs/ s H  nU R                  UR
                  5      PM      nnURt                   Vs/ s H  nU R                  UR
                  5      PM      nn[w        UUU5       VVVs/ s H/  u  nnnU R                  R!                  U R"                  UUU5      PM1     nnnnU R                  Ry                  U R"                  UU5      nU R-                  X5        U$ UR                   S:X  Ga  URt                   Vs/ s H  nU R                  UR
                  5      PM      nnURt                   Vs/ s H  nU R                  UR
                  5      PM      nn[1        U[2        Rz                  5      (       a  [w        UUR2                  U5       VVVs/ s H/  u  nnnU R                  R!                  U R"                  UUU5      PM1     nnnnU R                  Ry                  U R"                  [2        R|                  " UR2                  5      U5      nU R-                  X5        U$ [w        UU5       VVs/ s H8  u  nnU R                  R!                  U R"                  UUUR~                  5      PM:     nnnU R                  R                  U R"                  UU5      $ UR                   S:X  a  URt                  S S S2   n U  Vs/ s H  nU R                  UR
                  5      PM      nnU  Vs/ s H  nU R                  UR
                  5      PM      nn[w        UU5       VVs/ s H8  u  nnU R                  R!                  U R"                  UUUR~                  5      PM:     nnnU R                  R                  U R"                  UU5      $ UR                   S:X  Ga  URt                  n / / n"n!/ / n$n#U  H  u  n%n&U R                  U%R
                  5      n'U R                  U%R
                  5      n(U R                  U&R
                  5      nU R                  U&R
                  5      n)U!R                  U'5        U"R                  U5        U#R                  U(5        U$R                  U)5        M     U R                  R                  U R"                  U[        [w        U#U$5      5      [        [w        U!U"5      5      5      $ UR                   S:X  a  U R                  UR                  R
                  5      nU R                  UR                  R
                  5      n
U R                  R!                  U R"                  XJU5      nU R-                  X5        U$ UR                   S:X  a  [        S5      eUR                   S:X  a  U R                  R                  U5      $ UR                   S:X  a  U R                  R                  U5      $ UR                   U R                  R                  ;   a+  U R                  R                  UR                      " X5      n	U	$ [o        U5      e! , (       d  f       G
N= f! , (       d  f       G
N"= f! [n         aR    URp                  c  e U R                  R                  U   nU Rs                  XUR                  URp                  U5      s $ f = fs  snf s  snf s  snnnf s  snf s  snf s  snnnf s  snnf s  snf s  snf s  snnf )Nbinopinplace_binopunaryr   r2  
pair_firstpair_second)getiteriternextexhaust_iterr  r  r   getattrstatic_getitemtyped_getitemr  build_tuple
build_list	build_setr'   	build_maprX  phizPHI not strippednullundef)Hr3  r  ro   r   r  r   mutableimmutable_fnr   r8  rD   ru  rv  r)   rh  r   rX  r_   r|   r  r(  r  r  r  r=  r
   rb  rZ  r  iterator_typer  get_constant_undefPairrY  r   r   r  countr   r}  not_r   
ValueErrorrB   insert_valuer3  BoundFunctionthisget_bound_functionget_getattrr{  resolve_getattrr   r  r"   ri  rk  r  r1   r  
make_tupleLiteralListTupledtyper  r  r  r  r  r   get_constant_nullspecial_ops)*rN   r  r  r  r  r  func_tyr   r  r  r  ftycastvalitemtytuppairtygetiter_siggetiter_impliternext_sigiternext_impliterobjr  pairis_validitemcastedattrtyitemvalsitemtystotyfromtyr  r1   r@   r6  	key_typesvalue_typeskr?  rq  keytypevaltypes*                                             rP   r  Lower.lower_expr  s   77g##E99WW'++dhhmm,C{{''TWW== ''T5F5FGGWW,,tzz/C++djjoo.Cll11DDTWWMG--d3I<<,,W@D,,##DLL#INN1<MNCt||cU+C,,##DLL#$-$9$95BCJWW//%.CJWW$,,tzz/CTZZ__-B,,))$,,@CKK#JWW%,,tzz/CTZZ__-B,,**4<<ACKK#JWW//,,tzz/CTZZ__-B--d3I<<,,TWWi@DNNESll''csCGt||gZ0C,,##DLL#7L7L$)+CJWW&,,tzz/CTZZ__-B"enn--ll''crwwGWW "eoo..{"{B$
%%00F,,11%8CZZ6F **2+;+;R@K<<44Y5@BL!++F4D4DEL LL55j6BDM"4<<#8G4::&$T\\G:><<33DLL48&B(()-):):8)DF))*$(()CF ||..t||/3V=ll//T1= ' !z:D||//04f>H$$T\\8<%%jdhh%? = KK(('2JWW	!,,tzz/CTZZ__-B%!4!455 **4<<%**Mll55dllF6;jjBE'
||//II>44DDREIYYP <<<7799t||T\\2DIINC ll''c65I
WW((((DJJOO,

+I
E ||001A9MDLL!\\$**//:DJJGI I WW'((DJJOO,DJJOO,I
 <<,,_iHDt||DJJOO'DTZZ__5'7 8 8WW	!--d3I%%e4::tzz&/1 1 WW%6:jjAjQVV,jHA48JJ?Jqt{{166*JG?14Xug1NP1N-Cv ))$,,VTJ1N  P,,))$,,xHCKK#JWW$6:jjAjQVV,jHA48JJ?Jqt{{166*JG?%!2!233585;;9@6BC6B 1T6 !LL--dllCN6B  C ll--dll.3kk%++.F.68 E'
 038W/EG/EV !LL--dllC.3kk;/E  G ||..t||UHMMWW#JJtt$E6;<eQVV,eH<49:Eqt{{166*EG: ,/x+AC+AKC ))$,,V*/++7+A  C <<))$,,xHHWW#JJEr&D%'{I1ll166*++aff-ll166*++aff-C c"  )""7+  <<))$,,*.s9k/J*K*.s4/@*AC C WW,,tzz/CTZZ__-Bll''cuEGKK'NWW 233WW<<11%88WW <<11%88WW000,,**4773D?CJ!$''wF F =<Z ' E>>) !KK11$7	))%tzz*...)E EE. B?P B?CG =:Cs}   $AF/AF)AAF; 9%AH.%AH&6AH$9%AH+.%AH06AH50?AH<?%AI*%AI ?AIF
AF&	F)
AF8F;AAHHAHc                     XR                   ;   a  gXR                  ;  d  U R                  (       a   U R                  X5      nX0R                   U'   gg)zD
Ensure the given variable has an allocated stack slot (if needed).
N)r>   r!  r  alloca)rN   r   rF  ptrs       rP   r9  Lower._alloca_var  sG     ;; 333++++d+C #KK	 ,rS   c                     U R                   (       d"  XR                  ;  d   eXR                  ;  d   eXR                  ;  a   U R	                  XR                  U5      5        U R                  U   $ )z-
Get a pointer to the given variable's slot.
)r  r"  r!  r>   r9  r   )rN   r   s     rP   getvarLower.getvar  sc     **5555599999{{" T;;t#45{{4  rS   c                    XR                   ;   a   U R                  (       d  U R                   U   $ U R                  U5      nXR                  R                  ;   aE  [
        R                  " U R                  5         U R                  R                  U5      sSSS5        $ U R                  R                  U5      $ ! , (       d  f       g= f)z"
Load the given variable's value.
N)	r"  r  r  r2   	arg_namesr   r   r_   r  )rN   r   r  s      rP   r   Lower.loadvar  s     )))$2M2M))$//kk$ <<)))++DLL9||((- :9 <<$$S)) :9s   :B::
Cc                    U R                  U5      nU R                  X$5        X R                  ;   a   U R                  (       d  XR                  U'   gUc"  U R                  U5      nU R                  XE5        U R                  U5      nUR                  UR                  R                  :w  a  SR                  UUUUS9n[        U5      eUb  [        R                  " U R                  5         U R                  R                  X5        SSS5        U R                   nU R"                  R%                  U5      n	U R"                  R'                  U	5      n
U R"                  R(                  U   nU R                  R+                  U R                  XbXUR,                  UUS9  gU R                  R                  X5        g! , (       d  f       N= f)z*
Store the value into the given variable.
NzNStoring {value.type} to ptr of {ptr.type.pointee} ('{name}'). FE type {fetype})r8  r  rF  r   )r   lltypesizerj   	datamodelrN  )r   r9  r!  r  r"  r   r3  r  rZ  pointeer   AssertionErrorr   r   r_   rx  rI   rD   rv  get_abi_sizeofdata_model_managermark_variablerj   )rN   r8  r   rN  rF  oldr  rr   rB   r  sizeofr  s               rP   rU  Lower.storevar  s    T"& ...//+0""4(~ ll4(F( ++d#CzzSXX---67=vEBEEKCG 8> 8I 
 %S))
 !//=LL&&u2 >mm44V<44V< LL;;FC	,,T\\34:25((i4: - <
 ""5. >=s   ,F::
Gc                 H   U R                  U5      nXR                  ;  a;  U R                  (       d*  XR                  ;   a  U R                  R	                  U5        U R                  X5        XR                  ;   a2  U R                  (       d!  U R                  U   nU R                  X#5        gU R                  U5      nU R                  X R                  R                  U5      5        U R                  R                  [        UR                  R                  S5      U5        g)z
Delete the given variable.
N)r   r"  r  r!  discardr9  r3  r  r_   r  rx  r   rZ  r  )rN   r   rF  llvalr  s        rP   rx  Lower.delvar*  s     T" ...//111**2248 	&)))$2M2M**40EKK&++d#CKK 1 1# 67LLx(8(8$?ErS   c                     U R                   R                  U5      nU R                   R                  U   nU R                  XUS9$ )N)r  )rD   rv  r  alloca_lltype)rN   r   rZ  r  r  s        rP   r  Lower.allocaC  s@    ,,T2LL33D9	!!$)!DDrS   c           
      `   UR                  S5      (       + n[        R                  " U R                  UUSS9nU(       ao  XR                  R
                  ;  aV  U R                  R                  U5      nU R                  R                  U R                  XQX&U R                  R                  US9  U$ )N$F)r   zfill)r   r  r  rj   r  )rc  r   ru  r_   r2   r  rD   r  r   r  rB   rj   )rN   r   r  r  
is_uservaraptrr  s          rP   r   Lower.alloca_lltypeH  s    --
""4<<(,E;  <<11144V<,,T\\44:26((--7@ - C rS   c                     U R                   R                  (       d  g U R                   R                  R                  U R                  X5        g rU   )rD   r   nrtr  r_   rN   r  r  s      rP   r  Lower.incref\  s0    ||&&c7rS   c                    U R                   R                  (       d  g [        R                  " U R                  5         U R                   R
                  R                  U R                  X5        S S S 5        g ! , (       d  f       g = frU   )rD   r   r   r   r_   r	  r3  r
  s      rP   r3  Lower.decrefb  sP    ||&&
 ''5LL##DLL#; 655s   1A77
B)r"  r5  r!  rU   ).r  r  r  r  r   r   rM   r
  r  r  r   r   r   rj  r  r}  r  r  rS  r  r  r  r  r  rm  r(  r  r  r!  r#  r%  rk  rw  r&  r  r9  r  r   rU  rx  r  r   r  r3  r  __classcell__)r  s   @rP   r  r  `  s    ..N.
 K K%$N$LJ2X:>*
E&OL06dL4D L(,?%N$:((T>@
+Z*
9&v&'P8p(d$ !*$,/\F2E
(8< <rS   r  c                 |     [         R                  " U 5      $ ! [         a    [         R                  " U 5      s $ f = f)zbReturns a Literal instance if the type of value is supported;
otherwise, return `Omitted(value)`.
)r
   r   r   r  ro  s    rP   r  r  m  s4    $}}U## $}}U##$s     ;;)/collectionsr   r   rs  rm   	functoolsr   llvmlite.irr[  r   r   
numba.corer   r	   r
   r   r   r   r   r   r   r   r   r   numba.core.errorsr   r   r   r   r   r   numba.core.funcdescr   numba.core.environmentr   numba.core.analysisr   r   numba.misc.firstlinefinderr   numba.misc.coverage_supportr   r    objectr$   r  r  rZ   rS   rP   <module>r     sx    /     +& & & &6 6 0 . A A A (;<D! D!N
J<I J<Z($rS   