
    0;ji                     l   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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             Z0 eej/                  d             Z1 eej2                  d             Z3 eej4                  d             Z5 eej4                  d             Z6 eej7                  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jD                  d%             ZF eejG                  d&             ZH eejI                  d'             ZJ eejK                  d(             ZL eejM                  d)             ZN eejO                  d*             ZP eejM                  d+             ZQ eejR                   eejS                  d,                         ZT eejU                   eejV                  d-                         ZW eejX                  d.             ZY eejZ                  d/             Z[ G d0 d1e\          Z]d2 Z^ eejZ                  d3             Z_ e	ejZ                  d4             Z`d5 Za eejb                  d6             Zcd7 Zd eejb                  d8             Ze e	ejb                  d9             Zf eejg                  d:             Zh eejg                  d;             Zi eejj                  d<             Zk eejj                  d=             Zl eejm                  d>             Zn eejm                  d?             Zo eejp                   eejq                  d@                         Zr eejp                   eejq                  dA                         Zs eejt                  dB             Zu eejv                  dC             Zw eejv                  dD             Zx eejy                  dE             Zz eejy                  dF             ZrdG Z{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ej                  dN             Z ej        dO          Z eej                  dP             Z eej                  dQ             ZdRS )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                 6    |j                             |          S N)pyapibool_from_booltypvalcs      K/root/voice-cloning/.venv/lib/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_integerr0   !   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_okr2   long_as_longlonglong_as_ulonglongdecrefstoretruncr	   loadr'   )r   r(   r   ll_typer   longobjllvals          r   unbox_integerrK   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_floatrS   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_doublerD   r   rM   r%   fptruncr-   r>   rP   r	   r'   )r   r(   r   fobjrR   r   s         r   unbox_floatrY   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   	complex64rN   realr   rO   imag
complex128complex_from_doubles)r   r   r   cvalfrealfimags         r   box_complexrg   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   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   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_nonerw   |   s    7r   c                 N    t          |j                                                  S r   r	   r-   get_dummy_valuer   s      r   
unbox_noner{            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                 $    d}t          |          )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                 :   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_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\    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   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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nrtrD   )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   rG   r   r   r   rE   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   rG   r	   r   )r   r(   r   r   rq   r   r   r   r   r   r   r   s               r   unbox_charseqr   1  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   rE   rv   rG   )r   r   r   optvalr   then	otherwisevalidress           r   box_optionalr  M  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>.cleanupq  s    "";// ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   >A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   
 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	   ro   r   )	r   r(   r   r  rq   r  r  r   slis	            r   unbox_slicer  |  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   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/ 
 

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   ry   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 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newaryr6  s	            r   	box_arrayr=    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-   r0  rk   r   r   r   voidptrr1  nrt_adapt_buffer_from_pythonnumba_buffer_adaptorr	   rG   )r   r(   r   resr!   r8  r9  aryptrr   r   r   s     `       @r   unbox_bufferrF    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likelyri   zXcan't unbox array from PyObject into native value.  The object maybe of a different typeNr    )r-   r0  r%   rk   r   r   rA  r1  nrt_adapt_ndarray_from_pythonnumba_array_adaptorr   r2  r   itemsizer$   r   r
   r   r  or_r   r   rn   r	   rG   )r   r(   r   r8  r9  rE  r   errcodeexpected_itemsizeitemsize_mismatchrr   s              r   unbox_arrayrQ    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_tuplerZ  
  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   rZ  r   rD   )r   r   r   r   	tuple_objr(   s         r   box_namedtupler]    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==FrH  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>.cleanupO  s1    $X..  DDFFFF r   r   )lenr-   r   r   r   r%   r  r?   r   
tuple_sizer   r   r#   r$   r   r   
err_formatrE   true_bitrT  tuple_getitemr   appendr]   r!   r   
make_tupler	   rG   )r   r(   r   nvaluesr   is_error_ptr	value_ptractual_sizesize_matchesrX  eltypeelemr  r]   r   rc  s                   @r   unbox_tuplers  '  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.
    NTrH  )r   ListInstancer-   r%   r6  r   r   r   r   r   r7  r   list_newr   	for_rangegetitemindexincref_valuer   r   list_setitemrE   r   rD   rG   )r   r   r   listr(   rD  
has_parentr   r   looprY  itemobjs               r   box_listr  Y  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_moduler   	typeof_fnrD   )r  r   
numba_name	numba_modr  s        r   	__enter__z_NumbaTypeHelper.__enter__  sq    FY22193CWMM
G))*55	G11)XFF	"	y!!!r   c                 R    | j         }|j                            | j                   d S r   )r   r   rD   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(   rD  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  {  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 )NFrH  r   ri   z(can't unbox heterogeneous list: %S != %S)r   r%   r   r   r   rE   rg  do_breakr&   r   rf  rD   )nthr  expected_typobjtypobjtype_mismatchr   errorptrr~  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TrH  r   >FN)r7  )$r   ru  allocate_exr-   r%   r   r   r   r#   r$   r   r&   r  r   r   list_getitemr   rw  ry  r   r   r!   rE   rg  r  setitemr]   rD   	reflectedr6  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 #//	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   ru  from_meminfor   r  r6  rE   r]   r  r	   rG   )r   r(   r   r   r  r  r   has_meminfor   r|  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: {}
FrH  z>=r   ) r  r   format	TypeErrorr   ru  r-   r%   r   dirtyr6  r   r  r   subr&   r   r#   r$   r   r   rw  rx  ry  rz  r   r{  r   list_appendrD   list_setslicer  )r   r   r   r   r|  r(   r   new_sizediff	diff_gt_0if_grow	if_shrinkr~  rY  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.
    TrH  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   rg  rn   r  r   r   r!   	add_pyapir  r6  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   
 !--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  r6  rE   r]   r  r	   rG   )r   r(   r   r   r  r  r   r  r   r  r   s    ``        r   	unbox_setr  |  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.
    TrH  r   r   N)usedr   rv  r   r   r%   r   r   r   r#   r$   _iteraterG   entrykeyr-   r   r7  r   r   r{  r   rE   )r   payloadr   r   r   rq   ry  r~  rX  rY  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.
    NTrH  )r   r  r-   r%   r6  r   r   r   r   r   r7  r  r  r   set_newrD   rE   r   rG   )r   r   r   r  r(   rD  r}  r   r  rq   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.
    NFrH  T)r  r   r  r-   r%   r  r   r  r6  r   	set_clearr  
set_updaterD   r  )r   r   r   r  r  r(   rq   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   r2  r   r   r   r   r   r   r   r:  s       r   	box_dtyper    :    %ci00H7qw77AABBBr   c                 N    t          |j                                                  S r   ry   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   ry   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   rD   long_as_voidptrrE   r   r	   rG   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%   rU  r   )r   r   r   outs       r   box_deferredr  1  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modelrD  s         r   unbox_deferredr  9  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  B  r  r   c                 :    |j                             |           |S r   )r   r7  r   s      r   r  r  H  s    GNN3Jr   c                     |j                             dd                    |                      |j                            |           }t          |t          j                  S )Nri   zcan't unbox {!r} typer    )r   rn   r  r-   get_constant_nullr	   r   rg  )r   r(   r   rD  s       r   unbox_unsupportedr  N  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 objectri   )r   rn   get_null_object)r   r   r   r   rD  s        r   box_unsupportedr  U  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   \  s2     F7qw77??@@@r   c                 6    |j                             |          S r   )r   nrt_meminfo_as_pyobjectr   s      r   box_meminfo_pointerr#  e  s    7**3///r   c                     |j                             |          }t          j        |j        |          }t          ||          S r=   )r   nrt_meminfo_from_pyobjectr   r   r%   r	   )r   r(   r   rD  erroreds        r   unbox_meminfo_pointerr'  j  s=    
'
+
+C
0
0Coai--GsW----r   c                 f    t          |j                                        t          j                  S r=   )r	   r-   rz   r   r  r   s      r   unbox_typerefr)  p  s&    qy0022W=NOOOOr   c                 $    t          | ||          S r   )r  r   s      r   box_LiteralStrKeyDictr+  u  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   rD   )_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%   rE   r   rg  )r   r0  rm  s   r   handle_failurez7unbox_numpy_random_bitgenerator.<locals>.handle_failure  s1    		(,777r   c                 h    j                             | |          }                    |           |S r   )r   r   ri  )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   ri  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/  r2  r6  stack
struct_ptrs        r   wire_in_fnptrsz7unbox_numpy_random_bitgenerator.<locals>.wire_in_fnptrs  sd    ! = =!& !& /000+AIu>OPP ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 7%%'8-&HIID+AIudCC ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !d### ()w||GT'B'B$6777 .C-B('.3 .3*+AIu>\]] ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! JGGEK)GHHNP P P P Ps6   A$$A(+A(&B==CC4EEEnext_doublenext_uint64next_uint32r    )r   r   r%   r  r   create_struct_proxyr-   r6  r=  r?  r   r   r   r]   r  r  r   r  ri  r	   ro   rG   )r   r(   r   interface_state_addressinterface_stateinterface_state_valuectypes_namectypes_modulerH  r0  rC  rD  rE  r/  r2  rm  r6  rF  rG  s     `      @@@@@@@@@@r   unbox_numpy_random_bitgeneratorrR  {  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--k::-((('	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.
    rS  Nr    )r   r   r%   r  r   rL  r-   r   r   r=  rE   rg  r   _bit_gen_typer]   rS  r6  	voidptr_tnrt_meminfo_new_from_pyobjectr  rD   r	   ro   rG   )	r   r(   r   rm  rF  rG  bit_gen_instunboxedNULLs	            r   unbox_numpy_random_generatorr[    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%   r6  r   r   r   r7  r   rD   rG   )r   r   r   r  r(   rD  s         r   box_numpy_random_generatorr]    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
   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+  StringLiteralr.  Arrayr=  BufferrF  rQ  TupleUniTuplerZ  
NamedTupleNamedUniTupler]  	BaseTuplers  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+  NumPyRandomBitGeneratorTyperR  rU  NumPyRandomGeneratorTyper[  r]  r  r   r   <module>r     s<          % % % % % % % % A A A A A A A A A A A A C C C C C C C C 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^   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   