
    ܙd                     6   d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZmZ  eej                  d
             Z eej                  d             Z eej                   eej                  d                         Z eej                  d             Z eej                  d             Z  eej!                  d             Z" eej!                  d             Z# eej$                  d             Z% eej$                  d             Z& eej'                  d             Z( eej'                   eej)                  d                         Z* eej+                  d             Z, eej+                  d             Z- eej.                  d             Z/ eej.                  d             Z0 eej1                  d             Z2 eej3                  d             Z4 eej3                  d             Z5 eej6                  d             Z7 eej6                  d             Z8 eej9                  d             Z: eej9                  d             Z; eej<                  d              Z= eej>                  d!             Z? eej>                  d"             Z@ eejA                  d#             ZB eejA                  d$             ZC eejD                  d%             ZE eejF                  d&             ZG eejH                  d'             ZI eejJ                  d(             ZK eejL                  d)             ZM eejJ                  d*             ZN eejO                   eejP                  d+                         ZQ eejR                   eejS                  d,                         ZT eejU                  d-             ZV eejW                  d.             ZX G d/ d0eY          ZZd1 Z[ eejW                  d2             Z\ e	ejW                  d3             Z]d4 Z^ eej_                  d5             Z`d6 Za eej_                  d7             Zb e	ej_                  d8             Zc eejd                  d9             Ze eejd                  d:             Zf eejg                  d;             Zh eejg                  d<             Zi eejj                  d=             Zk eejj                  d>             Zl eejm                   eejn                  d?                         Zo eejm                   eejn                  d@                         Zp eejq                  dA             Zr eejs                  dB             Zt eejs                  dC             Zu eejv                  dD             Zw eejv                  dE             ZodF ZxdG Zy eejz                  dH             Z{ eej|                  dI             Z} eej|                  dJ             Z~ eej                  dK             Z eej                  dL             Z eej                  dM             Z ej        dN          Z eej                  dO             Z eej                  dP             ZdQS )RzG
Boxing and unboxing of native Numba values to / from CPython objects.
    )ir)typescgutils)boxunboxreflectNativeValue)NumbaNotImplementedError)typeofPurpose)setobjlistobj)numpy_support)contextmanager	ExitStackc                 6    |j                             |          S N)pyapibool_from_booltypvalcs      1lib/python3.11/site-packages/numba/core/boxing.pybox_boolr      s    7!!#&&&    c                     |j                             |          }t          j        |j        d          }|j                            d||          }t          ||j                                                   S )Nr   !=is_error)	r   object_istruer   Constanttypebuildericmp_signedr	   c_api_error)r   objr   istruezeror   s         r   unbox_booleanr*      sd    W""3''F;v{A&&D
)

fd
3
3CsQW%8%8%:%:;;;;r   c                     |j                             |j        || | j                  }|                    | j        |          S r   )contextcastr$   literal_typer   r   s      r   box_literal_integerr/   !   s9     )..Cc.>
?
?C55!3'''r   c                    | j         r?|j                            ||j        j                  }|j                            |          S |j                            ||j        j                  }|j                            |          S r   )	signedr$   sextr   longlonglong_from_longlongzext	ulonglonglong_from_ulonglong)r   r   r   ivalullvals        r   box_integerr:   (   sl    
z 3y~~c17#344w))$///QW%677w**6222r   c                    |j                             |           }t          j        |j        |          }|j                            |          }|j                            |          5  | j        r|j        	                    |          }n|j        
                    |          }|j                            |           |j                            |j                            ||          |           d d d            n# 1 swxY w Y   t          |j                            |          |j                                                  S Nr   )r,   get_argument_typer   alloca_oncer$   r   number_longif_object_okr1   long_as_longlonglong_as_ulonglongdecrefstoretruncr	   loadr&   )r   r'   r   ll_typer   longobjllvals          r   unbox_integerrJ   1   sU   i))#..G

ai
1
1Cg!!#&&G	
		g	&	& > >: 	7G,,W55EEG--g66E	w			w77===> > > > > > > > > > > > > > > qy~~c** ! 3 3 5 57 7 7 7s   )BD  DDc                     | t           j        k    r&|j                            ||j        j                  }n| t           j        k    sJ |}|j                            |          S r   )r   float32r$   fpextr   doublefloat64float_from_double)r   r   r   dbvals       r   	box_floatrR   A   sX    
em	QW^44em####7$$U+++r   c                    |j                             |          }|j                             |          }|j                             |           | t          j        k    r4|j                            ||j        	                    |                     }n| t          j
        k    sJ |}t          ||j                                                   S r<   )r   number_floatfloat_as_doublerC   r   rL   r$   fptruncr,   r=   rO   r	   r&   )r   r'   r   fobjrQ   r   s         r   unbox_floatrX   J   s    7$$DG##D))EGNN4
emi !	 ; ;C @ @B B em####sQW%8%8%:%:;;;;r   c                    |j                             |j        | |          }| t          j        k    rU|j                            |j        |j        j                  }|j                            |j	        |j        j                  }n | t          j
        k    sJ |j        |j	        }}|j                            ||          S Nvalue)r,   make_complexr$   r   	complex64rM   realr   rN   imag
complex128complex_from_doubles)r   r   r   cvalfrealfimags         r   box_complexrf   X   s    9!!!)S!<<D
eo		17>::		17>::e&&&&&y$)u7''u555r   c                 V   |j                             |j        t          j                  }|j                            ||                                          }t          j	        |j        |          }t          j
        |j        |          5  |j                            dd| d           d d d            n# 1 swxY w Y   | t          j        k    r|j                             |j        |           }|j                             |j        |j        t          j        t          j                  |_        |j                             |j        |j        t          j        t          j                  |_        n| t          j        k    sJ |}t%          |                                |          S )NPyExc_TypeErrorzconversion to z failedr   )r,   r]   r$   r   ra   r   complex_adaptor_getpointerr   is_falseif_unlikelyerr_set_stringr^   r-   r_   rO   rL   r`   r	   	_getvalue)r   r'   r   c128okfailedcplxs          r   unbox_complexrs   d   s    9!!!)U-=>>D	
	 	 d&6&6&8&8	9	9Bai,,F		QY	/	/ C C	00<?CCA	C 	C 	CC C C C C C C C C C C C C C C eoy%%ai55INN19di#(=%-A A	INN19di#(=%-A A		 e&&&&&t~~''&9999s    B88B<?B<c                 4    |j                                         S r   )r   	make_noner   s      r   box_nonerv   |   s    7r   c                 N    t          |j                                                  S r   r	   r,   get_dummy_valuer   s      r   
unbox_nonerz            qy0022333r   c                 B    |j                             || j                  S r   )r   create_np_datetime	unit_coder   s      r   box_npdatetimer      s    7%%c3=999r   c                     |j                             |          }t          ||j                                                   S r<   )r   extract_np_datetimer	   r&   r   r'   r   r   s       r   unbox_npdatetimer      s8    
'
%
%c
*
*CsQW%8%8%:%:;;;;r   c                 B    |j                             || j                  S r   )r   create_np_timedeltar~   r   s      r   box_nptimedeltar      s    7&&sCM:::r   c                     |j                             |          }t          ||j                                                   S r<   )r   extract_np_timedeltar	   r&   r   s       r   unbox_nptimedeltar      s8    
'
&
&s
+
+CsQW%8%8%:%:;;;;r   c                     |j                             t          j                  }|j                            ||          }|                    t          j        |          S )z0
    Convert a raw pointer to a Python int.
    )r,   get_value_typer   uintpr$   ptrtointr   )r   r   r   ll_intpaddrs        r   box_raw_pointerr      sH    
 i&&u{33G9c7++D55d###r   c                     |                     | j        |          }|j                            |j                            | j                            }|j                            ||f          S )z6
    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      s[    
 UU39c""Fg!!!'":":3;M"N"NOOG7((6)<<<r   c                 n    |j                             |d          }|                    | j        |          S )z=
    Convert an enum member's value to its native value.
    r\   )r   object_getattr_stringr   r   )r   r'   r   r   s       r   
unbox_enumr      s1    
 W**388F7739f%%%r   c                 :   t          j        t          j        d          |j        j        j                  }|j                            |t          j        t          j        d                              }|j	        
                    ||| j        |j                  S )N       )r   r"   IntTyper#   pointeecountr$   bitcastPointerTyper   recreate_recordr   env_manager)r   r   r   sizeptrs        r   
box_recordr      sn     ;rz"~~sx'7'=>>D
)

C
1!>!>
?
?C7""3ciGGGr   c                 <   j                                         j                             |          }t          j        j        |          }j                            |           }j                            ||          }fd}t          |||          S )Nc                  <    j                                         d S r   r   release_bufferbufr   s   r   cleanupz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      s    
'


!
!C
'
%
%c3
/
/Cqy#..H9##C((D
)

C
&
&C$ $ $ $ $ $sGh????r   c           
         |j         j        |j         j        |j         j        dt          j                 }|j                            t          j	        |          }t          j        |j        |          }|j                            ||j         j                  }|j                            t          j        | j                  }|                    d          }|                    d          }	|                    t          j                  }
t          j        |j        |          }t          j        |j        |g|j                  5 \  }|j                            |j                            ||j                            ||
          g                    }|j                            t          j        |j        |                    5  |j                            |j                            ||	          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j                            |          }|j                             |||          S )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_nestrF   gepmulif_thenis_not_nullrD   addstring_from_kind_and_data)r   r   r   unicode_kindkindrawptrstrptrfullsizer)   onestepr   idxchstrlens                  r   box_unicodecharseqr      s\    7(7(7(* * +8*KML 9!!%+|<<D&qy<<<FYvqw77Fy%%ej#)<<H==D
--

C==:;;D%ai66E		19xj(-	@	@ <ESY^^AIMM&19==d3K3K2LMMNNYw219bAABB 	< 	<IOOAIMM#s33U;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<	< < < < < < < < < < < < < < < Y^^E""F7,,T66BBBs7   BH"
5H?H"H	H"H	H""H&)H&c                    |j                             |           }|j                            |          \  }}}}}}	t	          j        |j        |          5  t          j        |j	        | j
                  }
|j                            d||
          }|j                            |||
          }t          j        |d           }t	          j        |j        |          }t	          j        |j        |j                            ||j	                  ||           d d d            n# 1 swxY w Y   |j                            |          }t#          ||j                            |                    S Nz<=r   )r,   r   r   string_as_string_size_and_kindr   	if_likelyr$   r   r"   r#   r   icmp_unsignedselectr   memcpyr   rF   r	   not_)r   r'   r   ltyrp   bufferr   r   is_asciihashvstorage_size	size_fitsnull_stringoutspacerets                  r   unbox_unicodecharseqr      s   
)
"
"3
'
'C 	
..s33 ,BdHe 
	19b	)	) & &{49ci88I++D$EE	 y	4>> k#t,,-aiEE 	qy	))(FK@@	& 	& 	&& & & & & & & & & & & & & & &$ )..
"
"CsQY^^B%7%78888s   CD##D'*D'c                     |j                             |j        | |          }|j                            |j        |j                  }|j         j                            |j        | |           |S r   )	r,   make_helperr$   r   bytes_from_string_and_sizedatanitemsnrtrC   )r   r   r   r'   r   s        r   	box_bytesr   
  s[    
)

	3
4
4C
'
,
,SXsz
B
BCIMC---Jr   c                    t          j        |j        |          }|j                            ||j        j                  }|j                            t          j	        | j
                  }|                    d          }|                    d          }t          j        |j        |          }t          j        |j        |g|j                  5 \  }	|j                            |j                            ||	g                    }
|j                            t          j        |j        |
                    5  |j                            |j                            |	|          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j                            |          }|j                            ||          S )Nr[   r   r   )r   r   r$   r   r   r   r,   r   r   r   r   r#   r   rF   r   r   r   rD   r   r   )r   r   r   r   r   r   r)   r   r   r   r   r   s               r   box_charseqr     s   &qy<<<FYvqw77Fy%%ej#)<<H==D
--

C%ai66E
 
	19xj(-	@	@ <ESY^^AIMM&3%8899Yw219bAABB 	< 	<IOOAIMM#s33U;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<	< < < < < < < < < < < < < < < Y^^E""F7--ff===s7   A)F95E:.F:E>	>FE>	FFFc                    |j                             |           }|j                            |          \  }}}t	          j        |j        |          5  t          j        |j	        | j
                  }|j                            d||          }|j                            |||          }t          j        |d           }	t	          j        |j        |	          }
t	          j        |j        |j                            |
|j	                  ||           d d d            n# 1 swxY w Y   |j                            |
          }t#          ||j                            |                    S r   )r,   r   r   string_as_string_and_sizer   r   r$   r   r"   r#   r   r   r   r   r   r   rF   r	   r   )r   r'   r   r   rp   r   r   r   r   r   r   r   s               r   unbox_charseqr   )  s{   
)
"
"3
'
'Cw88==B 
	19b	)	) % %{49ci88I++D$EE	 y	4>> k#t,,-aiEE 	qyy((6;??t	% 	% 	%% % % % % % % % % % % % % % %$ )..
"
"CsQY^^B%7%78888s   CD  D$'D$c                    |j                             |j        | |          }t          j        |j        |j                                                  }|j                            |j                  5 \  }}|5  |	                    | j
        |j                  }|j                            ||           d d d            n# 1 swxY w Y   |5  |j                            |j                                        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j                            |          S r   )r,   r   r$   r   r   r   borrow_noneif_elsevalidr   r#   r   rD   ru   rF   )r   r   r   optvalr   then	otherwisevalidress           r   box_optionalr   E  s   Y""19c377F

#AIqw/B/B/D/D
E
EC	
		6<	(	( 6,=T9 	+ 	+uuSXv{33HIOOHc***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  	6 	6IOOAG--//555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9>>#sZ   2D#8<C 4D# C	D#C	D#3D D#D	D#D	D##D'*D'c                    j                             j        | j                  }j                            d|j                                                  t          j        j        |j                  }t          j	        j        t          j
                  }j                                      5 \  }}|5                      | j        |          j                             j        | j        j                  }j                            ||           j                            j        |           ddd           n# 1 swxY w Y   |5  j                            ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   j        fd}	nd}	j                            |          }
t'          |
j                            |          |	          S )z>
    Convert object *obj* to a native optional structure.
    r   Nc                       j                                       5                                   d d d            d S # 1 swxY w Y   d S r   )r$   r   r   )r   is_not_nonenatives   r   r   zunbox_optional.<locals>.cleanupi  s    "";// ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   >AAr    r   )r,   make_optional_noner$   r#   r%   r   r   r   r>   r   	false_bitr   r   make_optional_valuer\   rD   r    r   rF   r	   )r   r'   r   nonevalretptrerrptrr   orelsejustr   r   r   r  s     `        @@r   unbox_optionalr  R  s   
 i**19ch??G)''c173F3F3H3HIIK GL99F&qy'2CDDF	
		;	'	' 	->D& 	5 	5WWSXs++F900146<I IDIOOD&)))IOOFOV444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5  	- 	-IOOGV,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- ~!	! 	! 	! 	! 	! 	! 	! 	! 
)..
 
 CsQY^^F%;%;&( ( ( (s[   9F?BEFE	FE	FF6FF	F	F	
FF Fc                 ,   ddl m} |j                            |          \  }}}}|j                            |j        |           }||_        ||_        ||_	        t          |                                |j                            |                    S )z;
    Convert object *obj* to a native slice structure.
    r   )slicingr   )numba.cpythonr  r   slice_as_intsr,   r   r$   startstopr   r	   rn   r   )	r   r'   r   r  rp   r  r  r   slis	            r   unbox_slicer  t  s    
 &%%%%%G11#66BtT
)

	3
/
/CCICHCHs}}1C1CDDDDr   c           
         | j         }dD ]r}t          ||          }t          |t                    rK	 t	          |t
                     ># t          $ r'}t          d| dt          |                     d }~ww xY ws| j                                         \  }}|j	        
                    |          }	|j	        
                    |          }
|j	                            |	          }|j	                            |
          }|j	                            ||          }|j	                            |           |j	                            |           |S )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   callrC   )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/ 
 

Iz22	i%% 	y'****    +.8+ +"%a&&+ +  	 (3355GWg..w77Og..w77O7//D7//D
',,tT
"
"CGNN4GNN4Js   A
A9"A44A9c                 N    t          |j                                                  S r   rx   r   r'   r   s      r   unbox_string_literalr*    r{   r   c                    |j                             |           } ||j         |j        |          }|j         j        rt	          j        | j                  }|j                            |j        	                    |                    }|j
                            | ||          }|j         j                            |j        | |           |S |j        }|j
                            |           |S rZ   )r,   
make_arrayr$   
enable_nrtr   as_dtyper   r   
read_const	add_constr   nrt_adapt_ndarray_to_pythonr   rC   parentincref)	r   r   r   nativearycls	nativearynp_dtypedtypeptrnewaryr2  s	            r   	box_arrayr9    s    9'',,LQY	===Iy 
 )#)44=++AM,C,CH,M,MNN44S#xHH		QYS111!	vr   c                   
 j                                         
j                             |
          }t          j        j        |          }j                            |           } |j        j                  }|                                }t          j	        j        j        
                    |                    5  j                            |j         j                  }j        j        rj                             
|           nj                             
|           ddd           n# 1 swxY w Y   
fd}	t!          j                            |          ||	          S )zK
    Convert a Py_buffer-providing object to a native array structure.
    Nc                  <    j                                         d S r   r   r   s   r   r   zunbox_buffer.<locals>.cleanup  r   r   r  )r   r   
get_bufferr   r   r$   r,   r,  rj   r   r   r   voidptrr-  nrt_adapt_buffer_from_pythonnumba_buffer_adaptorr	   rF   )r   r'   r   resr    r4  r5  aryptrr   r   r   s     `       @r   unbox_bufferrB    s   
 '


!
!C
'

S#
&
&C"19c22H9'',,LQY	22I""$$F		19ainnX&>&>	?	? 3 3i889 	3G00c::::G((c2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3$ $ $ $ $ $ qy~~f--&( ( ( (s   A)D<<E E c                    |j                             |           } ||j         |j                  }|                                }|j                            ||j        j                  }|j         j        r|j                            ||          }n|j        	                    ||          }	 t          j        | j                  j        }|j                            |          }|j                            d|j        |          }	n# t           $ r t"          j        }	Y nw xY w|j                            t#          j        |j        |          |	          }
|j                            |
d          5  |j                            dd           ddd           n# 1 swxY w Y   t/          |j                            |          |
          S )zC
    Convert a Numpy array object to a native array structure.
    r   Flikelyrh   zXcan't unbox array from PyObject into native value.  The object maybe of a different typeNr   )r,   r,  r$   rj   r   r   r=  r-  nrt_adapt_ndarray_from_pythonnumba_array_adaptorr   r.  r   itemsizer#   r   r
   r   r  or_r   r   rm   r	   rF   )r   r'   r   r4  r5  rA  r   errcodeexpected_itemsizeitemsize_mismatchrq   s              r   unbox_arrayrM    s    9'',,LQY	22I""$$F
)

FAGO
4
4Cy 8'77SAA'--c377)239==F
 &.334EFFI33  $ . . .#-. Y]]AIw// F
 
		6%		0	0 1 1	0 0	1 	1 	11 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 qy~~f--????s$   .D D! D!3FF"Fc                    |j                             | j                  }t          |           D ]R\  }}|j                            ||          }|                    ||          }|j                             |||           S|S )zD
    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_tuplerV    s     !!#),,IcNN 1 15y&&sA..eeE4  	iC0000r   c                 4   |j                             |j                             | j                            }t	          | ||          }|j                             ||          }|j                             |           |j                             |           |S )zI
    Convert native array or structure *val* to a namedtuple object.
    )r   r   r   r   rV  r  rC   )r   r   r   r   	tuple_objr'   s         r   box_namedtuplerY    s     g!!!'":":3;M"N"NOOG#sA&&I
',,w	
*
*CGNN7GNN9Jr   c                    t          |           }g }g |j                            |           }t          j        |j        t          j                  }t          j        |j        |          }|j        	                    |          }|j        
                    d|t          j        |j        |                    }	|j                            |j                            |	          d          5  |j                            dd|fz  |           |j                            t          j        |           ddd           n# 1 swxY w Y   t'          |           D ]\  }
}|j                            ||
          }|                    ||          }|                    |j                   |j                            |j        d          5  |j                            t          j        |           ddd           n# 1 swxY w Y   |j                            |j                   |j                            |j        | |          }|j                            ||           r:|j                            |	d          5  fd}ddd           n# 1 swxY w Y   nd}t7          |j                            |          ||j                            |          	          S )
zN
    Convert tuple *obj* to a native array (if homogeneous) or structure.
    z==FrD  PyExc_ValueErrorz<size mismatch for tuple, expected %d element(s) but got %%zdNTc                  @    t                    D ]}  |              d S r   )reversed)funccleanupss    r   r   zunbox_tuple.<locals>.cleanupG  s1    $X..  DDFFFF r   r   )lenr,   r   r   r   r$   r  r>   r   
tuple_sizer   r   r"   r#   r   r   
err_formatrD   true_bitrP  tuple_getitemr   appendr\   r    r   
make_tupler	   rF   )r   r'   r   nvaluesr   is_error_ptr	value_ptractual_sizesize_matchesrT  eltypeelemr  r\   r   r_  s                   @r   unbox_tuplero    sh   
 	CAFH
)
"
"3
'
'C,QY8IJJL#AIs33I '$$S))K9**4,.K8H!,L,LN NL	
		19>>,77		F	F 8 8	JaTQ	 	 	 	
	(,7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 s^^ , ,	6w$$S!,,&&fl###Yvu== 	< 	<IOOG,l;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<>%OOFN+++I  C88EIOOE9%%% Y|D99 	 	    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 qy~~i00' !	| < <> > > >s7   /AEEE&G>>H	H	JJJc           	         t          j        |j        |j        | |          }|j        }t          j        |j        |          }|j                            t          j        |j        |                    5 \  }}|5  |j	        
                    |           ddd           n# 1 swxY w Y   |5  |j        }|j	                            |          }|j                            t          j        |j        |          d          5  t          j        |j        |          5 }	|                    |	j                  }
|                    |
           |                    | j        |
          }|j	                            ||	j        |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j                            ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j        j                            |j        | |           |j                            |          S )z5
    Convert native list *val* to a list object.
    NTrD  )r   ListInstancer,   r$   r2  r   r   r   r   r   r3  r   list_newr   	for_rangegetitemindexincref_valuer   r   list_setitemrD   r   rC   rF   )r   r   r   listr'   r@  
has_parentr   r   looprU  itemobjs               r   box_listr|  Q  sR   
 	19c3??D
+C

#AIs
3
3C	
		7.qy#>>	?	? &CZJPY 	  	  GNN3		  	  	  	  	  	  	  	  	  	  	  	  	  	  	   	& 	&YF'""6**C""7#6qy##F#F*. # 0 0 C C&qy&99 CT<<
33D%%d+++eeCIt44GG((dj'BBB	C C C C C C C C C C C C C C CC C C C C C C C C C C C C C C IOOC%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&& & & & & & & & & & & & & & &, IMC---9>>#s   5G8;B"G8"B&	&G8)B&	*G8/AG!F/ A,F	F/FF/F F/#G!/F33G!6F37G!G8!G%	%G8(G%	)G88G<?G<c                   *    e Zd ZdZd Zd Zd Zd ZdS )_NumbaTypeHelpera  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                     || _         d S r   )r   )selfr   s     r   __init__z_NumbaTypeHelper.__init__  s    r   c                 
   | j         }|j                            |j        j        d          }|j                            |          }|j                            |d          }|| _        |j        	                    |           | S )Nnumbar   )
r   r,   insert_const_stringr$   moduler   import_module_noblockr   	typeof_fnrC   )r  r   
numba_name	numba_modr  s        r   	__enter__z_NumbaTypeHelper.__enter__  sq    FY22193CWMM
G11*==	G11)XFF	"	y!!!r   c                 R    | j         }|j                            | j                   d S r   )r   r   rC   r  )r  r&  kwargsr   s       r   __exit__z_NumbaTypeHelper.__exit__  s%    F	t~&&&&&r   c                 R    | j         j                            | j        |g          }|S r   )r   r   r   r  )r  r'   r@  s      r   r   z_NumbaTypeHelper.typeof  s$    fl00#GG
r   N)__name__
__module____qualname____doc__r  r  r  r    r   r   r~  r~  s  sZ              ' ' '    r   r~  c                    fd}t           j                            j        j        | |          \  }}j                            |d          5 \  }	}
|	5  ||_        t          j        |j	        d          }j        
                    j                            d||          d          5  t                    5 }|                    j                            ||                    }t!          j        j        |          5 j                            |j                  } ||||                               | j        |          }j        
                    |j        d          5  j                            t           j                                                    ddd           n# 1 swxY w Y   |                    j        |j        d           ddd           n# 1 swxY w Y   j                            |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   | j        r||_        j        
                    j                            j                                                d          5  j                             ||j!                   ddd           n# 1 swxY w Y   |"                    d           j                            |j        |           ddd           n# 1 swxY w Y   |
5  j                            t           j                   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   j        
                    j                                                5  j        j#                            j        | |j                   ddd           dS # 1 swxY w Y   dS )	z9
    Construct a new native list from a Python list.
    c                    |                      |          }j                            t          j        j        |          d          5  j                            t          j                                                    d d d            n# 1 swxY w Y   j                            d||          }j                            |d          5  j                            t          j                   j	        
                    dd||           j	                            |                                            d d d            n# 1 swxY w Y   j	                            |           d S )NFrD  r   rh   z(can't unbox heterogeneous list: %S != %S)r   r$   r   r   r   rD   rc  do_breakr%   r   rb  rC   )nthr{  expected_typobjtypobjtype_mismatchr   errorptrrz  s        r   check_element_typez2_python_list_to_native.<locals>.check_element_type  s   G$$Y	622    	 	 IOOG,h777MMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	--dFOLLY}U;; 	 	IOOG,h777G!:  
 GNN6"""MMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
vs%   :BBBA1EEETrD  r   >FN)r3  )$r   rq  allocate_exr,   r$   r   r   r   r"   r#   r   r%   r~  r   r   list_getitemr   rs  ru  r   r   r    rD   rc  r  setitemr\   rC   	reflectedr2  r   rF   object_set_private_datameminfo	set_dirtyr   )r   r'   r   r   listptrr  r  rp   rx  if_ok	if_not_okr)   r  r  r{  r  rz  s     `  `          @r   _python_list_to_nativer    s         0 #//	19c4PPHB	
		2d		+	+ "8/Ay 	1 	1DI;ty!,,D""19#8#8dD#I#I*. # 0 0 4 4 &a(( 4C&)jj1E1Ec41P1P&Q&QO *19d;; Mt"#'"6"6sDJ"G"G**3III "#G!<!<Y..vu.MM , ,IOOG,<hGGG MMOOO, , , , , , , , , , , , , , , TZeLLLM M M M M M M M M M M M M M M GNN?3334 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4& } "! ""19>>!)..2J2J#K#K9> # @ @ C C//T\BBBC C C C C C C C C C C C C C C NN5!!!IOODJ000=	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1@  	8 	8IOOG,h777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8C"8 "8 "8 "8 "8 "8 "8 "8 "8 "8 "8 "8 "8 "8 "8J 
		19>>(33	4	4 9 9		QYTZ8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s$  M2AL4H>A	H'	A*G67:F=1G6=GG6G%G6*H'	6G::H'	=G:>H'	H>'H++H>.H+/H>2L>ILIAL#!KLKLK8LM2L 	 M2#L 	$M2)&MM2M	M2"M	#M22M69M6/,O((O,/O,c           
         j                                       }t          j        j        t          j                  }t          j        j        j                            |                     }j         	                              }j        
                    t          j        j        |                    5 \  }}|5  t          j                            j        j        | |          }	||	_        | j        r|	_        j                            |	j        |           ddd           n# 1 swxY w Y   |5  t)          | |||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   fd}
t+          j                            |          j                            |          |
          S )z
    Convert list *obj* to a native list.

    If list was previously unboxed, we reuse the existing native list
    to ensure consistency.
    Nc                  <     j                                        d S r   r   object_reset_private_datar   r'   s   r   r   zunbox_list.<locals>.cleanup      	))#.....r   r  )r   	list_sizer   r   r$   r  r>   r,   r   object_get_private_datar   r   r   rq  from_meminfor   r  r2  rD   r\   r  r	   rF   )r   r'   r   r   r  r  r   has_meminfor   rx  r   s    ``        r   
unbox_listr    s    7S!!D(G4EFFH!!)QY-E-Ec-J-JKKG '
)
)#
.
.C	
		7.qy#>>	?	? I#K 	1 	1'44QY	3PSTTDDI} "!IOODJ000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1  	I 	I"3QgxHHH	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 I I I I/ / / / / / qy~~g.. !	x 8 8&( ( ( (s[   ?E8A"D3'E83D7	7E8:D7	;E8 E!E8!E%	%E8(E%	)E88E<?E<c           	      ^   | j         sdS | j        j         r$d                    |           }t          |          t	          j        |j        |j        | |          }|j                            |j	        d          5  |j
        }|j                            |          }|j        }|j                            ||          }|j                            d|t!          j        |j        d                    }	|j                            |	          5 \  }
}|
5  t)          j        |j        |          5 }|                    |j                  }|                    |           |                    | j        |          }|j                            ||j        |           ddd           n# 1 swxY w Y   t)          j        |j        |          5 }|j                            ||j                  }|                    |          }|                    |           |                    | j        |          }|j                            ||           |j                            |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |5  |j                            |||d           t)          j        |j        |          5 }|                    |j                  }|                    |           |                    | j        |          }|j                            ||j        |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                    d           ddd           dS # 1 swxY w Y   dS )zD
    Reflect the native list's contents into the Python object.
    Nz2cannot reflect element of reflected container: {}
FrD  z>=r   ) r  r   format	TypeErrorr   rq  r,   r$   r   dirtyr2  r   r  r   subr%   r   r"   r#   r   r   rs  rt  ru  rv  r   rw  r   list_appendrC   list_setslicer  )r   r   r   msgrx  r'   r   new_sizediff	diff_gt_0if_grow	if_shrinkrz  rU  r{  r   s                   r   reflect_listr    s;   
 = 
y CJJ3OOnn	19c3??D	
		4:e		4	4 $ $kw  %%9y}}Xt,,I))$*,+di*C*CE E	Yy)) 	C-Agy , ,&qy$77 C4<<
33D%%d+++eeCIt44GG((dj'BBB	C C C C C C C C C C C C C C C &qy$77 ,4)--dj99C<<,,D%%d+++eeCIt44GG''W555GNN7+++, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , ,   C C%%c8T4@@@&qy(;; Ct<<
33D%%d+++eeCIt44GG((dj'BBB	C C C C C C C C C C C C C C C	C C C C C C C C C C C C C C C%	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C: 	uI$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   <BN"M5J
/A,F'	J
'F++J
.F+/J
BI3	'J
3I77J
:I7;J
>M5
JM5JM58MA,M	;MMMMMM5M""M5%M"&M5)N"5M9	9N"<M9	=N""N&)N&c                  	   t           j                            |j        |j        | |          \  }}|j                            |d          5 \  }}	|5  t          j        |j        t          j	        |j
        j        d                    }
|j
                            |          5 }|j        }|j
                            |          }|j                            |
          }|j                            t          j        |j        |          d          5 \  }}|5  |j                            ||
           ddd           n# 1 swxY w Y   |5  |j                            d||          }|j                            |d          5  |j                            t          j        |           |j
                            dd           |                                 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                    | j        |          }|j                            |j        d          5  |j                            t          j        |           ddd           n# 1 swxY w Y   |                    |j
        |j        d           ddd           n# 1 swxY w Y   | j        r||_        |j                            |j                            |j                            |                    d          5  |j
                            ||j                   ddd           n# 1 swxY w Y   |                     d           |j                            |j        |           ddd           n# 1 swxY w Y   |	5  |j                            t          j        |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j                            |j                            |                    5  |j        j!        "                    |j        | |j                   ddd           dS # 1 swxY w Y   dS )	z7
    Construct a new native set from a Python set.
    TrD  NFr   rh   zcan't unbox heterogeneous set)	do_resize)#r   SetInstancer  r,   r$   r   r   r   r   r"   r   pyobjset_iterater\   get_typerF   r   rD   r%   r   rc  rm   r  r   r   r    	add_pyapir  r2  r   r  r  r  r   rC   )r   r'   r   r   setptrr  rp   instr  r  	typobjptrrz  r{  r  r  if_firstif_not_firstr  r  s                      r   _python_set_to_nativer  9  s   
 !--aiCNNHB	
		2d		+	+ .8/Ay *	0 *	01!)24+agmT2R2RT TI $$S)) GT*))'22"#)..";";Y&&OAI??  ' " " ,%=h! ; ;		:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; & , ,()	(=(=dF>M)O )OY..}U.KK , ,IOOG,<hGGGG223D3RT T T MMOOO	, , , , , , , , , , , , , , ,	, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , ,& G44Y&&vu&EE @ @IOOG$4h???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @qwFFF9G G G G G G G G G G G G G G G< } "!""19>>!)..2J2J#K#K*/ # 1 1 C C//T\BBBC C C C C C C C C C C C C C C NN5!!!IOODJ///U*	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0X  	8 	8IOOG,h777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8[.8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8b 
		19>>(33	4	4 9 9		QYTZ8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9sl  O=AN'$A0K	H	E6H	EH		E
H	9H AG)H )G--H 0G-1H 4H	 HH	HH	K	HK	H?K	&J	K	JK	J%K	=N'	KN'KAN'.!MN'MN'"M#8N'O='N+	+O=.N+	/O=4&O&O=&O*	*O=-O*	.O==PP:,Q33Q7:Q7c           
         j                                       }t          j        j        t          j                  }t          j        j        j                            |                     }j         	                              }j        
                    t          j        j        |                    5 \  }}|5  t          j                            j        j        | |          }	| j        r|	_        j                            |	j        |           ddd           n# 1 swxY w Y   |5  t'          | |||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   fd}
t)          j                            |          j                            |          |
          S )z
    Convert set *obj* to a native set.

    If set was previously unboxed, we reuse the existing native set
    to ensure consistency.
    Nc                  <     j                                        d S r   r  r  s   r   r   zunbox_set.<locals>.cleanup  r  r   r  )r   set_sizer   r   r$   r  r>   r,   r   r  r   r   r   r  r  r  r2  rD   r\   r  r	   rF   )r   r'   r   r   r  r  r   r  r   r  r   s    ``        r   	unbox_setr  t  s~    7C  D(G4EFFH AI,D,DS,I,IJJF '
)
)#
.
.C	
		7.qy#>>	?	? G#K 	0 	0%2219aicRRD} "!IOODJ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0  	G 	G!#sAtVXFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GG G G G G G G G G G G G G G G/ / / / / / qy~~f-- !	x 8 8&( ( ( (s[   ?E1AD, E1,D0	0E13D0	4E19EE1E	E1!E	"E11E58E5c           	      P   |j         }|j                            |          }t          j        |j        |          }|j                            |d          5  t          j        |j        t          j	        |j
        d                    }|                                5 }|j                            |          }|j        j        }	|j        j                            |j        | j        |	           |                    | j        |	          }
|j                            |||
           |j                            |t          j	        |j
        d                    }|j                            ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ||fS )z9
    Create a Python list from a native set's items.
    TrD  r   r   N)usedr   rr  r   r   r$   r   r   r   r"   r#   _iteraterF   entrykeyr,   r   r3  r   r   rw  r   rD   )r   payloadr   r   r   rp   ru  rz  rT  rU  r{  s              r   _native_set_to_python_listr    s    \Fgv&&G		QY	0	0B	
		2d		+	+ 
& 
&)!)*,+fk1*E*EG G 	&4	u%%A:>DIM  CIt<<<eeCIt,,GG  !W555	aQVQ!7!788AIOOAu%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& w;s8   AFCF6FF	F	F	
FF Fc                 x   t          j        |j        |j        | |          }|j        }t          j        |j        |          }|j                            t          j        |j        |                    5 \  }}|5  |j	        
                    |           ddd           n# 1 swxY w Y   |5  |j        }t          | ||          \  }	}
|j                            |	d          5  |j	                            |
          }|j	                            |
           |j                            ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j        j                            |j        | |           |j                            |          S )z3
    Convert native set *val* to a set object.
    NTrD  )r   r  r,   r$   r2  r   r   r   r   r   r3  r  r  r   set_newrC   rD   r   rF   )r   r   r   r  r'   r@  ry  r   r  rp   r   s              r   box_setr    s   
 aiC==D
+C

#AIs
3
3C	
		7.qy#>>	?	? *CZJPY 	  	  GNN3		  	  	  	  	  	  	  	  	  	  	  	  	  	  	   	* 	*lG4S'1EEKB""2d"33 * *goog..w'''	S)))* * * * * * * * * * * * * * *		* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * *" IMC---9>>#s   5E1;B"E1"B&	&E1)B&	*E1/8E'AE7EEE
EEE1E	E1!E	"E11E58E5c                 B   | j         sdS t          j        |j        |j        | |          }|j        }|j                            |j        d          5  |j        }|j	        
                    |           t          | ||          \  }}|j                            |d          5  |j	                            ||           |j	                            |           ddd           n# 1 swxY w Y   |                    d           ddd           dS # 1 swxY w Y   dS )zC
    Reflect the native set's contents into the Python object.
    NFrD  T)r  r   r  r,   r$   r  r   r  r2  r   	set_clearr  
set_updaterC   r  )r   r   r   r  r  r'   rp   r   s           r   reflect_setr    s   
 = aiC==DlG	
		7=		7	7  k	# 1gqAAGYr$// 	$ 	$GsG,,,GNN7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	u                 s7   AD%6C'D'C+	+D.C+	/DDDc                 N    |j                             || |j        j                  S r   )r   from_native_generatorr   env_ptrr   s      r   box_generatorr    s!    7((c1=3HIIIr   c                 8    |j                             ||           S r   )r   to_native_generatorr)  s      r   unbox_generatorr    s    7&&sC000r   c                     t          j        | j                  }|j                            |j                            |                    S r   r   r.  r   r   r   r   r   r   r   r6  s       r   	box_dtyper    :    %ci00H7qw77AABBBr   c                 N    t          |j                                                  S r   rx   r   s      r   unbox_dtyper        qy0022333r   c                     t          j        | j                  }|j                            |j                            |                    S r   r  r  s       r   box_number_classr    r  r   c                 N    t          |j                                                  S r   rx   r   s      r   unbox_number_classr    r  r   c                     |S r   r  r   s      r   box_pyobjectr    s	     Jr   c                      t          |          S r   r	   r)  s      r   unbox_pyobjectr         sr   c                    | j         t          |           |j                            |           }t	          j        |j        t          j        |d           d          }|j	        
                    | j                   }|j	                            |          }t	          j        |j        t	          j        |j        |                    5  |j	                            ||f          }|j	                            |           t	          j        |j        t	          j        |j        |                    5  |j	                            |          }|j	                            |           |j                            |j                            ||          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t'          |j                            |          |j	                                                  S )Nfnptr)namer   )get_pointerNotImplementedErrorr,   get_function_pointer_typer   r   r$   r   r"   r   r   r   r   r   r   rC   long_as_voidptrrD   r   r	   rF   r&   )	r   r'   r   ptrtyr   serr  intobjr   s	            r   unbox_funcptrr    s[   
!#&&& I//44E

#AI$&Kt$<$<)02 2 2C '
"
"3?
3
3C'%%c**K		19".qy+FF
H 
H @ @..{SFCC	{###qy&219fEEG G 	@ 	@'))&11CGNN6"""IOOAI--c5993???		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@	@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ qy~~c**QW5H5H5J5JKKKKs8   A)G 4A)F)G )F-	-G 0F-	1G  GGc                     |j                             |                                 |j                            |dg          |j                  }|S )Nr   )r   )r   from_native_valuegetr$   rQ  r   )r   r   r   outs       r   box_deferredr	  )  sK    
'
#
#CGGII$%I$;$;C!$E$E01 $ ? ?C Jr   c                    |j                             |                                 |          }|j        j        |          }|                    |j        |                                |j                  }t          ||j
        |j                  S )Nr  )r   to_native_valuer  r,   data_model_managersetr$   make_uninitializedr\   r	   r    r   )r   r'   r   native_valuemodelr@  s         r   unbox_deferredr  1  sz    7**37799c::LI(-E
))AIu7799<;M
N
NCs\%:+35 5 5 5r   c                      t          |          S r   r  r)  s      r   unbox_dispatcherr  :  r  r   c                 :    |j                             |           |S r   )r   r3  r   s      r   r  r  @  s    GNN3Jr   c                     |j                             dd                    |                      |j                            |           }t          |t          j                  S )Nrh   zcan't unbox {!r} typer   )r   rm   r  r,   get_constant_nullr	   r   rc  )r   r'   r   r@  s       r   unbox_unsupportedr  F  s^    G,299#>>@ @ @
)
%
%c
*
*CsW%56666r   c                 z    d| d}|j                             d|           |j                                         }|S )Nzcannot convert native z to Python objectrh   )r   rm   get_null_object)r   r   r   r  r@  s        r   box_unsupportedr  M  sA     9<
>CG,c222
'
!
!
#
#CJr   c                 t    | j         }|j                            |j                            |                    S r   )r  r   r   r   )r   r   r   retvals       r   box_literalr  T  s2     F7qw77??@@@r   c                 6    |j                             |          S r   )r   nrt_meminfo_as_pyobjectr   s      r   box_meminfo_pointerr   ]  s    7**3///r   c                     |j                             |          }t          j        |j        |          }t          ||          S r<   )r   nrt_meminfo_from_pyobjectr   r   r$   r	   )r   r'   r   r@  erroreds        r   unbox_meminfo_pointerr$  b  s=    
'
+
+C
0
0Coai--GsW----r   c                 f    t          |j                                        t          j                  S r<   )r	   r,   ry   r   r  r   s      r   unbox_typerefr&  h  s&    qy0022W=NOOOOr   c                 $    t          | ||          S r   )r  r   s      r   box_LiteralStrKeyDictr(  m  s    3Q'''r   c           
      x  	
 t          j        j        t           j                  g fd		fdt	                      5 fd t          j        |           j        j                  |_         |d          t          j        j                  5                ddd           n# 1 swxY w Y    d          }t          j        j        |          5                ddd           n# 1 swxY w Y   t          d
                    t          j        |          j                    d          }t          j        j        |          5                ddd           n# 1 swxY w Y    |d          }t          j        j        |          5                ddd           n# 1 swxY w Y   t          d
                    t          j        |          j                   j                            j        j        d          }j                            |          }                    |           t          j        j        |          5                ddd           n# 1 swxY w Y    |d	          
t          j        j        
          5                ddd           n# 1 swxY w Y    |d
          t          j        j                  5                ddd           n# 1 swxY w Y   
f	d} |d            |d            |d            	             ddd           n# 1 swxY w Y   t'                                          j                                                S )ar  
    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                  F    D ]} j                             |            d S r   )r   rC   )_refr   
extra_refss    r   clear_extra_refsz9unbox_numpy_random_bitgenerator.<locals>.clear_extra_refs  s3     	! 	!DGNN4    	! 	!r   c                  f     j                             t          j                                 d S r   )r$   rD   r   rc  )r   r-  ri  s   r   handle_failurez7unbox_numpy_random_bitgenerator.<locals>.handle_failure  s1    		(,777r   c                 h    j                             | |          }                    |           |S r   )r   r   re  )r'   attrattr_objr   r,  s      r   object_getattr_safelyz>unbox_numpy_random_bitgenerator.<locals>.object_getattr_safely  s3    w44S$??Hh'''Or   ctypesNstate_addressstater\   r-   c_void_pc                   	 j                             |           }	                    |           t          j        j        |          5   
             d d d            n# 1 swxY w Y   	                               j                             |g          }t          j        j        |          5   
             d d d            n# 1 swxY w Y   	                               j                             |          } |d          }t          j        j        |          5   
             d d d            n# 1 swxY w Y   t          d|  	                    t          j        |          j                   d S )Nr\   fnptr_)r   r   re  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/  r3  stack
struct_ptrs        r   wire_in_fnptrsz7unbox_numpy_random_bitgenerator.<locals>.wire_in_fnptrs  sc    ! = =!& !& /000+AIu>OPP ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 m,,,7%%'8-&HIID+AIudCC ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !m,,, ()w||GT'B'B$ .C-B('.3 .3*+AIu>\]] ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! JGGEK)GHHNP P P P Ps6   A$$A(+A(;CCC4EEEnext_doublenext_uint64next_uint32r   )r   r   r$   r  r   create_struct_proxyr,   r2  r:  r<  r   r   r   r\   r  r  r   r  re  r	   rn   rF   )r   r'   r   interface_state_addressinterface_stateinterface_state_valuectypes_namectypes_modulerE  r-  r@  rA  rB  r,  r/  ri  r3  rC  rD  s     `      @@@@@@@@@@r   unbox_numpy_random_bitgeneratorrO  s  sl    ,QY8IJJLJ! ! ! ! ! !       
 _	 	 	 	 	 	
 6W055aiKK

 /.sH=='	5.II 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #8"7O#- #-'	5:QRR 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
O%<==C	E 	E 	E 0/HH'	5/JJ 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !6 5W!& !&'	5:OPP 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	GG%' '',	. 	. 	. i33AI4DhOO55kBB-((('	5-HH 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ('v>>'	5'BB 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 .-mZHH'	5-HH 	 	N	 	 	 	 	 	 	 	 	 	 	 	 	 	 		P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P@ 	}%%%}%%%}%%%_ _ _ _ _ _ _ _ _ _ _ _ _ _ _B z++--	|8T8TUUUUs  AM6*C5M6C	M6C		*M63D
>M6
D	M6D	AM60F;M6F	M6F	*M69GM6G	M6G	B&M6>J	M6J	M6J	*M6KM6K"	"M6%K"	&*M6L'M6'L+	+M6.L+	/;M66M:=M:bit_generatorc                 :   t          j        |j        t           j                  }t	                      5 } t          j        |           |j        |j                  }|j                            |d          }t          j	        |j        ||          5  |j        
                    t           j        |           ddd           n# 1 swxY w Y   |                    t          |          j        }||_        ||_        t          j        d          }|j                            ||          |_        |j                            |           ddd           n# 1 swxY w Y   t+          |                                |j                            |                    S )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. 
    rP  Nr   )r   r   r$   r  r   rI  r,   r   r   r:  rD   rc  r   _bit_gen_typer\   rP  r2  	voidptr_tnrt_meminfo_new_from_pyobjectr  rC   r	   rn   rF   )	r   r'   r   ri  rC  rD  bit_gen_instunboxedNULLs	            r   unbox_numpy_random_generatorrX    s    ,QY8IJJL	 %5W055aiKK
w44S/JJ'	5,GG 	< 	<IOOG,l;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<''-66<#*
 
 &&WBB
 


 	
|$$$% % % % % % % % % % % % % % %  z++--	|8T8TUUUUs7   AE&C8EC	EC	A?EEEc                 :   |j                             |j        | |          }|j        }t	          j        |j        |          }|j                            |           |j         j        	                    |j        | |           |j        
                    |          S r   )r,   r   r$   r2  r   r   r   r3  r   rC   rF   )r   r   r   r  r'   r@  s         r   box_numpy_random_generatorrZ    s~    9  C55D
+C

#AIs
3
3CGNN3IMC---9>>#r   N)r  llvmliter   
numba.corer   r   numba.core.pythonapir   r   r   r	   numba.core.errorsr
   numba.core.typing.typeofr   r   r  r   r   numba.npr   
contextlibr   r   Booleanr   r*   IntegerLiteralBooleanLiteralr/   Integerr:   rJ   FloatrR   rX   Complexrf   rs   NoneTyperv   EllipsisTyperz   
NPDatetimer   r   NPTimedeltar   r   
RawPointerr   
EnumMemberr   r   Recordr   r   UnicodeCharSeqr   r   Bytesr   CharSeqr   r   Optionalr   r  	SliceTyper  SliceLiteralr'  StringLiteralr*  Arrayr9  BufferrB  rM  TupleUniTuplerV  
NamedTupleNamedUniTuplerY  	BaseTuplero  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  MemInfoPointerr   r$  TypeRefr&  LiteralStrKeyDictr(  NumPyRandomBitGeneratorTyperO  rR  NumPyRandomGeneratorTyperX  rZ  r  r   r   <module>r     s          % % % % % % % % A A A A A A A A A A A A 6 6 6 6 6 6 4 4 4 4 4 4 4 4 ) ) ) ) ) ) ) ) " " " " " " 0 0 0 0 0 0 0 0 U]' ' ' u}< < < UU( (  (
 U]3 3 3 u}7 7 7 U[, , , u{
< 
< 
< U]	6 	6 	6 u}: : :. U^   u~u4 4  4 U: : : u< < <
 U; ; ; u< < <
 U$ $ $ U= = = u& & & U\H H H u|
@ 
@ 
@ UC C C2 u9 9 9: U[   U]> > >, u}9 9 96 U^	 	 	 u~( ( (B u
E 
E 
E U  2 u4 4 4 U[    u|( ( (2 u{,@ ,@ ,@^ U[U^    UU	 	  	 u.> .> .>b UZ  B# # # # #v # # #LC9 C9 C9L uz#( #( #(L 	/ / /d89 89 89v uy"( "( "(J  , UY  8 	  8 U_J J J u1 1 1 U[C C C u{4 4 4 UC C C u4 4 4 U^U\    u~u|    u$%%L L &%L, U   u5 5 5 u  
 U  
7 7 7   U]A A A U0 0 0 u. . .
 u}P P P U( ( (
 u())xV xV *)xVt 21/BBu%&&V V '&V@ U#$$  %$  r   