
    sh                        S r SSKJr  SSKJrJr  SSKJrJrJ	r	J
r
  SSKJrJr  SSKJrJr  SSKJrJr  SSKJr  SS	KJrJr  \" \R2                  5      S
 5       r\" \R2                  5      S 5       r\" \R8                  5      \" \R:                  5      S 5       5       r\" \R>                  5      S 5       r \" \R>                  5      S 5       r!\" \RD                  5      S 5       r#\" \RD                  5      S 5       r$\" \RJ                  5      S 5       r&\" \RJ                  5      S 5       r'\" \RP                  5      S 5       r)\" \RP                  5      \" \RT                  5      S 5       5       r+\" \RX                  5      S 5       r-\" \RX                  5      S 5       r.\" \R^                  5      S 5       r0\" \R^                  5      S 5       r1\" \Rd                  5      S 5       r3\" \Rh                  5      S 5       r5\" \Rh                  5      S 5       r6\" \Rn                  5      S 5       r8\" \Rr                  5      S 5       r:\" \Rr                  5      S 5       r;\" \Rx                  5      S 5       r=\" \Rx                  5      S  5       r>\" \R~                  5      S! 5       r@\" \R                  5      S" 5       rB\" \R                  5      S# 5       rC\" \R                  5      S$ 5       rE\" \R                  5      S% 5       rF\" \R                  5      S& 5       rH\" \R                  5      S' 5       rJ\" \R                  5      S( 5       rL\" \R                  5      S) 5       rN\" \R                  5      S* 5       rP\" \R                  5      S+ 5       rQ\" \R                  5      \" \R                  5      S, 5       5       rT\" \R                  5      \" \R                  5      S- 5       5       rW\" \R                  5      S. 5       rY\" \R                  5      S/ 5       r[ " S0 S1\\5      r]S2 r^\" \R                  5      S3 5       r_\	" \R                  5      S4 5       r`S5 ra\" \R                  5      S6 5       rcS7 rd\" \R                  5      S8 5       re\	" \R                  5      S9 5       rf\" \R                  5      S: 5       rh\" \R                  5      S; 5       ri\" \R                  5      S< 5       rk\" \R                  5      S= 5       rl\" \R                  5      S> 5       rn\" \R                  5      S? 5       ro\" \R                  5      \" \R                  5      S@ 5       5       rr\" \R                  5      \" \R                  5      SA 5       5       rs\" \R                  5      SB 5       ru\" \R                  5      SC 5       rw\" \R                  5      SD 5       rx\" \R                  5      SE 5       rz\" \R                  5      SF 5       rrSG r{SH r|\" \R                  5      SI 5       r~\" \R                  5      SJ 5       r\" \R                  5      SK 5       r\" \GR                  5      SL 5       r\" \GR                  5      SM 5       r\" \GR                  5      SN 5       r\GR                  " SO5      r\" \GR                  5      SP 5       r\" \GR                  5      SQ 5       rgR)SzG
Boxing and unboxing of native Numba values to / from CPython objects.
    )ir)typescgutils)boxunboxreflectNativeValue)NumbaNotImplementedErrorTypingError)typeofPurpose)setobjlistobj)numpy_support)contextmanager	ExitStackc                 8    UR                   R                  U5      $ N)pyapibool_from_booltypvalcs      i/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/old_boxing.pybox_boolr      s    77!!#&&    c                     UR                   R                  U5      n[        R                  " UR                  S5      nUR
                  R                  SX45      n[        XRR                   R                  5       S9$ )Nr   !=is_error)	r   object_istruer   Constanttypebuildericmp_signedr	   c_api_error)r   objr   istruezeror   s         r   unbox_booleanr+      sX    WW""3'F;;v{{A&D
))

f
3CsWW%8%8%:;;r   c                     UR                   R                  UR                  XU R                  5      nUR	                  U R                  U5      $ r   )contextcastr%   literal_typer   r   s      r   box_literal_integerr0   !   s;     ))..Cc.>.>
?C55!!3''r   c                 L   U R                   (       aJ  UR                  R                  XR                  R                  5      nUR                  R                  U5      $ UR                  R                  XR                  R                  5      nUR                  R                  U5      $ r   )	signedr%   sextr   longlonglong_from_longlongzext	ulonglonglong_from_ulonglong)r   r   r   ivalullvals        r   box_integerr;   (   sk    
zzyy~~c77#3#34ww))$//WW%6%67ww**622r   c                    UR                   R                  U 5      n[        R                  " UR                  U5      nUR
                  R                  U5      nUR
                  R                  U5         U R                  (       a  UR
                  R                  U5      nOUR
                  R                  U5      nUR
                  R                  U5        UR                  R                  UR                  R                  Xc5      U5        S S S 5        [        UR                  R                  U5      UR
                  R!                  5       S9$ ! , (       d  f       NI= fNr    )r-   get_argument_typer   alloca_oncer%   r   number_longif_object_okr2   long_as_longlonglong_as_ulonglongdecrefstoretruncr	   loadr'   )r   r(   r   ll_typer   longobjllvals          r   unbox_integerrK   1   s    ii))#.G


aii
1Cgg!!#&G	
		g	&::GG,,W5EGG--g6E	w					7= 
' qyy~~c* ! 3 3 57 7 
'	&s   3BE
Ec                     U [         R                  :X  a0  UR                  R                  XR                  R
                  5      nOU [         R                  :X  d   eUnUR                  R                  U5      $ r   )r   float32r%   fpextr   doublefloat64float_from_double)r   r   r   dbvals       r   	box_floatrS   A   sT    
emm		WW^^4emm###77$$U++r   c                    UR                   R                  U5      nUR                   R                  U5      nUR                   R                  U5        U [        R
                  :X  a6  UR                  R                  UUR                  R                  U 5      5      nOU [        R                  :X  d   eUn[        XRR                   R                  5       S9$ r=   )r   number_floatfloat_as_doublerD   r   rM   r%   fptruncr-   r>   rP   r	   r'   )r   r(   r   fobjrR   r   s         r   unbox_floatrY   J   s    77$DGG##D)EGGNN4
emmii !		 ; ;C @B emm###sWW%8%8%:;;r   c                    UR                   R                  UR                  XS9nU [        R                  :X  au  UR                  R                  UR                  UR                  R                  5      nUR                  R                  UR                  UR                  R                  5      nO-U [        R                  :X  d   eUR                  UR                  pTUR                  R                  XE5      $ Nvalue)r-   make_complexr%   r   	complex64rN   realr   rO   imag
complex128complex_from_doubles)r   r   r   cvalfrealfimags         r   box_complexrg   X   s    99!!!))S!<D
eoo				177>>:				177>>:e&&&&&yy$))u77''55r   c                    UR                   R                  UR                  [        R                  5      nUR
                  R                  XR                  5       5      n[        R                  " UR                  U5      n[        R                  " UR                  U5         UR
                  R                  SSU < S35        S S S 5        U [        R                  :X  a  UR                   R                  UR                  U 5      nUR                   R                  UR                  UR                  [        R                  [        R                   5      Ul        UR                   R                  UR                  UR"                  [        R                  [        R                   5      Ul        OU [        R                  :X  d   eUn[%        UR'                  5       US9$ ! , (       d  f       GN = f)NPyExc_TypeErrorzconversion to z failedr    )r-   r^   r%   r   rb   r   complex_adaptor_getpointerr   is_falseif_unlikelyerr_set_stringr_   r.   r`   rP   rM   ra   r	   	_getvalue)r   r(   r   c128okfailedcplxs          r   unbox_complexrt   d   sH    99!!!))U-=-=>D	
	 	 &6&6&8	9Baii,F			QYY	/	0<?A	C 
0 eooyy%%aii5IINN199dii#(==%--A	IINN199dii#(==%--A	 e&&&&&t~~'&99 
0	/s    "G
G*c                 6    UR                   R                  5       $ r   )r   	make_noner   s      r   box_nonerw   |   s    77r   c                 H    [        UR                  R                  5       5      $ r   r	   r-   get_dummy_valuer   s      r   
unbox_noner{           qyy00233r   c                 L    UR                   R                  XR                  5      $ r   )r   create_np_datetime	unit_coder   s      r   box_npdatetimer      s    77%%c==99r   c                 z    UR                   R                  U5      n[        X2R                   R                  5       S9$ r=   )r   extract_np_datetimer	   r'   r   r(   r   r   s       r   unbox_npdatetimer      s.    
''
%
%c
*CsWW%8%8%:;;r   c                 L    UR                   R                  XR                  5      $ r   )r   create_np_timedeltar   r   s      r   box_nptimedeltar      s    77&&sMM::r   c                 z    UR                   R                  U5      n[        X2R                   R                  5       S9$ r=   )r   extract_np_timedeltar	   r'   r   s       r   unbox_nptimedeltar      s.    
''
&
&s
+CsWW%8%8%:;;r   c                     UR                   R                  [        R                  5      nUR                  R                  X5      nUR                  [        R                  U5      $ )z(
Convert a raw pointer to a Python int.
)r-   get_value_typer   uintpr%   ptrtointr   )r   r   r   ll_intpaddrs        r   box_raw_pointerr      sE    
 ii&&u{{3G99c+D55d##r   c                     UR                  U R                  U5      nUR                  R                  UR                  R	                  U R
                  5      5      nUR                  R                  XC45      $ )z.
Fetch an enum member given its native value.
)r   dtyper   unserializeserialize_objectinstance_classcall_function_objargs)r   r   r   valobjcls_objs        r   box_enumr      sX    
 UU399c"Fgg!!!''":":3;M;M"NOG77(()<<r   c                 r    UR                   R                  US5      nUR                  U R                  U5      $ )z5
Convert an enum member's value to its native value.
r]   )r   object_getattr_stringr   r   )r   r(   r   r   s       r   
unbox_enumr      s/    
 WW**38F77399f%%r   c                     Sn[        U5      e)z7This type cannot be boxed, there's no Python equivalentzJUndefVar type cannot be boxed, there is no Python equivalent of this type.)r   )r   r   r   msgs       r   box_undefvarr      s    C
c
r   c                 ~   [         R                  " [         R                  " S5      UR                  R                  R
                  5      nUR                  R                  U[         R                  " [         R                  " S5      5      5      nUR                  R                  XCU R                  UR                  5      $ )N       )r   r#   IntTyper$   pointeecountr%   bitcastPointerTyper   recreate_recordr   env_manager)r   r   r   sizeptrs        r   
box_recordr      st     ;;rzz"~sxx'7'7'='=>D
))

C

1!>
?C77""3ciiGGr   c                 B  ^^ TR                   R                  5       mTR                   R                  UT5      n[        R                  " TR
                  U5      nTR                  R                  U 5      nTR
                  R                  X55      nUU4S jn[        XgUS9$ )Nc                  <   > TR                   R                  T 5        g r   r   release_bufferbufr   s   r   cleanupunbox_record.<locals>.cleanup       	s#r   r   r!   )
r   alloca_bufferextract_record_datar   is_nullr%   r-   r   r   r	   )	r   r(   r   r   r!   ltypr   r   r   s	     `     @r   unbox_recordr      sy    
''


!C
''
%
%c3
/Cqyy#.H99##C(D
))

C
&C$sh??r   c           
      r   UR                   R                  UR                   R                  UR                   R                  S.[        R
                     nUR                  R                  [        R                  U5      n[        R                  " UR                  US9nUR                  R                  XRR                   R                  5      nUR                  R                  [        R                  U R                   5      nUR#                  S5      nUR#                  S5      n	UR#                  [        R
                  5      n
[        R                  " UR                  U5      n[        R$                  " UR                  U/UR"                  5       u  nUR                  R'                  UR                  R)                  XbR                  R+                  X5      /5      5      nUR                  R-                  [        R.                  " UR                  U5      5         UR                  R1                  UR                  R3                  X5      U5        S S S 5        S S S 5        UR                  R'                  U5      nUR                   R5                  XFU5      $ ! , (       d  f       NM= f! , (       d  f       NV= f)N)         r\   r   r   )r   py_unicode_1byte_kindpy_unicode_2byte_kindpy_unicode_4byte_kindr   sizeof_unicode_charr-   get_constantr   int32r   alloca_once_valuer%   r   cstringintpr   r$   	loop_nestrG   gepmulif_thenis_not_nullrE   addstring_from_kind_and_data)r   r   r   unicode_kindkindrawptrstrptrfullsizer*   onestepr   idxchstrlens                  r   box_unicodecharseqr      s    77((77((77((* +8*K*KML 99!!%++|<D&&qyy<FYYvww7Fyy%%ejj#))<H==D
--
C==::;D%%aii6E			199xj(--	@ESYY^^AIIMM&99==3K2LMNYYw22199bABIIOOAIIMM#3U; C	 
A YY^^E"F77,,T6BB CB	 
A	@s%   BJ(6JJ(
J%	!J((
J6c                 &   UR                   R                  U 5      nUR                  R                  U5      u  pEpgp[        R
                  " UR                  U5         [        R                  " UR                  U R                  5      n
UR                  R                  SXj5      nUR                  R                  XU
5      n[        R                  " US 5      n[        R                  " UR                  U5      n[        R                  " UR                  UR                  R                  XR                  5      XV5        S S S 5        UR                  R!                  W5      n[#        XR                  R%                  U5      S9$ ! , (       d  f       NK= fNz<=r    )r-   r   r   string_as_string_size_and_kindr   	if_likelyr%   r   r#   r$   r   icmp_unsignedselectr   memcpyr   rG   r	   not_)r   r(   r   ltyrq   bufferr   r   is_asciihashvstorage_size	size_fitsnull_stringoutspacerets                  r   unbox_unicodecharseqr      s    
))
"
"3
'C 	
..s3 ,BH 
		199b	){{499cii8II++D$E	 yy	> kk#t,--aiiE 	qyy		))(KK@	& 
*$ ))..
"CsYY^^B%788' 
*	)s   C!F
Fc                    UR                   R                  UR                  X5      nUR                  R	                  UR
                  UR                  5      nUR                   R                  R                  UR                  X5        U$ r   )	r-   make_helperr%   r   bytes_from_string_and_sizedatanitemsnrtrD   )r   r   r   r(   r   s        r   	box_bytesr     s[    
))

		3
4C
''
,
,SXXszz
BCIIMMC-Jr   c                    [         R                  " UR                  US9nUR                  R                  X2R                  R
                  5      nUR                  R                  [        R                  U R                  5      nUR                  S5      nUR                  S5      n[         R                  " UR                  U5      n[         R                  " UR                  U/UR                  5       u  n	UR                  R                  UR                  R                  XI/5      5      n
UR                  R                  [         R                   " UR                  U
5      5         UR                  R#                  UR                  R%                  X5      U5        S S S 5        S S S 5        UR                  R                  U5      nUR                  R'                  XK5      $ ! , (       d  f       NL= f! , (       d  f       NU= f)Nr\   r   r   )r   r   r%   r   r   r   r-   r   r   r   r   r$   r   rG   r   r   r   rE   r   r   )r   r   r   r   r   r   r*   r   r   r   r   r   s               r   box_charseqr     sR   &&qyy<FYYvww7Fyy%%ejj#))<H==D
--
C%%aii6E
 
		199xj(--	@ESYY^^AIIMM&%89YYw22199bABIIOOAIIMM#3U; C	 
A YY^^E"F77--f==	 CB	 
A	@s%   3A2G2%6G!G2!
G/	+G22
H c                 $   UR                   R                  U 5      nUR                  R                  U5      u  pEn[        R
                  " UR                  U5         [        R                  " UR                  U R                  5      nUR                  R                  SXg5      nUR                  R                  XU5      n[        R                  " US 5      n	[        R                  " UR                  U	5      n
[        R                  " UR                  UR                  R                  XR                  5      XV5        S S S 5        UR                  R!                  W
5      n[#        XR                  R%                  U5      S9$ ! , (       d  f       NK= fr   )r-   r   r   string_as_string_and_sizer   r   r%   r   r#   r$   r   r   r   r   r   r   rG   r	   r   )r   r(   r   r   rq   r   r   r   r   r   r   r   s               r   unbox_charseqr   1  s   
))
"
"3
'Cww88=B 
		199b	){{499cii8II++D$E	 yy	> kk#t,--aiiE 	qyyyy((;;?	% 
*$ ))..
"CsYY^^B%788' 
*	)s   C!F
Fc                    UR                   R                  UR                  X5      n[        R                  " UR                  UR
                  R                  5       5      nUR                  R                  UR                  5       u  pVU   UR                  U R                  UR                  5      nUR                  R                  Xt5        S S S 5        U   UR                  R                  UR
                  R                  5       U5        S S S 5        S S S 5        UR                  R                  U5      $ ! , (       d  f       Np= f! , (       d  f       NB= f! , (       d  f       NK= fr   )r-   r   r%   r   r   r   borrow_noneif_elsevalidr   r$   r   rE   rv   rG   )r   r   r   optvalr   then	otherwisevalidress           r   box_optionalr  M  s    YY""199c7F

#
#AIIqww/B/B/D
EC	
		6<<	(,=TuuSXXv{{3HIIOOH*  IIOOAGG--/5 	 
) 99>># T Y	 
)	(s=   E
AD6
E5EE6
E	 E
E	E
E&c                 x  ^^^ TR                   R                  TR                  U R                  5      nTR                  R	                  SUTR
                  R                  5       5      m[        R                  " TR                  UR                  5      n[        R                  " TR                  [        R                  5      nTR                  R                  T5       u  pgU   TR                  U R                  U5      mTR                   R                  TR                  U R                  TR                  5      nTR                  R                  X5        TR                  R                  TR                   U5        SSS5        U   TR                  R                  X45        SSS5        SSS5        TR"                  b	  UUU4S jn	OSn	TR                  R%                  U5      n
['        U
TR                  R%                  U5      U	S9$ ! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       N= f)z6
Convert object *obj* to a native optional structure.
r   Nc                     > T R                   R                  T5         TR                  5         S S S 5        g ! , (       d  f       g = fr   )r%   r   r   )r   is_not_nonenatives   r   r   unbox_optional.<locals>.cleanupq  s+    "";/  0//s	   7
Ar!   r   )r-   make_optional_noner%   r$   r&   r   r   r   r?   r   	false_bitr   r   make_optional_valuer]   rE   r!   r   rG   r	   )r   r(   r   nonevalretptrerrptrr   orelsejustr   r   r  r  s     `        @@r   unbox_optionalr  Z  s   
 ii**199chh?G))''c1773F3F3HIK  GLL9F&&qyy'2C2CDF	
		;	'>DWWSXXs+F9900146<<IDIIOOD)IIOOFOOV4  IIOOG,  
( ~~!	! 	! 
))..
 CsQYY^^F%;&( (% T V 
(	's=   H+#BH	<
H+H"H+	
H	H+
H(	$H++
H9c                    SSK Jn  UR                  R                  U5      u  pEpgUR                  R                  UR                  U 5      nXXl        Xhl        Xxl	        [        UR                  5       UR                  R                  U5      S9$ )z3
Convert object *obj* to a native slice structure.
r   )slicingr    )numba.cpythonr  r   slice_as_intsr-   r   r%   startstopr   r	   ro   r   )	r   r(   r   r  rq   r  r  r   slis	            r   unbox_slicer  |  si    
 &GG11#6Bt
))

		3
/CIHHs}}1CDDr   c           
         U R                   nS H6  n[        X45      n[        U[        5      (       d  M%   [	        U[
        5        M8     U R                   R                  5       u  pxUR                  R                  U5      n	UR                  R                  U5      n
UR                  R                  U	5      nUR                  R                  U
5      nUR                  R                  X5      nUR                  R                  U5        UR                  R                  U5        U$ ! [         a  n[        SU S[        U5       35      eS nAff = f)N)r  r  r   z7Unable to create literal slice. Error encountered with z attribute. )literal_valuegetattr
isinstanceintr   r   
ValueErrorstr
__reduce__r   r   r   callrD   )r   r   r   	slice_lit
field_name	field_objepy_ctorpy_argsserialized_ctorserialized_argsctorargsr(   s                 r   box_slice_literalr-    s    !!I/
I2	i%%y'*	 0 ((335Ggg..w7Ogg..w7O77/D77/D
'',,t
"CGGNN4GGNN4J   ..8\ :""%a&+ s   D$$
E.EEc                 H    [        UR                  R                  5       5      $ r   ry   r   r(   r   s      r   unbox_string_literalr0    r|   r   c                 <   UR                   R                  U 5      nU" UR                   UR                  US9nUR                   R                  (       a  [        R
                  " U R                  5      nUR                  R                  UR                  R                  U5      5      nUR                  R                  XU5      nUR                   R                  R                  UR                  X5        U$ UR                  nUR                  R                  U5        U$ r[   )r-   
make_arrayr%   
enable_nrtr   as_dtyper   r   
read_const	add_constr   nrt_adapt_ndarray_to_pythonr   rD   parentincref)	r   r   r   nativearycls	nativearynp_dtypedtypeptrnewaryr8  s	            r   	box_arrayr?    s    99'',LQYY		=Iyy ))#))4==++AMM,C,CH,MN44SxH			QYY1!!	vr   c                 J  ^^
 TR                   R                  5       m
TR                   R                  UT
5      n[        R                  " TR
                  U5      nTR                  R                  U 5      nU" TR                  TR
                  5      nUR                  5       n[        R                  " TR
                  TR
                  R                  U5      5         TR
                  R                  UTR                   R                  5      nTR                  R                  (       a  TR                   R                  T
U5        OTR                   R                  T
U5        SSS5        U
U4S jn	[!        TR
                  R#                  U5      UU	S9$ ! , (       d  f       N9= f)zC
Convert a Py_buffer-providing object to a native array structure.
Nc                  <   > TR                   R                  T 5        g r   r   r   s   r   r   unbox_buffer.<locals>.cleanup  r   r   r  )r   r   
get_bufferr   r   r%   r-   r2  rk   r   r   r   voidptrr3  nrt_adapt_buffer_from_pythonnumba_buffer_adaptorr	   rG   )r   r(   r   resr!   r:  r;  aryptrr   r   r   s     `       @r   unbox_bufferrI    s%   
 ''


!C
''

S#
&C""199c2H99'',LQYY		2I""$F			199aiinnX&>	?ii899GG00c:GG((c2 
@$ qyy~~f-&( ( 
@	?s   BF
F"c                 
   UR                   R                  U 5      nU" UR                   UR                  5      nUR                  5       nUR                  R	                  XRR
                  R                  5      nUR                   R                  (       a  UR
                  R                  X5      nOUR
                  R                  X5      n [        R                  " U R                  5      R                  nUR                  R                  U5      nUR                  R                  SUR                  U5      n	UR                  R'                  ["        R(                  " UR                  U5      U	5      n
UR                  R+                  U
SS9   UR
                  R-                  SS5        SSS5        [/        UR                  R1                  U5      U
S9$ ! [          a    ["        R$                  n	 Nf = f! , (       d  f       NQ= f)z;
Convert a Numpy array object to a native array structure.
r   Flikelyri   zXcan't unbox array from PyObject into native value.  The object maybe of a different typeNr    )r-   r2  r%   rk   r   r   rD  r3  nrt_adapt_ndarray_from_pythonnumba_array_adaptorr   r4  r   itemsizer$   r   r
   r   r
  or_r   r   rn   r	   rG   )r   r(   r   r:  r;  rH  r   errcodeexpected_itemsizeitemsize_mismatchrr   s              r   unbox_arrayrT    s    99'',LQYY		2I""$F
))

FGGOO
4Cyy''77A''--c7)22399=FF
 &..334EFII33 YY]]AIIw/F
 
		6%		0	0 0	1 
1
 qyy~~f-??+ $ .#--.  
1	0s   *G G4G10G14
Hc                    UR                   R                  U R                  5      n[        U 5       HM  u  pEUR                  R                  X5      nUR                  XV5      nUR                   R                  X4U5        MO     U$ )z<
Convert native array or structure *val* to a tuple object.
)r   	tuple_newr   	enumerater%   extract_valuer   tuple_setitem)r   r   r   	tuple_valir   itemr(   s           r   	box_tupler]  
  sj     !!#)),IcNyy&&s.eeE 	iC0 #
 r   c                 <   UR                   R                  UR                   R                  U R                  5      5      n[	        XU5      nUR                   R                  X45      nUR                   R                  U5        UR                   R                  U5        U$ )zA
Convert native array or structure *val* to a namedtuple object.
)r   r   r   r   r]  r"  rD   )r   r   r   r   	tuple_objr(   s         r   box_namedtupler`    sp     gg!!!''":":3;M;M"NOG#A&I
'',,w
*CGGNN7GGNN9Jr   c                 6  ^ [        U 5      n/ n/ mUR                  R                  U 5      n[        R                  " UR
                  [        R                  5      n[        R                  " UR
                  U5      nUR                  R                  U5      nUR
                  R                  SU[        R                  " UR                  U5      5      n	UR
                  R                  UR
                  R                  U	5      SS9   UR                  R!                  SSU4-  U5        UR
                  R#                  [        R$                  U5        SSS5        ['        U 5       H  u  pUR                  R)                  X5      nUR+                  X5      nUR-                  UR.                  5        UR
                  R                  UR0                  SS9   UR
                  R#                  [        R$                  U5        SSS5        UR2                  c  M  TR-                  UR2                  5        M     UR                  R5                  UR
                  X5      nUR
                  R#                  X5        T(       a*  UR
                  R                  U	SS9   U4S jnSSS5        OSn[7        UR
                  R9                  U5      WUR
                  R9                  U5      S	9$ ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Nn= f)
zF
Convert tuple *obj* to a native array (if homogeneous) or structure.
z==FrK  PyExc_ValueErrorz<size mismatch for tuple, expected %d element(s) but got %%zdNTc                  8   > [        T5       H
  n U " 5         M     g r   )reversed)funccleanupss    r   r   unbox_tuple.<locals>.cleanupO  s    $X.DF /r   r   )lenr-   r   r   r   r%   r
  r?   r   
tuple_sizer   r   r#   r$   r   r   
err_formatrE   true_bitrW  tuple_getitemr   appendr]   r!   r   
make_tupler	   rG   )r   r(   r   nvaluesr   is_error_ptr	value_ptractual_sizesize_matchesr[  eltypeelemr  r]   r   rf  s                   @r   unbox_tuplerw  '  sA   
 	CAFH
))
"
"3
'C,,QYY8I8IJL##AIIs3I ''$$S)K99**4,.KK8H8H!,LNL	
		199>>,7		F	JaTQ	 	
		((,7 
G s^	ww$$S,&fll#YYvu=IIOOG,,l; >>>%OOFNN+ $ II  C8EIIOOE%YY|D9 :9
 qyy~~i0' !		| <> >; 
G	F >= :9s%   AK'+K9L
'
K69
L	

Lc           	         [         R                  " UR                  UR                  X5      nUR                  n[
        R                  " UR                  U5      nUR                  R                  [
        R                  " UR                  U5      5       u  pgU   UR                  R                  U5        SSS5        U   UR                  nUR                  R                  U5      nUR                  R                  [
        R                  " UR                  U5      SS9   [
        R                  " UR                  U5       n	UR                  U	R                   5      n
UR#                  U
5        UR%                  U R&                  U
5      nUR                  R)                  XIR                   U5        SSS5        SSS5        UR                  R+                  XE5        SSS5        SSS5        UR                  R,                  R/                  UR                  X5        UR                  R1                  U5      $ ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)z-
Convert native list *val* to a list object.
NTrK  )r   ListInstancer-   r%   r8  r   r   r   r   r   r9  r   list_newr   	for_rangegetitemindexincref_valuer   r   list_setitemrE   r   rD   rG   )r   r   r   listr(   rG  
has_parentr   r   loopr\  itemobjs               r   box_listr  Y  s   
 		199c?D
++C

#
#AIIs
3C	
		7..qyy#>	?CZJ GGNN3	  YYF''""6*C""7#6#6qyy##F*. # 0&&qyy&9T<<

3D%%d+eeCIIt4GGG((jj'B	 :0 IIOOC%  
@, IIMMC-99>>#- Z :90 0	 Y 
@	?sn   I<H75
I<?A!I+ "IA/I		1I9#I+I<7
I	I<	
II
I($I++
I9	5I<<
J
c                   0    \ rS rSrSrS rS rS rS rSr	g)	_NumbaTypeHelperi{  a  A helper for acquiring `numba.typeof` for type checking.

Usage
-----

    # `c` is the boxing context.
    with _NumbaTypeHelper(c) as nth:
        # This contextmanager maintains the lifetime of the `numba.typeof`
        # function.
        the_numba_type = nth.typeof(some_object)
        # Do work on the type object
        do_checks(the_numba_type)
        # Cleanup
        c.pyapi.decref(the_numba_type)
    # At this point *nth* should not be used.
c                     Xl         g r   )r   )selfr   s     r   __init___NumbaTypeHelper.__init__  s    r   c                 .   U R                   nUR                  R                  UR                  R                  S5      nUR
                  R                  U5      nUR
                  R                  US5      nX@l        UR
                  R                  U5        U $ )Nnumbar   )
r   r-   insert_const_stringr%   moduler   import_moduler   	typeof_fnrD   )r  r   
numba_name	numba_modr  s        r   	__enter___NumbaTypeHelper.__enter__  so    FFYY221993C3CWM
GG))*5	GG11)XF	"	y!r   c                 f    U R                   nUR                  R                  U R                  5        g r   )r   r   rD   r  )r  r,  kwargsr   s       r   __exit___NumbaTypeHelper.__exit__  s    FF	t~~&r   c                 h    U R                   R                  R                  U R                  U/5      nU$ r   )r   r   r   r  )r  r(   rG  s      r   r   _NumbaTypeHelper.typeof  s'    ffll00#G
r   )r   r  N)
__name__
__module____qualname____firstlineno____doc__r  r  r  r   __static_attributes__ r   r   r  r  {  s     'r   r  c                   ^^^ UUU4S jn[         R                  R                  TR                  TR                  X5      u  pxTR                  R                  USS9 u  pU	   X8l        [        R                  " UR                  S5      nTR                  R                  TR                  R                  SX;5      SS9   [        T5       nUR                  TR                  R                  X5      5      n[         R"                  " TR                  U5       mTR                  R                  UTR$                  5      nU" XU5        TR'                  U R(                  U5      nTR                  R                  UR*                  SS9   TR                  R-                  [         R.                  T5        TR1                  5         SSS5        UR3                  TR$                  UR4                  SS9  SSS5        TR                  R7                  U5        SSS5        SSS5        U R8                  (       a  Xl        TR                  R                  TR                  R=                  TR                  R?                  T5      5      SS9   TR                  RA                  XRB                  5        SSS5        URE                  S5        TR                  R-                  UR4                  U5        SSS5        U
   TR                  R-                  [         R.                  T5        SSS5        SSS5        TR                  R                  TR                  R?                  T5      5         TR                  RF                  R7                  TR                  XR4                  5        SSS5        g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNK= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       g= f)	z1
Construct a new native list from a Python list.
c                   > U R                  U5      nTR                  R                  [        R                  " TR                  U5      SS9   TR                  R                  [        R                  T5        TR                  5         S S S 5        TR                  R                  SX25      nTR                  R                  USS9   TR                  R                  [        R                  T5        TR                  R                  SSX#5        TR                  R                  U5        TR                  5         S S S 5        TR                  R                  U5        g ! , (       d  f       N= f! , (       d  f       N;= f)NFrK  r   ri   z(can't unbox heterogeneous list: %S != %S)r   r%   r   r   r   rE   rk  do_breakr&   r   rj  rD   )nthr  expected_typobjtypobjtype_mismatchr   errorptrr  s        r   check_element_type2_python_list_to_native.<locals>.check_element_type  s   G$YY		62   IIOOG,,h7MMO 		--dFLYY}U;IIOOG,,h7GG!:
 GGNN6"MMO < 	
v%  <;s   ;EA3E-
E*-
E;TrK  r   >FN)r9  )$r   ry  allocate_exr-   r%   r   r   r   r#   r$   r   r&   r  r   r   list_getitemr   r{  r}  r   r   r!   rE   rk  r  setitemr]   rD   	reflectedr8  r   rG   object_set_private_datameminfo	set_dirtyr   )r   r(   r   r   listptrr  r  rq   r  if_ok	if_not_okr*   r  r  r  r  r  s     `  `          @r   _python_list_to_nativer    s   0 ##//		199cPHB	
		2d		+/AI;;tyy!,D""199#8#8d#I*. # 0 &a(C&)jj1E1Ec1P&QO **199d;t"#''"6"6sDJJ"G*3I "#G!<YY..vu.MIIOOG,<,<hG MMO N TZZeL < GGNN?3 )0& }}! ""199>>!))..2J#K9> # @//\\B@ NN5!IIOODJJ0= @ IIOOG,,h7 C 
,J 
		199>>(3	4			QYYZZ8 
5	4) NM <; )(0 0.@ @5 U@ YC 
,	+J 
5	4s   P#"AP >O
AO
	A0N8;N&-N8.#O
	OA+P &O.*?P )
P#3+PP#";P5&
N50N88
OO
	

OO
O+&P .
O=8P  
P	
P#
P 	P##
P25
Qc           
        ^^ TR                   R                  T5      n[        R                  " TR                  [        R
                  5      n[        R                  " TR                  TR                  R                  U 5      5      nTR                   R                  T5      nTR                  R                  [        R                  " TR                  U5      5       u  pxU   [        R                  R                  TR                  TR                  X5      n	X9l        U R                   (       a  TU	l        TR                  R%                  U	R&                  U5        SSS5        U   [)        U TTX5U5        SSS5        SSS5        UU4S jn
[+        TR                  R-                  U5      TR                  R-                  U5      U
S9$ ! , (       d  f       Nt= f! , (       d  f       Nk= f! , (       d  f       Nt= f)z
Convert list *obj* to a native list.

If list was previously unboxed, we reuse the existing native list
to ensure consistency.
Nc                  <   > T R                   R                  T5        g r   r   object_reset_private_datar   r(   s   r   r   unbox_list.<locals>.cleanup      	))#.r   r  )r   	list_sizer   r   r%   r
  r?   r-   r   object_get_private_datar   r   r   ry  from_meminfor   r  r8  rE   r]   r  r	   rG   )r   r(   r   r   r  r  r   has_meminfor   r  r   s    ``        r   
unbox_listr    s[    77S!D((G4E4EFH!!!))QYY-E-Ec-JKG ''
)
)#
.C	
		7..qyy#>	?#K''44QYY		3TDI}}!IIOODJJ0  "3QxH  
@/ qyy~~g. !		x 8&( ( [ Y 
@	?s=   G+!A:G	
G+%G5G+	
G	G+
G(	$G++
G9c           	      
   U R                   (       d  gU R                  R                   (       a  SR                  U 5      n[        U5      e[        R
                  " UR                  UR                  X5      nUR                  R                  UR                  SS9   UR                  nUR                  R                  U5      nUR                  nUR                  R                  Xv5      nUR                  R                  SU[         R"                  " UR$                  S5      5      n	UR                  R'                  U	5       u  pU
   [(        R*                  " UR                  U5       nUR-                  UR.                  5      nUR1                  U5        UR3                  U R                  U5      nUR                  R5                  X\R.                  U5        SSS5        [(        R*                  " UR                  U5       nUR                  R7                  XlR.                  5      nUR-                  U5      nUR1                  U5        UR3                  U R                  U5      nUR                  R9                  X^5        UR                  R;                  U5        SSS5        SSS5        U   UR                  R=                  XWUS5        [(        R*                  " UR                  U5       nUR-                  UR.                  5      nUR1                  U5        UR3                  U R                  U5      nUR                  R5                  X\R.                  U5        SSS5        SSS5        SSS5        UR?                  S5        SSS5        g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       Nn= f! , (       d  f       Nw= f! , (       d  f       N= f! , (       d  f       g= f)z<
Reflect the native list's contents into the Python object.
Nz2cannot reflect element of reflected container: {}
FrK  z>=r   ) r  r   format	TypeErrorr   ry  r-   r%   r   dirtyr8  r   r  r   subr&   r   r#   r$   r   r   r{  r|  r}  r~  r   r  r   list_appendrD   list_setslicer  )r   r   r   r   r  r(   r   new_sizediff	diff_gt_0if_grow	if_shrinkr  r\  r  r   s                   r   reflect_listr    s   
 ==
yyCJJ3On		199c?D	
		4::e		4kkww  %99yy}}X,II))$*,++dii*CE	YYy)-Ag&&qyy$74<<

3D%%d+eeCIIt4GGG((jj'B	 8 &&qyy$74))--jj9C<<,D%%d+eeCIIt4GGG''5GGNN7+ 8   %%cT4@&&qyy(;t<<

3D%%d+eeCIIt4GGG((jj'B	 <	 % *: 	uI 
5	4 87 87 ( <;	 % *) 
5	4s   B&O4 O#"N/'A/N	)N/?BN	N/!
O#+?O*A/O	O!O#)O4
NN/
N,'N//
N>9O#
OO
O O##
O1	-O44
Pc                 	   [         R                  R                  UR                  UR                  X5      u  pgUR                  R                  USS9 u  pU   [        R                  " UR                  [        R                  " UR                  R                  S5      5      n
UR                  R                  U5       nUR                  nUR                  R                  U5      nUR                  R                  U
5      nUR                  R                  [        R                   " UR                  U5      SS9 u  nnU   UR                  R#                  X5        SSS5        U   UR                  R%                  SUU5      nUR                  R'                  USS9   UR                  R#                  [        R(                  U5        UR                  R+                  SS5        UR-                  5         SSS5        SSS5        SSS5        UR/                  U R0                  U5      nUR                  R'                  UR2                  SS9   UR                  R#                  [        R(                  U5        SSS5        UR5                  UR                  UR                  SS9  SSS5        U R6                  (       a  Xl        UR                  R'                  UR                  R;                  UR                  R                  U5      5      SS9   UR                  R=                  XR>                  5        SSS5        URA                  S5        UR                  R#                  UR                  U5        SSS5        U	   UR                  R#                  [        R(                  U5        SSS5        SSS5        UR                  R'                  UR                  R                  U5      5         UR                  RB                  RE                  UR                  XR                  5        SSS5        g! , (       d  f       GN= f! , (       d  f       GNV= f! , (       d  f       GN`= f! , (       d  f       GNj= f! , (       d  f       GN	= f! , (       d  f       GN= f! , (       d  f       GNo= f! , (       d  f       GNB= f! , (       d  f       GN= f! , (       d  f       GN)= f! , (       d  f       g= f)	z/
Construct a new native set from a Python set.
TrK  NFr   ri   zcan't unbox heterogeneous set)	do_resize)#r   SetInstancer  r-   r%   r   r   r   r   r#   r   pyobjset_iterater]   get_typerG   r   rE   r&   r   rk  rn   r  r   r   r!   	add_pyapir  r8  r   r  r  r  r   rD   )r   r(   r   r   setptrr  rq   instr  r  	typobjptrr  r  r  r  if_firstif_not_firstr  r  s                      r   _python_set_to_nativer  A  s[   
 !!--aiiCNHB	
		2d		+/A11!))24++aggmmT2RTI $$S)T**))'2"#))..";YY&&OOAII?  ' "%=h!		: " &()		(=(=dF>M)OYY..}U.KIIOOG,<,<hGGG223D3RT MMO	 L	 &"& G4YY&&vu&EIIOOG$4$4h? FqwwF9 *< }}!""199>>!))..2J#K*/ # 1//\\B1 NN5!IIOODJJ/U X IIOOG,,h7 [ 
,b 
		199>>(3	4			QYYZZ8 
5	4E " LK	 &" "( FE5 *)B1 1M UX Y[ 
,	+b 
5	4s   SA&R/=A<R9Q'	?P1
Q'	%8QAQ4Q<Q'	AR+Q9	7-R$A+R/&R5?R/4
S>+S)S-;S%1
Q ;Q'	
QQ
Q$Q'	'
Q61R9
RR
RR/
R,'R//
R>	9S
S	S
S"%
S3c           
        ^^ TR                   R                  T5      n[        R                  " TR                  [        R
                  5      n[        R                  " TR                  TR                  R                  U 5      5      nTR                   R                  T5      nTR                  R                  [        R                  " TR                  U5      5       u  pxU   [        R                  R                  TR                  TR                  X5      n	U R                  (       a  TU	l        TR                  R#                  U	R$                  U5        SSS5        U   ['        U TTX5U5        SSS5        SSS5        UU4S jn
[)        TR                  R+                  U5      TR                  R+                  U5      U
S9$ ! , (       d  f       Nt= f! , (       d  f       Nk= f! , (       d  f       Nt= f)z|
Convert set *obj* to a native set.

If set was previously unboxed, we reuse the existing native set
to ensure consistency.
Nc                  <   > T R                   R                  T5        g r   r  r  s   r   r   unbox_set.<locals>.cleanup  r  r   r  )r   set_sizer   r   r%   r
  r?   r-   r   r  r   r   r   r  r  r  r8  rE   r]   r  r	   rG   )r   r(   r   r   r  r  r   r  r   r  r   s    ``        r   	unbox_setr  |  sV    77C D((G4E4EFH  AII,D,DS,IJF ''
)
)#
.C	
		7..qyy#>	?#K%%22199aiiRD}}!IIOODJJ/  !#sAtXF  
@/ qyy~~f- !		x 8&( ( [ Y 
@	?s=   G%!A4G
G%G/G%
G	G%
G"	G%%
G3c           	         UR                   nUR                  R                  U5      n[        R                  " UR
                  U5      nUR
                  R                  USS9   [        R                  " UR
                  [        R                  " UR                  S5      5      nUR                  5        nUR
                  R                  U5      nUR                  R                  n	UR                  R                   R#                  UR
                  U R$                  U	5        UR'                  U R$                  U	5      n
UR                  R)                  XHU
5        UR
                  R+                  U[        R                  " UR                  S5      5      nUR
                  R-                  X5        SSS5        SSS5        XT4$ ! , (       d  f       N= f! , (       d  f       XT4$ = f)z1
Create a Python list from a native set's items.
TrK  r   r   N)usedr   rz  r   r   r%   r   r   r   r#   r$   _iteraterG   entrykeyr-   r   r9  r   r   r  r   rE   )r   payloadr   r   r   rq   r}  r  r[  r\  r  s              r   _native_set_to_python_listr    sQ    \\Fggv&G			QYY	0B	
		2d		+))!))*,++fkk1*EG4		u%A::>>DIIMM  CIIt<eeCIIt,GGG  W5		aQVVQ!78AIIOOA%   
, ;   
,	+ ;s&   #AG4C;G/G
G	G
G#c                    [         R                  " UR                  UR                  X5      nUR                  n[
        R                  " UR                  U5      nUR                  R                  [
        R                  " UR                  U5      5       u  pgU   UR                  R                  U5        SSS5        U   UR                  n[        XU5      u  pUR                  R                  U	SS9   UR                  R                  U
5      nUR                  R                  U
5        UR                  R!                  XE5        SSS5        SSS5        SSS5        UR                  R"                  R                  UR                  X5        UR                  R%                  U5      $ ! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       N= f! , (       d  f       N= f)z+
Convert native set *val* to a set object.
NTrK  )r   r  r-   r%   r8  r   r   r   r   r   r9  r  r  r   set_newrD   rE   r   rG   )r   r   r   r  r(   rG  r  r   r  rq   r   s              r   box_setr    sJ   
 aiiC=D
++C

#
#AIIs
3C	
		7..qyy#>	?CZJ GGNN3	  llG4S1EKB""2d"3ggoog.w'		) 4	  
@" IIMMC-99>>## Z 43	 Y 
@	?sU   GF)5
G?5G4AF:GG)
F7	3G:
GG
G	G
G*c                 t   U R                   (       d  g[        R                  " UR                  UR                  X5      nUR
                  nUR                  R                  UR                  SS9   UR                  nUR                  R                  U5        [        XU5      u  pgUR                  R                  USS9   UR                  R                  XW5        UR                  R                  U5        SSS5        UR                  S5        SSS5        g! , (       d  f       N(= f! , (       d  f       g= f)z;
Reflect the native set's contents into the Python object.
NFrK  T)r  r   r  r-   r%   r  r   r  r8  r   	set_clearr  
set_updaterD   r  )r   r   r   r  r  r(   rq   r   s           r   reflect_setr    s    
 ==aiiC=DllG	
		7==		7kk	# 1qAYYr$/GGs,GGNN7# 0
 	u 
8	7 0/ 
8	7s%   /AD)?7D6D)
D&	"D))
D7c                 b    UR                   R                  XUR                  R                  5      $ r   )r   from_native_generatorr   env_ptrr   s      r   box_generatorr    s#    77((1==3H3HIIr   c                 8    UR                   R                  X5      $ r   )r   to_native_generatorr/  s      r   unbox_generatorr    s    77&&s00r   c                     [         R                  " U R                  5      nUR                  R	                  UR                  R                  U5      5      $ r   r   r4  r   r   r   r   r   r   r   r<  s       r   	box_dtyper    :    %%cii0H77qww77ABBr   c                 H    [        UR                  R                  5       5      $ r   ry   r   s      r   unbox_dtyper         qyy00233r   c                     [         R                  " U R                  5      nUR                  R	                  UR                  R                  U5      5      $ r   r  r  s       r   box_number_classr    r  r   c                 H    [        UR                  R                  5       5      $ r   ry   r   s      r   unbox_number_classr  
  r  r   c                     U$ r   r  r   s      r   box_pyobjectr    s	     Jr   c                     [        U5      $ r   r	   r/  s      r   unbox_pyobjectr         sr   c                 t   U R                   c  [        U 5      eUR                  R                  U 5      n[        R
                  " UR                  [        R                  " US 5      SS9nUR                  R                  U R                   5      nUR                  R                  U5      n[        R                  " UR                  [        R                  " UR                  U5      5         UR                  R                  Xa45      nUR                  R                  U5        [        R                  " UR                  [        R                  " UR                  U5      5         UR                  R!                  U5      nUR                  R                  U5        UR                  R#                  UR                  R%                  X5      U5        S S S 5        S S S 5        ['        UR                  R)                  U5      UR                  R+                  5       S9$ ! , (       d  f       NQ= f! , (       d  f       NZ= f)Nfnptr)namer    )get_pointerNotImplementedErrorr-   get_function_pointer_typer   r   r%   r   r#   r   r   r   r   r   r   rD   long_as_voidptrrE   r   r	   rG   r'   )	r   r(   r   ptrtyr   serr  intobjr   s	            r   unbox_funcptrr    s   
!#&& II//4E

#
#AII$&KKt$<)02C ''
"
"3??
3C''%%c*K			199"..qyy+F
H..{FC	{#qyy&22199fEG''))&1CGGNN6"IIOOAII--c93?	G	
H qyy~~c*QWW5H5H5JKKG G	
H 
Hs&   )A8H)!A,HH)
H&	"H))
H7c                     UR                   R                  U R                  5       UR                  R	                  US/5      UR
                  S9nU$ )Nr   )r   )r   from_native_valuegetr%   rX  r   )r   r   r   outs       r   box_deferredr  1  sG    
''
#
#CGGI$%II$;$;C!$E01 $ ?C Jr   c                 .   UR                   R                  U R                  5       U5      nUR                  R                  U    nUR                  UR                  UR                  5       UR                  5      n[        XSR                  UR                  S9$ )Nr  )r   to_native_valuer  r-   data_model_managersetr%   make_uninitializedr]   r	   r!   r   )r   r(   r   native_valuemodelrG  s         r   unbox_deferredr!  9  su    77**3779c:LII((-E
))AIIu779<;M;M
NCs%:%:+335 5r   c                     [        U5      $ r   r  r/  s      r   unbox_dispatcherr#  B  r	  r   c                 <    UR                   R                  U5        U$ r   )r   r9  r   s      r   r  r  H  s    GGNN3Jr   c                     UR                   R                  SSR                  U 5      5        UR                  R	                  U 5      n[        U[        R                  S9$ )Nri   zcan't unbox {!r} typer    )r   rn   r  r-   get_constant_nullr	   r   rk  )r   r(   r   rG  s       r   unbox_unsupportedr'  N  sM    GG,299#>@
))
%
%c
*CsW%5%566r   c                     SU < S3nUR                   R                  SU5        UR                   R                  5       nU$ )Nzcannot convert native z to Python objectri   )r   rn   get_null_object)r   r   r   r   rG  s        r   box_unsupportedr*  U  s6    9<
>CGG,c2
''
!
!
#CJr   c                     U R                   nUR                  R                  UR                  R                  U5      5      $ r   )r  r   r   r   )r   r   r   retvals       r   box_literalr-  \  s3     F77qww77?@@r   c                 8    UR                   R                  U5      $ r   )r   nrt_meminfo_as_pyobjectr   s      r   box_meminfo_pointerr0  e  s    77**3//r   c                     UR                   R                  U5      n[        R                  " UR                  U5      n[        X4S9$ r=   )r   nrt_meminfo_from_pyobjectr   r   r%   r	   )r   r(   r   rG  erroreds        r   unbox_meminfo_pointerr4  j  s5    
''
+
+C
0Cooaii-Gs--r   c                 b    [        UR                  R                  5       [        R                  S9$ r=   )r	   r-   rz   r   r
  r   s      r   unbox_typerefr6  p  s"    qyy002W=N=NOOr   c                     [        XU5      $ r   )r*  r   s      r   box_LiteralStrKeyDictr8  u  s    3Q''r   c           
        ^^	^
^^^^^^^^ [         R                  " TR                  [         R                  5      m/ mUU4S jm	UU	U4S jm[	        5        mUU4S jm[         R
                  " U 5      " TR                  TR                  5      mUTl        T" US5      m[         R                  " TR                  TT5         T" 5         SSS5        T" TS5      n[         R                  " TR                  TU5         T" 5         SSS5        [        TSTR                  [        R                  U5      R                  5        T" TS5      n[         R                  " TR                  TU5         T" 5         SSS5        T" US5      n[         R                  " TR                  TU5         T" 5         SSS5        [        TSTR                  [        R                  U5      R                  5        TR                  R                  TR                  R                  S5      nTR                   R#                  U5      nTR%                  U5        [         R                  " TR                  TU5         T" 5         SSS5        T" US	5      m
[         R                  " TR                  TT
5         T" 5         SSS5        T" US
5      m[         R                  " TR                  TT5         T" 5         SSS5        UU
UUUUUUU4	S jnU" S5        U" S5        U" S5        T	" 5         SSS5        ['        TR)                  5       TR                  R+                  T5      S9$ ! , (       d  f       GN= f! , (       d  f       GNk= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN3= f! , (       d  f       GN
= f! , (       d  f       N= f! , (       d  f       N= f)aN  
The bit_generator instance has a `.ctypes` attr which is a namedtuple
with the following members (types):
* state_address (Python int)
* state (ctypes.c_void_p)
* next_uint64 (ctypes.CFunctionType instance)
* next_uint32 (ctypes.CFunctionType instance)
* next_double (ctypes.CFunctionType instance)
* bit_generator (ctypes.c_void_p)
c                  N   > T H  n TR                   R                  U 5        M      g r   )r   rD   )_refr   
extra_refss    r   clear_extra_refs9unbox_numpy_random_bitgenerator.<locals>.clear_extra_refs  s    DGGNN4  r   c                  h   > T R                   R                  [        R                  T5        T" 5         g r   )r%   rE   r   rk  )r   r=  rq  s   r   handle_failure7unbox_numpy_random_bitgenerator.<locals>.handle_failure  s!    			((,7r   c                 `   > TR                   R                  X5      nTR                  U5        U$ r   )r   r   rm  )r(   attrattr_objr   r<  s      r   object_getattr_safely>unbox_numpy_random_bitgenerator.<locals>.object_getattr_safely  s*    ww44S?Hh'Or   ctypesNstate_addressstater]   r.   c_void_pc                 ,  >	 TR                   R                  TU 5      nT	R                  U5        [        R                  " TR
                  TU5         T
" 5         S S S 5        TR                   R                  UT/5      n[        R                  " TR
                  TU5         T
" 5         S S S 5        T	R                  U5        TR                   R                  TU5      nT	R                  U5        T" US5      n[        R                  " TR
                  TU5         T
" 5         S S S 5        [        TSU  3TR                  [        R                  U5      R                  5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Nj= f)Nr]   fnptr_)r   r   rm  r   early_exit_if_nullr%   
tuple_packr"  setattrr   r   r   r]   )r  interface_next_fnr,  interface_next_fn_castedinterface_next_fn_casted_valuer   ct_castct_voidptr_tyctypes_bindingr<  r@  rE  stack
struct_ptrs        r   wire_in_fnptrs7unbox_numpy_random_bitgenerator.<locals>.wire_in_fnptrs  sE    ! = =!& /0++AIIu>OP  Q
 77%%'8-&HID++AIIudC  Dd# ()ww||GT'B$67 .C('.3*++AIIu>\]  ^ J&GGEKK)GHNNP- QP DC ^]s$   E" E4F"
E14
F
Fnext_doublenext_uint64next_uint32r    )r   r   r%   r
  r   create_struct_proxyr-   r8  rM  rO  r   r   r   r]   r  r  r   r  rm  r	   ro   rG   )r   r(   r   interface_state_addressinterface_stateinterface_state_valuectypes_namectypes_modulerX  r=  rS  rT  rU  r<  r@  rq  rE  rV  rW  s     `      @@@@@@@@@@r   unbox_numpy_random_bitgeneratorrc  {  s    ,,QYY8I8IJLJ! 
	
 005aiiK

 /sH=''		5.I J #8O#-''		5:QR S 	
O%<=CC	E 0H''		5/J K !6W!&''		5:OP QGG%'',u	. ii33AII4D4DhO--k:-(''		5-H I (v>''		5'B C .mZH''		5-H I	P 	P@ 	}%}%}% 
B z++-		|8TUUk JI SR KJ
 QP  IH CB IHo 
s   A+OM	3O<M(A(O,M:43O'N/B;O*N23O%N0-3O O(5O
M%	 O(
M7	2O:
N		O
N	O
N-	(O0
N?	:O
O	O
O!bit_generatorc                 j   [         R                  " UR                  [         R                  5      n[	        5        n[         R
                  " U 5      " UR                  UR                  5      nUR                  R                  US5      n[         R                  " UR                  XF5         UR                  R                  [         R                  U5        SSS5        UR                  [        U5      R                  nXul        Xl        [         R"                  " S5      nUR                  R%                  UU5      Ul        UR                  R)                  U5        SSS5        [+        WR-                  5       UR                  R/                  U5      S9$ ! , (       d  f       N= f! , (       d  f       NP= f)a{  
Here we're creating a NumPyRandomGeneratorType StructModel with following fields:
* ('bit_generator', _bit_gen_type): The unboxed BitGenerator associated with
                                    this Generator object instance.
* ('parent', types.pyobject): Pointer to the original Generator PyObject.
* ('meminfo', types.MemInfoPointer(types.voidptr)): The information about the memory
    stored at the pointer (to the original Generator PyObject). This is useful for
    keeping track of reference counts within the Python runtime. Helps prevent cases
    where deletion happens in Python runtime without NRT being awareness of it.
rd  Nr    )r   r   r%   r
  r   r]  r-   r   r   rM  rE   rk  r   _bit_gen_typer]   rd  r8  	voidptr_tnrt_meminfo_new_from_pyobjectr  rD   r	   ro   rG   )	r   r(   r   rq  rV  rW  bit_gen_instunboxedNULLs	            r   unbox_numpy_random_generatorrl    s+    ,,QYY8I8IJL	005aiiK
ww44S/J''		5GIIOOG,,l; H''-6<<#*   &WWBB


 	
|$ 
  z++-		|8TUU HG 
s%   A/F$)+FBF$
F!	F$$
F2c                 t   UR                   R                  UR                  X5      nUR                  n[        R
                  " UR                  U5      nUR                  R                  U5        UR                   R                  R                  UR                  X5        UR                  R                  U5      $ r   )r-   r   r%   r8  r   r   r   r9  r   rD   rG   )r   r   r   r  r(   rG  s         r   box_numpy_random_generatorrn    sz    99  C5D
++C

#
#AIIs
3CGGNN3IIMMC-99>>#r   N)r  llvmliter   
numba.corer   r   numba.core.pythonapir   r   r   r	   numba.core.errorsr
   r   numba.core.typing.typeofr   r   r  r   r   numba.npr   
contextlibr   r   Booleanr   r+   IntegerLiteralBooleanLiteralr0   Integerr;   rK   FloatrS   rY   Complexrg   rt   NoneTyperw   EllipsisTyper{   
NPDatetimer   r   NPTimedeltar   r   
RawPointerr   
EnumMemberr   r   UndefVarr   Recordr   r   UnicodeCharSeqr   r   Bytesr   CharSeqr   r   Optionalr  r  	SliceTyper  SliceLiteralr-  StringLiteralr0  Arrayr?  BufferrI  rT  TupleUniTupler]  
NamedTupleNamedUniTupler`  	BaseTuplerw  Listr  objectr  r  r  r  r  Setr  r  r  r  	Generatorr  r  DTyper  r  NumberClassr  r  PyObjectObjectr  r  ExternalFunctionPointerr  DeferredTyper  r!  
Dispatcherr#  r'  r*  Literalr-  MemInfoPointerr0  r4  TypeRefr6  LiteralStrKeyDictr8  NumPyRandomBitGeneratorTyperc  rf  NumPyRandomGeneratorTyperl  rn  r  r   r   <module>r     sc    % A A C 4 ) " 0 U]]' ' u}}< < UU(  (
 U]]3 3 u}}7 7 U[[, , u{{
< 
< U]]	6 	6 u}}: :. U^^  u~~u4  4 U: : u< <
 U; ; u< <
 U$ $ U= = u& & U^^  U\\H H u||
@ 
@ UC C2 u9 9: U[[  U]]> >, u}}9 96 U^^	 	 u~~( (B u
E 
E U 2 u4 4 U[[   u||( (2 u{{,@ ,@^ U[[U^^   UU	  	 u.> .>b UZZ B#v #LC9L uzz#( #(L 	/ /d89v uyy"( "(J, UYY 8 	 8 U__J J u1 1 U[[C C u{{4 4 UC C u4 4 U^^U\\   u~~u||   u$$%L &L, U  u5 5 u 
 U 
7 U]]A A U0 0 u. .
 u}}P P U( (
 u(()xV *xVt 11/Bu%%&V 'V@ U##$ %r   