
    ܙd                     <   d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dl	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 d dlmZmZmZmZ d dlmZmZ d dl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+  eej,                  d             Z- eej.        ej/        ej/                  d             Z0 eej1        ej/        ej/                  d             Z2 eej1        ej3        ej3                  d             Z4 eej1        ej5        ej5                  d             Z6 eej7        ej8        ej8                   eej7        ej9        ej9                  d                         Z: eej;        ej8        ej8                   eej;        ej9        ej9                  d                         Z<d Z=  eej7                   e=d                       eej;                   e=d                      eej>                  d             Z? eej/        ej>                   eej@        ej>                   eej5        ej>                  d                                     ZA eej>        ej/                   eej>        ej5                   eej>        ej@                  d                                     ZB eejC        ejD        ejE                  d             ZF eejG        ejD        ejE        ej/                  d             ZHd ZI eeJejK                  d             ZL eeJ ejM        ej/                            d             ZN eeOejK                  d             ZP eeO ejM        ej/                            d             ZQd  ZR eeSejT                  d!             ZU eeSejT        ejE                  d"             ZV eeWej/                   eeXej/                  d#                         ZY eeZ ejM        ej/                            d$             Z[ eej\        ej/                  d%             Z] eej^                  d&             Z_ eej`                  d'             Za eej@                  d(             Zb eecej/                  d)             Zd eeeejf                  d*             Zg eeheji                  d+             Zj ed,ej/        ej/                  d-             Zk eelejm                  d.             Zn eeoejp                  d/             Zq eer          d0             Zs eerejK                  d1             Zt eeo          d2             Zu eeod34          d5             Zvd6 Zwd7 Zx eexej\                   eexejy                  d8                         Zz eewej\                   eewejy                  d9                         Z{d d:l|m}Z}m~Z~ d d;lmZmZ  ee}ej        ej                   ee}ej        ej                  d<                         Z eeO          d=             Z eeO          d>             Z eeJ          d?             Z eeJ          d@             Z edA           Z edB           ZedC             Z eeO          dD             Z eeJ          dE             Z eej         ejM        ej/                            dF             Z ee          dYdG            Z ee          dH             Z ee          dI             ZdJ Z ee          dK             Z ee          dL             ZdM Z ee          dN             ZedO             Z edPdQ          Z e            Z eedR          dS             Z ee          dT             ZedU             Z ee          dV             Z ee          dW             Z ee          dZdX            ZdS )[    )
namedtupleN)reduce)ir)lower_builtinlower_getattrlower_getattr_generic
lower_castlower_constantiternext_implcall_getitercall_iternextimpl_ret_borrowedimpl_ret_untrackednumba_typeref_ctor)typingtypesutilscgutils)overload	intrinsic)
Conversion)TypingErrorLoweringErrorNumbaExperimentalFeatureWarningNumbaTypeErrorRequireLiteralValueNumbaPerformanceWarning)literal_unroll)as_numba_typec                 D    t          | t          j                  rd }|S d S )Nc                     | S N )vals    6lib/python3.11/site-packages/numba/cpython/builtins.pyimplzol_truth.<locals>.impl   s    J    
isinstancer   Boolean)r$   r&   s     r%   ol_truthr+      s4    #u}%% 	 	 	 r'   c                     |                      t          j        |          }|                     |||                    S )z3
    Implement `x is not y` as `not (x is y)`.
    )get_functionoperatoris_not_)contextbuildersigargsis_impls        r%   generic_is_notr6   #   s9    
 ""8<55G<<..///r'   c                     |j         \  }}||k    ra|j        rd}t          |          	 |                     t          j        |          } |||          S # t          $ r t          j        cY S w xY wt          j        S )z-
    Default implementation for `x is y`
    zno default `is` implementation)	r4   mutabler   r-   r.   eqNotImplementedErrorr   	false_bit)r1   r2   r3   r4   lhs_typerhs_typemsgeq_impls           r%   
generic_isr@   ,   s    
 Hh8 26#C(((2%228;DDG
 #77D111	 + - - -",,,,-   s    A A/.A/c                     |j         \  }}||k    rc|                    |d         t          j                  }|                    |d         t          j                  }|                    d||          S t          j        S )z7
    Implementation for `x is y` for Opaque types.
    r      z==)r4   ptrtointr   intp_ticmp_unsignedr;   )r1   r2   r3   r4   r<   r=   lhs_ptrrhs_ptrs           r%   	opaque_isrH   F   sr    
 Hh8""47GN;;""47GN;;$$T7G<<<  r'   c                 h   |\  }}|j         \  }}|                     |||t          j                  }|                     |||t          j                  }	|                     t
          j        t          j        t          j        t          j        t          j                            }
 |
|||	f          S )z
    Implementation for `x is y` for types derived from types.Boolean
    (e.g. BooleanLiteral), and cross-checks between literal and non-literal
    booleans, to satisfy Python's behavior preserving identity for bools.
    )	r4   castr   booleanr-   r.   r9   r   	signature)r1   r2   r3   r4   arg1arg2	arg1_type	arg2_type_arg1_arg2r?   s              r%   bool_is_implrS   V   s     JD$8IyLL$	5=AAELL$	5=AAE""u}EE G 77UEN+++r'   c                     |j         \  }}d}|j        |j        k    rd}t          j        t          j        d          |          }t          | ||j        |          S Nr   rB   r4   literal_valuer   ConstantIntTyper   return_typer1   r2   r3   r4   rM   rN   r$   ress           r%   const_eq_implr]   i   Y     JD$
CT///
+bjmmS
)
)CgwEEEr'   c                     |j         \  }}d}|j        |j        k    rd}t          j        t          j        d          |          }t          | ||j        |          S rU   rV   r[   s           r%   const_ne_implr`   u   r^   r'   c                       fd}|S )Nc                     t          | t          j                  }t          |t          j                  }|r	|rfd}|S ||z  rfd}|S d S )Nc                     S r"   r#   abr$   s     r%   r&   z/gen_non_eq.<locals>.none_equality.<locals>.impl   s    
r'   c                 
     S r"   r#   rd   s     r%   r&   z/gen_non_eq.<locals>.none_equality.<locals>.impl   s
    wr'   r)   r   NoneType)re   rf   a_noneb_noner&   r$   s        r%   none_equalityz!gen_non_eq.<locals>.none_equality   s    Au~..Au~.. 	f 	    Kf_ 	    K	 	r'   r#   )r$   rl   s   ` r%   
gen_non_eqrm      s$    
 
 
 
 
 r'   TFc                     |                                 }|                     ||||          }|                     ||          } || ||||          S )z>
    Deferred.__getattr__ => redirect to the actual type.
    )getrJ   get_getattr)r1   r2   typvalueattr
inner_typer$   imps           r%   deferred_getattrrv      sU    
 J
,,wsJ
7
7C


j$
/
/C3wS$777r'   c                     |                      ||||                                          }| j        |         }|                    ||                                |          S r"   )rJ   ro   data_model_managersetmake_uninitialized)r1   r2   fromtytotyr$   actualmodels          r%   any_to_deferredr      sR     \\'3

;;F&t,E99We6688&AAAr'   c                     | j         |         }|                    ||          }|                     |||                                |          S r"   )rx   ro   rJ   )r1   r2   r{   r|   r$   r~   s         r%   deferred_to_anyr      sD     &v.E
))GS
!
!C<<fjjllD999r'   c                     |\  }}|                     ||g          }|                    |          }t          | ||j        |          S r"   )geploadr   rZ   )r1   r2   r3   r4   base_ptridxelem_ptrr\   s           r%   getitem_cpointerr      sG    MHc{{8cU++H
,,x
 
 CWgsDDDr'   c                 l    |\  }}}|                     ||g          }|                    ||           d S r"   )r   store)r1   r2   r3   r4   r   r   r$   r   s           r%   setitem_cpointerr      s=    Hc3{{8cU++HMM#x     r'   c                      t          |          t          |          k    sJ ||f            t          |          dk    sJ  fd}t          ||          }t          ||          \  }}|S )Nr   c                 t   | \  }}|\  }}j                             ||          }|J                     |||          }                    |||          }t          j        t
          j        ||          }                    |          } |||f          }	                    |	||          }
||
fS r"   )	typing_contextunify_typesrJ   r   rL   r   rK   r-   select)accumulatorrr   acctyaccvtyvtycmpsiggepredr\   r2   cmpopr1   s              r%   binary_minmaxz do_minmax.<locals>.binary_minmax   s     !
sQ#//s;;~~~ll7C33LL!S"--!%-R88!!%00r'As8$$nnT1c**3wr'   )lenzipr   )	r1   r2   argtysr4   r   r   typvalsrestyresvals	   ``  `    r%   	do_minmaxr      s    v;;#d))###fd^###t99q====       &$G='22ME6Mr'   c                     t          |j        d                   }t          j        ||d                   }t	          | |||t
          j                  S Nr   )listr4   r   unpack_tupler   r.   gtr1   r2   r3   r4   r   s        r%   max_iterabler      C    #(1+Fa11DWgvtX[AAAr'   c                 F    t          | ||j        |t          j                  S r"   )r   r4   r.   r   r1   r2   r3   r4   s       r%   
max_varargr          Wgsxx{CCCr'   c                     t          |j        d                   }t          j        ||d                   }t	          | |||t
          j                  S r   )r   r4   r   r   r   r.   ltr   s        r%   min_iterabler      r   r'   c                 F    t          | ||j        |t          j                  S r"   )r   r4   r.   r   r   s       r%   
min_varargr      r   r'   c                     d| j         fz  S )Nzllvm.rint.f%d)bitwidth)tps    r%   _round_intrinsicr      s    bk^++r'   c                 |   |j         d         }|                     |          }|j        }t          j        ||g          }t          j        ||t          |                    }|                    ||          }	|	                    |	|                     |j
                            }	t          | ||j
        |	          S r   )r4   get_value_typemoduler   FunctionTyper   get_or_insert_functionr   callfptosirZ   r   )
r1   r2   r3   r4   flttylltyr   fntyfnr\   s
             r%   round_impl_unaryr      s    HQKE!!%((D^F?4$((D		'6Fu6M6M	N	NB
,,r4
 
 C
..g44S_EE
F
FCgwEEEr'   c                     |j         d         }t          j        t          |          t	          j        ||                    fd}|                     ||||          }t          | ||j        |          S )Nr   c                 $   t          j        |           st          j        |           r| S |dk    rG|dk    rd|dz
  z  }d}nd|z  }d}| |z  |z  }t          j        |          r| S  |          |z  |z  S d| z  }| |z  } |          |z  S )Nr      g      $@gMDg      ?)mathisinfisnan)xndigitspow1pow2y_rounds        r%   round_ndigitsz(round_impl_binary.<locals>.round_ndigits  s    :a== 	DJqMM 	Ha<<|| "-wTT!Az!}} F1II$,, WH%DDA6!99t##r'   )	r4   r   ExternalFunctionr   r   rL   compile_internalr   rZ   )r1   r2   r3   r4   r   r   r\   r   s          @r%   round_impl_binaryr      s    HQKE #!1%!?!?A AF$ $ $ $ $. 
"
"7M3
E
ECgwEEEr'   c                     |j         \  }|\  }|                     ||||j                  }t          | ||j        |          S r"   )r4   rJ   rZ   r   )r1   r2   r3   r4   r   r$   r\   s          r%   int_implr   $  sC     8DRES
,,wR
9
9CgwEEEr'   c                    |j         }|j        }t          |j                  dk    r|j        \  }|\  }t	          |t
          j                  r/|                     ||||          }t          | ||j         |          S |                     ||||          }	| 	                    |d          }
nWt          |j                  dk    r?|j        \  }}|\  }	}
|                     ||	||          }	|                     ||
||          }
| 
                    ||          }|	|_        |
|_        |                                }t          | ||j         |          S )NrB   r      )rZ   underlying_floatr   r4   r)   r   ComplexrJ   r   get_constantmake_complexrealimag	_getvalue)r1   r2   r3   r4   complex_type
float_typeargtyargr\   r   r   realtyimagtycmplxs                 r%   complex_implr   -  sA   ?L.J
38}}(eU]++ 	7,,wULAAC%gwMMM<<eZ@@D''
A66DD	SX!		8t||GT6:>>||GT6:>>  ,77EEJEJ
//

CgwEEEr'   c                    t          |j        t          j                  r@|j        j        fd}|                     ||||          }t          | ||j        |          S |\  }|j        \  }|                     ||||j                  S )z1
    Call a number class, e.g. np.int32(...)
    c                  0    t          j        |           S )N)dtype)nparray)arg_hackdts    r%   fooznumber_constructor.<locals>.fooQ  s    8HB////r'   )	r)   rZ   r   Arrayr   r   r   r4   rJ   )	r1   r2   r3   r4   r   r\   r$   valtyr   s	           @r%   number_constructorr   I  s    
 #/5;// B_"	0 	0 	0 	0 	0&&wS$??!'7COSIII (||GS%AAAr'   c                 *    |                                  S r"   get_dummy_valuer1   r2   r   pyvals       r%   constant_dummyr   _  s     ""$$$r'   c                     |                      |          }|                     ||                    |          t          |                    }|                    ||          S )N)info)get_function_pointer_typeadd_dynamic_addrget_pointerstrbitcast)r1   r2   r   r   ptrtyptrvals         r%   constant_function_pointerr  d  s\    --b11E%%gr~~e/D/D+.u:: & 7 7F??65)))r'   c                 t    ||                      ||j                  S |                     ||j        |          S r"   )make_optional_nonetypemake_optional_valuer   s       r%   constant_optionalr  l  s9    }))'27;;;**7BGUCCCr'   c                 *    |                                  S )z&
    One-argument type() builtin.
    r   r   s       r%   	type_implr  v  s    
 ""$$$r'   c                 D    |j         \  }|\  }t          | |||          }|S r"   )r4   r   )r1   r2   r3   r4   r   r$   itervals          r%   	iter_implr  ~  s*    
(CBDC7GR55GNr'   c                 R   |j         \  }|\  }t          | |||          }|                    |                    |                                          d          5  | j                            |t          d           d d d            n# 1 swxY w Y   |                                S )NF)likelyr#   )	r4   r   if_thenr0   is_valid	call_convreturn_user_excStopIterationyielded_value)r1   r2   r3   r4   itertyr
  r\   s          r%   	next_implr    s    hGFHG
&'
:
:C	cllnn55e	D	D F F))'="EEEF F F F F F F F F F F F F F F s   "B

BBznot inc                 b    d }|                      ||||          }|                    |          S )Nc                 ,    t          j        ||           S r"   )r.   containsre   rf   s     r%   in_implznot_in.<locals>.in_impl  s     A&&&r'   )r   r0   )r1   r2   r3   r4   r  r\   s         r%   not_inr    s>    ' ' ' 
"
"7GS$
?
?C<<r'   c                     |j         \  }|j        }|                     |t          |j                            }t          | ||j        |          S r"   )r4   rZ   r   r   r   r   )r1   r2   r3   r4   r   rettyr\   s          r%   constsized_lenr    sE    8DROE


uc"(mm
4
4CgwEEEr'   c                 b    |j         \  }t          |          rt          j        S t          j        S r"   )r4   r   r   true_bitr;   )r1   r2   r3   r4   r   s        r%   
sized_boolr!    s+    8DR
2ww !  r'   c                 h    |j         }|                     |          }t          | ||j         |          S r"   )rZ   get_constant_undefr   )r1   r2   r3   r4   r  r\   s         r%   lower_empty_tupler$    s2    OE

$
$U
+
+CgwEEEr'   c                 8    |\  }t          | ||j        |          S r"   )r   rZ   )r1   r2   r3   r4   r$   s        r%   lower_tupler&    s    DCWgsDDDr'   c                     t           j        t           j        t           j        t           j        t           j        t           j        f}t          | |          rd }|S d S )Nc                 (    t          |           dk    S r   )r   r   s    r%   	bool_implz bool_sequence.<locals>.bool_impl  s    q66A:r'   )r   CharSeqUnicodeCharSeqDictTypeListTypeUnicodeTypeSetr)   )r   valid_typesr*  s      r%   bool_sequencer2    s^     		K ![!! 	 	 	 r'   always)inlinec                 D    t          | t          j                  s| d S d S )Nc                     dS NFr#   r)  s    r%   <lambda>zbool_none.<locals>.<lambda>  s     r'   rh   r)  s    r%   	bool_noner9    s)    !U^$$ 	 )2	r'   c                     t          | t          j                  rt          j        S t          | t          j                  r| j        S t          d          NzUnsupported type)r)   r   Floatr   infIntegermaxvalr:   rq   s    r%   get_type_max_valuerA    sH    #u{## v#u}%% z
0
1
11r'   c                     t          | t          j                  rt          j         S t          | t          j                  r| j        S t          d          r;  )r)   r   r<  r   r=  r>  minvalr:   r@  s    r%   get_type_min_valuerD    sJ    #u{## w#u}%% z
0
1
11r'   c                    |j         d         j        }t          |t          j                  r9|j        }t          j        |          }|j        }t          j	        ||          }nt          |t          j
                  r|j        }|dk    rt          j                    }n)|dk    rt          j                    }nt          d          t          t          d                    |                    }	t          j	        |t          j                   }net          |t          j        t          j        f          r?d}t          j        |          }t          j        j        dz   }t          j	        ||          }t+          | |||          S )Nr       @   +llvmlite only supports 32 and 64 bit floatsfloat{}rB   )r4   r   r)   r   r>  r   r   rY   rC  rX   r<  	FloatType
DoubleTyper:   getattrr   formatr=  
NPDatetimeNPTimedeltaint64r   
r1   r2   r3   r4   rq   bwltyr$   r\   nptys
             r%   lower_get_type_min_valuerU    sA    (1+
C#u}%% $\jnnjk#s##	C	%	% $\88,..CC2XX-//CC%&STTTr9++B//00k#w''	C%*E,=>	?	? $jnnk 1$k#s##gwS999r'   c                    |j         d         j        }t          |t          j                  r9|j        }t          j        |          }|j        }t          j	        ||          }nt          |t          j
                  r|j        }|dk    rt          j                    }n)|dk    rt          j                    }nt          d          t          t          d                    |                    }	t          j	        |t          j                  }nbt          |t          j        t          j        f          r<d}t          j        |          }t          j        j        }t          j	        ||          }t+          | |||          S )Nr   rF  rG  rH  rI  )r4   r   r)   r   r>  r   r   rY   r?  rX   r<  rJ  rK  r:   rL  r   rM  r=  rN  rO  rP  r   rQ  s
             r%   lower_get_type_max_valuerW    s:    (1+
C#u}%% $\jnnjk#s##	C	%	% $\88,..CC2XX-//CC%&STTTr9++B//00k#rv&&	C%*E,=>	?	? $jnnk k#s##gwS999r'   )
IndexValueIndexValueType)r   register_jitablec                     |j         }|\  }} t          j        |          | |          }||_        ||_        |                                S r"   )rZ   r   create_struct_proxyindexrr   r   )r1   r2   r3   r4   rq   r]  rr   index_values           r%   impl_index_valuer_    sR     /CLE52'-c227GDDKKK  """r'   c                 h    t          | t                    rt          |t                    rd }|S d S d S )Nc                 8   t          j        | j                  r/t          j        |j                  r| j        |j        k     r| S |S | S t          j        |j                  r|S | j        |j        k    r|S | j        |j        k    r| j        |j        k     r| S |S | S r"   r   r   rr   r]  indval1indval2s     r%   min_implzindval_min.<locals>.min_impl*      x&& #8GM** #}w}44&& #N'-(( 	#..'-//=7=00"N"NNr'   r)   rY  )rd  re  rf  s      r%   
indval_minri  &  P    '>** '>**	 	 	, 1   r'   c                 |    t          | t          j                  rt          |t          j                  rd }|S d S d S )Nc                 
    | o|S r"   r#   val1val2s     r%   bool_min_implz"boolval_min.<locals>.bool_min_implG  s    =D r'   r(   )rn  ro  rp  s      r%   boolval_minrq  C  sS    $&& $&&	! 	! 	!	   r'   c                 h    t          | t                    rt          |t                    rd }|S d S d S )Nc                 8   t          j        | j                  r/t          j        |j                  r| j        |j        k     r| S |S | S t          j        |j                  r|S |j        | j        k    r|S | j        |j        k    r| j        |j        k     r| S |S | S r"   rb  rc  s     r%   max_implzindval_max.<locals>.max_implP  rg  r'   rh  )rd  re  rt  s      r%   
indval_maxru  L  rj  r'   c                 |    t          | t          j                  rt          |t          j                  rd }|S d S d S )Nc                 
    | p|S r"   r#   rm  s     r%   bool_max_implz"boolval_max.<locals>.bool_max_implm  s    <4r'   r(   )rn  ro  rx  s      r%   boolval_maxry  i  sS    $&& $&&	  	  	 	   r'   c                     | |k    S r"   r#   r  s     r%   r8  r8  r  s
    QU r'   c                     | |k     S r"   r#   r  s     r%   r8  r8  s  s
    !a% r'   c                 J    t          | t          j                  rfd}|S d S )Nc                 j    t          |           }t          |          }|D ]} ||          r|}|S r"   )iternext)iterableit
return_valr$   ops       r%   r&   zmin_max_impl.<locals>.imply  sH    hBbJ % %2c:&& %!$Jr'   )r)   r   IterableType)r  r  r&   s    ` r%   min_max_implr  v  sB    (E.// 	 	 	 	 	  r'   c                 ,    t          | t                    S r"   )r  	less_thanr  s    r%   iterable_minr    s    ),,,r'   c                 ,    t          | t                    S r"   )r  greater_thanr  s    r%   iterable_maxr    s    ,///r'   c                    |j         }d }t          j                            |j                  }t          j        |t          j        |          |          }t          |          dk    r,| 	                                | 
                    |||          f}n+| 	                                | 
                    ||d          f}|                     ||||          S )ae  Redirect constructor implementation to `numba_typeref_ctor(cls, *args)`,
    which should be overloaded by the type's implementation.

    For example:

        d = Dict()

    `d` will be typed as `TypeRef[DictType]()`.  Thus, it will call into this
    implementation.  We need to redirect the lowering to a function
    named ``numba_typeref_ctor``.
    c                     t          | g|R  S r"   )r   )clsr4   s     r%   	call_ctorz%redirect_type_ctor.<locals>.call_ctor  s    !#-----r'   r   r#   )rZ   r   Tuple
from_typesr4   r   rL   TypeRefr   r   
make_tupler   )r1   r2   r3   r4   r  r  	ctor_argss          r%   redirect_type_ctorr    s     /C. . . &&sx00I

3c 2 2I
>
>C
9~~''))""7It<<> ''))""7Ir::< ##GYTBBBr'   c                    d }t          |t          j                  rd}n9t          |t          j                  rd}nt          |t          j                  rd}| dj        | }t          |          t          | t          j        j        t          j	        t          j
        t          j        t          j        f          rt          n)t          | t          j        j                  rt          nd S dfd	}|S )N)strings )bytesrf   )	bytearrayrf   z/sum() can't sum {} [use {}''.join(seq) instead]r   c                 2    |} |           D ]}||z   }|S r"   r#   )r  startr   r   iterators       r%   r&   zol_sum.<locals>.impl  s1    (## 	 	A'CC
r'   r   )r)   r   r/  Bytes	ByteArrayrM  r   
containers_HomogeneousTupleListr.  r   	RangeTyper~  _HeterogeneousTupler   )r  r  errorr>   r&   r  s        @r%   ol_sumr    s    E%*++ #	E5;	'	' #	E5?	+	+ #"F?FN# (U-?"^U[%/K L L 	Hu/C	E	E  "t      Kr'   c                     d }|S )Nc              7   8   K   t          |g|R  D ]	} | | V  
d S r"   )r   )funcr  r4   r   s       r%   r&   zol_map.<locals>.impl  s@      X%%%% 	 	A$(NNNN	 	r'   r#   )r  r  r4   r&   s       r%   ol_mapr    s       Kr'   c                 L    | t          | t          j                  rd }nd }|S )Nc              3       K   |D ]}|r|V  	d S r"   r#   r  r  r   s      r%   r&   zol_filter.<locals>.impl  s1         GGG r'   c              3   2   K   |D ]} | |          r|V  d S r"   r#   r  s      r%   r&   zol_filter.<locals>.impl  s9        477 GGG r'   rh   )r  r  r&   s      r%   	ol_filterr    sA    D%.99	 	 	 	
	 	 	 Kr'   c                     d S r"   r#   vartypss     r%   _isinstance_no_warnr    s    Dr'   c                 \    d}t          j        |t                     t          | |          S )Nz>Use of isinstance() detected. This is an experimental feature.)category)warningswarnr   ol_isinstance_no_warn)r  r  r>   s      r%   ol_isinstancer    s0     KCM# ?@@@@ d+++r'   c                    d }d }t          |           }t          |t          j                  rd| d}t	          |          t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        f}t          ||          sd| d}t	          |          |}t          |t          j                  r|j        d         }t          |t          j                  s|f}|D ]&}t          |t          j                  r|j        d         }	n$t          |t          j                  r|}	n|j        }	t,          t          j        t.          t          j        t0          t          j        t          j	        ft2          t          j
        t4          t          j        t8          t          j        i}
|	|
v rt          ||
|	                   r|c S t          |t          j                  rB|	t          j        t          j        fvrd}t	          |          t=          |          |	u r|n|c S t          |	          }||k    r|c S t          |t          j                  r3t          |t          j                  r|j        |j        j        k    r|c S t          |t          j                   rh|j        d         t          j!        k    rMt          ||j"                  s4t          |t          j                  rt          |t          j                  r|c S (|S )	Nc                     dS )NTr#   r  s     r%   	true_implz(ol_isinstance_no_warn.<locals>.true_impl  s    tr'   c                     dS r7  r#   r  s     r%   
false_implz)ol_isinstance_no_warn.<locals>.false_impl  s    ur'   z1isinstance cannot handle optional types. Found: ""z1isinstance() does not support variables of type "z".r   zLNumba type classes (except numba.typed.* container types) are not supported.)#r   r)   r   Optionalr   Numberr  r  r-  LiteralStrKeyDictr  r.  r  UniTupler0  Function	ClassTyper/  ClassInstanceTyperi   r   keyr  rangedictr   tuple	BaseTuplery   r  r  instance_type	Container	undefined	__class__)r  r  r  r  var_tyr>   supported_var_tyt_typsrq   r  types_not_registered	numba_typs               r%   r  r    s2        3F&%.)) "K&KKKS!!! ek5?(?U^UY9J/	N
 f.// "L&LLLS!!!F &%.)) !*Q-fek**  2% 2%c5>** 	'!*CCU_-- 	CC'C
 5;5?5>5#:;%*5? 
 &&&&"6s";<< !    c5=)) 	% 5>5>:::3$S))) !%V 3 399CCC%c**I""    Iu77 %vu'>??%J)"9"===    Iu77 %M!$77fi&9:: %88%"9eo>>% %$$$r'   c                     d S r"   r#   objnames     r%   _getattr_raise_attr_excr  [  s	     	Dr'   c                     t          |t          j                  st          d          |j        }d|  d| dfd}|S )N(argument 'name' must be a literal string'z' has no attribute 'c                 "    t                    r"   )AttributeError)r  r  messages     r%   r&   z(ol__getattr_raise_attr_exc.<locals>.implh  s    W%%%r'   )r)   r   StringLiteralr   rW   )r  r  lnamer&   r  s       @r%   ol__getattr_raise_attr_excr  a  sf    dE/00 N!"LMMME3#335333G& & & & &Kr'   c                   	
 t          |t          j                  st          d          |j        
|                     
          t          t          j                  rd d
 d d}t          |          t          t          j                  rj	        t          k    s |          }fd}n|                     t                    		                    | |fi           t          j        |          }	fd}nL |          }t          t          j                  rfd}n|                     
          
fd	}||fS )
Nr  zQReturning function objects is not implemented. getattr() was requested to return z from attribute 'z' of .c                 P    |d         }| j                             ||           |S N)nrtincref)cgctxr2   r3   llargstmpdefaults        r%   r&   zresolve_getattr.<locals>.impl  s+    Rj	  '3777
r'   c                 X    |                                } |||d d                   S r  )r-   )r  r2   r3   r  native_implr   	raise_sigs        r%   r&   zresolve_getattr.<locals>.impl  s2    #00yAA"{7F3B3K888r'   c                     j         }|                     ||d         |          }|                     |||          }| j                            ||           |S r   )thisrJ   get_bound_functionr  r  )	r  r2   r3   ll_args	cast_typecastedr\   r   r  s	          r%   r&   zresolve_getattr.<locals>.impl  s[    G	GWQZiHH..w	JJ	  "c222
r'   c                     |                      
	          } || |
|d         	          }|                     ||          }| j                            ||           |S r   )rp   rJ   r  r  )r  r2   r3   r  	attr_implr\   r  attrtyr   r  r  s          r%   r&   zresolve_getattr.<locals>.impl  si    !--c599	iwWQZGGGS&"==	  "f555r'   )r)   r   r  r   rW   resolve_getattrr  r   
NamedTupleinstance_class_getattr_default_typeresolve_value_typer  get_call_typenoneBoundFunction)tyctxr  r  r  r>   r3   r&   r  r   r   r  r  s    ` `   @@@@@r%   r  r  m  s   dE/00 N!"LMMME			sE	*	*B "en%% &46& && &"& & & #	z 7E$455 	9&*???'#tW--C      ++,CDDD**53+rBBI*S$00C9 9 9 9 9 9 9
 bdG$$b%-.. 	       **366F        9r'   r   r  )prefer_literalc                     d }|S )Nc                 .    t          | |t                    S r"   )r  _getattr_defaultr  s     r%   r&   zol_getattr_2.<locals>.impl  s    sD*:;;;r'   r#   r  r  r&   s      r%   ol_getattr_2r    s    < < <Kr'   c                     d }|S )Nc                 $    t          | ||          S r"   )r  )r  r  r  s      r%   r&   zol_getattr_3.<locals>.impl  s    sD'222r'   r#   )r  r  r  r&   s       r%   ol_getattr_3r    s    3 3 3Kr'   c                    t          |t          j                  st          d          |j        }|                     ||          t          j        d          }nt          j        d          } |||          }fd}||fS )Nr  FTc                 8    t           j        nt           j        S r"   )r   r;   r   )r  r2   r3   r  r   s       r%   r&   zresolve_hasattr.<locals>.impl  s    #%:g73CCr'   )r)   r   r  r   rW   r  literal)r  r  r  r  r  r3   r&   r   s          @r%   resolve_hasattrr    s    dE/00 N!"LMMME			sE	*	*B 
ze$$d##
%T

CD D D D D9r'   c                     d }|S )Nc                 "    t          | |          S r"   )r  r  s     r%   r&   zol_hasattr.<locals>.impl  s    sD)))r'   r#   r
  s      r%   
ol_hasattrr    s    * * *Kr'   c                     d|  dfd}|S )Nz<object type:>c                 d    d}t          | |          dk    r t          | |                      S S )N__repr__T)hasattrrL  )r  rs   missing_repr_formats     r%   r&   zol_repr_generic.<locals>.impl  s=    3%%%73%%''' '&r'   r#   )r  r&   r  s     @r%   ol_repr_genericr    s4    0#000' ' ' ' ' Kr'   c                     dd}|S )Nr  c                 |    d}t          | |          dk    r t          | |                      S t          |           S )N__str__T)r  rL  repr)objectrs   s     r%   r&   zol_str_generic.<locals>.impl  s@    64  D(((764((***<<r'   r  r#   )r!  r&   s     r%   ol_str_genericr#    s            Kr'   r  r"  )collectionsr   r   	functoolsr   numpyr   r.   r  llvmliter   numba.core.imputilsr   r   r   r	   r
   r   r   r   r   r   r   
numba.corer   r   r   r   numba.core.extendingr   r   numba.core.typeconvr   numba.core.errorsr   r   r   r   r   r   numba.misc.specialr   numba.core.typing.asnumbatyper   truthr+   is_notAnyr6   r/   r@   OpaquerH   r*   rS   r9   LiteralIntegerLiteralr]   ner`   rm   DeferredTyperv   r  r   r   getitemCPointerr>  r   setitemr   r   maxr  r   VarArgr   minr   r   r   roundr<  r   r   intfloatr   complexr   NumberClassr   Dummyr   ExternalFunctionPointerr  r  r  r  r~  r  r  r  IteratorTyper  r  r   
ConstSizedr  boolSizedr!  r  r$  r&  r2  r9  rA  rD  DTyperU  rW  numba.core.typing.builtinsrX  rY  numba.extendingrZ  intpTypeuintpr_  ri  rq  ru  ry  r  r  r  r  r  r  r  sumr  mapr  filterr  r  r)   r  r  r  r  r  r   r	  rL  r  r  r  r  r  r   r  r   r#  r#   r'   r%   <module>rQ     s   " " " " " "                   I I I I I I I I I I I I I I I I I I I I I I I I I I
 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 * * * * * *8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 . - - - - - 7 7 7 7 7 7 
(.   x	59550 0 650 x|UY	22! ! 32!2 x|U\5<88! ! 98! x|U]EM::, , ;:,$ x{EM5=99x{E0%2FGGF F HG :9F x{EM5=99x{E0%2FGGF F HG :9F     jj&& ' ' '   jj'' ( ( ( u)**8 8 +*8 EIu)**ENE.//EM5-..B B /. 0/ +*B
 E	**E..E//: : 0/ /. +*: x??E E @?E x	JJ! ! KJ!  0 sEO$$B B %$B
 sLEL++,,D D -,D sEO$$B B %$B
 sLEL++,,D D -,D, , , uek""	F 	F #"	F uek5=11F F 21FJ sEIuei  F F !  F wUY//00F F 10F6 u %),,B B -,B* % % % -..* * /.* D D  D tUY% %  % tU'((  )( tU'((	 	 )(	 xEI..  /. sE$%%F F &%F tU[!!! ! "!! uF F F
 ueo&&E E '&E 
$   
$x     ! 2 2 22 2 2 !5#455!5;//: : 0/ 65:2 !5#455!5;//: : 0/ 65:6 B A A A A A A A 6 6 6 6 6 6 6 6z5:uz22z5;
33# # 43 32# 
#  8 
#   
#  8 
#     2 233//00	 	 	 	 
#- - - 
#0 0 0 u}lel595566C C 76C> 
#       N 
#   
&  	 	 	 
*, , , 

\ \ \B	 	 	 

!""  #" 5 5 5r #
#:B?? ((**  
'$'''  (' 
'     2 
'   
$
 
 
 
#     r'   