
    `i                     B   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 d
 Z eej                  d             Z eej                  d             Z eej                   eej                  d                         Z eej                   eej                    eej!                   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)                   eej+                  d                         Z- eej.                  d             Z/ eej.                   eej0                  d                         Z1 eej0                  d             Z2 eej3                  d             Z4 eej3                   eej5                  d                         Z6 eej7                  d             Z8 eej7                  d             Z9 eej:                  d             Z; eej:                  d             Z< eej=                  d             Z> eej?                  d             Z@ eej?                  d              ZA eejB                  d!             ZC eejD                  d"             ZE eejD                  d#             ZF eejG                  d$             ZH eejG                  d%             ZI eejJ                  d&             ZK eejL                  d'             ZM eejL                  d(             ZN eejO                  d)             ZP eejO                  d*             ZQ eejR                  d+             ZS eejT                  d,             ZU eejV                  d-             ZW eejX                  d.             ZY eejZ                  d/             Z[ eejX                  d0             Z\ eej]                   eej^                  d1                         Z_ eej`                   eeja                  d2                         Zb eejc                  d3             Zd eeje                  d4             Zf G d5 d6eg          Zhd7 Zi eeje                  d8             Zj e	eje                  d9             Zkd: Zl eejm                  d;             Znd< Zo eejm                  d=             Zp e	ejm                  d>             Zq eejr                  d?             Zs eejr                  d@             Zt eeju                  dA             Zv eeju                  dB             Zw eejx                  dC             Zy eejx                  dD             Zz eej{                   eej|                  dE                         Z} eej{                   eej|                  dF                         Z~ eej                  dG             Z eej                  dH             Z eej                  dI             Z eej                  dJ             Z eej                  dK             Z}dL ZdM Z eej                  dN             Z eej                  dO             Z eej                  dP             Z eej                  dQ             Z eej                  dR             Z eej                  dS             Z ej        dT          Z eej                  dU             Z eej                  dV             ZdWS )XzG
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           	      h    ||||          }t          j        |j        |j                                                  }t          j        |j        t          j        |j        |                    5  |j                            |j        j	        d          }|j        
                    |          }t          j        |j        t          j        |j        |                    5  | j                            d          d         }	|j                            ||	          }
|j                            |           t          j        |j        t          j        |j        |
                    5  |j                            |j                            |
|f          |           |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   |j                            |          S )Nnumpynp_   )r   alloca_once_valuebuilderpyapiborrow_none	if_likelyis_not_nullcontextinsert_const_stringmoduleimport_modulenamesplitobject_getattr_stringdecrefstorecall_function_objargsload)typvalcpy_boxing_funcpy_type	py_scalar	np_scalar
numpy_namenumpy_moduletype_strnp_scalar_constructors              i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/core/new_boxing.pybox_np_scalarsr4      s   wQ//I)!)QW5H5H5J5JKKI		19g&9!)Y&O&O	P	P 
" 
"Y22193CWMM
w,,Z88qy'*=ai*V*VWW 	6 	6x~~e,,Q/H$%G$A$A,PX$Y$Y!GNN<((("19g.A!)Mb.c.cdd 6 6	 = =>SV_Ua b bdmnnn4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 	
y!!!
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 9>>)$$$s]   1A2H#BG+AG;GGGGGHG"	"H%G"	&HHHc                 6    |j                             |          S N)r   bool_from_boolr(   r)   r*   s      r3   box_py_boolr9   &   s    7!!#&&&    c                 F    t          | ||t          t          j                  S r6   )r4   r9   r   py_boolr8   s      r3   box_np_boolr=   +   s    #sA{EMBBBr:   c                     |j                             |          }t          j        |j        d          }|j                            d||          }t          ||j                                                   S )Nr   !=is_error)	r   object_istruer   Constanttyper   icmp_signedr	   c_api_error)r(   objr*   istruezeror)   s         r3   unbox_booleanrJ   0   sf     W""3''F;v{A&&D
)

fd
3
3CsQW%8%8%:%:;;;;r:   c                     |j                             |j        || | j                  }|                    | j        |          S r6   )r   castr   literal_typer   r8   s      r3   box_literal_integerrN   9   s9    
 )..Cc.>
?
?C55!3'''r:   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_oksignedlong_as_longlonglong_as_ulonglongr$   r%   truncr	   r'   rF   )r(   rG   r*   ll_typer)   longobjllvals          r3   unbox_integerr\   B   sW    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                     |j                             ||j        j                  }|j                            |          S r6   )r   sextr   longlonglong_from_longlong)r(   r)   r*   ivals       r3   box_py_integerrb   S   s2    9>>#qw/00D7%%d+++r:   c                 F    t          | ||t          t          j                  S r6   )r4   rb   r   py_intr8   s      r3   box_np_integerre   Y   s    #sA~u|DDDr:   c                 6    |j                             |          S r6   )r   float_from_doubler8   s      r3   box_py_floatrh   ^   s    7$$S)))r:   c                     | j         dk    r%|j                            ||j        j                  }t          | ||t          t          j                  S )N    )	bitwidthr   fpextr   doubler4   rh   r   py_floatr8   s      r3   box_np_floatro   c   s@    
|riooc17>22#sA|U^DDDr:   c                 p   |j                             |          }|j                             |          }|j                             |           | j        dk    r4|j                            ||j                            |                     }n|}t          ||j         
                                          S )Nrj   r@   )r   number_floatfloat_as_doubler$   rk   r   fptruncr   rQ   r	   rF   )r(   rG   r*   fobjdbvalr)   s         r3   unbox_floatrv   j   s     7$$DG##D))EGNN4
|ri !	 ; ;C @ @B B sQW%8%8%:%:;;;;r:   c                     |j                             |j        | |          }| t          j        k    sJ |j        |j        }}|j                            ||          S Nvalue)	r   make_complexr   r   
py_complexrealimagr   complex_from_doubles)r(   r)   r*   cvalfrealfimags         r3   box_py_complexr   x   sY    9!!!)S!<<D%"""""9di5E7''u555r:   c                 2   |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%          |                                |          S )NPyExc_TypeErrorzconversion to z failedr@   )r   r{   r   r   r|   r   complex_adaptor_getpointerr   is_falseif_unlikelyerr_set_stringnp_complex64rL   r}   rn   
np_float32r~   r	   	_getvalue)r(   rG   r*   c128okfailedcplxs          r3   unbox_py_complexr      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 e   y%%ai55INN19di#(>53CE E	INN19di#(>53CE E		 t~~''&9999s    B88B<?B<c                 
   |j                             |j        | |          }| t          j        k    rU|j                            |j        |j        j                  }|j                            |j	        |j        j                  }n | t          j
        k    sJ |j        |j	        }}|j                            ||          }t          j        |j        |j                                                  }t          j        |j        t          j        |j        |                    5  |j                             |j        j        d          }|j                            |          }	| j                            d          d         }
|j                            |	|
          }t          j        |j        t          j        |j        |                    5  |j                            |j                            ||f          |           |j                            |           d d d            n# 1 swxY w Y   |j                            |           d d d            n# 1 swxY w Y   |j                            |          S )Nry   r   r   r   )r   r{   r   r   r   rl   r}   r   rm   r~   np_complex128r   r   r   r   r   r   r   r   r    r!   r"   r#   r%   r&   r$   r'   )r(   r)   r*   r   r   r   r-   r.   r/   r0   r1   r2   s               r3   box_np_complexr      s   9!!!)S!<<D
e   		17>::		17>::e)))))y$)u,,UE::I)!)QW5H5H5J5JKKI		19g&9!)Y&O&O	P	P " "Y22193CWMM
w,,Z888>>%((+ ! = =lH U Uqy'*=aiI^*_*_`` 	2 	2IOOAG99:OR[Q]^^`ijjjGNN0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	
y!!!" " " " " " " " " " " " " " " 9>>)$$$s8   &B-I AH/#I /H3	3I 6H3	7I  I$'I$c                 4    |j                                         S r6   )r   	make_noner8   s      r3   box_noner      s    7r:   c                 N    t          |j                                                  S r6   r	   r   get_dummy_valuer8   s      r3   
unbox_noner            qy0022333r:   c                 B    |j                             || j                  S r6   )r   create_np_datetime	unit_coder8   s      r3   box_npdatetimer      s    7%%c3=999r:   c                     |j                             |          }t          ||j                                                   S rP   )r   extract_np_datetimer	   rF   r(   rG   r*   r)   s       r3   unbox_npdatetimer      s8    
'
%
%c
*
*CsQW%8%8%:%:;;;;r:   c                 B    |j                             || j                  S r6   )r   create_np_timedeltar   r8   s      r3   box_nptimedeltar      s    7&&sCM:::r:   c                     |j                             |          }t          ||j                                                   S rP   )r   extract_np_timedeltar	   rF   r   s       r3   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        r3   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_classr&   )r(   r)   r*   valobjcls_objs        r3   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.
    rz   )r   r#   r   r   )r(   rG   r*   r   s       r3   
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       r3   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 )Nrj      )r   rC   IntTyperD   pointeecountr   bitcastPointerTyper   recreate_recordr   env_manager)r(   r)   r*   sizeptrs        r3   
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 r6   r   release_bufferbufr*   s   r3   cleanupzunbox_record.<locals>.cleanup      	s#####r:   r   rA   )
r   alloca_bufferextract_record_datar   is_nullr   r   r   r   r	   )	r(   rG   r*   r   rA   ltypr)   r   r   s	     `     @r3   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         ry   r   r   )r   py_unicode_1byte_kindpy_unicode_2byte_kindpy_unicode_4byte_kindr   sizeof_unicode_charr   get_constantr   int32r   r   r   r   cstringintpr   rD   	loop_nestr'   gepmulif_thenr   r%   addstring_from_kind_and_data)r(   r)   r*   unicode_kindkindrawptrstrptrfullsizerI   onestepr   idxchstrlens                  r3   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   r   r   r   rC   rD   r   icmp_unsignedselectr   memcpyr   r'   r	   not_)r(   rG   r*   ltyr   bufferr   r   is_asciihashvstorage_size	size_fitsnull_stringoutspacerets                  r3   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 r6   )	r   make_helperr   r   bytes_from_string_and_sizedatanitemsnrtr$   )r(   r)   r*   rG   r  s        r3   	box_bytesr  E  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 )Nry   r   r   )r   r   r   r   r   r   r   r   r   r   r   rD   r   r'   r   r   r   r%   r   r	  )r(   r)   r*   r   r   r   rI   r   r   r   r   r   s               r3   box_charseqr  M  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   rC   rD   r   r   r   r   r   r   r'   r	   r   )r(   rG   r*   r   r   r   r   r  r  r  r  r  s               r3   unbox_charseqr  d  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 r6   )r   r  r   r   r   r   r   if_elsevalidr   rD   r
  r%   r   r'   )r(   r)   r*   optvalr  then	otherwisevalidress           r3   box_optionalr    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 r6   )r   r   r   )r*   is_not_nonenatives   r3   r   zunbox_optional.<locals>.cleanup  s    "";// ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   >AArA   r   )r   make_optional_noner   rD   rE   r   r   r   rR   r   	false_bitr  r   make_optional_valuerz   r%   rA   r   r'   r	   )r(   rG   r*   nonevalretptrerrptrr  orelsejustr   r  r  r  s     `        @@r3   unbox_optionalr(    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	   r   r   )	r(   rG   r*   r*  r   r-  r.  r   slis	            r3   unbox_slicer0    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   callr$   )r(   r)   r*   	slice_lit
field_name	field_objepy_ctorpy_argsserialized_ctorserialized_argsctorargsrG   s                 r3   box_slice_literalrD    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 r6   r   r(   rG   r*   s      r3   unbox_string_literalrG    r   r:   c                    |j                             |           } ||j         |j        |          }|j         j        rt	          j        | j                  }|j                            |j        	                    |                    }|j
                            | ||          }|j         j                            |j        | |           |S |j        }|j
                            |           |S rx   )r   
make_arrayr   
enable_nrtr   as_dtyper   r   
read_const	add_constr   nrt_adapt_ndarray_to_pythonr  r$   parentincref)	r(   r)   r*   nativearycls	nativearynp_dtypedtypeptrnewaryrO  s	            r3   	box_arrayrV    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 r6   r   r   s   r3   r   zunbox_buffer.<locals>.cleanup  r   r:   r  )r   r   
get_bufferr   r   r   r   rI  r   r   r   r   voidptrrJ  nrt_adapt_buffer_from_pythonnumba_buffer_adaptorr	   r'   )r(   rG   r*   resrA   rQ  rR  aryptrr   r   r   s     `       @r3   unbox_bufferr_    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likelyr   zXcan't unbox array from PyObject into native value.  The object maybe of a different typeNr@   )r   rI  r   r   r   r   rZ  rJ  nrt_adapt_ndarray_from_pythonnumba_array_adaptorr   rK  r   itemsizerD   r   r
   r   r!  or_r   r   r   r	   r'   )r(   rG   r*   rQ  rR  r^  r   errcodeexpected_itemsizeitemsize_mismatchr   s              r3   unbox_arrayrj    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   itemrG   s           r3   	box_tuplers  =  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   rs  r9  r$   )r(   r)   r*   r   	tuple_objrG   s         r3   box_namedtuplerv  L  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==Fra  PyExc_ValueErrorz<size mismatch for tuple, expected %d element(s) but got %%zdNTc                  @    t                    D ]}  |              d S r6   )reversed)funccleanupss    r3   r   zunbox_tuple.<locals>.cleanup  s1    $X..  DDFFFF r:   r   )lenr   r   r   r   r   r!  rR   r   
tuple_sizer   r   rC   rD   r   r   
err_formatr%   true_bitrm  tuple_getitemr   appendrz   rA   r   
make_tupler	   r'   )r(   rG   r*   nvaluesr   is_error_ptr	value_ptractual_sizesize_matchesrq  eltypeelemr  rz   r   r|  s                   @r3   unbox_tupler  Z  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.
    NTra  )r   ListInstancer   r   rO  r   r   r  r   r   rP  r   list_newr   	for_rangegetitemindexincref_valuer   r   list_setitemr%   r  r$   r'   )r(   r)   r*   listrG   r]  
has_parentr  r  looprr  itemobjs               r3   box_listr    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 r6   )r*   )selfr*   s     r3   __init__z_NumbaTypeHelper.__init__  s    r:   c                 
   | j         }|j                            |j        j        d          }|j                            |          }|j                            |d          }|| _        |j        	                    |           | S )Nnumbar   )
r*   r   r   r   r   r   r    r#   	typeof_fnr$   )r  r*   
numba_name	numba_modr  s        r3   	__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 r6   )r*   r   r$   r  )r  rC  kwargsr*   s       r3   __exit__z_NumbaTypeHelper.__exit__  s%    F	t~&&&&&r:   c                 R    | j         j                            | j        |g          }|S r6   )r*   r   r&   r  )r  rG   r]  s      r3   r   z_NumbaTypeHelper.typeof  s$    fl00#GG
r:   N)__name__
__module____qualname____doc__r  r  r  r    r:   r3   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 )NFra  r?   r   z(can't unbox heterogeneous list: %S != %S)r   r   r   r   r   r%   r  do_breakrE   r   r  r$   )nthr  expected_typobjtypobjtype_mismatchr*   errorptrr  s        r3   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Tra  r   >FN)rP  )$r   r  allocate_exr   r   r  r   r   rC   rD   r   rE   r  r   r   list_getitemr   r  r  r   r   rA   r%   r  r  setitemrz   r$   	reflectedrO  r   r'   object_set_private_datameminfo	set_dirtyr  )r(   rG   r*   r   listptrr  r  r   r  if_ok	if_not_okrI   r  r  r  r  r  s     `  `          @r3   _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 r6   r   object_reset_private_datar*   rG   s   r3   r   zunbox_list.<locals>.cleanup8      	))#.....r:   r  )r   	list_sizer   r   r   r!  rR   r   r   object_get_private_datar  r   r   r  from_meminfor   r  rO  r%   rz   r  r	   r'   )r(   rG   r*   r   r  r  r   has_meminfor  r  r   s    ``        r3   
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: {}
Fra  z>=r   ) r  r   format	TypeErrorr   r  r   r   r   dirtyrO  r   r  r   subrE   r   rC   rD   r  r   r  r  r  r  r   r  r   list_appendr$   list_setslicer  )r(   r)   r*   r   r  rG   r   new_sizediff	diff_gt_0if_grow	if_shrinkr  rr  r  r   s                   r3   reflect_listr  A  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.
    Tra  NFr?   r   zcan't unbox heterogeneous set)	do_resize)#r   SetInstancer  r   r   r  r   r   r   rC   r   pyobjset_iteraterz   get_typer'   r   r%   rE   r   r  r   r  r   r   rA   	add_pyapir  rO  r   r  r  r  r  r$   )r(   rG   r*   r   setptrr  r   instr  r  	typobjptrr  r  r  r  if_firstif_not_firstr  r  s                      r3   _python_set_to_nativer  t  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 r6   r  r  s   r3   r   zunbox_set.<locals>.cleanup  r  r:   r  )r   set_sizer   r   r   r!  rR   r   r   r  r  r   r   r  r  r  rO  r%   rz   r  r	   r'   )r(   rG   r*   r   r  r  r   r  r  r  r   s    ``        r3   	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.
    Tra  r   r   N)usedr   r  r   r   r   r   r   r   rC   rD   _iterater'   entrykeyr   r  rP  r   r   r  r   r%   )r(   payloadr*   r  r   r   r  r  rq  rr  r  s              r3   _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.
    NTra  )r   r  r   r   rO  r   r   r  r   r   rP  r  r  r   set_newr$   r%   r  r'   )r(   r)   r*   r  rG   r]  r  r  r  r   r   s              r3   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.
    NFra  T)r  r   r  r   r   r  r   r  rO  r   	set_clearr  
set_updater$   r  )r(   r)   r*   r  r  rG   r   r   s           r3   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 r6   )r   from_native_generatorr   env_ptrr8   s      r3   box_generatorr  %  s!    7((c1=3HIIIr:   c                 8    |j                             ||           S r6   )r   to_native_generatorrF  s      r3   unbox_generatorr   )  s    7&&sC000r:   c                     t          j        | j                  }|j                            |j                            |                    S r6   r   rK  r   r   r   r   r(   r)   r*   rS  s       r3   	box_dtyper  .  :    %ci00H7qw77AABBBr:   c                 N    t          |j                                                  S r6   r   r8   s      r3   unbox_dtyper  3      qy0022333r:   c                     t          j        | j                  }|j                            |j                            |                    S r6   r  r  s       r3   box_number_classr
  8  r  r:   c                 N    t          |j                                                  S r6   r   r8   s      r3   unbox_number_classr  =  r  r:   c                     |S r6   r  r8   s      r3   box_pyobjectr  B  s	     Jr:   c                      t          |          S r6   r	   rF  s      r3   unbox_pyobjectr  G       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)r!   r@   )get_pointerNotImplementedErrorr   get_function_pointer_typer   r   r   r   rC   r   r   r   r   r   r&   r$   long_as_voidptrr%   r   r	   r'   rF   )	r(   rG   r*   ptrtyr  serr  intobjr   s	            r3   unbox_funcptrr  M  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   rn  r   )r(   r)   r*   outs       r3   box_deferredr!  d  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_uninitializedrz   r	   rA   r   )r(   rG   r*   native_valuemodelr]  s         r3   unbox_deferredr)  l  sz    7**37799c::LI(-E
))AIu7799<;M
N
NCs\%:+35 5 5 5r:   c                      t          |          S r6   r  rF  s      r3   unbox_dispatcherr+  u  r  r:   c                 :    |j                             |           |S r6   )r   rP  r8   s      r3   r  r  {  s    GNN3Jr:   c                     |j                             dd                    |                      |j                            |           }t          |t          j                  S )Nr   zcan't unbox {!r} typer@   )r   r   r  r   get_constant_nullr	   r   r  )r(   rG   r*   r]  s       r3   unbox_unsupportedr/    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 objectr   )r   r   get_null_object)r(   r)   r*   r   r]  s        r3   box_unsupportedr2    sA     9<
>CG,c222
'
!
!
#
#CJr:   c                 t    | j         }|j                            |j                            |                    S r6   )r2  r   r   r   )r(   r)   r*   retvals       r3   box_literalr5    s2     F7qw77??@@@r:   c                 6    |j                             |          S r6   )r   nrt_meminfo_as_pyobjectr8   s      r3   box_meminfo_pointerr8    s    7**3///r:   c                     |j                             |          }t          j        |j        |          }t          ||          S rP   )r   nrt_meminfo_from_pyobjectr   r   r   r	   )r(   rG   r*   r]  erroreds        r3   unbox_meminfo_pointerr<    s=    
'
+
+C
0
0Coai--GsW----r:   c                 f    t          |j                                        t          j                  S rP   )r	   r   r   r   r!  r8   s      r3   unbox_typerefr>    s&    qy0022W=NOOOOr:   c                 $    t          | ||          S r6   )r2  r8   s      r3   box_LiteralStrKeyDictr@    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 r6   )r   r$   )_refr*   
extra_refss    r3   clear_extra_refsz9unbox_numpy_random_bitgenerator.<locals>.clear_extra_refs  s3     	! 	!DGNN4    	! 	!r:   c                  f     j                             t          j                                 d S r6   )r   r%   r   r  )r*   rE  r  s   r3   handle_failurez7unbox_numpy_random_bitgenerator.<locals>.handle_failure  s1    		(,777r:   c                 h    j                             | |          }                    |           |S r6   )r   r#   r  )rG   attrattr_objr*   rD  s      r3   object_getattr_safelyz>unbox_numpy_random_bitgenerator.<locals>.object_getattr_safely  s3    w44S$??Hh'''Or:   ctypesNstate_addressstaterz   rL   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 )Nrz   fnptr_)r   r#   r  r   early_exit_if_nullr   
tuple_packr9  setattrr   r   r   rz   )r!   interface_next_fnrC  interface_next_fn_castedinterface_next_fn_casted_valuer*   ct_castct_voidptr_tyctypes_bindingrD  rG  rK  stack
struct_ptrs        r3   wire_in_fnptrsz7unbox_numpy_random_bitgenerator.<locals>.wire_in_fnptrs  s;    ! = =!& !& /000+AIu>OPP ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 7%%'8-&HIID+AIudCC ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ()w||GT'B'B$ .C-B('.3 .3*+AIu>\]] ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! JGGEK)GHHNP P P P Ps6   A$$A(+A(&B==CC
D!!D%(D%next_doublenext_uint64next_uint32r@   )r   r   r   r!  r   create_struct_proxyr   rO  rR  rT  r   r   r   rz   r   r   r   r    r  r	   r   r'   )r(   rG   r*   interface_state_addressinterface_stateinterface_state_valuectypes_namectypes_moduler]  rE  rX  rY  rZ  rD  rG  r  rK  r[  r\  s     `      @@@@@@@@@@r3   unbox_numpy_random_bitgeneratorrg    sk    ,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< 	}%%%}%%%}%%%{] ] ] ] ] ] ] ] ] ] ] ] ] ] ]~ 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.
    rh  Nr@   )r   r   r   r!  r   ra  r   r   r#   rR  r%   r  r   _bit_gen_typerz   rh  rO  	voidptr_tnrt_meminfo_new_from_pyobjectr  r$   r	   r   r'   )	r(   rG   r*   r  r[  r\  bit_gen_instunboxedNULLs	            r3   unbox_numpy_random_generatorrp  )  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 r6   )r   r  r   rO  r   r   r   rP  r  r$   r'   )r(   r)   r*   r  rG   r]  s         r3   box_numpy_random_generatorrr  J  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   r4   PythonBooleanr9   NumPyBooleanr=   rJ   PythonIntegerLiteralPythonBooleanLiteralNumPyIntegerLiteralNumPyBooleanLiteralrN   PythonIntegerNumPyIntegerr\   rb   re   PythonFloatrh   
NumPyFloatro   rv   PythonComplexr   NumPyComplexr   r   NoneTyper   EllipsisTyper   
NPDatetimer   r   NPTimedeltar   r   
RawPointerr   
EnumMemberr   r   UndefVarr   Recordr   r   UnicodeCharSeqr   r  Bytesr  CharSeqr  r  Optionalr  r(  	SliceTyper0  SliceLiteralrD  StringLiteralrG  ArrayrV  Bufferr_  rj  TupleUniTuplers  
NamedTupleNamedUniTuplerv  	BaseTupler  Listr  objectr  r  r  r  r  Setr  r  r  r  	Generatorr  r   DTyper  r  NumberClassr
  r  PyObjectObjectr  r  ExternalFunctionPointerr  DeferredTyper!  r)  
Dispatcherr+  r/  r2  Literalr5  MemInfoPointerr8  r<  TypeRefr>  LiteralStrKeyDictr@  NumPyRandomBitGeneratorTyperg  rj  NumPyRandomGeneratorTyperp  rr  r  r:   r3   <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C C C uu< <  < U  U  UU( (     !  ! (
 uu7 7  7 U, , ,
 UE E E U* * * UE E E uu	< 	<  	< U6 6 6 uu: :  :, 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())vV vV *)vVp 21/BBu%&&V V '&V@ U#$$  %$  r:   