
    xKg                        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,y)    )
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y)	BaseLowerz
    Lower IR to LLVM
    Nc                    || _         || _        t        j                  |j                  j                               | _        || _        |j                  | _        || _        t        j                  j                         | _        | j                   j                  | j                  j                        | _        t!        j"                  | j                        | _        i | _        i | _        i | _        t-        | j                  j/                               | _        d| _        |j5                  | j$                  | j                        | _        | j6                  j8                  r| j6                  j:                  nt<        j>                  }| jA                         | _!        | j                  jD                  } || j                  |j2                  jF                  ||      | _        | jI                          y )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           W/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/core/lowering.py__init__zBaseLower.__init__   su   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                 .    | j                   j                  S N)rB   	call_convrK   s    rM   rR   zBaseLower.call_convK   s    ||%%%rO   c                      y rQ    rS   s    rM   rJ   zBaseLower.initO   s    rO   c                 2   | j                   y| j                  j                  | j                        | _         | j                  j	                  | j                        | _        | j
                  j                  | _        | j
                  j                  | _        y)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   sn    
 ::!\\00>
  <<77E((11&&..rO   c                    | j                   j                  j                  | j                   j                  j                  dz         }| j                  j
                  r| j                   j                  j                  }t        |      }|,|dz
  }| j                   j                  j                  |      }|S d| 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@0@0E0E0IJ<<((%%**B5b9L'%)<<++77? 	 >,,..334 5,, 3C89rO   c                    d| _         | j                  j                  | j                  j                  | j
                  j                  | j
                  j                  | j
                  j                  | j                  j                         | j                  j                  j                  }| j                  j                  xr | j                  j                   }|rd|vr|j                  d       yyy)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     
&&0E0E040D0D040@0@040D0D,0MM,>,>	 	' 	@ \\**55
ZZ))P$**2P2P.P
.
:NN:& ;:rO   c                 8    | j                   j                          y)z5
        Called after all blocks are lowered
        N)r   finalizerS   s    rM   
post_lowerzBaseLower.post_lower   s     	!rO   c                      y)z1
        Called before lowering a block.
        NrU   rK   blocks     rM   	pre_blockzBaseLower.pre_block       rO   c                      y)z0
        Called after lowering a block.
        NrU   r}   s     rM   
post_blockzBaseLower.post_block   r   rO   c                     | j                   j                  | j                  ||||| j                  j                  j
                         y )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   s;    ..LL)Xxt||33== 	/ 	
rO   c                     | j                   j                  | j                  |||| j                  j                  j
                         y)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   s;     	&&LL)Xt||33== 	' 	
rO   c                     | j                   j                  | j                  |||| j                  j                  j
                         y)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   s;     	**LL)Xt||33== 	+ 	
rO   c                     | j                   j                  | j                        }| j                   j                  | j                  |       y)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   s4     ,,++DKK8''W=rO   c                    | j                          | j                  #d | _        | j                  | j                         n| j                  |       | _        | j                  j                  | _        | j                  j                  |        | j                  j                  |        | j                  j                  r| j                  j                  |        t        j                  r*t        j                  | j                  | j                         | j                   j"                  rB| j                  6t%        j&                  | j(                  | j                   | j                         | j                   j+                  | j                  | j,                         | j,                  j/                  | j                         y )N)rB   r'   )r   r1   genlowerlower_normal_functionr'   GeneratorLowergentypelower_init_funclower_next_funchas_finalizerlower_finalize_funcr   	DUMP_LLVMr	   	dump_llvmr(   rB   
enable_nrtr   remove_unnecessary_nrt_usagerm   post_loweringr,   add_ir_modulerS   s    rM   lowerz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;;/rO   c                     | j                   j                  | j                  | j                  j                  | j
                        | _        | j                  S rQ   )rR   decode_argumentsrY   r'   rp   rm   fnargsrS   s    rM   extract_function_argumentsz$BaseLower.extract_function_arguments   s?    nn55dll6:kk6J6J6:mmE {{rO   c                 h   | j                  |       | j                          | j                         }t        j                  | j
                        5  | j
                  j                  |       | j
                  j                  | j                  | j                            ddd       y# 1 sw Y   yxY w)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LL(()9:LLDMM :; 655s   AB((B1c                 J   | j                   D ]/  }d|z  }| j                  j                  |      | j                  |<   1 | j	                          | j
                  j                  }| j                  dj                  | j                  j                               t        | j                   j                               D ]T  \  }}| j                  |   }| j
                  j                  |       | j                  d|        | j                  |       V | j                          |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    
 kkFFNE"&--"B"B5"IDKK " 	<<33077KK##% 	& $DKK$5$5$78MFEV$BLL((,vh78U#	 9
 	rO   c                 @   | j                  |       |j                  D ]a  }|j                  | _        t        t        | j                        }t        d|| j                  |      5  | j                  |       ddd       c | j                  |       y# 1 sw Y   xY w)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JJDxxDH#Mtxx@M"#?d'+xxH%H H  	H Hs   &BB	c                 P   | j                   rR| j                  j                  | j                  | j                   j                  | j
                  | j                  |       | j                  j                  | j                  | j                  | j
                  | j                  |       y)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     ==LL//040E0E04$:J:J<G 0 I 	++DLL$++,0HHd6F6F8C 	, 	ErO   c                     | j                   rt        d      | j                  j                  | j                  | j
                  | j                  | j                         y)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  sE     =="#MNN))$,,*.((D4D4D	FrO   c                    | j                   j                  | j                  |      | _        | j                  j
                  r<| j                  j                  }d|vr"|j                  d       |j                  d       | j                  j                  d      | _	        t        | j                        | _        | j                  j                  | j                        | _        y )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_function'  s    55dkk6J::!!mm..GW,I&J'==;;GD !1!12>>::4<<HrO   c                 4    | j                   j                  |   S rQ   )r'   typemap)rK   varnames     rM   typeofzBaseLower.typeof3  s    {{""7++rO   c                     t         j                  rA| j                  j                  | j                  d| j
                  j                   d|        y y )Nz
DEBUGJIT [z]: )r   	DEBUG_JITrB   r   rY   r'   rn   )rK   rk   s     rM   r   zBaseLower.debug_print6  sD    LL$$
4;;+?+?*@C5IK rO   c                 d   t        j                  |      | j                  j                  |   f}| j                  j                         | j                  |      f}t        j                  t         j                  g| }| j                  j                  t        |      } || j                  |       y)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_functionprintrY   )rK   rk   r   argtysrt   sigimpls          rM   print_variablezBaseLower.print_variable;  s     MM#KK(

 LL((*LL!
 uzz3F3||((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    ,\ & &/&',"




>0<<" 2EF
I,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                 B    t         |           | j                          y rQ   )superrJ   _find_singly_assigned_variable)rK   	__class__s    rM   rJ   z
Lower.initV  s    ++-rO   c                 z    | j                   y| j                   j                  xr | 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.F)r5   r   rH   rS   s    rM   _disable_sroa_like_optzLower._disable_sroa_like_opt[  s3     ::zz##JDJJ,J,J(JJrO   c                 b   | j                   }|j                  }t               }| j                   j                  j                  sYt        |      }t        |      }t        t              }|j                  j                         D ]   \  }}|D ]  }	||	   j                  |        " t        t              }
|j                  j                         D ]   \  }}|D ]  }	|
|	   j                  |        " |D ]  }	|	|vst        ||	         dk(  st        |
|	         dk(  s,||	   \  }| j                  |   j                  t        j                        }|D cg c]  }|j                   j"                  |	k(  r| }}t        |      dk(  s|j                  |	        || _        i | _        y c c}w )Nra   r   )r0   r.   setrd   is_generatorr   r   r   defmapr/   rv   usemaplen
find_instsr   Assigntargetname_singly_assigned_vars_blk_local_varmap)rK   r0   r.   savuse_defsalloca_varsvar_assign_mapblkvlvarvar_use_mapdefblkassign_stmtsstmtassignss                  rM   r   z$Lower._find_singly_assigned_variablef  s   ,,e||##00'/H)&1K )-N#??002RC"3'++C0  3
 &c*K#??002RC$((-  3
 &k)c.2E.F!.K;s+,1 $2##6'+{{6':'E'Ebii'P4@ #?LD&*kk&6&6#&= $(L #?w<1,GGCL & &)"!##?s   "F,c                    ddl m} t        t        |   |       || _        || j                  k(  r| j                  | j                     }| j                  j                  |       t               }| j                  j                         D ]P  }|j                  t        j                        D ],  }|j                   |vs|j#                  |j                          . R |D ]%  }| j%                  |      }| j'                  ||       ' |j)                  d      D ]  }t+        j,                  t*        j.                  | j0                  |j2                        }	|	?t5        |	t        j6                        sZ|	j                   |j8                  u sst5        |j:                  t        j<                        s| j                  |j:                  j>                     }
d|
i| j                  _          y  y )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  st   (eT$U+"DMM!
 T]]+BLL((,I++-))"&&1Awwi/!agg. 2 . "T*  v. " $$$/D>>''tyyD JtRYY$?::!3!33!%"2"2BII>$(KK0@0@0G0G$H	 7?	5J2 0rO   c                 <    	 | j                   `y # t        $ r Y y w xY wrQ   )rY   r  AttributeErrorr}   s     rM   r   zLower.post_block  s#    	* 		s    	c                    | j                   j                  | j                  | j                  j                         | j                  t        |             t        |t        j                        r| j                  |j                  j                        }| j                  ||      }d }t        |j                  t        j                        rS| j                   j                  | j                  | j                   j                         |j                  j"                  dz   }| j%                  ||j                  j                  |       y t        |t        j&                        r| j)                  |j*                  j                        }| j,                  |j.                     }| j,                  |j0                     }| j                  |j*                  j                        }| j2                  j5                  | j                  ||t6        j8                        }	|	j:                  t<        j                  j?                  d      k(  sJ d|	j:                  z         | j                  jA                  |	||       y t        |t        jB                        r5| j,                  |j                     }
| j                  jE                  |
       y t        |t        jF                        r5| jH                  r| jJ                  jM                  |        y | j)                  |j                  j                        }| j                  |j                  j                        }| jN                  jP                  }t        |t6        jR                        r)| jT                  jW                  | j                  |||       y ||k(  sJ djY                  ||             | j2                  j[                  | j                  ||      }| jT                  j]                  | j                  |       y t        |t        j^                        ry t        |t        j`                        r| jN                  jb                  |   }|J 	 | j2                  je                  d|      }| j)                  |j                  j                        }
| j)                  |j                  j                        }| j                  |j                  j                        }| j2                  j5                  | j                  |||jf                  d         } || j                  |
|j"                  |f      S t        |t        jn                        r| jq                  |       y t        |t        jr                        rO| jN                  jb                  |   }|J | jk                  |j                  |j"                  |j                  |      S t        |t        jt                        rO| jN                  jb                  |   }|J | jk                  |jv                  |jx                  |j                  |      S t        |t        jz                        r| j)                  |j                  j                        }
| j)                  |j"                  j                        }| j                  |j                  j                        }| j                  |j"                  j                        }| jN                  jb                  |   }|J t|        j~                  }| j2                  j                  j                  |      }|j                  | j2                  j                  |jf                  i       }| j2                  je                  ||      }||jf                  d   k(  sJ | j2                  j5                  | j                  |||jf                  d         } || j                  |
|f      S t        |t        j                        r| j                  |j                         y t        |t        j                        r5| j)                  |j                  j                        }
| j)                  |j                  j                        }| jN                  jb                  |   }| j                  |j                  j                        }| j                  |j                  j                        }|J |jf                  d   |k(  sJ | j2                  j                  |j                  |      }| j2                  j5                  | j                  |||jf                  d         } || j                  |
|f      S t        |t        j                        r| j                  |       y t        |t        j                        r| j                  |       y t        |t        j                        r| j                  |       y t        |t        j                        r| j                  |       y ti        t;        |            # th        $ r5 | jk                  |j                  |jl                  |j                  |      cY S w xY w)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valr$  r,  trflcondtypredr   otyretvalr   r   r  valuetyr!   targettyindextyr  fnopcallsigs                          rM   r   zLower.lower_inst  s   $$T\\488==AT#dBII&T[[--.B##B-CF $**bff-,,T\\4==;M;MN))A-MM#t{{//M?bii(<<		/DT[[)BT\\*B[[0F<<$$T\\4OD99 3 3A 66 3%		136LL  r2.bgg&[[-FLL'bii(""33D9,,tzz/C++djjoo.C$$B"enn-44T\\2sCP9 M;BB3KM9\\224<<SIFNN''f=bkk*b../--d3I(((G||001A9M
 dkk&6&67TZZ__5++djjoo6))$,,w*3..*;=DLL64::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 vuo66boo.$$T*b001((.bnn-##D)b//0''- &d4j11c ' A))$++t~~*.**iA AAs   %h9 9;i76i7c                 D   | j                  |j                        }| j                  |j                        }| j                  |j                        }| j                  |j                        }| j                  |j                        }	| j                  |j                        }
t        j                  }| j
                  j                  j                  |      }|j                  | j
                  j                  |j                  i       }| j
                  j                  ||      }t        |t        j                        r3| j
                  j                  | j                  |||j                         }n0t        j"                  } ||       ||j                  d         k(  sJ | j
                  j                  | j                  ||
|j                  d         }| j
                  j                  | j                  ||	|j                  d         } || j                  |||f      S )Nr   ra   r&  )r   r   r   rI  setitemrB   rK  rL  rM  rt   r   r  r
   r8  r.  rY   r0  	unliteral)rK   
target_varrA  	value_varr   r   r  r!   rc  rb  rd  r  re  rf  r   uls                   rM   r@  zLower.lower_setitemE  s   joo.Y^^,Y^^,;;z/++inn-++inn-||**==bA$$LL''
 ||((w7 h/\\&&t||VX'/}}6F Bh<2innQ&7#8888!!$,,w"+.."35!!$,,w"+.."35 DLL65%"899rO   c                 &    | j                  |       y rQ   )rY  rK   r   s     rM   rU  zLower.lower_try_dynamic_raised  s     	##D)rO   c                    |j                   }g }g }|D ]  }t        |t        j                        rI| j	                  |j
                        }| j                  |j
                        }| j                  ||       nd }|}|j                  |       |j                  |        | j                  |j                  t        |      t        |      | j                         y Nr   )r   r  r   Varr   r   r   increfappendr   r   tupler@   )rK   r   r   rt   r   exc_argtypr[  s           rM   rS  zLower.lower_dynamic_raisei  s    ==G'266*kk',,/ll7<<0C%OOC KK   	%%dnneDk&+Ho488 	& 	ErO   c                     |j                   | j                  d | j                         y | j                  |j                   |j                  | j                         y rp  )r   r   r@   r   rn  s     rM   rW  zLower.lower_static_raise|  sD    >>!!!$DHH!5!!$..$--TXX!NrO   c                     |j                   | j                  d | j                         y | j                  |j                   |j                  | j                         y rp  )r   r   r@   r   rn  s     rM   rY  zLower.lower_static_try_raise  sD    >>!t2t~~t}}$((KrO   c                    |j                   }t        |t        j                  t        j                  t        j
                  f      rE| j                  j                  | j                  ||j                         }| j                  ||       |S t        |t        j                        r| j                  ||      S t        |t        j                        rr| j                  |j                        }| j                  |j                        }| j                  j!                  | j                  |||      }| j                  ||       |S t        |t        j"                        r9t%        j&                  | j                        5  | j                  d|j                  z         }t        |t(        j*                        r|j                   }| j                  j,                  }	|	j/                  |      }
| j                  j                  | j                  |
|      }| j                  j!                  | j                  ||
|      }nA| j0                  |j2                     }| j                  j!                  | j                  |||      }| j                  ||       |cd d d        S t        |t        j4                        r&| j7                  ||      }| j                  ||       |S t9        t;        |      |      # 1 sw Y   xY w)Nzarg.)r  r  r   Constr  FreeVarrB   get_constant_genericrY   rr  Expr
lower_exprrq  r   r   r   r.  r*  r   r   r
   OmittedrK  !resolve_value_type_prefer_literalr   r!   Yieldlower_yieldr?  r0  )rK   rZ  r   r  resr[  r`  argtypyvaltyctxvaltyconsts               rM   r)  zLower.lower_assign  s)   

ebhh		2::>?,,33DLL"49KKACKKC Jrww'??2u--rvv&,,uzz*C++ejj)C,,##DLL#sB?CKKC Jrvv& ++DLL9 FUZZ$78eU]]3!KKE LL77E!CCEJE LL==eUE ,,++DLL%KC++ekk2C,,++DLL#ubICB$% :9( rxx(""2u-CKKC J!$u+u553 :9s   =DK,,K5c                    | j                   j                  |j                     }|j                  |u sJ t	        j
                  | ||j                        }|j                          | j                  |j                  j                        }| j                  |j                  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   r.  rY   r:  rR   r;  lower_yield_resumer|  )
rK   rettyr   ypyr[  rv  actual_rettypyretra  s
             rM   r  zLower.lower_yield  s     --djj9ww$!!$BLL9	ll4::??+kk$**//*// ||  sCG ..LL-

 	##DLL&9 	
||00udKKrO   c                 T     j                   j                  j                        |j                  }|j                  }|j
                  }|j                  } j                  |j                        } j                  |j                        }	 j                  |j                        } j                  |j                        } j                  j                  |    j                   j                   j                  ||j                  d         } j                   j                   j                  ||	j                  d         } fd}
 fd} |t        |      t        |      f||f      }| |
|      S  |t        |      |	f||f      }| |
|      S  ||t        |      f||f      }| |
|      S j!                   j                   j                  j                  i       } j                   j#                  |      } | j                  ||f      } |
|      S )Nr   ra   c                 h    j                   j                  j                  | j                        S rQ   )rB   r.  rY   return_type)r  restyrK   r   s    rM   cast_resultz&Lower.lower_binop.<locals>.cast_result  s/    <<$$T\\3%.%:%:EC CrO   c                    t        d |D              ry 	 t        t        j                        r(j	                  j
                  j                  | i       }n t        j                  j                  g|  }	 j
                  j                  |      } |j                  |      S # t        $ r Y y w xY w# t        $ r Y y w xY w)Nc              3   @   K   | ]  }|t         j                  u   y wrQ   )r   	UNDEFINED).0as     rM   	<genexpr>z=Lower.lower_binop.<locals>.try_static_impl.<locals>.<genexpr>  s     3d1$ds   )anyr  r
   FunctionrM  rB   rK  r   r   r  r   r   rY   r?  )tysrt   
static_sigstatic_implr  rK   r   s       rM   try_static_implz*Lower.lower_binop.<locals>.try_static_impl  s    3d33b%..1!#!1!1$,,2M2M25r";J "(!1!1)2G2G!N#!NJ"ll77JG"4<<66	  
 ' s$   A"B( 9.B7 (	B43B47	CC)rB   rK  rL  lhsrhs
static_lhs
static_rhsr   r   r   r'   r>  r.  rY   rt   _lit_or_omittedrM  r   )rK   r  exprr  r  r  r  r  ltyrtyr  r  r  r   r   r   s   `` `           @rM   lower_binopzLower.lower_binop  s    \\((;;B?hhhh__
__
kk#((#kk#((#ll388$ll388$ KK))$/	llc3	q8IJllc3	q8IJ	C
	" Z(/**EF$
 ?s##Z(#.
 ?s##/*-.*
 ?s## t||::INNBO||((S14<<#s,3rO   c                 "   | j                  |j                        }| j                  |j                        }t        j                  }| j                  j
                  j                  |      }	|	j                  | j                  j
                  |j                  i       }
| j                  j                  |	|
      }||f}| j                  |j                        | j                  |j                        f}t        |||j                        D cg c].  \  }}}| j                  j                  | j                  |||      0 }}}} || j                  |      }| j                  j                  | j                  ||j                  |      S c c}}}w rQ   )r   r   rI  getitemrB   rK  rL  rM  rt   r   r   zipr.  rY   r  )rK   r  r  r  r!   r   basevalindexvalr  re  rf  r   argvalsargtypsavatftcastvalsr  s                      rM   lower_getitemzLower.lower_getitem  sP   ,,uzz*<<

+||**==bA$$LL''
 ||((w7H%;;uzz*;;uzz*, '*'7*3..':;':
B LL%%dllBB?': 	 ; 4<<*||  s!*!6!6!&( 	(	;s   3F
c                    t        |t              r|| j                  |j                  j                        |j
                     }| j                  j                  | j                  |j                  j                        |j
                        }n6| j                  |j                        }| j                  |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   r.  )rK   r  rZ  vartyr[  s        rM   	_cast_varzLower._cast_var2  s    
 c;'KK

0;E,,,,T\\#**//-J-0YY8C KK)E,,sxx(C||  sE2>>rO   c                 
    |rf j                  |j                        }t        |t        j                        sJ |t        t        |            D cg c]  }t        ||       c}z   }j                  }|J|rt        d|      t        |j                        D 	
cg c]  \  }	}
 j                  |	|
       }}	}
|S  fd} fd} fd}t        j                  ||t        |      |||      }|S c c}w c c}
}	w )Nz+unsupported keyword arguments when calling c                 B    j                  |j                  |          S rQ   )r  rt   )r!   paramr  rK   r   s      rM   normal_handlerz,Lower.fold_call_args.<locals>.normal_handlerR  s    ~~c9>>%+@AArO   c                 l    j                   j                  j                  j                  |    |      S rQ   )rB   r|  rY   rt   )r!   r  defaultrK   r   s      rM   default_handlerz-Lower.fold_call_args.<locals>.default_handlerU  s0    ||88LL).."7B BrO   c                    j                   |    }t        |t        j                        sJ |       t	        ||      D cg c]  \  }}j                  ||       }}}t        j                  j                  |      S c c}}w rQ   )	rt   r  r
   	BaseTupler  r  r   make_anonymous_structrY   )	r!   r  vars
stararg_tyr  sigtyr  rK   r   s	          rM   stararg_handlerz-Lower.fold_call_args.<locals>.stararg_handlerY  s    &^^E2
!*eoo>J
J>,/j,AC,Ajc5 ..e4,A  C44T\\6JJCs   B )r   r   r  r
   r  ranger   r   pysigr?  r  rt   r  r   fold_argumentsdict)rK   fntyr   pos_argsr    kw_args	tp_varargir  r  r  r  r  r  r  s   ` `            rM   fold_call_argszLower.fold_call_args@  s!    FKK0Ii999,1#i.,A#C,Aq $/vq#9,A#C CH =)?C+F G G *-Xy~~)FH)F:3 ~~c51)F  H, 'BBK ++E,4d7m,:,;,;	=G
 ?#CHs   C:"C?c                    | j                   j                  |   }|j                  t        j                  k(  sJ | j
                  j                  j                  t              }t        |j                        }t        |j                        }t        t        |            D ]I  }||j                  v s|j                  |   }t        |t              s2t        j                   |      ||<   K t#        j$                  |j                  g| }|j'                  |j(                        }| j+                  ||||j,                  i       }	| j
                  j/                  t        |      }
 |
| j0                  |	       y)z$
        Lower a ir.Print()
        )r  N)r'   r>  r  r
   r   rB   rK  rL  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   rC  zLower.lower_printg  s    kk##D)%**,,,||**==eD sxx.		?s8}%ADKKAeS)!&u!5GAJ	 & $$S__?w?	%%CII%6	%%dC4;;K||((	:T\\7#rO   c                 2   | j                   j                  |   }| j                  dj                  |             t	        |j
                  t        j                        r| j                  j                         S | j                  |j                  j                        }t	        |t        j                        r| j                  |||      }nt	        |t        j                        r| j!                  |||      }nt	        |t        j"                        r| j%                  |||      }not	        |t        j&                        r| j)                  |||      }nAt	        |t        j*                        r| j-                  |||      }n| j/                  |||      }|O|j
                  t        j0                  k(  r| j                  j                         }nt3        d| j4                        | j                  j7                  | j8                  ||j
                  |      S )Nz# lower_call: expr = {0}z2non-void function returns None from implementation)rk   r@   )r'   r>  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@   r.  rY   )rK   r  r  r   r  r  s         rM   
lower_callzLower.lower_call  s   KK))$/	3::4@Ai++U]];<<//11{{499>>*dE33444T4KCe44533D$	JCe;;<::dI'C e11200tYGCe001//dIFC ))$i@C
 ;$$

2ll224#L 
 ||  sI4I4I!&( 	(rO   c           	         ddl m} | j                          | j                  j	                         }|j
                  D cg c]  }|j                   }}|D cg c]  }| j                  |       }}|D cg c]  }| j                  |       }	}t        |	|      D ]  \  }
}| j                  ||
        t        ||	      D cg c],  \  }}| j                  j                  ||| j                        . }}} || j                        j                  ||      }| j                  j                  ||      }t        j                   | j"                  |      }| j"                  j%                  |      5 \  }}|5  |D ]  }| j                  j'                  |        | j                  j)                  |       | j*                  j-                  | j"                         d d d        |5  | j                  j/                  |j0                  j2                  |      }|j4                  }| j                  j'                  |       |D ]  }| j                  j'                  |        t7        |j8                        r|j9                          | j                  j)                  |       | j"                  j;                  |j<                        5  | j*                  j-                  | j"                         d d d        |cd d d        cd d d        S c c}w c c}w c c}w c c}}w # 1 sw Y   BxY w# 1 sw Y   ?xY w# 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w)Nr   )ObjModeUtils)numba.core.pythonapir  r_   rW   
gil_ensurert   r   r   r   r  rr  from_native_valuer[   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_stater  ro   rp   	argvaluesvrZ  atypavalargobjscalleeret_objhas_exceptionthenorelseobjnativeoutputs                          rM   r  z#Lower._lower_call_ObjModeDispatcher  s   5JJ))+	$(II.IqAFFI.,45HqDKKNH5.67hT\\!_h	7H-EArKKA . &)9%=?%=ztT :://d040@0@B%= 	 ?
 djj)99$I**2267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6L1L2M
8A#L
M
%CL4&L(*	L43	M
L%	 M
(L1-L44L=	9M

Mc                    | j                  d       | j                  |||j                  |j                  |j                        }t        j                  |j                  |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    ./%%)TYYTXX
 44KK--txx}}>||55LL)||22LL$
 	
rO   c                    | j                  d       | j                  |||j                  |j                  |j                        }| j                  |j                  j                        }|j                  rS| j                          | j                  j                         }g }g }t        |j                  j                  |j                  |      D ]  \  }	}
}|	t        j                  k(  r\| j!                  |
|       | j                  j#                  |
|| j$                        }|j'                  |       |j'                  |       v|j'                  |        | j(                  j+                  | j,                  |||j.                        }|D ]  }| j                  j1                  |        | j                  j3                  |       |S | j(                  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_objectrr  r  r[   rs  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   >?%%)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gz4::C 

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

C 
rO   c                 t   | j                  |||j                  |j                  |j                        }|j	                  |j                        }| j
                  j                  xs t        }| j                  j                  } ||j                  |j                  ||j                        }| j                  j                  j                  j                  |      r4| j
                  j!                  | j                  | j                  ||      }	|	S | j
                  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_ovr!  r  mangled_namer  s
             rM   r  zLower._lower_call_RecursiveCall)  s    %%)TYYTXX
 ##INN3,,&&9/;;''v	(0fjjB <<  %%00>,,,,dkk9gC 
 ,,..lIwC 
rO   c                    | j                  d       t        j                  |      }|j                  |      s$t	        d| dt        j
                  |             |j                  }| j                  |||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   )r  )r   r
   ri  check_signaturer   r  ftyper  rt   r    r  _Lower__get_function_pointerre   r   rY   r
  r  )	rK   r  r  r   r   r)  r  func_ptrr  s	            rM   r  zLower._lower_call_FunctionType>  s    >?ooi(##I."!F)E,>,>s,C+DFG G 

%%#tyy$++txx
 ..udiinn#.Nll'D
rO   c           	      h   ddl m} | j                  j                  |      }| j	                  |      }| j
                  j                  |dd|z        }t        j                  | j
                  |d|z        }| j
                  j                  t        j                  | j
                  |      d      5 \  }	}
|	5  | j                          | j                  j                         }| j
                  j                  |dd	|z        } || j                  | j
                  ||d
      }| j
                  j                  t        j                  | j
                  |      d      5  | j                  t         | df| j"                         d d d        | j                  j%                  |      }| j
                  j'                  | j
                  j)                  ||      |       | j                  j+                  |       | j                  j-                  |       d d d        |
5  | j
                  j'                  | j
                  j)                  ||      |       d d d        d d d        | j
                  j/                  |      S # 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   DxY w# 1 sw Y   HxY w)Nr   )lower_get_wrapper_addressz
addr_of_%s)r   z
fptr_of_%sF)likelyra   zpyaddr_of_%signore)failure_modez function address is null)r   r@   ) numba.experimental.function_typer-  rB   get_value_typer   rY   r  r   alloca_oncer  r  r_   rW   r  r  r   RuntimeErrorr@   long_as_voidptrstorebitcastr  r  load)rK   r)  fnamer   r-  lltyfstructaddrfptrr  r	  r  pyaddraddr1addr2s                  rM   __get_function_pointerzLower.__get_function_pointerN  s>   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t#DdK

!!%(

&&y1- . ""4<<#7#7d#CTJ 58 ||  &&L L . 5 sV   4J(:B(J"'J	BJ
J("7JJ(J	JJ	J(J%	!J((J1c                    | j                  dj                  |             | j                  dj                  |             t        |t        j                        r|j
                  j                  }n3| j                  |||j                  |j                  |j                        }|j                  }|7ddlm}  ||      }|j                  j                  }|j                  ||      }	n| j                   j                  ||      }	|j"                  r4| j%                  |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_normalv  s   9@@FG+229=>dE334iinnG))iDKKG O.u5D%%44F&&tY7D<<,,T9=D?? ||DIINN3Hj4=0G4<<$((3
rO   c                 $   |j                   dk(  r| j                  |||j                        S |j                   dk(  rk| j                  |j                  j
                        }|j                  r| j                  |||j                        S | j                  |||j                        S |j                   dk(  r+| j                  |j                  j
                        }| j                  |j                  j
                        }| j                  j                  j                  |j                        }| j                  j                  |   }| j                  j                  ||      }| j                  j!                  | j"                  |||j$                  d         } || j"                  |g      }	| j                  j!                  | j"                  |	|j&                  |      }	|	S |j                   dk(  r| j)                  ||      }	|	S |j                   dk(  r| j                  |j                  j
                        }| j                  |j                  j
                        }
| j                  j+                  | j"                  ||
      }	| j-                  ||	       |	S |j                   dk(  r| j                  |j                  j
                        }| j                  |j                  j
                        }
| j                  j/                  | j"                  ||
      }	| j-                  ||	       |	S |j                   dv r| j                  |j                  j
                        }| j                  |j                  j
                        }
| j                  j                  |   }| j                  j                  |j                   |      }|j$                  \  }| j                  j!                  | j"                  ||
|      } || j"                  |f      }	| j                  j!                  | j"                  |	|j&                  |      }	|	S |j                   d	k(  rW| j                  |j                  j
                        }| j                  |j                  j
                        }
t1        |
t2        j4                        r>| j                  j!                  | j"                  ||
|
j6                        }|
j6                  }
t1        |
t2        j8                        r|
|k(  sJ | j-                  |
|       |S |
j:                  j<                  }| j                  j?                  |      }t3        j@                  |t2        jB                        }tE        jF                  |
j:                  |
      }| j                  j                  d
|      }tE        jF                  ||
j:                        }| j                  j                  d|      } || j"                  |f      }tI        |jJ                        D ]  } || j"                  |f      }| j                  j/                  | j"                  ||      }tM        jN                  | j"                  | j"                  jQ                  |            5  | jS                  tT        | jV                         d d d        | j                  j+                  | j"                  ||      }| j"                  jY                  |||      }  || j"                  |f      }| j                  j/                  | j"                  ||      }tM        jN                  | j"                  |      5  | jS                  tT        | jV                         d d d        | j[                  |
j:                  |       |S |j                   dk(  r| j                  |j                  j
                        }| j                  |j                  j
                        }
t1        |t2        j\                        rw| j                  j!                  | j"                  ||
|j^                        }| j                  ja                  | j"                  ||j^                        }	| j-                  ||	       |	S | j                  jc                  |
|jd                        }| j                  j                  jg                  |
|jd                        }|| j                  ji                         S  || j                  | j"                  |
||jd                        }	| j                  j!                  | j"                  |	||      }	|	S |j                   dk(  rtE        jF                  || j                  |j                  j
                        tk        |jl                              }	 | j                  j                  d|      } || j"                  | j                  |j                  j
                        |jl                  f      S |j                   dk(  rtE        jF                  || j                  |j                  j
                        | j                  |jl                  j
                              }| j                  j                  d|      } || j"                  | j                  |j                  j
                        | j                  |jl                  j
                        f      S |j                   dk(  rB| j                  j                  |   }| js                  |||j                  |jl                  |      S |j                   dk(  r|jt                  D cg c]  }| j                  |j
                         }}|jt                  D cg c]  }| j                  |j
                         }}tw        |||      D cg c].  \  }}}| j                  j!                  | j"                  |||      0 }}}}| j                  jy                  | j"                  ||      }| j-                  ||       |S |j                   dk(  r|jt                  D cg c]  }| j                  |j
                         }}|jt                  D cg c]  }| j                  |j
                         }}t1        |t2        jz                        rtw        ||j2                  |      D cg c].  \  }}}| j                  j!                  | j"                  |||      0 }}}}| j                  jy                  | j"                  t3        j|                  |j2                        |      }| j-                  ||       |S tw        ||      D cg c]7  \  }}| j                  j!                  | j"                  |||j~                        9 }}}| j                  j                  | j"                  ||      S |j                   dk(  r|jt                  d d d   } | D cg c]  }| j                  |j
                         }}| D cg c]  }| j                  |j
                         }}tw        ||      D cg c]7  \  }}| j                  j!                  | j"                  |||j~                        9 }}}| j                  j                  | j"                  ||      S |j                   dk(  r|jt                  } g g }"}!g g }$}#| D ]  \  }%}&| j                  |%j
                        }'| j                  |%j
                        }(| j                  |&j
                        }| j                  |&j
                        })|!j                  |'       |"j                  |       |#j                  |(       |$j                  |)        | j                  j                  | j"                  |t        tw        |#|$            t        tw        |!|"                  S |j                   dk(  r| j                  |j                  j
                        }| j                  |j                  j
                        }
| j                  j!                  | j"                  ||
|      }| j-                  ||       |S |j                   dk(  rt        d      |j                   dk(  r| j                  j                  |      S |j                   dk(  r| j                  j                  |      S |j                   | j                  j                  v r, | j                  j                  |j                      | |      }	|	S to        |      # 1 sw Y   
xY w# 1 sw Y   	xY w# tn        $ rR |jp                   | j                  j                  |   }| js                  |||j                  |jp                  |      cY S w xY wc c}w c c}w c c}}}w c c}w c c}w c c}}}w c c}}w c c}w c c}w c c}}w )Nbinopinplace_binopunaryr   r
  
pair_firstpair_second)getiteriternextexhaust_iterrR  rS  r   getattrstatic_getitemtyped_getitemr  build_tuple
build_list	build_setr%   	build_mapr.  phizPHI not strippednullundef)Hr  r  rh   r   r  r   mutableimmutable_fnr   r  rB   rK  rL  r'   r>  r   r.  rY   rt   r  r  rP  rr  rQ  r  r
   r8  r0  r  iterator_typer  get_constant_undefPairr/  r   r   r  countr   if_unlikelynot_r   
ValueErrorr@   insert_valuer  BoundFunctionthisget_bound_functionget_getattrrQ  resolve_getattrr   r  r!   r?  rA  r  r/   r  
make_tupleLiteralListTupledtyperY  rZ  rs  r[  r  r   get_constant_nullspecial_ops)*rK   r  r  r  r[  rv  func_tyr   r   r  rZ  ftycastvalitemtytuppairtygetiter_siggetiter_impliternext_sigiternext_impliterobjr  pairis_validitemcastedattrtyitemvalsitemtystotyfromtyr  r/   r>   r  	key_typesvalue_typeskr  rG  keytypevaltypes*                                             rM   r~  zLower.lower_expr  s$   77g##E499WW'++dhhmm,C{{''tTWW== ''tT5F5FGGWW,,tzz/C++djjoo.Cll11DDTWWMG--d3I<<,,Wi@D,,##DLL#sINN1<MNCt||cU+C,,##DLL#$-$9$95BCJWW//%.CJWW$,,tzz/CTZZ__-B,,))$,,R@CKKs#JWW%,,tzz/CTZZ__-B,,**4<<bACKKs#JWW//,,tzz/CTZZ__-B--d3I<<,,TWWi@DNNESll''c2sCGt||gZ0C,,##DLL#y7L7L$)+CJWW&,,tzz/CTZZ__-B"enn-ll''c2rwwGWW "eoo.U{"{B$
%%00F,,11%8CZZ6F **2+;+;R@K<<44Y5@BL!++FB4D4D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 **4<<b%**Mll55dllF6;jjBE3'
||//DII>44DDREIYYP <<<7799t||T\\2sDII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%%eT4::tzz&/1 1 WW%6:jjAjQVV,jHA48JJ?Jqt{{166*JG?14Xug1NP1N-Cv ))$,,VTJ1N  P,,))$,,xHCKKs#JWW$6:jjAjQVV,jHA48JJ?Jqt{{166*JG?%!2!23585;;9@6BC6B 1T6 !LL--dllCN6B  C ll--dll.3kk%++.F.68 E3'
 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''c2uEGKKw'NWW 233WW<<11%88WW <<11%88WW0003$,,**4773D$?CJ!$''wF F =<Z ' E>>) !KK11$7	))%tzz*...)E EE. B?P B?CG =:Cs}   "AE""AE(8AAE5 '"AG"AG3AG"AG$"AG))3AG.<AG5"AG;:"AH -<AHEAE%	E(AE2E5AAGGAGc                     || j                   v ry|| j                  vs| j                  r"| j                  ||      }|| j                   |<   yy)zT
        Ensure the given variable has an allocated stack slot (if needed).
        N)r<   r   r   alloca)rK   r   r  ptrs       rM   r  zLower._alloca_var  sO     4;; 333++++dF+C #DKK	 ,rO   c                     | j                   s || j                  vsJ || j                  vsJ || j                  vr!| j	                  || j                  |             | j                  |   S )z=
        Get a pointer to the given variable's slot.
        )r   r   r   r<   r  r   )rK   r   s     rM   getvarzLower.getvar  sk     **t55555t99999t{{" T4;;t#45{{4  rO   c                 |   || j                   v r| j                  s| j                   |   S | j                  |      }|| j                  j                  v rDt        j                  | j                        5  | j                  j                  |      cddd       S | j                  j                  |      S # 1 sw Y   yxY w)z2
        Load the given variable's value.
        N)	r   r   r  r0   	arg_namesr   r   rY   r8  )rK   r   r  s      rM   r   zLower.loadvar  s     4)))$2M2M))$//kk$ 4<<)))++DLL9||((- :9 <<$$S)) :9s   2B22B;c           
         | j                  |      }| j                  ||       || j                  v r| j                  s|| j                  |<   y|#| j                  |      }| j                  ||       | j                  |      }|j                  |j                  j                  k7  r dj                  ||||      }t        |      |t        j                  | j                        5  | j                  j                  ||       ddd       | j                   }| j"                  j%                  |      }	| j"                  j'                  |	      }
| j"                  j(                  |   }| j                  j+                  | j                  |||	|
|j,                  ||       y| j                  j                  ||       y# 1 sw Y   xY w)z:
        Store the value into the given variable.
        NzNStoring {value.type} to ptr of {ptr.type.pointee} ('{name}'). FE type {fetype})r  r  r  r   )r   lltypesizerc   	datamodelr$  )r   r  r   r   r   r   r  r  r0  pointeer   AssertionErrorr   r   rY   r6  rG   rB   r2  get_abi_sizeofdata_model_managermark_variablerc   )rK   r  r   r$  r  oldr  rk   r@   r  sizeofr  s               rM   r+  zLower.storevar  s    T"v& D...//+0D""4(~ ll4(FC( ++d#CzzSXX---67=vEBEEKCG 8> 8I 
 %S))
 !//=LL&&uc2 >mm44V<44V< LL;;FC	,,T\\3T4:25((i4: - <
 ""5#. >=s   (F==Gc                 4   | j                  |      }|| j                  vr5| j                  s)|| j                  v r| j                  j	                  |       | j                  ||       || j                  v r.| j                  s"| j                  |   }| j                  ||       y| j                  |      }| j                  || j                  j                  |             | j                  j                  t        |j                  j                  d      |       y)z,
        Delete the given variable.
        N)r   r   r   r   discardr  r  r  rY   r8  r6  r   r0  r  )rK   r   r  llvalr  s        rM   rN  zLower.delvar  s     T" ...//t111**2248 	v&4)))$2M2M**40EKK&++d#CKK 1 1# 67LLx(8(8$?ErO   c                     | j                   j                  |      }| j                   j                  |   }| j                  |||      S )N)r  )rB   r2  r  alloca_lltype)rK   r   r0  r  r  s        rM   r  zLower.alloca  sB    ,,T2LL33D9	!!$)!DDrO   c           	      Z   |j                  d       }t        j                  | j                  ||d      }|rs|| j                  j
                  vr[| j                  j                  |      }| j                  j                  | j                  ||||| j                  j                  |       |S )N$F)r   zfill)r   r  r  rc   r  )r"  r   r3  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;  4<<11144V<,,T\\4d4:26((--7@ - C rO   c                     | j                   j                  sy | j                   j                  j                  | j                  ||       y rQ   )rB   r   nrtrr  rY   rK   rv  r[  s      rM   rr  zLower.incref  s2    ||&&c37rO   c                     | j                   j                  sy t        j                  | j                        5  | j                   j
                  j                  | j                  ||       d d d        y # 1 sw Y   y xY wrQ   )rB   r   r   r   rY   r  r  r  s      rM   r  zLower.decref  sR    ||&&
 ''5LL##DLL#s; 655s   2A22A;rQ   )+r   r   r   r   r   rJ   r   r   r   r   r   r   r@  rU  rS  rW  rY  r)  r  r  r  r  r  rC  r  r  r  r  r  r  r*  r  r~  r  r  r   r+  rN  r  r  rr  r  __classcell__)r   s   @rM   r   r   S  s    ..N.
 K K%$N$LI2V:>*
E&OL06dL4D L(,?%N$:((T>@
+Z* &'P8p(d$ !*$,/\F2E
(8<rO   r   c                 v    	 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  %  s4    $}}U## $}}U##$s    88)-collectionsr   r   rI  rf   	functoolsr   llvmlite.irr1  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     su    /     +& & & &6 6 0 . A A (;<x! x!v	O<I O<d&$rO   