
    ܙd                     ,   d dl mZmZ d dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlm Z  d dl!m"Z" d d	l#m$Z$m%Z% d d
l&m'Z'  edd          Z( G d de)          Z* G d de*          Z+d Z,dS )    )
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_VarArgItem)varargindexc                       e Zd ZdZddZed             Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZddZd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd ZdS )	BaseLowerz
    Lower IR to LLVM
    Nc                 d   || _         || _        t          j        |j                                                  | _        || _        |j        | _        || _        t          j
                                        | _        | j                             | j        j                  | _        t!          j        | j                  | _        i | _        i | _        i | _        t-          | j                                                  | _        d| _        |                    | j        | j                  | _        | j        j        r| j        j        nt<          j        }|                                  | _!        | j        j"        } || j        |j        j#        ||          | _        | $                                 d S )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filenameinit)selfrB   r,   r'   r0   r2   dibuilderclsr+   s           3lib/python3.11/site-packages/numba/core/lowering.py__init__zBaseLower.__init__   sx   ogn&:&:&<&<==%4 !-99;;
 l33DK4KLL *4;77 DK,,..//
 ((TX04 ) = =
  <86..&5 	
 2244*8%T[/6{/C,36EG G G 			    c                     | j         j        S N)rB   	call_convrK   s    rM   rR   zBaseLower.call_convK   s    |%%rO   c                     d S rQ    rS   s    rM   rJ   zBaseLower.initO   s    rO   c                     | j         dS | j                            | j                  | _         | j                            | j                  | _        | j        j        | _        | j        j        | _        dS )ze
        Init the Python API and Environment Manager for the function being
        lowered.
        N)	pyapirB   get_python_apibuilderget_env_managerenv_managerenv_bodyenv_ptrenvargrS   s    rM   
init_pyapizBaseLower.init_pyapiR   sd    
 :!F\00>>
  <77EE(1&.rO   c                 z   | j         j                            | j         j        j        dz             }| j        j        r}| j         j        j        }t          |          }|%|dz
  }| j         j                            |          }n6d| j         j        j         d}t          j
        t          |                     |S )N   z$Could not find source for function: z+. Debug line information may be inaccurate.)r0   r@   with_linenolinerB   rC   func_idfuncr   warningswarnr   )rK   rG   fnoptional_lnooffsetmsgs         rM   rF   zBaseLower._compute_def_location`   s     <#//0@0E0IJJ<( 	:%*B5b99L'%)<+77??,,.3, , , 3C88999rO   c                 H   d| _         | j                            | j        j        | j        j        | j        j        | j        j        | j	        j
                   | j        j        j        }| j        j        o| j        j         }|rd|vr|                    d           dS dS dS )z4
        Called before lowering all blocks.
        N)functionqualnameargnamesargtypesrc   alwaysinlinenoinline)rW   r   mark_subprogramrY   rm   r'   rn   argsrp   rG   rc   
attributesr5   rH   add)rK   ru   
full_debugs      rM   	pre_lowerzBaseLower.pre_lowers   s     
&&0E040D040@040D,0M,>	 	' 	@ 	@ 	@ \*5
Z)P$*2P.P
 	'.
::NN:&&&&&	' 	'::rO   c                 8    | j                                          dS )z5
        Called after all blocks are lowered
        N)r   finalizerS   s    rM   
post_lowerzBaseLower.post_lower   s     	!!!!!rO   c                     dS )z1
        Called before lowering a block.
        NrU   rK   blocks     rM   	pre_blockzBaseLower.pre_block         rO   c                     dS )z0
        Called after lowering a block.
        NrU   r}   s     rM   
post_blockzBaseLower.post_block   r   rO   c                 n    | j                             | j        ||||| j        j        j                   d S )Nr@   	func_name)rR   return_dynamic_user_excrY   r0   rd   r   )rK   	exc_classexc_argsnb_typesr@   s        rM   return_dynamic_exceptionz"BaseLower.return_dynamic_exception   sC    ..L)Xxt|3= 	/ 	
 	
 	
 	
 	
rO   c                 l    | j                             | j        |||| j        j        j                   dS )z+Propagate exception to the caller.
        r   N)rR   return_user_excrY   r0   rd   r   rK   r   r   r@   s       rM   return_exceptionzBaseLower.return_exception   sC     	&&L)Xt|3= 	' 	
 	
 	
 	
 	
rO   c                 l    | j                             | j        |||| j        j        j                   dS )z5Set exception state in the current function.
        r   N)rR   set_static_user_excrY   r0   rd   r   r   s       rM   set_exceptionzBaseLower.set_exception   sC     	**L)Xt|3= 	+ 	
 	
 	
 	
 	
rO   c                     | j                             | j                  }| j                             | j        |           dS )z7Emit a pointer to hold the Environment object.
        N)rB   get_env_namer'   declare_env_globalr(   )rK   envnames     rM   emit_environment_objectz!BaseLower.emit_environment_object   s;     ,++DK88''W=====rO   c           
      X   |                                   | j        "d | _        |                     | j                   n|                     |           | _        | j        j        | _        | j                            |            | j                            |            | j        j	        r| j        
                    |            t          j        rt          d| j        z                      dd                     t          j        r	 ddlm} ddlm} ddlm} ddlm} t           || j                                         |             | |            	                               n3# t4          $ r d
}t7          |          w xY wt          | j                   t          d           | j        j        r-| j        &t=          j        | j         | j        | j                   | j        !                    | j        | j"                   | j"        #                    | j                   d S )NzLLVM DUMP %sP   -r   )	highlight)	LlvmLexer)Terminal256Formatter)by_colorscheme)stylez0Please install pygments to see highlighted dumpszP================================================================================)rB   r'   )$r   r1   genlowerlower_normal_functionr'   GeneratorLowergentypelower_init_funclower_next_funchas_finalizerlower_finalize_funcr   	DUMP_LLVMprintcenterHIGHLIGHT_DUMPSpygmentsr   pygments.lexersr   pygments.formattersr   numba.misc.dump_styler   r(   __repr__ImportError
ValueErrorrB   
enable_nrtr   remove_unnecessary_nrt_usagerm   post_loweringr,   add_ir_module)rK   r   lexerr   r   rk   s         rM   lowerzBaseLower.lower   sh   $$&&&& DM&&t{3333 //55DM=0DLM))$///M))$///|) 811$777 	>DK/77C@@AAA% #
*222222BBBBBBHHHHHHDDDDDD))DK$8$8$:$:EEGG$8$8.<n.>.>%@ %@ %@A A B B B B # * * *LC$S//)* dk"""(OOO <" 	Mt':'B8AE@DM M M M
 	""4;=== 	""4;/////s   A#E+ +Fc                 z    | j                             | j        | j        j        | j                  | _        | j        S rQ   )rR   decode_argumentsrY   r'   rp   rm   fnargsrS   s    rM   extract_function_argumentsz$BaseLower.extract_function_arguments   s8    n55dl6:k6J6:mE E {rO   c                 l   |                      |           |                                  |                                 }t          j        | j                  5  | j                            |           | j                            | j        | j	                            ddd           dS # 1 swxY w Y   dS )z/
        Lower non-generator *fndesc*.
        N)
setup_functionr   lower_function_bodyr   suspend_emissionrY   position_at_endbranchr:   r?   )rK   r'   entry_block_tails      rM   r   zBaseLower.lower_normal_function   s     	F### 	'')))3355
 '55 	< 	<L(()9:::LDM :;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AB))B-0B-c                 4   | j         D ])}d|z  }| j                            |          | j        |<   *|                                  | j        j        }|                     d                    | j	        j
                             t          | j                                                   D ]Y\  }}| j        |         }| j                            |           |                     d|            |                     |           Z|                                  |S )zP
        Lower the current function's body, and return the entry block.
        zB%sz# function begin: {0}z# lower block: )r.   rm   append_basic_blockr:   rx   rY   basic_blockdebug_printformatr'   r7   sortedr/   r   lower_blockr{   )rK   rj   bnamer   r~   bbs         rM   r   zBaseLower.lower_function_body   s$   
 k 	J 	JFFNE"&-"B"B5"I"IDK<3077K#% % 	& 	& 	& $DK$5$5$7$788 	$ 	$MFEV$BL((,,,7v77888U####rO   c                 F   |                      |           |j        D ]n}|j        | _        t          t          | j                  }t          d|| j        |          5  |                     |           ddd           n# 1 swxY w Y   o|                     |           dS )z(
        Lower the given block.
        r@   zlowering "{inst}" at {loc})instr@   errcls_N)r   bodyr@   r   r   r   
lower_instr   )rK   r~   r   defaulterrclss       rM   r   zBaseLower.lower_block  s     	uJ 	& 	&DxDH#Mtx@@@M"#?d'+xH H H & &%%%& & & & & & & & & & & & & & & 	s   B  B	B	Fc                     | j         r8| j                            | j        | j         j        | j        | j        |           | j                            | j        | j        | j        | j        |           dS )zP
        Create CPython wrapper(s) around this function (or generator).
        )release_gilN)r   rB   create_cpython_wrapperr,   gendescr9   call_helperr'   )rK   r   s     rM   r   z BaseLower.create_cpython_wrapper   s     = 	IL//040E04$:J<G 0 I I I 	++DL$+,0Hd6F8C 	, 	E 	E 	E 	E 	ErO   c                     | j         rt          d          | j                            | j        | j        | j        | j                   dS )z8
        Create C wrapper around this function.
        z(generator as a first-class function typeN)r   r   rB   create_cfunc_wrapperr,   r'   r9   r   rS   s    rM   r   zBaseLower.create_cfunc_wrapper-  sY     = 	O"#MNNN))$,*.(D4D	F 	F 	F 	F 	FrO   c                    | j                             | j        |          | _        | j        j        r:| j        j        }d|vr*|                    d           |                    d           | j                            d          | _	        t          | j	                  | _        | j                            | j                  | _        d S )Nrq   optnonerr   entry)rB   declare_functionr(   rm   r5   dbg_optnoneru   rv   r   entry_blockr   rY   rR   init_call_helperr   )rK   r'   attrsets      rM   r   zBaseLower.setup_function6  s    55dk6JJ:! 	(m.GW,,I&&&J'''=;;GDD !122>::4<HHrO   c                 &    | j         j        |         S rQ   )r'   typemap)rK   varnames     rM   typeofzBaseLower.typeofB  s    {"7++rO   c                     t           j        r2| j                            | j        d| j        j         d|            d S d S )Nz
DEBUGJIT [z]: )r   	DEBUG_JITrB   r   rY   r'   rn   )rK   rk   s     rM   r   zBaseLower.debug_printE  s`     	KL$$I4;+?IICIIK K K K K	K 	KrO   c                 H   t          j        |          | j        j        |         f}| j                                        |                     |          f}t          j        t           j	        g|R  }| j        
                    t          |          } || j        |           dS )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   rB   get_dummy_valueloadvarr   	signaturenoneget_functionr   rY   )rK   rk   r   argtysrt   sigimpls          rM   print_variablezBaseLower.print_variableJ  s     M#K(

 L((**LL!!
 uz3F333|((44T\4     rO   rQ   )NN)F)__name__
__module____qualname____doc__rN   propertyrR   rJ   r_   rF   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   rO   rM   r#   r#      s        , , , ,\ & & X&  / / /  &' ' '," " "  
  

 
 
 

 
 
 

 
 
 
> > >+0 +0 +0Z  < < <"     2  E E E EF F F
I 
I 
I, , ,K K K
! ! ! ! !rO   r#   c                       e Zd Zej        Z fdZed             Zd Z fdZ	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd&dZd Zd Z d Z!d Z"d Z#d&d Z$d! Z%d" Z&d&d#Z'd$ Z(d% Z) xZ*S )'Lowerc                 p    t                                                       |                                  d S rQ   )superrJ   _find_singly_assigned_variable)rK   	__class__s    rM   rJ   z
Lower.inite  s,    ++-----rO   c                 F    | j         dS | j         j        o| j         j         S )a  Flags 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.NF)r5   r   rH   rS   s    rM   _disable_sroa_like_optzLower._disable_sroa_like_optj  s)     :5z#JDJ,J(JJrO   c                 R   | j         }|j        }t                      }| j         j        j        sit          |          }t          |          }t          t                    }|j        	                                D ]%\  }}|D ]|         
                    |           &t          t                    }	|j        	                                D ]%\  }}|D ]|	         
                    |           &|D ]|vrt          |                   dk    rt          |	                   dk    rj|         \  }
| j        |
                             t          j                  }fd|D             }t          |          dk    r|
                               || _        i | _        d S )Nra   r   c                 4    g | ]}|j         j        k    |S rU   )targetname).0stmtvars     rM   
<listcomp>z8Lower._find_singly_assigned_variable.<locals>.<listcomp>  s2     #? #? #?D&*k&6#&=&= $(&=&=&=rO   )r0   r.   setrd   is_generatorr   r   r   defmapr/   rv   usemaplen
find_instsr   Assign_singly_assigned_vars_blk_local_varmap)rK   r0   r.   savuse_defsalloca_varsvar_assign_mapblkvlvar_use_mapdefblkassign_stmtsassignsr  s                @rM   r   z$Lower._find_singly_assigned_variableu  s   ,ee|#0 	)'//H)&11K )--N#?0022 1 1R 1 1C"3'++C00001 &c**K#?0022 . .R . .C$((----. & ) )k))c.2E.F.F!.K.K;s+,,11 $2##6'+{6':'E'Ebi'P'P#? #? #? #?L #? #? #?w<<1,,GGCLLL%("!#rO   c                    ddl m} t          t          |                               |           || _        || j        k    r| j        | j                 }| j        	                    |           t                      }| j                                        D ]G}|                    t          j                  D ]%}|j        |vr|                    |j                   &H|D ]-}|                     |          }|                     ||           .|                    d          D ]}t+          j        t*          j        | j        |j                  }	|	ot5          |	t          j                  rU|	j        |j        u rGt5          |j        t          j                  r(| j        |j        j                 }
d|
i| j        _          d S d S )Nr   )ehcall)opr  )!numba.core.unsafer  r   r   r   _cur_ir_blockr?   r:   rY   r   r  r.   valuesr  r   Delvaluerv   r   _alloca_var
find_exprsr   guardget_definitionr0   re   
isinstanceGlobalexception_check
terminatorBranchtruebr_in_try_block)rK   r~   r  r   	all_namesxr  fetyper  defn	targetblkr   s              rM   r   zLower.pre_block  s   ((((((eT$$U+++"DM!!
 T]+BL((,,,I++-- / /))"&11 / /Awi//!ag.../ " / /T**  v.... $$$// 	 	D>'ty D JtRY$?$?:!333!%"2BI>> $(K0@0G$H	 7?	5J2	 	rO   c                 8    	 | j         `d S # t          $ r Y d S w xY wrQ   )rY   r.  AttributeErrorr}   s     rM   r   zLower.post_block  s7    	*** 	 	 	DD	s    
c                    | j                             | j        | j        j                   |                     t          |                     t          |t          j	                  r| 
                    |j        j                  }|                     ||          }d }t          |j        t          j                  r9| j                             | j        | j        j                   |j        j        dz   }|                     ||j        j        |           d S t          |t          j                  r|                     |j        j                  }| j        |j                 }| j        |j                 }| 
                    |j        j                  }| j                            | j        ||t6          j                  }	|	j        t<          j                            d          k    sJ d|	j        z              | j                             |	||           d S t          |t          j!                  r.| j        |j                 }
| j        "                    |
           d S t          |t          j#                  r| j$        r| j%        &                    |            d S |                     |j        j                  }| 
                    |j        j                  }| j'        j(        }t          |t6          j)                  r$| j*        +                    | j        |||           d S ||k    sJ d,                    ||                      | j        -                    | j        ||          }| j*        .                    | j        |           d S t          |t          j/                  rd S t          |t          j0                  r| j'        j1        |         }|J 	 | j        2                    d|          }|                     |j        j                  }
|                     |j        j                  }| 
                    |j        j                  }| j                            | j        |||j3        d                   } || j        |
|j        |f          S # th          $ r* | 5                    |j        |j6        |j        |          cY S w xY wt          |t          j7                  r| 8                    |           d S t          |t          j9                  r=| j'        j1        |         }|J | 5                    |j        |j        |j        |          S t          |t          j:                  r=| j'        j1        |         }|J | 5                    |j;        |j<        |j        |          S t          |t          j=                  rQ|                     |j        j                  }
|                     |j        j                  }| 
                    |j        j                  }| 
                    |j        j                  }| j'        j1        |         }|J t|          j?        }| j        j@        A                    |          }|B                    | j        j@        |j3        i           }| j        2                    ||          }||j3        d         k    sJ | j                            | j        |||j3        d                   } || j        |
|f          S t          |t          jC                  r| D                    |j                   d S t          |t          jE                  r|                     |j        j                  }
|                     |j        j                  }| j'        j1        |         }| 
                    |j        j                  }| 
                    |j        j                  }|J |j3        d         |k    sJ | j        F                    |jG        |          }| j                            | j        |||j3        d                   } || j        |
|f          S t          |t          jH                  r| I                    |           d S t          |t          jJ                  r| K                    |           d S t          |t          jL                  r| M                    |           d S t          |t          jN                  r| O                    |           d S ti          t;          |                    )Nra   )argidxzcond is not i1: %sz)type '{}' does not match return type '{}'static_setitem   r   )Pr   mark_locationrY   r@   rc   r   strr(  r   r  r   r  r  lower_assignr#  ArgrG   r!   storevarr,  r   condr:   r-  falsebrrB   castr
   booleantypellvmliteIntTypecbranchJumpr   Returnr1   r   return_from_generatorr'   restypeOptionalrR   return_optional_valuer   get_return_valuereturn_valuePopBlockStaticSetItem	calltypesr   rt   NotImplementedErrorlower_setitem	index_varPrintlower_printSetItemStoreMapdctkeyDelItemoperatordelitemtyping_contextresolve_value_typeget_call_typer"  delvarSetAttrget_setattrattrDynamicRaiselower_dynamic_raiseDynamicTryRaiselower_try_dynamic_raiseStaticRaiselower_static_raiseStaticTryRaiselower_static_try_raise)rK   r   tyvalr7  r?  trflcondtypredr  otyretvalr   r   r#  valuetyr!   targettyindextyr  fnopcallsigs                          rM   r   zLower.lower_inst  sT   $$T\48=AAAT###dBI&& E	2T[-..B##B--CF $*bf-- .,,T\4=;MNNN)A-MM#t{/M?????bi(( y	2<<	//DT[)BT\*B[[00F<$$T\4OOD9 3 3A 6 6666%	1 766L  r2.....bg&& n	2[-FL'''''bi(( j	2" 33D999,,tz//C++djo..C$B"en-- 44T\2sCPPP999;BB3KK 99\224<SIIFN''f=====bk** Y	2Db.// V	2-d3I(((G|001A9MM
 dk&677TZ_55++djo66))$,w*3.*;= =tDL64:u*EFFF ' A A A))$+t~*.*iA A A A AA bh'' F	2T"""""bj)) C	2-d3I(((%%dk4:tz&/1 1 1 bk** =	2-d3I(((%%dh$*iPPPbj)) 8	2\\$+"233FLL11E{{4;#344Hkk$*/22G-d3I(((!B<.AA"EED((+Y^R G <,,T7;;Dy~a00000L%%dlE7&/nQ&79 9E 4vuo666bf%% !	2KK
#####bj)) 	2\\$+"233FLL11E-d3I{{4;#344Hkk$*/22G(((>!$0000<++DIyAAD L%%dlE7&/nQ&79 9E 4vuo666bo.. 	2$$T*****b011 
	2((.....bn-- 	2##D)))))b/00 	2''----- &d4jj111s   R 1SSc                    |                      |j                  }|                      |j                  }|                      |j                  }|                     |j                  }|                     |j                  }	|                     |j                  }
t          j        }| j        j                            |          }|                    | j        j        |j	        i           }| j        
                    ||          }t          |t          j                  r(| j                            | j        |||j                  }n1t          j        } ||           ||j	        d                   k    sJ | j                            | j        ||
|j	        d                   }| j                            | j        ||	|j	        d                   } || j        |||f          S )Nr   ra   r9  )r   r  r   r\  setitemrB   r^  r_  r`  rt   r   r(  r
   rK  rA  rY   rC  	unliteral)rK   
target_varrT  	value_varr   r  r#  r!   rv  ru  rw  r  rx  ry  r   uls                   rM   rS  zLower.lower_setitemT  s   jo..Y^,,Y^,,;;z//++in--++in--|*==bAA$$L'
 
 |((w77 h// 	9\&&t|VX'/}6 6FF B2h<<22inQ&7#8#88888!!$,w"+."35 5!!$,w"+."35 5 tDL65%"8999rO   c                 0    |                      |           d S rQ   )rl  rK   r   s     rM   rh  zLower.lower_try_dynamic_raises  s     	##D)))))rO   c                    |j         }g }g }|D ]}t          |t          j                  rK|                     |j                  }|                     |j                  }|                     ||           nd }|}|                    |           |                    |           | 	                    |j
        t          |          t          |          | j                   d S Nr   )r   r(  r   Varr   r  r   increfappendr   r   tupler@   )rK   r   r   rt   r   exc_argtyprn  s           rM   rf  zLower.lower_dynamic_raisex  s    = 
	 
	G'26** kk',//ll7<00C%%%%OOC   KK%%dneDkk&+Hoo48 	& 	E 	E 	E 	E 	ErO   c                     |j         |                     d | j                   d S |                     |j         |j        | j                   d S r  )r   r   r@   r   r  s     rM   rj  zLower.lower_static_raise  sR    >!!!$DH!55555!!$.$-TX!NNNNNrO   c                     |j         |                     d | j                   d S |                     |j         |j        | j                   d S r  )r   r   r@   r   r  s     rM   rl  zLower.lower_static_try_raise  sR    >!t22222t~t}$(KKKKKrO   c                    |j         }t          |t          j        t          j        t          j        f          r>| j                            | j        ||j                   }| 	                    ||           |S t          |t          j
                  r|                     ||          S t          |t          j                  rn|                     |j                  }|                     |j                  }| j                            | j        |||          }| 	                    ||           |S t          |t          j                  r!t%          j        | j                  5  |                     d|j        z             }t          |t(          j                  rl|j         }| j        j        }	|	                    |          }
| j                            | j        |
|          }| j                            | j        ||
|          }n4| j        |j                 }| j                            | j        |||          }| 	                    ||           |cd d d            S # 1 swxY w Y   nHt          |t          j                  r.|                     ||          }| 	                    ||           |S t9          t;          |          |          )Nzarg.)r#  r(  r   Constr)  FreeVarrB   get_constant_genericrY   r  Expr
lower_exprr  r   r  r   rA  r=  r   r   r
   Omittedr^  !resolve_value_type_prefer_literalr   r!   Yieldlower_yieldrR  rC  )rK   rm  r   r#  resrn  rs  argtypyvaltyctxvaltyconsts               rM   r<  zLower.lower_assign  s   
ebh	2:>?? +	,33DL"49KA ACKKC   Jrw'' %	??2u---rv&& "	,,uz**C++ej))C,##DL#sB??CKKC   Jrv&& 	 +DL99   FUZ$788eU]33 J!KE L7E!CCEJJE L==eU E ,++DL%KKCC+ek2C,++DL#ubIICB$$$%                ( rx(( 	""2u--CKKC   J!$u++u555s   #C/II#&I#c                 h   | j         j        |j                 }|j        |u sJ t	          j        | ||j                  }|                                 |                     |j	        j
                  }|                     |j	        j
                  }| j        j        }| j                            | j        |||          }| j                            | j        ||          }	| j                            | j        |	           |                                 | j                            | j        |d           S rQ   )r1   yield_pointsr!   r   r   
LowerYield	live_varslower_yield_suspendr   r#  r  r   r   
yield_typerB   rA  rY   rM  rR   rN  lower_yield_resumer  )
rK   rettyr   ypyrn  r  actual_rettypyretrt  s
             rM   r  zLower.lower_yield  s    -dj9w$!$BL99	ll4:?++kk$*/**/ |  sCGG ..L-
 

 	##DL&999 	
|00udKKKrO   c                      j         j                                      |j        }|j        }|j        }|j        }                     |j                  }                     |j                  }	 	                    |j                  } 	                    |j                  } j
        j        |          j                              j        ||j        d                   } j                              j        ||	j        d                   } fd}
 fd} |t          |          t          |          f||f          }| |
|          S  |t          |          |	f||f          }| |
|          S  ||t          |          f||f          }| |
|          S                      j         j        j        i           } j                             |          } | j        ||f          } |
|          S )Nr   ra   c                 R    j                             j        | j                  S rQ   )rB   rA  rY   return_type)r  restyrK   r   s    rM   cast_resultz&Lower.lower_binop.<locals>.cast_result  s.    <$$T\3%.%:EC C CrO   c                    t          d |D                       rd S 	 t          t          j                  r"                    j        j        | i           }nt          j        j	        g| R  }n# t          $ r Y d S w xY w	 j                            |          } |j        |          S # t          $ r Y d S w xY w)Nc              3   2   K   | ]}|t           j        u V  d S rQ   )r   	UNDEFINEDr  as     rM   	<genexpr>z=Lower.lower_binop.<locals>.try_static_impl.<locals>.<genexpr>  s)      331$333333rO   )anyr(  r
   Functionr`  rB   r^  r   r   r  r   r   rY   rR  )tysrt   
static_sigstatic_implr  rK   r   s       rM   try_static_implz*Lower.lower_binop.<locals>.try_static_impl  s    33d33333 tb%.11 O!#!1!1$,2M25r"; ";JJ "(!1)2G!N#!N!N!NJ   tt"l77JGG"{4<666&   tts$   AA2 2
B ?B +B0 0
B>=B>)rB   r^  r_  lhsrhs
static_lhs
static_rhsr   r  r   r'   rQ  rA  rY   rt   _lit_or_omittedr`  r   )rK   r  exprr  r  r  r  r  ltyrtyr  r  r  r   r   r   s   `` `           @rM   lower_binopzLower.lower_binop  sV    \(;;B??hh_
_
kk#(##kk#(##ll38$$ll38$$ K)$/	lc3	q8IJJlc3	q8IJJ	C 	C 	C 	C 	C 	C 	C
	 	 	 	 	 	 	" oZ((/**E*EF$
 
 ?;s###oZ((#.
 
 ?;s###o/*--.*
 
 ?;s### t|:INBOO|((S11d4<#s,,{3rO   c                 h                          |j                  }                      |j                  }t          j        } j        j                            |          }	|	                     j        j        |j        i           }
 j        	                    |	|
          }||f} 
                    |j                   
                    |j                  f} fdt          |||j                  D             } | j        |          } j                             j        ||j        |          S )Nc                 \    g | ](\  }}}j                             j        |||          )S rU   rB   rA  rY   )r  avatftrK   s       rM   r  z'Lower.lower_getitem.<locals>.<listcomp>9  sG     ; ; ;"B L%%dlBB?? ; ; ;rO   )r   r  r\  getitemrB   r^  r_  r`  rt   r   r   ziprY   rA  r  )rK   r  r  r#  r!   r   basevalindexvalr  rx  ry  r   argvalsargtypscastvalsr  s   `               rM   lower_getitemzLower.lower_getitem+  s1   ,,uz**<<
++|*==bAA$$L'
 
 |((w77H%;;uz**;;uz**,; ; ; ;&)'7*3.': ':; ; ; d4<**|  s!*!6!&( ( 	(rO   c                    t          |t                    rh|                     |j        j                  |j                 }| j                            |                     |j        j                  |j                  }n4|                     |j                  }|                     |j                  }| j	        
                    | j        |||          S )zh
        Cast a Numba IR variable to the given Numba type, returning a
        low-level value.
        )r(  r   r   r    r  r!   rY   extract_valuer   rB   rA  )rK   r  rm  vartyrn  s        rM   	_cast_varzLower._cast_varA  s    
 c;'' 	)KK
00;E,,,T\\#*/-J-J-0Y8 8CC KK))E,,sx((C|  sE2>>>rO   c                     ra                      j                  }t          |t          j                  sJ |fdt          t          |                    D             z   }j        }|6|rt          d|           fdt          |j
                  D             }n8 fd}	 fd}
 fd}t          j        ||t          |          |	|
|          }|S )Nc                 0    g | ]}t          |          S rU   )r   )r  ir    s     rM   r  z(Lower.fold_call_args.<locals>.<listcomp>U  s9     #C #C #C'( $/vq#9#9 #C #C #CrO   z+unsupported keyword arguments when calling c                 B    g | ]\  }}                     ||          S rU   r  r  r  sigtyrK   s      rM   r  z(Lower.fold_call_args.<locals>.<listcomp>^  sA     H H H%3 ~~c511 H H HrO   c                 F                         |j        |                    S rQ   )r  rt   )r!   paramr  rK   r   s      rM   normal_handlerz,Lower.fold_call_args.<locals>.normal_handlera  s    ~~c9>%+@AAArO   c                 \    j                             j        j        |          |          S rQ   )rB   r  rY   rt   )r!   r  defaultrK   r   s      rM   default_handlerz-Lower.fold_call_args.<locals>.default_handlerd  s0    |88L)."7B B BrO   c                     j         |          }t          |t          j                  s
J |            fdt	          ||          D             }t          j        j        |          S )Nc                 B    g | ]\  }}                     ||          S rU   r  r  s      rM   r  zALower.fold_call_args.<locals>.stararg_handler.<locals>.<listcomp>k  sA     C C C(c5 ..e44 C C CrO   )rt   r(  r
   	BaseTupler  r   make_anonymous_structrY   )r!   r  vars
stararg_tyr!  rK   r   s        rM   stararg_handlerz-Lower.fold_call_args.<locals>.stararg_handlerh  s}    &^E2
!*eo>>JJ
JJJC C C C,/j,A,AC C C4T\6JJJrO   )r   r  r(  r
   r  ranger  pysigrR  r  rt   r   fold_argumentsdict)rK   fntyr   pos_argsr    kw_args	tp_varargr  r  r  r  r  s   ` ` `       rM   fold_call_argszLower.fold_call_argsO  s    	C FK00Ii99999 #C #C #C #C,1#i..,A,A#C #C #C CH = G))?Ct+F G G GH H H H),Xy~)F)FH H HGGB B B B B BB B B B B BK K K K K K +E,4d7mm,:,;,;	= =G
 rO   c                    | j         j        |         }|j        t          j        k    sJ | j        j                            t                    }t          |j
                  }t          |j
                  }t          t          |                    D ]D}||j        v r9|j        |         }t          |t                    rt          j        |          ||<   Et#          j        |j        g|R  }|                    |j                  }|                     ||||j        i           }	| j                            t          |          }
 |
| j        |	           dS )z$
        Lower a ir.Print()
        )r  N)r'   rQ  r  r
   r   rB   r^  r_  r   listrt   r  r  constsr(  r;  r   r   r   replacer  r  r    r   rY   )rK   r   r   r  pos_tysr  r  r  	fixed_sigr  r   s              rM   rV  zLower.lower_printv  s7    k#D)%*,,,,|*==eDD sx..	??s8}}%% 	6 	6ADKAeS)) 6!&u!5!5GAJ$S_?w???	%%CI%66	%%dC4;KK|((	::T\7#####rO   c                 "   | j         j        |         }|                     d                    |                     t	          |j        t          j                  r| j        	                                S | 
                    |j        j                  }t	          |t          j                  r|                     |||          }nt	          |t          j                  r|                     |||          }nt	          |t          j                  r|                     |||          }n{t	          |t          j                  r|                     |||          }nIt	          |t          j                  r|                     |||          }n|                     |||          }|E|j        t          j        k    r| j        	                                }nt3          d| j                  | j                            | j        ||j        |          S )Nz# lower_call: expr = {0}z2non-void function returns None from implementation)rk   r@   )r'   rQ  r   r   r(  r  r
   PhantomrB   r   r   re   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   r@   rA  rY   )rK   r  r  r   r  r  s         rM   
lower_callzLower.lower_call  s   K)$/	3::4@@AAAi+U];; 	2<//111{{49>**dE344 	A44T4KKCCe455 	A33D$	JJCCe;<< 	A::dI' 'CC e122 	A00tYGGCCe011 	A//dIFFCC ))$i@@C
 ;$
22l2244#L   
 |  sI4I!&( ( 	(rO   c                     ddl m}                                    j                                        }d |j        D             } fd|D             } fd|D             }t          ||          D ]\  }	}
                     |
|	            fdt          ||          D             } | j                                      ||          } j        	                    ||          }t          j         j        |          } j                            |          5 \  }}|5  |D ]} j                            |            j                            |            j                             j                   d d d            n# 1 swxY w Y   |5   j                            |j        j        |          }|j        } j                            |           |D ]} j                            |           t-          |j                  r|                                  j                            |            j                            |j                  5   j                             j                   d d d            n# 1 swxY w Y   |cd d d            cd d d            S # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )Nr   )ObjModeUtilsc                     g | ]	}|j         
S rU   r  r  s     rM   r  z7Lower._lower_call_ObjModeDispatcher.<locals>.<listcomp>  s    ...qAF...rO   c                 :    g | ]}                     |          S rU   )r   r  r  rK   s     rM   r  z7Lower._lower_call_ObjModeDispatcher.<locals>.<listcomp>  s#    555qDKKNN555rO   c                 :    g | ]}                     |          S rU   )r   r  s     rM   r  z7Lower._lower_call_ObjModeDispatcher.<locals>.<listcomp>  s#    777T\\!__777rO   c                 X    g | ]&\  }}j                             ||j                  'S rU   )rW   from_native_valuer[   )r  atypavalrK   s      rM   r  z7Lower._lower_call_ObjModeDispatcher.<locals>.<listcomp>  sK     ? ? ?!tT ://d040@B B ? ? ?rO   )numba.core.pythonapir  r_   rW   
gil_ensurert   r  r  load_dispatchercall_function_objargsr   is_nullrY   if_elsedecrefgil_releaserR   
return_excto_native_value
dispatcheroutput_typesr#  callablecleanupif_thenis_error)rK   r  r  r   r  	gil_statero   rp   	argvaluesvrm  argobjscalleeret_objhas_exceptionthenorelseobjnativeoutputs   `                   rM   r  z#Lower._lower_call_ObjModeDispatcher  s!   555555J))++	..DI...5555H5557777h777	H-- 	 	EArKKA? ? ? ?%(9%=%=? ? ?
 dj))99$II*2267CCg>>]""=11 '	^dF  	8 	8" + +CJ%%c**** 
&&y111 ))$,777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8   33O0    
!!'***" + +CJ%%c**** FN++ %NN$$$ 
&&y111 \))&/:: < <N--dl;;;< < < < < < < < < < < < < < < 1      '	 '	 '	 '	 '	 '	 '	 '	        '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	 '	s   K#AF<KF	KF	KCJ- J<J-JJ-JJ-K-J1	1K4J1	5KK
K
c                 r   |                      d           |                     |||j        |j        |j                  }t          j        |j        |j        j	        |j        j                  }| j
                            | j        j        |          }| j
                            | j        ||j        |          S )Nz# external function)r   r  rt   r    kwsr   ExternalFunctionDescriptorsymbolr   r  rB   declare_external_functionrY   r(   call_external_functionrp   )rK   r  r  r   r  r'   re   s          rM   r  z"Lower._lower_call_ExternalFunction  s    .///%%)TYTX
 
 4K-tx}> >|55L) )|22L$
 
 	
rO   c                    |                      d           |                     |||j        |j        |j                  }|                     |j        j                  }|j        r@| 	                                 | j
                                        }g }g }t          |j        j        |j        |          D ]\  }	}
}|	t          j        k    rb|                     |
|           | j
                            |
|| j                  }|                    |           |                    |           x|                    |           | j                            | j        |||j                  }|D ]}| j
                            |           | j
                            |           n'| j                            | j        |||j                  }|S )Nz## calling external function pointer)r   r  rt   r    r.  r   re   r  requires_gilr_   rW   r  r  r   r
   ffi_forced_objectr  r  r[   r  rB   call_function_pointerrY   cconvr  r  )rK   r  r  r   r  pointerr!  
newargvalspyvalsexptypgottypr  r*  r  s                 rM   r  z)Lower._lower_call_ExternalFunctionPointer  s   >???%%)TYTX
 
 ,,ty~.. "	OO
--//IJF(+DHM9>,3)5 )5 , ,$ U444KK---*66d&6 C %%c***MM#&&&&%%d++++ ,44gz4: C  ' '
!!#&&&& J""9---- ,44gw
 C 
rO   c                    |                      |||j        |j        |j                  }|                    |j                  }| j        j        pt          }| j        j	        } ||j
        |j        ||j                  }| j        j        j                            |          r(| j                            | j        | j        ||          }	n"| j                            | j        |||          }	|	S )N)abi_tagsuid)r  rt   r    r.  get_overloadsrB   manglerr   r'   r>  rn   r?  rY   rm   r  
startswithcall_internalcall_unresolved)
rK   r  r  r   r  rec_ovrA  r>  mangled_namer  s
             rM   r   zLower._lower_call_RecursiveCall8  s    %%)TYTX
 
 ##IN33,&9/;'wv	(0fjB B B < %00>> 	,,,dk9g CC ,..lIw C 
rO   c                    |                      d           t          j        |          }|                    |          s't	          d| dt          j        |                     |j        }|                     |||j        |j	        |j
                  }|                     ||j        j        |          }| j                            |||j                  }|S )Nz## calling first-class function typez%mismatch of function types: expected z	 but got )r   )r7  )r   r
   r|  check_signaturer   r  ftyper  rt   r    r.  _Lower__get_function_pointerre   r  rY   r  r7  )	rK   r  r  r   r   rI  r  func_ptrr  s	            rM   r  zLower._lower_call_FunctionTypeM  s    >???oi((##I.. 	G"F!F F,1,>s,C,CF FG G G 
%%#ty$+tx
 
 ..udin#.NNl'DD
rO   Nc           	      B   ddl m} | j                            |          }|                     |          }| j                            |dd|z            }t          j        | j        |d|z            }| j        	                    t          j
        | j        |          d          5 \  }	}
|	5  |                                  | j                                        }| j                            |dd	|z            } || j        | j        ||d
          }| j                            t          j
        | j        |          d          5  |                     t           | df| j                   d d d            n# 1 swxY w Y   | j                            |          }| j                            | j                            ||          |           | j                            |           | j                            |           d d d            n# 1 swxY w Y   |
5  | j                            | j                            ||          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j                            |          S )Nr   )lower_get_wrapper_addressz
addr_of_%sr	  z
fptr_of_%sF)likelyra   zpyaddr_of_%signore)failure_modez function address is null)r   r@   ) numba.experimental.function_typerM  rB   get_value_typer   rY   r  r   alloca_oncer  r  r_   rW   r  r  r   RuntimeErrorr@   long_as_voidptrstorebitcastr  r  load)rK   rI  fnamer   rM  lltyfstructaddrfptrr(  r)  r!  pyaddraddr1addr2s                  rM   __get_function_pointerzLower.__get_function_pointer]  s   NNNNNN|**511,,u%%|))'1/;u/E * G G "4<(4(>@ @ @\!!d33 "   	K!/$ 2 2!!! J1133	33Q'51 4 3 3 21L$,!)+ + + \))e<<U * L L & &))$%*"E"E"E!G H * & & && & & & & & & & & & & & & & & 
22599""4<#7#7t#D#DdKKK
!!%(((
&&y111-2 2 2 2 2 2 2 2 2 2 2 2 2 2 2.  K K""4<#7#7d#C#CTJJJK K K K K K K K K K K K K K K5	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K8 |  &&&s   )I</BH'E>2H>FHFBHI<H	I<H	I<$5I%I<%I)	)I<,I)	-I<<J J c                    |                      d                    |                     |                      d                    |                     t          |t          j                  r|j        j        }n(|                     |||j        |j        |j	                  }|j
        }|4ddlm}  ||          }|j        j        }|                    ||          }	n| j                            ||          }	|j        r2|                     |j        j                  }
|
gt)          |          z   } |	| j        || j                  }|S )Nz# calling normal function: {0}z# signature: {0}r   )resolve_dispatcher_from_str)r   r   r(  r
   r  re   rt   r  r    r.  r  numba.core.target_extensionrc  targetdescrtarget_contextr   rB   recvrr   r  r  rY   r@   )rK   r  r  r   r  tnamerc  disphw_ctxr   the_selfr  s               rM   r  zLower._lower_call_normal  sG   9@@FFGGG+229==>>>dE344 	inGG))iDK G OOOOOO..u55D%4F&&tY77DD<,,T9==D? 	1 ||DIN33Hj4==0Gd4<$(33
rO   c                     |j         dk    r                     ||j                  S |j         dk    r^                     |j        j                  }|j        r                     ||j                  S                      ||j                  S |j         dk    r                     |j	        j                  }                     |j	        j                  } j
        j                            |j                  } j        j        |         } j
                            ||          } j
                             j        |||j        d                   } | j        |g          }	 j
                             j        |	|j                  }	|	S |j         dk    r                     |          }	|	S |j         dk    rw                     |j	        j                  }                     |j	        j                  }
 j
                             j        ||
          }	                     |	           |	S |j         dk    rw                     |j	        j                  }                     |j	        j                  }
 j
                             j        ||
          }	                     |	           |	S |j         dv r։                     |j	        j                  }                     |j	        j                  }
 j        j        |         } j
                            |j         |          }|j        \  } j
                             j        ||
|          } | j        |f          }	 j
                             j        |	|j                  }	|	S |j         d	k    r                     |j	        j                  }                     |j	        j                  }
t1          |
t2          j                  r. j
                             j        ||
|
j                  }|
j        }
t1          |
t2          j                  r |
k    sJ                      |
|           |S |
j        j        } j
                                      }t3          j         |t2          j!                  }tE          j#        |
j        |
          } j
                            d
|          }tE          j#        ||
j                  } j
                            d|          } | j        |f          }tI          |j%                  D ]} | j        |f          } j
                             j        ||          }tM          j'         j         j        (                    |                    5   )                    tT           j+                   d d d            n# 1 swxY w Y    j
                             j        ||          } j        ,                    |||          } | j        |f          } j
                             j        ||          }tM          j'         j        |          5   )                    tT           j+                   d d d            n# 1 swxY w Y    -                    |
j        |           |S |j         dk    r_                     |j	        j                  }                     |j	        j                  }
t1          t2          j.                  re j
                             j        ||
j/                  } j
        0                     j        |j/                  }	                     |	           |	S  j
        1                    |
|j2                  } j
        j        3                    |
|j2                  }| j
        4                                S  | j
         j        |
||j2                  }	 j
                             j        |	|          }	|	S |j         dk    rtE          j#                             |j	        j                  tk          |j6                            }	  j
                            d|          } | j                             |j	        j                  |j6        f          S # tn          $ r@ |j8          j        j        |         } 9                    ||j	        |j8        |          cY S w xY w|j         dk    rtE          j#                             |j	        j                                       |j6        j                            } j
                            d|          } | j                             |j	        j                                       |j6        j                  f          S |j         dk    r5 j        j        |         } 9                    ||j	        |j6        |          S |j         dk    r| fd|j:        D             } fd|j:        D             } fdtw          ||          D             } j
        <                     j        |          }                     |           |S |j         dk    r fd|j:        D             } fd|j:        D             }t1          t2          j=                  rr fdtw          |j        |          D             } j
        <                     j        t3          j>        j                  |          }                     |           |S  fdtw          ||          D             } j
        ?                     j        |          S |j         dk    rj|j:        d d d         } fd|D             } fd|D             } fdtw          ||          D             } j
        @                     j        |          S |j         dk    r+|j:        }g g } }g g }"}!|D ]\  }#}$                     |#j                  }%                     |#j                  }&                     |$j                  }                     |$j                  }'|A                    |%           | A                    |           |!A                    |&           |"A                    |'            j
        B                     j        t          tw          |!|"                    t          tw          ||                               S |j         d k    rx                     |j	        j                  }                     |j	        j                  }
 j
                             j        ||
          }                     |           |S |j         d!k    rt          d"          |j         d#k    r j
        E                              S |j          j
        jF        v r#  j
        jF        |j                   |          }	|	S to          |          )$Nbinopinplace_binopunaryr   r  
pair_firstpair_second)getiteriternextexhaust_iterrr  rs  r   getattrstatic_getitemtyped_getitemr  build_tuplec                 D    g | ]}                     |j                  S rU   r   r  r  r  rK   s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>F  '    AAAQV,,AAArO   c                 D    g | ]}                     |j                  S rU   r   r  r{  s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>G  '    ???qt{{16**???rO   c                 \    g | ](\  }}}j                             j        |||          )S rU   r  r  rn  totyfromtyrK   s       rM   r  z$Lower.lower_expr.<locals>.<listcomp>H  sM     P P P-Cv ))$,VTJJ P P PrO   
build_listc                 D    g | ]}                     |j                  S rU   rz  r{  s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>O  r|  rO   c                 D    g | ]}                     |j                  S rU   r~  r{  s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>P  r  rO   c                 \    g | ](\  }}}j                             j        |||          )S rU   r  r  s       rM   r  z$Lower.lower_expr.<locals>.<listcomp>R  sM     C C C 1T6 !L--dlCNN C C CrO   c                 d    g | ],\  }}j                             j        ||j                  -S rU   rB   rA  rY   dtyper  rn  r  r  rK   s      rM   r  z$Lower.lower_expr.<locals>.<listcomp>[  sR     G G G +V !L--dlC.3k; ; G G GrO   	build_setr%   c                 D    g | ]}                     |j                  S rU   rz  r{  s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>c  s'    <<<QV,,<<<rO   c                 D    g | ]}                     |j                  S rU   r~  r{  s     rM   r  z$Lower.lower_expr.<locals>.<listcomp>d  s'    :::qt{{16**:::rO   c                 d    g | ],\  }}j                             j        ||j                  -S rU   r  r  s      rM   r  z$Lower.lower_expr.<locals>.<listcomp>e  sR     C C C'C ))$,V*/+7 7 C C CrO   	build_maprA  phizPHI not strippednull)Gr  r  rh   r   r  r  mutableimmutable_fnr   r#  rB   r^  r_  r'   rQ  r   rA  rY   rt   r  r  rp  r  rq  r(  r
   rK  rC  r  iterator_typer  get_constant_undefPairrB  r   r   r  countr   if_unlikelynot_r   r   r@   insert_valuer  BoundFunctionthisget_bound_functionget_getattrrd  resolve_getattrr   r  r!   rR  rT  r  r/   r  
make_tupleLiteralListTupler  r  r  r  r  r   get_constant_nullspecial_ops)(rK   r  r  r  rn  r  func_tyr   r   r  rm  ftycastvalitemtytuppairtygetiter_siggetiter_impliternext_sigiternext_impliterobjr  pairis_validitemcastedattrtyitemvalsitemtysr  r/   r>   r!  	key_typesvalue_typeskr#  rZ  keytypevaltypes(   ``                                      rM   r  zLower.lower_expr  s   7g##E4999W''++dhm,,C{ H''tTW=== ''tT5FGGGW,,tz//C++djo..Cl1DDTWMMG-d3I<,,Wi@@D,##DL#sIN1<MNNC$t|cU++C,##DL#$-$95B BCJW//%..CJW$$,,tz//CTZ_--B,))$,R@@CKKs###JW%%,,tz//CTZ_--B,**4<bAACKKs###JW///,,tz//CTZ_--B-d3I<,,TWi@@DNESl''c2sCCG$t|gZ00C,##DL#y7L$)+ +CJW&&,,tz//CTZ_--B"en-- l''c2rwGGW "eo.. U{{{{B$$$
%0F,11%88CZ66F *2+;R@@K<44Y5@B BL!+FB4DEEL L55j6BD DM"l4<#88G4:&& 	> 	>$}T\G:>><33DL48&B B()-):):8)D)DF F D D))*$()CCCD D D D D D D D D D D D D D D |..t|/3V= =l//T1== !=z::D|//04f> >H$T\8<< @ @%%jdh%???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ KK('222JW	!!,,tz//CTZ_--B%!455  **4<b%*MMl55dlF6;jB BE3'''
|//DI>>4DDREIYP P <<77999$t|T\2sDINNC l''c65II
W((((DJO,,
++ I
E |001A9MMtDL!\\$*/::DJGI I I& E E E>) !K1$7	))%tz*..)E E E E EE W''(DJO,,DJO,, I
 <,,_iHHD4t||DJO'D'DTZ_55'7 8 8 8W	!!-d3I%%eT4:tz&/1 1 1 W%%AAAAdjAAAH????DJ???GP P P P14Xug1N1NP P PH,))$,xHHCKKs###JW$$AAAAdjAAAH????DJ???G%!233 NC C C C585;9@6B 6BC C C l--dl.3k%+.F.F.68 8 E3'''
G G G G G/28W/E/EG G G |..t|UHMMMW##Jttt$E<<<<e<<<H::::E:::GC C C C C+.x+A+AC C CH <))$,xHHHW##JEr&D%'{I , ,1ll16**++af--ll16**++af--C   c"""  )))""7++++<))$,*.s9k/J/J*K*K*.s4/@/@*A*AC C C W,,tz//CTZ_--Bl''c2uEEGKKw'''NW 2333W<11%888W0003$,*473D$??CJ!$'''s8   #"WW	W	'"ZZZ9Ac	 	Addc                     || j         v rdS || j        vs| j        r"|                     ||          }|| j         |<   dS dS )zT
        Ensure the given variable has an allocated stack slot (if needed).
        N)r<   r  r   alloca)rK   r  r1  ptrs       rM   r$  zLower._alloca_var  s`     4;F 333+ 4 ++dF++C #DK 43rO   c                 V    | j         s|| j        vsJ || j        vsJ | j        |         S )z=
        Get a pointer to the given variable's slot.
        )r   r  r  r<   )rK   r  s     rM   getvarzLower.getvar  sD     * 	:t55555t99999{4  rO   c                 P   || j         v r| j        s| j         |         S |                     |          }|| j        j        v rMt          j        | j                  5  | j                            |          cddd           S # 1 swxY w Y   dS | j                            |          S )z2
        Load the given variable's value.
        N)	r  r   r  r0   	arg_namesr   r   rY   rX  )rK   r  r  s      rM   r   zLower.loadvar  s     4)))$2M))$//kk$ 4<)))+DL99 . .|((--. . . . . . . . . . . . . . . . . . <$$S)))s   BBBc           
      Z   |                      |          }|                     ||           || j        v r| j        s|| j        |<   dS |+|                     |          }|                     ||           |                     |          }|j        |j        j	        k    r(d
                    ||||          }t          |          |t          j        | j                  5  | j                            ||           ddd           n# 1 swxY w Y   | j        }| j                            |          }	| j                            |	          }
| j        j        |         }| j                            | j        |||	|
|j        ||           dS | j                            ||           dS )z:
        Store the value into the given variable.
        NzNStoring {value.type} to ptr of {ptr.type.pointee} ('{name}'). FE type {fetype})r#  r  r1  r  )r  lltypesizerc   	datamodelr7  )r   r$  r  r   r  r   r  r  rC  pointeer   AssertionErrorr   r   rY   rV  rG   rB   rR  get_abi_sizeofdata_model_managermark_variablerc   )rK   r#  r  r7  r1  oldr  rk   r@   r  sizeofr  s               rM   r>  zLower.storevar  s    T""v&&& D.../ /+0D"4(((~ ll4((FC((( ++d##CzSX---67=vEBEEKCG 8> 8I 8I 
 %S)))
 !/== 3 3L&&uc2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3m44V<<44V<< L;FC	,,T\3T4:25(i4: - < < < < <
 ""5#.....s   "D

DDc                    |                      |          }|| j        vr*| j        s#|| j        v r| j                            |           |                     ||           || j        v r,| j        s%| j        |         }|                     ||           dS |                     |          }|                     || j        	                    |                     | j        
                    t          |j        j        d          |           dS )z,
        Delete the given variable.
        N)r   r  r   r  discardr$  r  r  rY   rX  rV  r   rC  r  )rK   r  r1  llvalr  s        rM   ra  zLower.delvar  s    T"" .../ /t111*224888 	v&&&4)))$2M)*40EKK&&&&&++d##CKK 1 1# 6 6777Lx(8$??EEEEErO   c                     | j                             |          }| j         j        |         }|                     |||          S )N)r  )rB   rR  r  alloca_lltype)rK   r  rC  r  r  s        rM   r  zLower.alloca   sA    ,,T22L3D9	!!$)!DDDrO   c           	          |                     d           }t          j        | j        ||d          }|rX|| j        j        vrJ| j                            |          }| j        	                    | j        ||||| j
        j        |           |S )N$F)r  zfill)r  r  r  rc   r  )rB  r   rS  rY   r0   r  rB   r  r   r  r@   rc   )rK   r  r  r  
is_uservaraptrr  s          rM   r  zLower.alloca_lltype  s    ---
"4<(,E; ; ;  		C 4<11144V<<,,T\4d4:26(-7@ - C C C rO   c                 n    | j         j        sd S | j         j                            | j        ||           d S rQ   )rB   r   nrtr  rY   rK   r  rn  s      rM   r  zLower.incref  s9    |& 	Fc377777rO   c                     | j         j        sd S t          j        | j                  5  | j         j                            | j        ||           d d d            d S # 1 swxY w Y   d S rQ   )rB   r   r   r   rY   r  r  r  s      rM   r  zLower.decref  s    |& 	F
 '55 	< 	<L##DL#s;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   'AA #A rQ   )+r   r   r   r   r   rJ   r   r   r   r   r   r   rS  rh  rf  rj  rl  r<  r  r  r  r  r  rV  r  r  r  r  r   r  rJ  r  r  r$  r  r   r>  ra  r  r  r  r  __classcell__)r   s   @rM   r   r   b  s       .N. . . . .
 K K XK%$ %$ %$N$ $ $ $ $L  I2 I2 I2V: : :>* * *
E E E&O O OL L L06 06 06dL L L4D  D  D L( ( (,? ? ?% % %N$ $ $:(( (( ((T> > >@
 
 
+ + +Z  *   &' &' &' &'P  8k( k( k(Z$ $ $ ! ! !* * *$,/ ,/ ,/ ,/\F F F2E E E
   (8 8 8< < < < < < <rO   r   c                 t    	 t          j        |           S # t          $ r t          j        |           cY S w xY w)zjReturns a Literal instance if the type of value is supported;
    otherwise, return `Omitted(value)`.
    )r
   r   r   r  )r#  s    rM   r  r  *  sH    $}U### $ $ $}U#####$s    77)-collectionsr   r   r\  rf   	functoolsr   llvmlite.irrD  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   r   objectr#   r   r  rU   rO   rM   <module>r     s$   / / / / / / / /             + + + + + + + +& & & & & & & & & & & & & & & & & & & & & & & & & & & &6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 / / / / / . . . . . . A A A A A A A A A A A A A A j(;<<G! G! G! G! G! G! G! G!T
E< E< E< E< E<I E< E< E<P&$ $ $ $ $rO   