
    sh             
       :0   S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	r
SSKJrJr  SSKJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJr  SSKJ r J!r!J"r"  SS	K#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.  SS
K/J0r0  SSK1J2r2  SSK3J4r4J5r5J6r6J7r7J8r8  SSK9J:r:J;r;  SSK<J=r=  SSK>J?r?J@r@  SSK3JArA  SSKBJCrDJErFJGrGJHrHJIrI  S rJS rKS rLS rMS rNS rOS rPS rQS rR GSQS jrSS rTS rU\5" \U5      S 5       rV\$" S\R                  5      S  5       rXS! rY\$" S"\R                  5      \*" \.R                  5      S# 5       5       r\ GSQS$ jr]S% r^S& r_\$" \R                  \R                  \R                  5      \$" \R                  \R                  \R                  5      S' 5       5       rc\$" \R                  \R                  \R                  5      S( 5       re\$" \R                  \R                  \R                  \R                  5      S) 5       rh\$" \i\R                  5      S* 5       rj\$" S+\R                  5      S, 5       rl\"S-:  a$  \$" S.\R                  \R                  5      S/ 5       rm " S0 S1\n5      ro " S2 S3\o5      rp " S4 S5\o5      rq " S6 S7\o5      rr " S8 S9\o5      rs " S: S;\o5      rt " S< S=\n5      ruS> rv\$" \R                  \R                  \R                  5      S? 5       rwS@ rxSA rySB rzSC r{SD r|SE r}SF r~SG r\7SH 5       r\7SI 5       r\4SJ 5       rSK r\5" \
GR                  5      SL 5       r\4SM 5       r\5" \
GR                  5      SN 5       r\5" \
GR                  5      SO 5       rSP r\5" \SQSR9SS 5       r\5" \STSR9SU 5       rSV rSW r\$" SX\R                  5      SY 5       rSZ r\$" SX\R                  \R                  5      S[ 5       r\$" SX\R                  \GR&                  " \R                  5      5      S\ 5       r\5" \
GR*                  5      GSQS] j5       r\%" \R                  S^5      S_ 5       r\5" \
GR0                  5      GSRS` j5       r\5" \
GR4                  5      GSRSa j5       r\5" \
GR8                  5      GSSSb j5       rSc rSd r\$" Se\R                  \R                  5      Sf 5       r\$" Se\R                  \GR&                  " \R                  5      5      Sg 5       r\"Sh:  a  \5" \
GRD                  5      Si 5       rO\5" \
GRD                  5      Sj 5       r\5" \
GRH                  5      Sk 5       r\5" \
GRL                  5      GSQSl j5       r\$" Sm\R                  5      Sn 5       r\$" \
GRR                  \R                  5      So 5       r\$" Sp\R                  5      Sq 5       r\4Sr 5       r\4Ss 5       r\5" \
GR\                  5      GSQSt j5       r\6" \R                  Su5      GSTSv j5       rSw r\5" \
GRd                  5      Sx 5       r\5" \
GRh                  5      Sy 5       r\5" \
GRl                  5      Sz 5       r\5" \
GRp                  5      S{ 5       r\4S| 5       r\Rl                  " \R                  S}5      S~ 5       r\7S 5       rS r\5" \SQSR9S 5       r\$" S\R                  \GR~                  5      S 5       r\%" \R                  S5      S 5       r\%" \R                  S5      \%" \GR                  S5      S 5       5       r\%" \R                  S5      \%" \GR                  S5      S 5       5       r\%" \R                  S5      \%" \GR                  S5      S 5       5       r\%" \R                  S5      S 5       r\%" \R                  S5      \%" \GR                  S5      S 5       5       r\%" \R                  S5      \%" \GR                  S5      S 5       5       r\%" \GR                  S5      S 5       r\%" \GR                  S5      S 5       r\%" \GR                  S5      S 5       r\%" \GR                  S5      S 5       r\%" \R                  S5      S 5       r\%" \GR                  S5      S 5       r\(" \GR                  \GR                  5      \(" \GR                  \GR                  5      S 5       5       rS r\%" \R                  S5      S 5       r\%" \GR                  S5      \%" \GR                  S5      S 5       5       r\%" \GR                  S5      S 5       r\%" \R                  S5      S 5       r\%" \R                  S5      S 5       rS r\6" \R                  S5      \6" \R                  S5      S 5       5       rS r\%" \GR                  S5      " \5        \%" \GR                  S5      " \5        \$" S\GR                  \R                  5      S 5       r\&" \R                  5      S 5       r\$" S\R                  \Rd                  5      S 5       r\&" \GR                  5      S 5       r\'" \GR                  5      S 5       r\$" S\GR                  \Rd                  5      S 5       r\$" S\GR                  \GR                  5      S 5       r\$" S\GR                  \Rd                  \R                  5      S 5       r\$" S\GR                  \GR                  \R                  5      S 5       r\)" \R                  5      S 5       r\)" \GR                  5      S 5       r\)" \GR                  5      S 5       r\$" \GR                  \R                  \R                  5      S 5       r\8" \R                  S5      S 5       rS rS r  GSTS jr GSQS jrS rS rS r\%" \R                  S5      S 5       r\$" S"\GR                  5      \*" \.R                  5      S 5       5       r\$" \R                  \GR                  \R                  5      S 5       r\$" \R                  \GR                  \R                  \R                  5      S 5       r\$" \i\GR                  5      S 5       r\$" \
GR                  \R                  5      S 5       r\$" S"\GR                   5      \*" \.R                  5      S 5       5       Gr\$" \\GR&                  " \R                  5      5      \$" \
GR                  \GR&                  " \R                  5      5      S 5       5       Gr\$" \\R                  5      \$" \
GR                  \R                  5      S 5       5       Gr\$" S"\GR
                  5      \*" \.R                  5      S 5       5       Gr\$" \
GR                  \R                  5      S 5       Gr\$" S"\GR                  5      \*" \.R                  5      S 5       5       Gr
\$" \GR                  \GR                  \GR                  5      S 5       GrS Gr\A" \R                  S5      S 5       GrS Gr\7S 5       GrS GrS GrS GrS Gr\7S 5       Gr\5" \
GR,                  5      G\4S j5       Gr\7S 5       Gr\5" \
GR4                  5      GSQS j5       Gr\7S 5       Gr\6" \R                  S5      S 5       Gr\5" \
GR<                  5      G\4S j5       Gr\5" \
GR@                  5      GSQS j5       Gr!\5" \
GRD                  5      GSQS j5       Gr#\5" \
GRH                  5      GSQS j5       Gr%\5" \
GRL                  5      GSQS j5       Gr'\5" \
GRP                  5      GSQS j5       Gr)\5" \
GRT                  5      GSQS j5       Gr+S Gr,\Rj                  " G\,5      S 5       Gr-\Rj                  " \
GR\                  5      SSG\4S j5       Gr/\5" \
GR`                  5      GSUS j5       Gr1\5" \
GRd                  5      S 5       Gr3\5" \
GRh                  5      GSUS j5       Gr5S Gr6\5" \
GRn                  5      \6" \R                  S5      GSQS j5       5       Gr8S Gr9\5" \
GRt                  5      GSTS j5       Gr;\5" \
GRx                  5      GSRS j5       Gr=S Gr>\7S 5       Gr?\$" S\R                  5      S 5       Gr@\5" \
GR                  5      S 5       GrBS GrC\7S 5       GrD\5" \
GR                  5      S 5       GrF\5" \
GR                  5      GS  5       GrH\$" GS\R                  \GR~                  5      \$" GS\R                  \Rd                  5      GS 5       5       GrI\7GS 5       GrJ\5" \
GR                  5      G\4GS j5       GrL\5" \5      GSQGS j5       GrM\5" \5      GSQGS j5       GrNGS GrOGS GrPGS	 GrQGS
 GrRGS GrSGS GrTGS GrUGS GrV\7GS 5       GrW\5" \
GR                  5      GSQGS j5       GrYGS GrZGS Gr[GS Gr\GS Gr]\7GS 5       Gr^\5" \
GR                  5      GS 5       Gr_GS Gr`GS Gra\5" \
GR                  5      GS 5       Grc\5" \
GR                  5      GS 5       Gre\5" \
GR                  5      GS 5       GrgGS GrhGS GriGS GrjGS Grk\7GS  5       Grl\5" \
GR                  5      GSUGS! j5       GrnGS" Gro\7GS# 5       Grp\5" \
GR                  5      GS$ 5       GrrGS% Grs\7GS& 5       Grt\5" \
GR                  5      GSUGS' j5       GrvGS( Grw\7GS) 5       Grx\5" \
GR                  5      GS* 5       Grz\7GS+ 5       Gr{\5" \
GR                  5      GS, 5       Gr}\"S-:  a  \5" \
GR                  5      " G\}5        \7GS- 5       Gr\5" \
GR                   5      GS. 5       Gr\Rl                  " \R                  GS/5      GS0 5       Gr\Rl                  " \R                  GS15      GS2 5       Gr\5" \
GR                  5      GS3 5       Gr\5" \
GR                  5      GS4 5       Gr\7GS5 5       Gr\5" \
GR                  5      GS6 5       Gr\5" \
GR                  5      GSUGS7 j5       Gr\5" \
GR                  5      GSUGS8 j5       Gr\5" \
GR                  5      GS9 5       Gr\5" \
GR"                  5      GS: 5       Gr\5" \
GR&                  5      GS; 5       Gr0 GrGS< GrGSVGS= jGrGS> Gr\$" GS?\R                  5      GS@ 5       Gr\5" \
GR4                  5      GSA 5       Gr\$" GSB\R                  \Rd                  5      \$" \
GR8                  \R                  \Rd                  5      GSC 5       5       Gr\(" \R                  \R                  5      GSD 5       Gr\(" \R                  \GR>                  5      \(" \R                  \GR@                  5      \(" \R                  \R                  5      \(" \R                  \GRB                  5      \(" \R                  \GRD                  5      \(" \R                  \GRF                  5      \(" \R                  \GRH                  5      GSE 5       5       5       5       5       5       5       Gr\(" \R                  \GR>                  5      GSF 5       GrGSG Gr\GRP                  " G\5      GSH 5       Gr\$" G\\R                  \R                  \R                  5      GSI 5       Gr\Rj                  " \
GRV                  GRX                  GRZ                  5      GSWGSJ j5       Gr\Rj                  " \
GRV                  GRX                  GR\                  5      GSQGSK j5       Gr\5" G\5      GSL 5       Gr\5" \
GRb                  5      GSM 5       Gr\4GSN 5       Gr\5" \
GRh                  5      GSO 5       Gr\5" \
GRl                  5      GSXGSP j5       Grg(Y  z[
Implementation of operations on Array objects and objects supporting
the buffer protocol.
    N)ir)Constant)pndindexliteral_unroll)typestypingerrorscgutils	extendingconfig)
as_dtype
from_dtypecarrayfarrayis_contiguous
is_fortrancheck_is_integertype_is_scalar
lt_complex	lt_floats)type_can_asarrayis_nonelikenumpy_version)lower_builtinlower_getattrlower_getattr_genericlower_setattr_generic
lower_castlower_constantiternext_implimpl_ret_borrowedimpl_ret_new_refimpl_ret_untrackedRefType)	signature)StringLiteral)register_jitableoverloadoverload_method	intrinsicoverload_attribute)	quicksort	mergesort)slicing)tuple_setitembuild_full_slice_tuple)overload_classmethod)parse_dtypeparse_shape_parse_nested_sequence_sequence_of_arrays_choose_concatenation_layoutc                     [        UR                  U5      [        UR                  U5      /nU R                  R                  U5      nUR	                  SU5        g)zn
Set the "range" metadata on a load instruction.
Note the interval is in the form [lower_bound, upper_bound).
rangeN)r   typemoduleadd_metadataset_metadata)builderloadlower_boundupper_boundrange_operandsmds         e/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/np/arrayobj.pyset_range_metadatarD   -   sK    
 tyy+6tyy+68N		$	$^	4Bgr"    c                 \    SUR                   R                  S-
  -  S-
  n[        XSU5        g)z>
Mark the result of a load instruction as positive (or zero).
   r   N)r9   widthrD   )r=   r>   r@   s      rC   mark_positiverI   8   s,     1,-2Kwa5rE   c                    ^ ^^^^ T R                   m[        R                  " T5      mTR                  m " UU UUU4S jST5      mT$ )z
Return the Structure representation of the given *array_type*
(an instance of types.ArrayCompatible).

Note this does not call __array_wrap__ in case a new array structure
is being created (rather than populated).
c                   H   >^  \ rS rSrUU UU4S jr\UU4S j5       rSrU =r$ )make_array.<locals>.ArrayStructL   c                 b  > [        T
T	5      n U R                  R                  SU5      nU R                  R                  T	   nU R                  U5      nUc!  [        R                  " U R                  USS9nOUnU" U R                  U45      nXa4$ ! [         a    [        TU ]  U5      s $ f = f)N	__array__T)zfill)r%   _contextget_functionNotImplementedErrorsuper
_make_refsdata_model_manager_get_be_typer
   alloca_once_builder)selfrefsig
array_impl	datamodelbe_type	outer_refArrayStruct	__class__
array_typereal_array_types          rC   rU   *make_array.<locals>.ArrayStruct._make_refsN   s    OZ8C@!]]77SI

 88DI''	2G{#//w6:<	  	 T]]YL9C>! ' @[$:3??@s   B B.-B.c                 L  > U R                   nTS:X  a  TR                  U S5      $ U R                  S5      n/ n[        T5       HH  n[        R
                  " XSU5      nUR                  U5      nUR                  U5        [        X5        MJ     [        R                  " X5      $ )zD
Override .shape to inform LLVM that its elements are all positive.
r   shape)
rY   __getattr___get_ptr_by_namer8   r
   gep_inboundsr>   appendrI   
pack_array)	rZ   r=   ptrdimsidimptrr>   basendims	          rC   rg   %make_array.<locals>.ArrayStruct.shapeb   s    
 mmGqy''g66 ''0CD4[ --gAqA||F+D!g,	 ! %%g44rE    )	__name__
__module____qualname____firstlineno__rU   propertyrg   __static_attributes____classcell__)rb   ra   rc   rq   rr   rd   s   @rC   ra   rL   L   s!    	" 	"( 
	5 
	5rE   ra   )as_arrayr
   create_struct_proxyrr   )rc   ra   rq   rr   rd   s   `@@@@rC   
make_arrayr~   @   sE     !))O&&7DD+5 +5d +5Z rE   c                 Z    U R                  UR                  5      nU R                  U5      $ )z:
Return the item size for the given array or buffer type.
)get_data_typedtypeget_abi_sizeof)contextrc   lltys      rC   get_itemsizer   |   s+       !1!12D!!$''rE   c                 b    UR                   (       a  SOSnU R                  XR                  UUS9$ )z+
Load the item at the given array pointer.
NrG   align)alignedunpack_valuer   )r   r=   arraytyrm   r   s        rC   	load_itemr      s4     OODE&+   - -rE   c                 b    UR                   (       a  SOSnU R                  XR                  X4US9$ )z,
Store the item at the given array pointer.
NrG   r   )r   
pack_valuer   )r   r=   r   valrm   r   s         rC   
store_itemr      s-     OODEg}}ceLLrE   c                     UR                   (       a:  U R                  XU[        R                  5      n[        R
                  " XU5      nU$ U R                  XU[        R                  5      nU$ )zE
Fix the integer index' type and value for the given dimension size.
)signedcastr   intpr.   	fix_indexuintp)r   r=   idxtyidxsizeinds         rC   fix_integer_indexr      sW     ||ll7

;d3 J ll7<JrE   c                 (   [        U[        R                  5      (       aq  UR                  S:X  aa  [        UR                  [        R
                  5      (       d   e[        U5      " XU5      n[        XX$R                  5      nUR                  U4$ X#4$ )zK
Normalize the index type and value.  0-d arrays are converted to scalars.
r   )	
isinstancer   Arrayrr   r   Integerr~   r   data)r   r=   r   r   idxaryidxvals         rC   normalize_indexr      sr     %%%%**/%++u}}5555E"7S97UKK@{{F""zrE   c                     [        U5      (       a3  [        [        X#5       VVs/ s H  u  pE[        XUU5      PM     snn6 u  p#X#4$ s  snnf )zR
Same as normalize_index(), but operating on sequences of
index types and values.
)lenzipr   )r   r=   index_typesindicesr   r   s         rC   normalize_indicesr      sX    
 7||"7:;7P%'7P &5Wu58&:7P%'  ( 	%'s   A
c                 D   U R                   nU R                  nU R                  n	[        R                  " [        R
                  SS5      n
UR                  U
   n[        UR                  5      n[        U	R                  5      nX-  U:w  a6  X-
  nSU R                   S[        U5      S:  a  SOS SU S3n[        U5      eUc*  [        UR                  U	R                  S
5      5      S	5      nUR                  [        R                  5      n[!        U["        [$        45      (       a  [&        R(                  " XU5      n[!        U["        [$        45      (       a  [&        R(                  " XU5      n[!        U[*        5      (       a  U" U5      n[-        UUUUUS9nUc.  [        UR                  U	R                  S5      5      S	5      US'   OUUS'   UR/                  [        R                  S5      n[&        R0                  " XUR2                  R4                  5      nU H  nUR7                  UUS/S9nM     UUS'   [        UR9                  5       5      nUU:w  a  [        SR;                  UU-
  5      5      eUR=                  5        H  u  nn[?        U UU5        M     U $ )z
Helper function for populating array structures.
This avoids forgetting to set fields.

*shape* and *strides* can be Python tuples or LLVM arrays.
rG   CzThe datamodel for type z is missing fields  .Nmeminfo)rg   stridesr   itemsizer   parentnswflagsnitemszmissing {0}) rQ   rY   
_datamodelr   r   float64rV   set_fields_fe_typer   
ValueErrorr   get_value_typeget_typer   r   tuplelistr
   rl   intdictget_constantunpack_tupler9   countmulkeysformatitemssetattr)arrayr   rg   r   r   r   r   r   r=   r^   standard_arraystandard_array_type_datamodelrequired_fieldsdatamodel_fieldsmissingmsgintp_tattrsr   unpacked_shapeaxlen
got_fieldskvs                           rC   populate_arrayr      sn    nnGnnG  I [[37N$+$>$>~$N!7??@O9,,- 	*>!4((8 9!'lQ.sB7q	Do711y)+,02 ##EJJ/F%%''""76:'E4=))$$Wv>(C  (#u " 	#E ~"7#9#9x($*+/1h !h!!%**a0F))'%**:J:JKNVU5':  E(O UZZ\"J_$--o
.JKLL 1q!  LrE   c                 f   UR                   nUR                  nUR                  [        R                  S5      n[
        R                  " X1R                  U R                  5      nU H  nUR                  XFS/S9nM     XAl
        UR                  [        R                  [        X 5      5      Ul        g)z{
Update some auxiliary information in *array* after some of its fields
were changed.  `itemsize` and `nitems` are updated.
rG   r   r   N)rQ   rY   r   r   r   r
   r   rg   rr   r   r   r   r   )arytyr   r   r=   r   r   r   s          rC   update_array_infor      s    
 nnGnnG !!%**a0F))';;

KNV5':  L))%***6w*FHENrE   c                     [        5       e)z/Constrain axis values to valid positive values.rS   )	func_namearg_namerr   axiss       rC   normalize_axisr     s    

rE   c                    ^ [        U [        5      (       d  [        R                  " S5      e[        U[        5      (       d  [        R                  " S5      eU R                   SUR                   S3mU4S jnU$ )Nz func_name must be a str literal.zarg_name must be a str literal.z: Argument z* out of bounds for dimensions of the arrayc                 H   > US:  a  X2-  nUS:  d  X2:  a  [        T5      eU$ Nr   r   )r   r   rr   r   r   s       rC   impl&normalize_axis_overloads.<locals>.impl$  s+    !8LD!8t|S/!rE   )r   r&   r	   TypingErrorliteral_value)r   r   rr   r   r   r   s        @rC   normalize_axis_overloadsr     sx    i//  !CDDh..  !BCC ""
#;x/E/E.F G4 	4 
 KrE   getiterc                    UR                   u  nUu  nU R                  XR                  5      nU R                  [        R
                  S5      n[        R                  " X5      nXl        XVl	        U R                  (       a  U R                  R                  XU5        UR                  5       n	[        XUR                  U	5      n
U
$ r   )argsmake_helperreturn_typer   r   r   r
   alloca_once_valueindexr   
enable_nrtnrtincref	_getvaluer"   )r   r=   r\   r   r   r   iterobjzeroindexptrresouts              rC   getiter_arrayr   /  s    IWGU!!'??;G

A.D((7HMM 7U3



C 7S__c
BCJrE   c           
         [         R                  " XR                  UR                  S9n[         R                  " XR                  UR                  S9nUR                  US   U5      n[         R                  " XR                  U5      n	USS n
USS n[        U[        R                  5      (       a  [        XX4UXU5      nUR                  5       $ U
(       a   e[        XX95      $ )z0Evaluate `ary[idx]`, where idx is a single int. r   r   rG   N)r
   r   rg   rr   r   r   pointer_addr   r   r   Buffer	make_viewr   r   )r   r=   r   r   aryr   shapesr   offsetdataptrview_shapesview_stridesretarys                rC   _getitem_array_single_intr
  G  s     !!'99EJJGF""7KKuzzJG[[S)F!!'88V<G*K12;L+u||,,7U"?!! 5::rE   iternextc           	      \   UR                   u  nUu  nUR                  nU R                  XUS9n[        U5      " XUR                  S9n	[
        R                  " XR                  SS9u  n
UR                  UR                  5      nUR                  SX5      nUR                  U5        UR                  U5         [        XUR                  XyU5      nUR                  U5        [
        R                   " X5      nUR#                  XR                  5        S S S 5        g ! , (       d  f       g = f)NvaluerG   r   <)r   rc   r   r~   r   r
   r   rg   r>   r   icmp_signed	set_validif_thenr
  
yield_typeyield_increment_indexstore)r   r=   r\   r   resultitertyiterr   r   r  r   r   is_validr  nindexs                  rC   iternext_arrayr  \  s     xxHVFTG!!'!>G
W
ggmm
DC""7IIQ?GFLL'E""36H
X		")f//u
 	e((8fmm, 
#	"	"s   9AD
D+c           
         U R                  [        R                  S5      nU R                  [        R                  S5      n[        R                  " XR
                  UR                  5      n	[        R                  " XR                  UR                  5      n
/ n/ n/ n[        U Vs/ s H  n[        U5      (       d  M  UPM     sn5      nSn[        XT5       GH  u  nnU[        R                  L ap  UR                  [        U5      -
  S-   U-   n[        U5       HA  nUR                  U5        UR                  U	U   5        UR                  U
U   5        US-  nMC     M  [        U[        R                  5      (       a  U R!                  UUUS9n["        R$                  " XUU5        ["        R&                  " UUU	U   5        UR                  UR(                  5        ["        R*                  " UU5      n["        R,                  " UUU
U   5      nUR                  U5        UR                  U5        O[        U[        R.                  5      (       aF  [1        XUUU	U   5      nU(       a  [        R2                  " XUU	U   U5        UR                  U5        OG[        U5      (       a(  UR                  U5        UR                  U5        US-  nO[5        SU< 35      eUS-  nGM     UUR                  ::  d   eUUR                  :  a?  UR                  U	U   5        UR                  U
U   5        US-  nUUR                  :  a  M?  [        R6                  " XX#USSS9nUX4$ s  snf )z
Perform basic indexing on the given array.
A (data pointer, shapes, strides) tuple is returned describing
the corresponding view.
r   rG   r  unexpected index type: F
wraparoundboundscheck)r   r   r   r
   r   rg   rr   r   r   r   r   ellipsisr8   rk   r   	SliceTyper   r.   guard_invalid_slice	fix_slicestartget_slice_length
fix_strider   r   do_boundscheckrS   get_item_pointer)r   r=   r   r  r   r   r!  r   oner  r   output_indicesoutput_shapesoutput_stridesr   num_newaxesaxindexvalr   	n_missingro   sliceshstr   r  s                             rC   basic_indexingr6  x  s    

A.D


uzz1
-C!!'99ejjAF""7KKDGNMNkFks[5EskFGK	
Bw4%ENN"

S\1A5CI9%%%d+$$VBZ0%%gbk2a	 &
 eU__--''h'GE''%GgufRj9!!%++.))'59B##GUGBK@B  $!!"%u}}--#GeX$*2J0C&&wfRj"M!!#&  %!!$'!GB%U&LMM
aA 5F 
uzz/VBZ(gbk*
a uzz/ &&w'527ULG ]33a Gs   &M(>M(c           
          [        U5      " X5      n[        UUUUUR                  UR                  UR                  S9  U$ )z>
Build a view over the given array with the given parameters.
r   rg   r   r   r   r   )r~   r   r   r   r   )	r   r=   r   r  r   r   r  r   r	  s	            rC   r  r    sB    
 $W6F6"LL;;**& MrE   c           
          [        XX4XVU R                  S9u  pxn	[        U[        R                  5      (       a  [        XX4UXxU	5      n
U
R                  5       $ U(       a   e[        XX75      $ )zd
Return the result of indexing *ary* with the given *indices*,
returning either a scalar or a view.
r!  )r6  enable_boundscheckr   r   r  r  r   r   )r   r=   r   r   r  r   r   r  r  r  r	  s              rC   _getitem_array_genericr<    sr     	w[#*#=#=	? 'G, +u||,,7U"?!! 5::rE   c           	          UR                   u  pEUu  pgUR                  S:  d   e[        U5      " XU5      n[        XUR                  XFU4U45      n[        XUR                  U5      $ )z,
Basic indexing with an integer or a slice.
rG   )r   rr   r~   r<  r   r!   	r   r=   r\   r   r   r   r  r   r   s	            rC   getitem_arraynd_intpr?    sg     88LEHC::??
U
Gc
2C
 3??!&eXv?CWsDDrE   c           
      b   UR                   u  pEUu  pg[        U5      " XU5      nUR                  n[        R                  " X[        U5      S9n	[        XX5      u  p[        S U 5       5      (       a  [        XX#XFX5      $ [        XUR                  XFX5      n
[        XUR                  U
5      $ )z*
Basic or advanced indexing with a tuple.
r   c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fNr   r   r   ).0tys     rC   	<genexpr>&getitem_array_tuple.<locals>.<genexpr>  s     
=2:b%++&&   '))r   r~   r   r
   r   r   r   anyfancy_getitemr<  r   r!   )r   r=   r\   r   r   tuptyr  tupr   r   r   s              rC   getitem_array_tuplerM    s    
 88LEHC
U
Gc
2C++K""7s5zBG,W-8CK 
=
===Ws"? 	? !3??!&[CCWsDDrE   c           
         UR                   u  pEnUu  pxn	[        U[        R                  5      (       a+  UR                  n
[        R
                  " X[        U5      S9nOU4n
U4n[        U5      " XU5      n[        XX5      u  p [        XXGXU R                  S9u  pn[        U5      nU(       a  [        XX#X5      $ U R                  XXdR                  5      n	[!        XXIW5        g! [         a    Sn NLf = f)z<
array[a] = scalar_or_array
array[a,..,b] = scalar_or_array
r   r:  TN)r   r   r   	BaseTupler
   r   r   r~   r   r6  r;  boolrS   fancy_setslicer   r   r   )r   r=   r\   r   r   r   valtyr  r   r   r   r   r  r  r   use_fancy_indexings                   rC   setitem_arrayrT    s    ((E%MCc%))kk&&w3u:Fh&
U
Gc
2C -W-8CK*7U'.'A'AC 	! "&\ g)4 	4 ,,wUKK
8CwW5  "!"s   C( (C76C7c                     UR                   u  nUu  n[        U5      nU" XU5      nUR                  nUR                  US5      n[	        XUR
                  U5      $ r   )r   r~   rg   extract_valuer#   r   )	r   r=   r\   r   r   r  arysttyshapearyr   s	            rC   	array_lenrY  4  sX    xxHUFSG
'C
(CyyH


!
,CgEErE   z
array.itemc           	      h   UR                   u  nUu  n[        U5      " XU5      nUR                  nUR                  UR	                  SXfR                  S5      5      SS9   SnU R                  R                  U[        U45        S S S 5        [        XXER                  5      $ ! , (       d  f       N$= f)N!=rG   Flikelyz>item(): can only convert an array of size 1 to a Python scalar)r   r~   r   r  r  r9   	call_convreturn_user_excr   r   r   )r   r=   r\   r   r   r  r   r   s           rC   
array_itemr`  ?  s    XXFEDC
U
Gc
2CZZF	,,T6;;q>J % 
 
'N))':vF
'
 Wuhh77
' 
's    %B##
B1   r   zarray.itemsetc           	         UR                   u  pEUu  pgXTR                  :X  d   e[        U5      " XU5      nUR                  nUR	                  UR                  SXR                  S5      5      SS9   Sn	U R                  R                  U[        U	45        S S S 5        [        XXGUR                  5        U R                  5       $ ! , (       d  f       N5= f)Nr[  rG   Fr\  z/itemset(): can only write to an array of size 1)r   r   r~   r   r  r  r9   r^  r_  r   r   r   get_dummy_value)
r   r=   r\   r   r   rR  r  r   r   r   s
             rC   array_itemsetre  O  s    xx####6__W00v{{1~N$)  +CC--gzC6J+
 	7U:&&((+ +s   1%C
Cc                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Indexerid  ze
Generic indexer interface, for generating indices over a fancy indexed
array on a single dimension.
c                     [         e)zM
Prepare the indexer by initializing any required variables, basic
blocks...
r   rZ   s    rC   prepareIndexer.preparej  
    
 "!rE   c                     [         e)z-
Return this dimension's size as an integer.
r   ri  s    rC   get_sizeIndexer.get_sizeq  
     "!rE   c                     [         e)z+
Return this dimension's shape as a tuple.
r   ri  s    rC   	get_shapeIndexer.get_shapew  rp  rE   c                     [         e)ze
Return a half-open [lower, upper) range of indices this dimension
is guaranteed not to step out of.
r   ri  s    rC   get_index_boundsIndexer.get_index_bounds}  rl  rE   c                     [         e)a  
Start indexation loop.  Return a (index, count) tuple.
*index* is an integer LLVM value representing the index over this
dimension.
*count* is either an integer LLVM value representing the current
iteration count, or None if this dimension should be omitted from
the indexation result.
r   ri  s    rC   	loop_headIndexer.loop_head  s
     "!rE   c                     [         e)z
Finish indexation loop.
r   ri  s    rC   	loop_tailIndexer.loop_tail  rp  rE   rt   N)ru   rv   rw   rx   __doc__rj  rn  rr  ru  rx  r{  rz   rt   rE   rC   rg  rg  d  s%    
""""	""rE   rg  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)EntireIndexeri  z2
Compute indices along an entire array dimension.
c                     Xl         X l        X0l        X@l        XPl        U R                   R                  [        R                  5      U l        g rB  )	r   r=   r   r  dimr   r   r   ll_intp)rZ   r   r=   r   r  r  s         rC   __init__EntireIndexer.__init__  s5    
||225::>rE   c                 $   U R                   nUR                  U R                  R                  U R                  5      U l        [        R                  " XR                  5      U l	        UR                  5       U l        UR                  5       U l        g rB  )r=   rV  r  rg   r  r   r
   rX   r  r   append_basic_blockbb_startbb_endrZ   r=   s     rC   rj  EntireIndexer.prepare  sa    ,,))$((..$((C	((,,?
224002rE   c                     U R                   $ rB  r   ri  s    rC   rn  EntireIndexer.get_size  s    yyrE   c                     U R                   4$ rB  r  ri  s    rC   rr  EntireIndexer.get_shape  s    		|rE   c                 <    U R                  S5      U R                  4$ r   r  r   ri  s    rC   ru  EntireIndexer.get_index_bounds      Q++rE   c                    U R                   nU R                   R                  [        U R                  S5      U R                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5      nUR                  UR                  SX R                  5      SS9   UR                  U R                  5        S S S 5        X"4$ ! , (       d  f       X"4$ = fNr   >=Fr\  )r=   r  r   r  r   branchr  position_at_endr>   r  r  r   r  )rZ   r=   	cur_indexs      rC   rx  EntireIndexer.loop_head  s    ,,8DLL!4djjAt}}%.LL,	__W00y))L$)  +NN4;;'+ ##+ + ##s   C))
C9c                    U R                   n[        R                  " XR                  U R                  5      5      nUR                  X R                  5        UR                  U R                  5        UR                  U R                  5        g rB  )
r=   r
   r  r>   r   r  r  r  r  r  rZ   r=   
next_indexs      rC   r{  EntireIndexer.loop_tail  sZ    ,,,,Wll4::6NO
j**-t}}%,rE   )
r  r   r  r  r=   r   r  r   r  r   Nru   rv   rw   rx   r}  r  rj  rn  rr  ru  rx  r{  rz   rt   rE   rC   r  r    s*    ?3,
$-rE   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)IntegerIndexeri  z(
Compute indices from a single integer.
c                     Xl         X l        X0l        U R                   R                  [        R
                  5      U l        g rB  )r   r=   r   r   r   r   r  )rZ   r   r=   r   s       rC   r  IntegerIndexer.__init__  s+    ||225::>rE   c                     g rB  rt   ri  s    rC   rj  IntegerIndexer.prepare      rE   c                 .    [        U R                  S5      $ NrG   )r   r  ri  s    rC   rn  IntegerIndexer.get_size  s    a((rE   c                     gNrt   rt   ri  s    rC   rr  IntegerIndexer.get_shape  s    rE   c                     U R                   U R                  R                  U R                   U R                  5       5      4$ rB  )r   r=   addrn  ri  s    rC   ru  IntegerIndexer.get_index_bounds  s,    $,,**488T]]_EFFrE   c                     U R                   S 4$ rB  )r   ri  s    rC   rx  IntegerIndexer.loop_head  s    xx~rE   c                     g rB  rt   ri  s    rC   r{  IntegerIndexer.loop_tail  r  rE   )r=   r   r   r  Nr  rt   rE   rC   r  r    s+    ?)GrE   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)IntegerArrayIndexeri  z3
Compute indices from an array of integer indices.
c                     Xl         X l        X0l        X@l        XPl        UR
                  S:X  d   eU R                   R                  [        R                  5      U l	        g r  )
r   r=   r   r   r   rr   r   r   r   r  )rZ   r   r=   r   r   r   s         rC   r  IntegerArrayIndexer.__init__  sE    
	zzQ||225::>rE   c                    U R                   n[        R                  " XR                  R                  5      S   U l        [        R                  " XR                  5      U l        UR                  5       U l
        UR                  5       U l        g r   )r=   r
   r   r   rg   idx_sizerX   r  	idx_indexr  r  r  r  s     rC   rj  IntegerArrayIndexer.prepare  sb    ,,,,Wkk6G6GHK ,,WllC224002rE   c                     U R                   $ rB  r  ri  s    rC   rn  IntegerArrayIndexer.get_size  s    }}rE   c                     U R                   4$ rB  r  ri  s    rC   rr  IntegerArrayIndexer.get_shape  s    rE   c                 <    U R                  S5      U R                  4$ r   r  ri  s    rC   ru  $IntegerArrayIndexer.get_index_bounds  r  rE   c                    U R                   nU R                   R                  [        U R                  S5      U R                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5      nUR                  UR                  SX R                  5      SS9   UR                  U R                  5        S S S 5        [        U R                  XR                  R                   U R                  U R"                  U5      n[%        U R                  UU R                  R                   X0R&                  5      nX24$ ! , (       d  f       N= fr  )r=   r  r   r  r  r  r  r  r>   r  r  r  r  r
  r   r   r   r   r   r   )rZ   r=   r  r   s       rC   rx  IntegerArrayIndexer.loop_head  s   ,,8DLL!4dnnEt}}%.LL0	__i?  
 NN4;;'	
 *LL'::#3#3TZZ
 "$,,"&**"2"2E99F
 
s   E  
E.c                    U R                   n[        R                  " UUR                  U R                  5      5      nUR                  X R                  5        UR                  U R                  5        UR                  U R                  5        g rB  )
r=   r
   r  r>   r  r  r  r  r  r  r  s      rC   r{  IntegerArrayIndexer.loop_tail  s`    ,,,,W-4\\$..-IK
j..1t}}%,rE   )
r  r  r=   r   r  r  r   r   r  r   Nr  rt   rE   rC   r  r    s*    ?3 , *-rE   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)BooleanArrayIndexeri$  z6
Compute indices from an array of boolean predicates.
c                     Xl         X l        X0l        X@l        UR                  S:X  d   eU R                   R                  [        R                  5      U l        [        U R                  S5      U l
        g NrG   r   )r   r=   r   r   rr   r   r   r   r  r   r   )rZ   r   r=   r   r   s        rC   r  BooleanArrayIndexer.__init__)  sR    
zzQ||225::>T\\1-	rE   c                    U R                   n[        R                  " XR                  R                  5      S   U l        [        R                  " XR                  5      U l        [        R                  " XR                  5      U l	        UR                  5       U l        UR                  5       U l        UR                  5       U l        g r   )r=   r
   r   r   rg   r   rX   r  r  r   r  r  bb_tailr  r  s     rC   rj  BooleanArrayIndexer.prepare2  s    ,,((++2C2CDQG	 ,,WllC((,,?
224113002rE   c           	         U R                   n[        R                  " XR                  5      n[        R                  " XR
                  5       nUR                  U5      n[        U R                  XR                  R                  U R                  U R                  UR                  5      nUR                  XAR                  XTR                  5      5      nUR!                  XB5        S S S 5        UR                  U5      $ ! , (       d  f       N= frB  )r=   r
   r   r   	for_ranger   r>   r
  r   r   r   r   r   r  zextr9   r  )rZ   r=   r   loopcpreds         rC   rn  BooleanArrayIndexer.get_size;  s    ,,))'99=w		2dU#A,gzz'7'7

DKKD A||D&&9:AMM!# 3 ||E"" 32s   BC>>
Dc                 $    U R                  5       4$ rB  rn  ri  s    rC   rr  BooleanArrayIndexer.get_shapeJ      !!rE   c                 <    U R                  S5      U R                  4$ r   r  ri  s    rC   ru  $BooleanArrayIndexer.get_index_boundsM  s     Q++rE   c                    U R                   nU R                   R                  U R                  U R                  5        U R                   R                  U R                  U R                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5      nUR                  U R                  5      nUR                  UR                  SX R                  5      SS9   UR                  U R                  5        S S S 5        [        U R                  XR                  R                   U R                  U R"                  U5      nUR                  UR%                  U5      5         UR                  U R&                  5        S S S 5        [(        R*                  " X5      nUR                  XPR                  5        X#4$ ! , (       d  f       N= f! , (       d  f       NS= f)Nr  Fr\  )r=   r  r   r  r   r  r  r  r>   r  r  r   r  r
  r   r   r   r   not_r  r
   r  )rZ   r=   r  	cur_countr  
next_counts         rC   rx  BooleanArrayIndexer.loop_headR  s^   ,,499dnn5499djj1t}}%.LL0	LL,	__W00y))L$)  +NN4;;'+ )LL'::#3#3TZZ
 __W\\$/0NN4<<( 1 ,,W@
j**-##+ + 10s   G G1 
G.1
G?c                    U R                   nUR                  U R                  5        UR                  U R                  5        [        R
                  " UUR                  U R                  5      5      nUR                  X R                  5        UR                  U R                  5        UR                  U R                  5        g rB  )r=   r  r  r  r
   r  r>   r  r  r  r  r  s      rC   r{  BooleanArrayIndexer.loop_tailj  s    ,,t||$-,,W-4\\$..-IK
j..1t}}%,rE   )r  r  r  r=   r   r   r  r   r   r  r   r   Nr  rt   rE   rC   r  r  $  s*    .3#",
$0-rE   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)SliceIndexeriu  z 
Compute indices along a slice.
c                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        U R                   R                  [        R                  5      U l
        [        U R                  S5      U l        g r   )r   r=   r   r  r  r   r3  r   r   r   r  r   r   )rZ   r   r=   r   r  r  r   r3  s           rC   r  SliceIndexer.__init__z  sQ    


||225::>T\\1-	rE   c                    U R                   nUR                  U R                  R                  U R                  5      U l        [        R                  " U R                  XR                  U R                  5        [        R                  " XR                  U R
                  5        [        R                  " XR                  R                  5      U l        [        R                   " XR"                  5      U l        [        R                   " XR"                  5      U l        UR)                  5       U l        UR)                  5       U l        g rB  )r=   rV  r  rg   r  dim_sizer.   r$  r   r   r3  r%  r
   
is_neg_intstepis_step_negativerX   r  r   r   r  r  r  r  s     rC   rj  SliceIndexer.prepare  s    ,,--dhhnndhhG##DLL'::$(JJ	0'::t}}= ' 2 27JJOO L((,,?
((,,?
224002rE   c                 X    [         R                  " U R                  U R                  5      $ rB  )r.   r'  r=   r3  ri  s    rC   rn  SliceIndexer.get_size  s    ''djjAArE   c                 $    U R                  5       4$ rB  r  ri  s    rC   rr  SliceIndexer.get_shape  r  rE   c                 b    [         R                  " U R                  U R                  5      u  pX4$ rB  )r.   get_slice_boundsr=   r3  )rZ   loweruppers      rC   ru  SliceIndexer.get_index_bounds  s&    //djjI|rE   c           	      (   U R                   nU R                   R                  U R                  R                  U R                  5        U R                   R                  U R
                  U R                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5      nUR                  U R                  5      nUR                  U R                  UR                  SUU R                  R                  5      UR                  SUU R                  R                  5      5      nUR                  USS9   UR                  U R                   5        S S S 5        X#4$ ! , (       d  f       X#4$ = f)Nz<=r  Fr\  )r=   r  r3  r&  r   r   r   r  r  r  r>   selectr  r  stopr  r  )rZ   r=   r  r  is_finisheds        rC   rx  SliceIndexer.loop_head  s$   ,,4::++TZZ8499djj1t}}%.LL,	LL,	nnT%:%:%,%8%8y9=&J%,%8%8y9=&JK
 __[_7NN4;;' 8## 87##s   F
Fc                    U R                   nUR                  UR                  U R                  5      U R                  R
                  S/S9nUR                  X R                  5        [        R                  " XR                  U R                  5      5      nUR                  X0R                  5        UR                  U R                  5        UR                  U R                  5        g )Nr   r   )r=   r  r>   r   r3  r  r  r
   r  r   r  r  r  r  )rZ   r=   r  r  s       rC   r{  SliceIndexer.loop_tail  s    ,,[[djj!94::??(-w ! 0
j**-,,Wll4::6NO
j**-t}}%,rE   )r  r   r  r  r=   r   r   r  r  r   r   r  r  r3  r   Nr  rt   rE   rC   r  r  u  s+    	.3B"$$-rE   r  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)FancyIndexeri  z,
Perform fancy indexing on the given array.
c           
      t   Xl         X l        X0l        [        R                  " X$R
                  UR                  5      U l        [        R                  " X$R                  UR                  5      U l        U R                   R                  [        R                  5      U l        / U l        / n[        U Vs/ s H  n[        U5      (       d  M  UPM     sn5      n	Sn
Sn[!        Xe5       GH)  u  pU[        R"                  L aZ  UR                  [        U5      -
  S-   U	-   n[%        U5       H+  n['        XX4U
5      nUR)                  U5        U
S-  n
US-  nM-     Ms  [+        U[        R,                  5      (       a4  UR/                  X-U5      n[1        XX4U
UU5      nUR)                  U5        GOY[+        U[        R2                  5      (       a9  [5        XXU R                  U
   5      n[7        XU5      nUR)                  U5        GO[+        U[        R8                  5      (       a  [;        U5      " XU5      n[+        UR<                  [        R2                  5      (       a  [?        XUUU R                  U
   5      nO9[+        UR<                  [        R@                  5      (       a  [C        XUU5      nO eUR)                  U5        O@[        U5      (       a!  U R                  R)                  U5        U
S-  n
O[E        SU< 35      eU
S-  n
US-  nGM,     XR                  ::  d   XR                  45       eXR                  :  a4  ['        XX4U
5      nUR)                  U5        U
S-  n
XR                  :  a  M4  [        U5      UR                  :X  d   [        U5      UR                  45       eXpl#        g s  snf )Nr   rG   r  )$r   r=   r   r
   r   rg   rr   r  r   r   r   r   r  newaxesr   r   r   r"  r8   r  rk   r   r#  r   r  r   r   r  r   r~   r   r  Booleanr  AssertionErrorindexers)rZ   r   r=   r   r  r   r   r  r   r/  r0  new_axr1  r   r2  ro   indexerr3  r   r   s                       rC   r  FancyIndexer.__init__  s   
**7IIuzzJ++G[[%**M||225::>+J+3S9I3+JK"78OH&!JJW59KG	y)A+Ge"MGOOG,!GBaKF	 *
  %11++GHE&wR',e5(E5==11'%(,B9(3?(E5;;//#E*7XFekk5==991'2726++b/CG  U]];;1'27AG 1(U####F+a$E%KLL!GBaKFQ  9V ZZ1"jj!11::o#Ge"EGOOG$!GB ::o
 8}

*GS]EJJ,GG* m Ks   3N5N5c                 f   U R                    H  nUR                  5         M     U R                  R                  [        R
                  S5      nU R                    Vs/ s H  oR                  5       PM     nnU R                   H  nUR                  X45        M     [        US5      U l
        g s  snf )NrG   rt   )r  rj  r   r   r   r   rr  r   insertsumindexers_shape)rZ   ro   r+  	res_shapes       rC   rj  FancyIndexer.prepare  s    AIIK  ll''

A6 -1MM:Mq[[]M	: AQ'  ")R0 ;s   B.c                     U R                   $ )z/
Get the resulting data shape as Python tuple.
)r
  ri  s    rC   rr  FancyIndexer.get_shape  s     """rE   c           	         [        U5      U R                  R                  :X  d   eU R                  n[        R
                  nU R                  S5      nU R                  S5      nUnUn[        U R                  U R                  U5       H  u  pnUR                  UUR                  SX5      5      nU	R                  5       u  pUR                  X5      nUR                  XR                  X5      5      nUR                  SX5      nUR!                  UUR#                  UUU5      5      nUR!                  UUR#                  UUU5      5      nM     UR!                  X5      nUR#                  XEU5      nUR#                  XEU5      nXx4$ )z
Get a half-open [lower, upper) range of byte offsets spanned by
the indexer with the given strides and itemsize.  The indexer is
guaranteed to not go past those bounds.
r   rG   ==r  )r   r   rr   r=   r
   	false_bitr  r   r  r
  or_icmp_unsignedru  r   subr  r  r  )rZ   r   r   r=   is_emptyr   r+  r  r  r  rg   stridelower_indexupper_indexlower_offsetupper_offsetis_downwardss                    rC   get_offset_boundsFancyIndexer.get_offset_bounds  sh    7|tzz...,,$$||All1o&)$--9L9L*1'3"GF{{8#*#8#8u#KMH (/'?'?'A$K";;v;L";;v{{;/LML"..sFALKK '|/;/;!=>E KK '|/;/;!=>E'3& E,xu5xu5|rE   c                 >    [        S U R                   5       6 u  pX4$ )Nc              3   @   #    U  H  oR                  5       v   M     g 7frB  )rx  )rD  ro   s     rC   rF  +FancyIndexer.begin_loops.<locals>.<genexpr>A  s     E}!}s   )r   r  )rZ   r   countss      rC   begin_loopsFancyIndexer.begin_loops@  s     Et}}EFrE   c                 \    [        U R                  5       H  nUR                  5         M     g rB  )reversedr  r{  )rZ   ro   s     rC   	end_loopsFancyIndexer.end_loopsD  s    $--(AKKM )rE   )	r   r=   r   r  r
  r  r   r  r   N)ru   rv   rw   rx   r}  r  rj  rr  r  r"  r&  rz   rt   rE   rC   r  r    s(    @!D1&#$LrE   r  c                 L   [         R                  " XR                  5      n[         R                  " XR                  5      n	UR                  n
[        XXEXg5      nUR                  5         UR                  nUR                  5       n[        XX5      nUR                  n[         R                  " UU R                  [        R                  S5      5      nUR                  5       u  nn[         R                  " XXU	UR                   USU R"                  S9	n[%        XUU5      nUR'                  U5      nUR)                  UU/5      n[+        XUUU5        [         R,                  " UU5      nUR/                  UU5        UR1                  5         [3        XXR5                  5       5      $ )Nr   Fr  )r
   r   rg   r   r   r  rj  r   rr  _empty_nd_implr   r   r   r   r"  get_item_pointer2layoutr;  r   r>   gepr   r  r  r&  r"   r   )r   r=   r\   r   r   r  r   r   r  r   r   r  out_ty
out_shapesr   out_dataout_idx_rm   r   curnext_idxs                         rC   rJ  rJ  I  se    !!'995F""7KK8G88D7U&1GOO __F""$J
6
>CxxH''(/(<(<UZZ(KMG $$&JGQ 
#
#GdG$)LL'e070J0JLC GeS
1C ,,w
C
++h
&Cwc2&&w4HMM(G$GfmmoFFrE   c           
         UR                   u  pEUu  pg[        U5      " XU5      nUR                  S:X  a@  [        XXW5      u  pW[	        XUR
                  XFU4U45      n[        XUR
                  U5      $ [        XX#XFU4U45      $ )z+
Advanced or basic indexing with an array.
r   )r   r~   rr   r   r<  r   r!   rJ  r>  s	            rC   fancy_getitem_arrayr5  t  s    
 88LEHC
U
Gc
2CzzQ$WuB
$Ws%*%C6C 3??CHH Ws"%C6; 	;rE   c           	         UR                   nUR                  S5      nUR                  S5      nUR                  S;   a   Un	UR                  XcR                  5      n
X4$ Un	Un
[        UR                  5       H~  nUR                  X[   UR                  XK   U5      5      nUR                  SX5      nUR                  UUR                  X5      U
5      n
UR                  UXR                  X5      5      n	M     UR                  X5      n
UR                  SUR                  U5      nUR                  XU
5      n
UR                  XU	5      n	X4$ )z
Compute a half-open range [lower, upper) of byte offsets from the
array's data pointer, that bound the in-memory extent of the array.

This mimics offset_bounds_from_strides() from
numpy/core/src/private/mem_overlap.c
r   rG   CFr  r  )r   r9   r+  r   r   r8   rr   r  r  r  r  )r   r=   arrtyarrr  r   r   r   r+  r  r  ro   max_axis_offset
is_upwardsr  s                  rC   offset_bounds_from_stridesr<    s9    ||H==D
))A,C||t Hjj10 <+ uzz"A &kk'**1++fi*EGO ,,T?IJNN:#*;;u#FOENN:#(++e*MOE # E,&&tSZZ>xu5xu5<rE   c                     UR                  XBR                  5      nUR                  XR5      nUR                  XS5      nXg4$ )zy
Given [lower, upper) byte offsets and a base data pointer,
compute the memory pointer bounds as pointer-sized integers.
)ptrtointr9   r  )r   r=   r  r  r   data_ptr_as_intr&  ends           rC   compute_memory_extentsrA    s<    
 &&tZZ8OKK/E
++o
-C:rE   c                 :    [        XX#XE5      u  px[        XXxU5      $ )zf
Compute a half-open range [start, end) of pointer-sized integers
which fully contain the array data.
)r<  rA  )	r   r=   r8  r9  r  r   r   r  r  s	            rC   get_array_memory_extentsrC    s&     .g.4?LE!'E$GGrE   c                 j    UR                  UR                  SX%5      UR                  SXC5      5      nU$ )zO
Whether two memory extents [a_start, a_end) and [b_start, b_end)
may overlap.
r  )and_r  )r   r=   a_starta_endb_startb_endmay_overlaps          rC   extents_may_overlaprK    s:     ,,c72c72K rE   c                 J  ^ ^^^^^^^^^^^^ TR                   mSm[        R                  " TT5      mTmS mTR                  TSS9   TR	                  UR
                  UR                  5      nT R                  R                  TU5      n	U	R                   mTR                  U	T5      n	TR                  U	T5        T R                  [        R                  5      n
[        R                  " TTU
5       n[        R                  " T TTTTTR                   U5      n[        R                  " T TU	TTTU5      nTR                  TR#                  U5      U5        S S S 5        S S S 5        UU UUUUUUUUUU4S jnUU UUU4S jnX4$ ! , (       d  f       N4= f! , (       d  f       N== f)Nr   Fr\  c                   > [         R                  " TT
5      nTR                  TSS9 u  p#U   TR                  [         R                  " TTTR                  T5      TT	TU SS9U5        S S S 5        U   TR                  [         R                  " TTTTTTR                  U SS9U5        S S S 5        S S S 5        [        TTTTR                  U5      5      $ ! , (       d  f       Ns= f! , (       d  f       ND= f! , (       d  f       NM= f)NFr\  r   )r
   rX   if_elser  r*  r>   r+  r   )source_indicessrc_ptrif_copy	otherwiser=   r   	copy_datacopy_layoutcopy_shapescopy_stridesptrtysrc_data
src_shapessrc_stridessrctyuse_copys       rC   src_getitem&maybe_copy_source.<locals>.src_getitem  s    %%gu5__Xe_48L--gw.5ll9.E.9<.9>9>	@
   --gw.8+.3llN9>@   5  '5',,w2GHH   54s:   C8;C)
C836C')C8
C$	 C8'
C5	1C88
Dc                     > TR                  TSS9   TR                  T5      n TR                  U T5      n TR                  R	                  TU 5        S S S 5        g ! , (       d  f       g = f)NFr\  )r  r>   bitcastr   free)r   r=   r   rT  r]  	voidptrtys    rC   src_cleanup&maybe_copy_source.<locals>.src_cleanup  sQ    __Xe_4<<	*D??43DKKWd+ 544s   A A
A))r9   r
   r   r  r   r   r   r   allocatera  r  r   r   r   	loop_nestr*  r+  r>   )r   r=   r]  r\  srcrZ  r[  rY  	allocsizer   r   r   rQ  dest_ptrr^  rd  rT  rU  rV  rW  rX  rc  s   ```` ```        @@@@@@rC   maybe_copy_sourcerk    sd   MMEK))'8<IKL	%	0 KKcjj9	{{##GY7II	tU+dI& ''

3w
F;w//(0:K05gGG 00'41<l1<gGH MM',,w/: < 
1,I I I(, , ##I <; 
1	0s&   B*F1A$FF
F	F
F"c                    U R                  [        R                  S5      nU R                  [        R                  S5      n[        U5      [        U5      :  a,  [        U5      [        U5      -
  nU/U-  U-   nU/U-  U-   nX#4$ [        U5      [        U5      :  a  [        U5      [        U5      -
  nUSU  Vs/ s H  nUR	                  SX5      PM     n	n[
        R                  " UR                  U	[        R                  5      n
UR                  UR                  U
5      SS9   SnU R                  R                  U[        U45        SSS5        X'S nX7S nX#4$ s  snf ! , (       d  f       N= f)aI  
Preprocess dimension for broadcasting.
Returns (shapes, strides) such that the ndim match *target_shape*.
When expanding to higher ndim, the returning shapes and strides are
prepended with ones and zeros, respectively.
When truncating to lower ndim, the shapes are checked (in runtime).
All extra dimension must have size of 1.
r   rG   Nr  Fr\  z,cannot broadcast source array for assignment)r   r   r   r   r  	functoolsreducerE  r
   true_bitr  r  r^  r_  r   )r   r=   r  r   target_shaper   r+  nd_diffr4  
dim_is_oneacceptedr   s               rC   _bc_adjust_dimensionrt    si    Q/D


u{{A
.C <3v;&l#c&k16)&7"W," ? 
\	S[	(f+L 11 &x 02 0" ++D": 0 	 2##GLL*$+$4$46 __W\\(3E_B@C--gzC6J C !(#?2
 CBs   ;E (%E%%
E3c           
         / n/ nU R                  [        R                  S5      nU R                  [        R                  S5      n[        XB5       V	V
s/ s H  u  pUR	                  SX5      PM     nn	n
U V
s/ s H  oR	                  SX5      PM     nn
[        X5       VVs/ s H  u  pUR                  X5      PM     nnn[        XU5       VV	V
s/ s H  u  npUR                  UX5      PM     nn	nn
[        X5       VV
s/ s H  u  nn
UR                  UXz5      PM     nnn
XV4$ s  sn
n	f s  sn
f s  snnf s  sn
n	nf s  sn
nf )z
Broadcast shapes and strides to target_shape given that their ndim already
matches.  For each location where the shape is 1 and does not match the
dim for target, it is set to the value at the target and the stride is
set to zero.
r   rG   r[  r  )r   r   r   r   r  rE  r  )r   r=   r  r   rp  	bc_shapes
bc_stridesr   r+  taroldmismatch
src_is_onexypredsps                    rC   _bc_adjust_shape_stridesr  7  sB    IJQ/D


u{{A
.C !$L 9; 9HC ##D#3 9  ;AGH#%%dC5JH,/,EF,EDAW\\!,EEF$'V$DF$D[Q 3,$D  F !$E 35 3fa ..D. 3  5  ;HFF5s   D)8D/#D4D:Ec           
         [         R                  " XR                  5      n[         R                  " XR                  5      n[	        XXVU5      u  pV[        XUXd5      u  pVUR                  [        U5      SS9n[        U5      " X5      n[        UUR                  [         R                  " X5      [         R                  " X5      UR                  UR                  UR                  S9  Xx4$ )zL
Broadcast the given array to the target_shape.
Returns (array_type, array)
Arr   r+  r8  )r
   r   rg   r   rt  r  copyr   r~   r   r   rl   r   r   r   )	r   r=   arrtyper9  rp  r  r   new_arrtypenew_arrs	            rC   _broadcast_to_shaper  N  s     !!'995F""7KK8G*7V+79OF.w/6FOF,,C$5c,BK%g7G7 ++G<"--g?LL;;**& rE   c                 T    UR                  UR                  SSS9nU" X5      nS nXE4$ )Nr  T)rr   r+  readonlyc                 b   Uu  pEUR                   S   n[        U5      " XU5      n[        R                  " X5      n[	        XXdU5      u  px[        US[        U R                  UR                  R                  S5      5      S 5      5        UR                  5       n	[        XUR                  U	5      $ )Nr   r   )r   r~   r
   r   r  r   r   r   r   r   r   r!   r   )
r   r=   r\   r   rh  shape_r\  r1  destr   s
             rC   codegen$_numpy_broadcast_to.<locals>.codegenm  s    #6%%g6%gFL 	h&&t'?'?'IJ! 	 nn 3??CHHrE   )r  r   )	typingctxr   rg   retr\   r  s         rC   _numpy_broadcast_tor  h  s4    
**%++cD*
AC
e
CI <rE   c                 <    UR                  SS9nU" U5      nS nX44$ )NTr  c                     Uu  nUR                   S   n[        U5      " XU5      n[        R                  " UR                  R
                  5      Ul        UR                  5       n[        XUR                  U5      $ r   )	r   r~   r
   get_null_valuer   r9   r   r!   r   )r   r=   r\   r   rh  r\  r  r   s           rC   r  #get_readonly_array.<locals>.codegen  sb    % 37,,T[[-=-=>nn 3??CHHrE   )r  )r  r9  r  r\   r  s        rC   get_readonly_arrayr    s-     ((D(
!C
c(CI <rE   c                    U R                   n[        U5      n[        U5      nX4:  a  [        S5      eU H  nUS:  d  M  [        S5      e   SnXC-
  nXc:  a1  X&   nX   n	X:X  d  US:X  a  US-  nUS-  nO[        S5      eXc:  a  M0  g g )NzDinput operand has more dimensions than allowed by the axis remappingr   z4all elements of broadcast shape must be non-negativerG   z=operands could not be broadcast together with remapped shapes)rg   r   r   )
r   
dest_shape	src_shapesrc_ndim	dest_ndimr   	src_index
dest_indexsrc_dimdest_dims
             rC   _can_broadcastr    s    I9~HJI 1 2 	2!8 , - -  I%J

&) 'Q,NI!OJ 4 5 5 
rE   c                 Z    [         R                  " U 5      n [        X5        [        X5      $ rB  )npasarrayr  r  r   rg   s     rC   _default_broadcast_to_implr    s#    JJuE5 u,,rE   c           	         [        U 5      (       d  [        R                  " S5      e[        U[        R
                  5      (       a  S nU$ [        U[        R                  5      (       aG  [        UR                  [        R
                  5      (       d  Sn[        R                  " U5      e[        $ [        U[        R                  5      (       ak  UR                  S:  a[  [        U Vs/ s H  n[        U[        R                  5      PM     sn5      (       d  SU S3n[        R                  " U5      e[        $ [        U[        R                  5      (       at  UR                  S:X  ad  [        U [        R                  5      =(       a    U R                  S:H  n[        U 5      (       d  U(       a  S nU$ Sn[        R                  " U5      eS	U-  n[        R                  " U5      es  snf )
Nz-The first argument "array" must be array-likec                 0    [         R                  " X45      $ rB  )r  broadcast_tor  s     rC   r    numpy_broadcast_to.<locals>.impl  s    ??5(33rE   z7The second argument "shape" must be a tuple of integersr   "z," object cannot be interpreted as an integerc                 D    [         R                  " U 5      n [        U 5      $ rB  )r  r  r  r  s     rC   r   r    s     

5))%00rE   z/Cannot broadcast a non-scalar to a scalar arrayz:The argument "shape" must be a tuple or an integer. Got %s)r   r	   r   r   r   r   UniTupler   r  Tupler   allIntegerLiteralr   rr   r   )r   rg   r   r   typis_scalar_arrays         rC   numpy_broadcast_tor    s}   E""   "1 2 	2 %''	4	E5>>	*	*%++u}}55KC$$S))))	E5;;	'	'EKK!OUKUcJsE$8$89UKLLeWHIC$$S))))	E5;;	'	'EKK1,<$UEKK8LUZZ1_%  O1
 K DC$$S))   %%+ Ls   )$G)c                     [        [        U5      5       HR  nU[        U5      -
  U-   nX#   nUS:  a  [        S5      eUS:X  a  M1  X   S:X  a  XPU'   M?  X   U:w  d  MI  [        S5      e   g )Nr   #negative dimensions are not allowedrG   z=shape mismatch: objects cannot be broadcast to a single shape)r8   r   r   )rmrg   ro   r   tmps         rC   numpy_broadcast_shapes_listr    sv    3u:E
NQh7BCC!8419aDTS[ 2 3 3 rE   c                    ^^	 [        U 5       H  u  p[        U[        R                  5      n[        U[        R                  5      =(       a$    [        UR
                  [        R                  5      n[        U[        R                  5      =(       a    [        UR                  5      S:H  nU(       a  M  U(       a  M  U(       a  M  SU SU 3n[        R                  " U5      e   SmU  Hf  n[        U[        R                  5      (       a  [        TS5      mM0  [        U[        R                  5      (       d  MQ  [        T[        U5      5      mMh     TS:X  a  S $ ST-  m	UU	4S jnU$ )Nr   z	Argument z* must be either an int or tuple[int]. Got rG   c                      gr  rt   r   s    rC   <lambda>+ol_numpy_broadcast_shapes.<locals>.<lambda>	  s    RrE   rG   c                  ,  > S/T-  nTn[        U 5       H[  n[        U[        5      (       a  [        U5      S:  a  [	        UTU5        M6  [        U[
        5      (       d  MM  [	        UTU45        M]     [        U5       H  u  pE[        X$U5      nM     U$ r  )r   r   r   r   r  r   	enumerater/   )r   r  rL  argr   elemr  tup_inits         rC   r   'ol_numpy_broadcast_shapes.<locals>.impl  s    aAC%d+c5))c#hl/1c:S))/1sf=	 ,
 'q\	#Cd3 *JrE   )r  r   r   r   r  r   r  r   r	   r   maxrO  )
r   r   r  is_intis_int_tupleis_empty_tupler   r   r  r  s
           @@rC   ol_numpy_broadcast_shapesr    s    dOC/!#u~~6 1syy%--0 	#C5M#cii.A:M,,..se $ C$$S)) $ 	
Ac5==))Aq	AU__--As3x A	  	Av!8	 rE   c                    ^^ [        U 5       H/  u  p[        U5      (       a  M  [        R                  " SU S35      e   S nS nU  Hf  n[	        U[
        R                  [
        R                  45      (       a  UR                  nOUnUc  UnMH  X4:w  d  MO  [        R                  " SU  35      e   Sm[        U 5       H  u  p[	        U[
        R                  5      (       a  [        TUR                  5      mM<  [	        U[
        R                  [
        R                  [
        R                  45      (       a  [        TS5      mM  [        R                  " SU 35      e   ST-  mUU4S jnU$ )	Nz
Argument "z" must be array-likezTMismatch of argument types. Numba cannot broadcast arrays with different types. Got r   rG   zUnhandled type r   c                  n  > S/T-  n[        U 5       H.  n[        UT[        R                  " U5      R                  5        M0     Tn[        T5       H  n[        X4X   5      nM     / n[        U 5       H=  nUR                  [        R                  " [        R                  " U5      U5      5        M?     U$ r  )	r   r  r  r  rg   r8   r/   rk   r  )r   rg   r   rL  ro   outsr  r  s         rC   r   $numpy_broadcast_arrays.<locals>.impl?  s    
 a#D)E'q"**U2C2I2IJ * qA1C  #D)EKK

5(93?@ *rE   )r  r   r	   r   r   r   r   rO  r   ArrayCompatibler  rr   Numberr  )r   r   r  unified_dtypedtr   r  r  s         @@rC   numpy_broadcast_arraysr    sH    dO$$$$z# 75 &5 6 6 $
 M	BcEKK9::BB M $$ &,,06&3 4 4  	
AdOc50011Asxx AellEMM5??KLLAq	A$$se%<== $ axH( KrE   c                     [         e)zTargets should implement this if they wish to specialize the error
handling/messages. The overload implementation takes two tuples as arguments
and should raise a ValueError.r   rZ  index_shapes     rC   raise_with_shape_contextr  V  
     rE   generic)targetc                    [        U [        R                  5      (       aj  [        U[        R                  5      (       aJ  U R                  UR                  :X  a/  [        U R                  [        R                  5      (       a  S nU$ g g g g )Nc                     [        S5      e)Nz0cannot assign slice from input of different sizer   r  s     rC   r   1ol_raise_with_shape_context_generic.<locals>.implf  s    OPPrE   r   r   r  r   r   rZ  r  r   s      rC   #ol_raise_with_shape_context_genericr  ]  sp     	:u~~..;//K---z''77	Q	 8 	. 	0 	/rE   CPUc                    [        U [        R                  5      (       aj  [        U[        R                  5      (       aJ  U R                  UR                  :X  a/  [        U R                  [        R                  5      (       a  S nU$ g g g g )Nc           	      \   [        U 5      S:X  a
  SU S    S3nO/SSR                  U  Vs/ s H  n[        U5      PM     sn5       S3n[        U5      S:X  a
  SUS    S3nO/SSR                  U Vs/ s H  n[        U5      PM     sn5       S3nSU SU 3n[        U5      es  snf s  snf )	NrG   (r   z,), )zcannot assign slice of shape z from input of shape )r   joinstrr   )rZ  r  	shape_strr|  	index_strr   s         rC   r   -ol_raise_with_shape_context_cpu.<locals>.implr  s    :!#
1b1			:*F:a3q6:*F GHJ	;1$A/r2			;*G;a3q6;*G HIK	29+ >%;(CS/! +G +Hs   B$
2B)
r  r  s      rC   ol_raise_with_shape_context_cpur  k  so    :u~~..;//K---z''77	"  8 	. 	0 	/rE   c                   ^ ^^(^)^* UR                   u  pgm*Uu  pm([        U5      " T TU5      n[        R                  " TUR                  5      n	[        R                  " TUR
                  5      n
UR                  n[        T TXhXE5      nUR                  5         S n[        T*[        R                  5      (       Ga  T*R                  m)UR                  5       n[        T*5      " T TT(5      m([        T TT*T(U5      u  m*m([        R                  " TT(R                  5      n[        R                  " TT(R
                  5      nT(R                  n[        R                  n[!        U5      [!        U5      :X  d   e[#        X5       H)  u  nnTR%                  UTR'                  SUU5      5      nM+     TR)                  USS9   U" T TUU5        SSS5        [+        T TT*T(UUU5      u  nnUR-                  U
UR.                  5      u  nn[1        T TUUU5      u  nn[3        T TUUUU5      n[5        T TUT*T(UUU5      u  nnO[        T*[        R6                  5      (       a  T*R                  m)UR                  5       n[!        U5      S:X  d   eT R9                  [         [;        [        R<                  T*5      5      nU" TT(45      nTR'                  SUS   U5      nTR)                  USS9   U" T TU4US   45        SSS5        UU U(U)U*4S jnS	 nOT*m)U(4S
 jnS nT R?                  [        R@                  S5      n URC                  5       u  n!n"[E        U"5      n"URF                   H  n#U"RI                  U#U 5        M     U" V$s/ s H
  n$U$c  M  U$PM     n%n$U" U%5      n&T RK                  TU&T)UR                  5      n&[        RL                  " T TUXURN                  U!ST RP                  S9	n'[S        T TUU&U'5        URU                  5         U" 5         T RW                  5       $ ! , (       d  f       GN[= f! , (       d  f       GN?= fs  sn$f )z
Implement slice assignment for arrays.  This implementation works for
basic as well as fancy indexing, since there's no functional difference
between the two for indexed assignment.
c           	         U R                   R                  [        5      n[        R                  " [        R
                  [        U5      5      [        R                  " [        R
                  [        U5      5      4nUR                  U R                   U0 5      nU R                  XF5      nU" XR                  XR                  S   U5      U R                  XR                  S   U5      45        g Nr   rG   )typing_contextresolve_value_typer  r   r  int64r   get_call_typerR   
make_tupler   )r   r=   rZ  r  fntyargtys	raise_sigfuncs           rC   raise_shape_mismatch_error2fancy_setslice.<locals>.raise_shape_mismatch_error  s     %%88$&..c*o>..c+.>?A&&w'='=vrJ	##D4W))'>>!3D*46))'>>!3D*578 	9rE   r[  Fr\  NrG   r   c                    > U u  nTR                  [        R                  [        TT[        R
                  5      5      nU" TTU45      $ rB  )rR   operatorgetitemr%   r   r   )rP  r   getitem_implr=   r   rh  	src_dtyper\  s      rC   r^  #fancy_setslice.<locals>.src_getitem  sF    !DC"//  )UEJJ7L  #s44rE   c                      g rB  rt   rt   rE   rC   rd  #fancy_setslice.<locals>.src_cleanup      rE   c                    > T$ rB  rt   )rP  rh  s    rC   r^  r    s    JrE   c                      g rB  rt   rt   rE   rC   rd  r    r  rE   r  ),r   r~   r
   r   rg   r   r   r  rj  r   r   r  r   rr  r  r  r   r   r  r  r  rC  r  r   rA  rK  rk  SequencerR   r%   r   r   r   r"  r   r   r  r   r*  r+  r;  r   r&  rd  )+r   r=   r\   r   r   r   r   r1  r  dest_shapesdest_strides	dest_datar  r  r  rZ  r[  rY  shape_errorur   	src_startsrc_end
dest_lower
dest_upper
dest_startdest_endr]  r^  rd  len_implseq_lenr   dest_indicesr!  ro   r  rP  r   rj  rh  r  r\  s+   ``                                      @@@rC   rQ  rQ    s    hhOEeKCC
U
GWc
2C&&w		:K''=LI7GU&1GOO9 %&&KK	'')#6('5#)46
s))'399=
**7CKK@88 '';3z?222
0DAq!++k&-&9&9$1&EGK 1 __[_7&w'24 8
 6gw69:6A8M	7 ")!:!:<;><<"I
J5gw6@*6? A
H 'wG'18= $5Wgx5:C5@($L [ 
E5>>	*	*KK	 '');1$$$''Yuzz5-IJ7SF+))$AH__[_7&w'(3A'8: 8	5 	5	 			 Q/D"..0L& &\F
 __a  "(9A1aN9
n
%C ,,wY
<C (('9)4).|495<5O5O	QH
 wX6M""$$A 87B 87V :s$   =P&P/?Q
Q
P,/
P>c           
         UR                   S   nUR                   SS  nUS   nUSS  n[        XW5       VV	s/ s H&  u  pU R                  XU[        R                  5      PM(     nnn	[
        R                  " XUS   R                  5      n
[        R                  " [        R                  [        U5      S9n[        R                  " UR                  XK5      nXj4nX4$ s  sn	nf )Nr   rG   r   r   )r   r   r   r   r   r
   rl   r9   r  r   r   r%   r   )r   r=   r\   r   r   dimtysr  rn   rE  r   rg   shapetynew_signew_argss                 rC   vararg_to_tupler    s    HHQKEXXab\F
q'C8D v,., LLr5::6, 	 . wd1gll;Enn5::SY?Gs?GzH.s   -Czarray.transposec                 <    [        XUR                  S   US   5      $ r   )array_Tr   r   r=   r\   r   s       rC   array_transposer!  /  s    7SXXa[$q'::rE   c                     [        U 5      [        [        U 5      5      :w  a  [        S5      e[        U5      nU  H"  nXC:  d  [        U5      U:  d  M  [        S5      e   X   US S & X    US S & g )Nzrepeated axis in transposez2axis is out of bounds for array of given dimension)r   r   r   abs)r   rg   r   r  r|  s        rC   permute_arraysr$  4  sn    
4yCD	N"566
e*C8s1v| / 0 0 
 {E!HGAJrE   c           
      r   UR                   S   n[        U5      " XUS   5      nUR                   S   US   pvUR                  UR                  pU R	                  [
        R                  5      n
[        R                  " X5      nXuR                  UR                  /nU Vs/ s H  n[        R                  " X5      PM     nn[        X5       H  u  nnUR                  UU5        M     [
        R                  " U	SSS9nU R!                  [
        R                  U R#                  U
5      5      nU Vs/ s H  n[        U5      " X5      PM     nn[        UU5       HR  u  nn[%        UUR'                  UU
R)                  5       5      U R!                  [
        R                  U5      /U/US S9  MT     U R+                  U[,        [.        R0                  " [
        R2                  UUU5      U Vs/ s H  nUR5                  5       PM     sn5        [        UR6                  5      " X5      n[%        UUR8                  UR;                  US   5      UR;                  US   5      UR<                  UR>                  UR@                  S9  UR5                  5       n[C        XUR6                  U5      $ s  snf s  snf s  snf )Nr   rG   r   r   rr   r+  r   rg   r   r   r   rb  r8  )"r   r~   r   r   r   r   r   r   	ArrayTyperg   r   r
   rX   r   r  r   r   r   r   ra  
as_pointercompile_internalr$  r   r%   voidr   r   r   r>   r   r   r   r!   )r   r=   r\   r   r   r  axistyr   num_axisr   r  ll_ary_sizearysr1  ll_arysrh  dst	np_ary_tynp_itemsizenp_arysnp_aryll_aryar  r   s                            rC   array_transpose_tupler8  C  sH   HHQKE
U
Gd1g
6C88A;QDllFLLe$$UZZ0G,,w1K ))S[[)DBFG$Qw""78$GG &Sc3 ' %a<I&&uzz'.'='=g'FHK AEE1z)$W6GE gw/v#OOFG4F4F4HI%225::xHI +} +#	% 0 Wn#--ejj.7IO5<=WakkmW=? S__
%g
7C3 gaj1"<<
3LL;;**& --/CWsDDO H F  >s     J*2J/,J4c                 6    [        XX#5      u  pE[        XXE5      $ rB  )r  r8  r   r=   r\   r   r  r  s         rC   array_transpose_varargr;  z  s    '#DG 7EErE   c                     [        U [        R                  5      (       a  [        R                  " S5      eUc  SS jnU$ SS jnU$ )Nz#np.transpose does not accept tuplesc                 "    U R                  5       $ rB  	transposer7  axess     rC   np_transpose_impl*numpy_transpose.<locals>.np_transpose_impl  s    ;;= rE   c                 $    U R                  U5      $ rB  r>  r@  s     rC   rB  rC    s    ;;t$$rE   rB  )r   r   rO  r	   r   )r7  rA  rB  s      rC   numpy_transposerE    sD    !U__%%  !FGG|	! 	% rE   Tc                 (   UR                   S::  a  UnO[        U5      " XU5      n[        U5      " X5      n[        R                  " XR                  UR                   5      n[        R                  " XR
                  UR                   5      n[        UUR                  [        R                  " XS S S2   5      [        R                  " XS S S2   5      UR                  UR                  UR                  S9  UR                  5       n[        XX$5      $ )NrG   r8  )rr   r~   r
   r   rg   r   r   r   rl   r   r   r   r   r!   )	r   r=   r  r  r   r  r  r  r   s	            rC   r  r    s    
xx1}og6og/%%gyy#((C&&wSXXFsHH$//"F&11'4R4=I #"{{!jj	* mmoWs88rE   c                 Z   [        U [        R                  5      (       d  [        R                  " S5      e[        U[        R                  5      (       d  [        R                  " S5      e[        U[
        [        R                  45      (       d  [        R                  " S5      eSS jnU$ )Nz+The first argument "start" must be a numberz+The second argument "stop" must be a numberz+The third argument "num" must be an integerc                 ^    [         R                  " XU5      n[         R                  " SU5      $ )Ng      $@)r  linspacepower)r&  r  numr}  s       rC   r   numpy_logspace.<locals>.impl  s#    KKS)xxa  rE   2   )r   r   r  r	   r   r   r   )r&  r  rM  r   s       rC   numpy_logspacerQ    s|    eU\\**  !NOOdELL))  !NOOcC/00  !NOO! KrE   c                   ^ [        U [        R                  5      (       d  Sn[        R                  " U5      e[        U[        R                  5      (       d  Sn[        R                  " U5      e[        U[
        [        R                  45      (       d  Sn[        R                  " U5      e[        S X4 5       5      (       a=  [        [        R                  " [        U 5      [        U5      S 5      5      mSU4S jjnU$ SS jnU$ )Nz%The argument "start" must be a numberz$The argument "stop" must be a number%The argument "num" must be an integerc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  r   r   ComplexrD  r  s     rC   rF  "numpy_geomspace.<locals>.<genexpr>       
C]c:c5==))]rH  c                 d  > U S:X  d  US:X  a  [        S5      eT	" U 5      n T	" U5      n[        S:  a  U R                  S:H  UR                  S:H  -  n[        R                  " U 5      S:H  [        R                  " U5      S:H  -  nSnU(       a  U R
                  n UR
                  nSnU(       a	  U * n U* nU* nO[        R                  " U 5      nX-  n X-  n[        R                  " U 5      n[        R                  " U5      n[        R                  " XgU5      nUS:  a  XS'   US:  a  XS'   XX-  $ )Nr   &Geometric sequence cannot include zerora  rH  rG   y              ?)r   r   realr  signimaglog10logspace)
r&  r  rM  both_imaginaryboth_negativeout_signlogstartlogstopr  result_dtypes
            rC   r   numpy_geomspace.<locals>.impl  s   zTQY !IJJ 'E%Dv%"'**/dii1n!E!#2!5"''$-2:M N!!JJE99D!H "FE 5D (yH775>! xxHhhtnG[[C8F Qw!q	7!%2J$$rE   c                 p   U S:X  d  US:X  a  [        S5      e[        R                  " U 5      S:H  [        R                  " U5      S:H  -  nSnU(       a	  U * n U* nU* n[        R                  " U 5      n[        R                  " U5      n[        R                  " XVU5      nUS:  a  XS'   US:  a  XS'   XG-  $ )Nr   r[  rH  rG   )r   r  r]  r_  r`  )r&  r  rM  rb  rc  rd  re  r  s           rC   r   rg    s    zTQY !IJJWWU^r1bggdmr6IJMHu$9xxHhhtnG[[C8F Qw!q	7!%2J$$rE   rO  )r   r   r  r	   r   r   r   rI  r   r  result_typer   )r&  r  rM  r   r   rf  s        @rC   numpy_geomspacerj    s    eU\\**5  %%dELL))4  %%cC/005  %%

Ce]
CCC!"..%19$#G H 	%p K+	%* KrE   c                 <   [        U[        [        R                  45      (       d  [        R
                  " S5      e[        U [        R                  5      (       d  [        R
                  " S5      eU R                  S:  a  [        R                  " S5      eSS jnU$ )Nz*The second argument "k" must be an integerz'The first argument "m" must be an arrayrb  Input must be >= 2-d.c                 V   US-  nUS:X  a  U S S  $ US:X  a,  [         R                  " [         R                  " U 5      SS5      $ US:X  a*  [         R                  " [         R                  " U 5      5      $ US:X  a,  [         R                  " [         R                  " U SS5      5      $ [        e)N   r   rG   rb     )r  swapaxesfliplrflipudr  )r  r   s     rC   r   numpy_rot90.<locals>.impl  s    E6Q4K!V;;ryy|Q22!V99RYYq\**!V99R[[Aq122  rE   r  )	r   r   r   r   r	   r   r   rr   NumbaValueError)r  r   r   s      rC   numpy_rot90ru     sx     a#u}}-..  !MNNa%%  !JKKvvz$$%<==! KrE   c                    U R                  [        R                  5      nUR                  5       nU R                  [        R                  5      n	[
        R                  " U	XxUXxUXy/5      n
[        R                  " UR                  U
S5      nU" UR                  5      n[        R                  " XR                  S5      SS5      n[        R                  " XR                  S5      SS5      nU" U5      n[        R                  " XSS5      n[        R                  " XSS5      nU	" S5      nUR                  XXXEUUR                  U/5      nU$ )z
Call into Numba_attempt_nocopy_reshape() for the given array type
and instance, and the specified new shape.

Return value is non-zero if successful, and the array pointed to
by *newstrides* will be filled up with the computed results.
numba_attempt_nocopy_reshaperg   r   r   )r   r   r   r)  intcr   FunctionTyper
   get_or_insert_functionr:   rr   rj   ri   callr   )r   r=   r   r  newndnewshape
newstridesr  ll_intp_starll_intcr  fnndrg   r   
is_f_orderr   s                    rC   _attempt_nocopy_reshaper    s1    $$UZZ0G%%'L$$UZZ0G??7||% D 
	'	'(F
HB 
	B  *>*>w*GANE""7,@,@,K#$a)GENE##Gq!<H%%g1a@JJ
,,r!ZLL*6 7C JrE   c                    SnSn[        U5       H  u  pEUS:  a	  US-  nUnM  X5-  nM     US:X  a  X:w  a  [        S5      eg US:X  a0  US:X  a  SnU S:H  nOX-  nX-  S:H  nU(       d  [        S5      eXqW'   g [        S5      e)Nr   rG   z)total size of new array must be unchangedzmultiple negative shape values)r  r   )	origsizerg   num_neg_value
known_sizer0  r   neg_axinferredoks	            rC   normalize_reshape_valuer  ?  s    MJ5!q5QMFOJ " !HII " 
!	?HQB-H&!+BHII f 9::rE   zarray.reshapec           
         UR                   S   nUR                  nUR                   S   nUS   nU R                  [        R                  5      n[
        R                  " XR                  5      n	[        U5      " XUS   5      n
[        R                  " X5      nUR                  X{5        [        R                  " UR                  SSS9n[        U5      " X5      nU R                  [        R                  U R                  U5      5      n[!        UUR#                  XR%                  5       5      U R                  [        R                  UR                  5      /U/US S9  U
R&                  nU R)                  U[*        [,        R.                  " [        R0                  [        R2                  U5      XR5                  5       /5        UR                  n[        R                  " X5      n[7        XXJUUU5      nUR9                  SUUR;                  S5      5      nUR=                  U5         SnU R>                  RA                  U[B        U45        S S S 5        [        U5      " X5      n[!        UU
RD                  URG                  U5      URG                  U5      U
RH                  U
RJ                  U
RL                  S9  UR5                  5       n[O        XUR                  U5      $ ! , (       d  f       N= f)	Nr   rG   r   r&  r'  r  zincompatible shape for arrayr8  )(r   r   r   r   r   r   r(  r   r~   r
   rX   r  r   r   r   r   r   ra  r)  r   r*  r  r   r%   r+  r   r   r  r  r9   r  r^  r_  rS   r   r>   r   r   r   r!   )r   r=   r\   r   r   rettyr  rg   r  ll_shaper  r}  shape_ary_ty	shape_aryshape_itemsizer   r|  r~  r  failr   r  r   s                          rC   array_reshaper  ]  s[   HHQKEOOEhhqkGGE$$UZZ0G||G]]3H
U
Gd1g
6C ""75HMM%" ;;W]]3GL<(:I))%***1*@*@*IKN92D2D2FG!..uzz7==IJ*+*! ::D W&=#--ejj.3kk<I"$7$7$9:< MME$$W7J	 5u!):
7B  r2771:6D		,))'3FO 
 U
G
-C3 h/"<<
3LL;;**& --/CWsDD 
	s   )%K##
K1c                 6    [        XX#5      u  pE[        XXE5      $ rB  )r  r  r:  s         rC   array_reshape_varargr    s    '#DG7==rE   )rb  rG   c                     S nU$ )Nc                 $    U R                  U5      $ rB  reshape)r7  r}  s     rC   np_reshape_impl#np_reshape.<locals>.np_reshape_impl  s    99X&&rE   rt   )r7  r}  r  s      rC   
np_reshaper    s    	'rE   c                     S nU$ )Nc                 $    U R                  U5      $ rB  r  )r7  rg   s     rC   r  r    s    99U##rE   rt   )r7  rg   r  s      rC   r  r    s    	$rE   c                 Z   [        U 5      (       d  Sn[        R                  " U5      e[        U[        R
                  5      (       a)  [        UR                  [        R                  5      (       d7  [        U[        R                  5      (       d  Sn[        R                  " U5      eS nU$ )N#The argument "a" must be array-likezBThe argument "new_shape" must be an integer or a tuple of integersc                 N   [         R                  " U 5      n [         R                  " U 5      n [        U[        5      (       a7  Sn[         R                  " U5       H  nX#-  nUS:  d  M  Sn[        U5      e   OUS:  a  Sn[        U5      eUnU R                  S:X  a/  [         R                  " U5      R                  U R                  5      $ U* U R                  -  * nU n[        US-
  5       H  n[         R                  " Xp45      nM     US U n[         R                  " Xq5      $ )NrG   r   z0All elements of `new_shape` must be non-negative)r  r  ravelr   r   r   r   zerosastyper   r8   concatenater  )	r7  	new_shapenew_size
dim_lengthr   msg2repeatsr   ro   s	            rC   r   numpy_resize.<locals>.impl  s    JJqMHHQKi''H jj3
&>LC$S/)	 4 1}I && H66Q;88I&--agg66I'(w{#A..#*C $)8nzz#))rE   )r   r	   r   r   r   r  r   r   )r7  r  r   r   s       rC   numpy_resizer    s     A3  %%	5>>22	77y%--00%  %%*8 KrE   c                 @   [        U 5      (       d  [        R                  " S5      e[        U5      (       d  [        R                  " S5      e[        U5      (       a  SS jnU$ [	        U[
        R                  5      (       d  [        R                  " S5      eSS jnU$ )Nz+The first argument "arr" must be array-likez/The second argument "values" must be array-likec                     [         R                  " [         R                  " U 5      5      n [         R                  " [         R                  " U5      5      n[         R                  " X45      $ rB  )r  r  r  r  r9  valuesr   s      rC   r   np_append.<locals>.impl  s@    ((2::c?+CXXbjj01F>>3-00rE   z,The third argument "axis" must be an integerc                 .    [         R                  " X4US9$ Nr   r  r  r  s      rC   r   r    s    >>3-d;;rE   rB  )r   r	   r   r   r   r   r   )r9  r  r   r   s       rC   	np_appendr    s     C    !NOOF##   ". / 	/ 4	1 K $..$$ &/ 0 0	<KrE   zarray.ravelc                     S nS nUR                   S   R                  S:X  a  UnOUnU R                  XX#5      n[        XUR                  U5      nU$ )Nc                 8    U R                  U R                  5      $ )zNo copy version)r  r   r  s    rC   
imp_nocopyarray_ravel.<locals>.imp_nocopy  s    {{388$$rE   c                 "    U R                  5       $ )zCopy version)flattenr  s    rC   imp_copyarray_ravel.<locals>.imp_copy	  s    {{}rE   r   r   )r   r+  r*  r"   r   )r   r=   r\   r   r  r  impr   s           rC   array_ravelr    sY    %
 xx{S  

"
"7
;C
7S__c
BCJrE   c                 ,    S nU R                  XX#5      $ )Nc                 "    U R                  5       $ rB  )r  r7  s    rC   np_ravel_implnp_ravel.<locals>.np_ravel_impl	  s    wwyrE   )r*  )r   r=   r\   r   r  s        rC   np_ravelr  	  s     ##GCFFrE   zarray.flattenc                 ^    S nU R                  XX#5      n[        XUR                  U5      nU$ )Nc                 T    U R                  5       R                  U R                  5      $ rB  )r  r  r   r  s    rC   r  array_flatten.<locals>.imp	  s    xxz!!#((++rE   )r*  r"   r   )r   r=   r\   r   r  r   s         rC   array_flattenr  	  s2    , 
"
"7
;C
7S__c
BCJrE   c                    Uc  [         R                  " U 5      OUn[         R                  " XU5      u  pVn[         R                  " UR                  5       H&  nXX   n	Xh   n
Xx   n[        [        X5      U5      XH'   M(     U$ rB  )r  
empty_likebroadcast_arraysndindexrg   minr  )r7  a_mina_maxr   r  a_ba_min_ba_max_br   val_a	val_a_min	val_a_maxs               rC   _np_clip_implr  %	  su     "k"--
sC//%@C'CII&
N	N	U.	:
	 ' JrE   c                     [         R                  " U R                  5       H.  nX   nX   nU(       a  [        XV5      X4'   M!  [	        XV5      X4'   M0     U$ rB  )r  r  rg   r  r  )r7  buse_minr   r   r  val_bs          rC   _np_clip_impl_noner  3	  sI    AGG$U*CJU*CJ % JrE   c                    [        U 5      (       d  [        R                  " S5      e[        U[        R
                  5      (       d&  [        U5      (       d  [        R                  " S5      e[        U[        R
                  5      (       d&  [        U5      (       d  [        R                  " S5      e[        U[        R                  5      (       d(  [        U5      (       d  Sn[        R                  " U5      eUS L =(       d    [        U[        R
                  5      nUS L =(       d    [        U[        R
                  5      nU(       a  U(       a  SS jnU$ [        U[        R                  5      n[        U[        R                  5      n	U(       a  U	(       a  SS jn
U
$ U(       a  U	(       d  U(       a  SS jnU$ SS jnU$ U(       d  U	(       a  U(       a  SS	 jnU$ SS
 jnU$ U(       a  SS jnU$ U(       a  SS jnU$ SS jnU$ )Nr  z6The argument "a_min" must be a number or an array-likez6The argument "a_max" must be a number or an array-likez5The argument "out" must be an array if it is providedc                     [        S5      e)Nz&array_clip: must set either max or minr   r7  r  r  r   s       rC   
np_clip_nnnp_clip.<locals>.np_clip_nnX	  s    EFFrE   c                     Uc  [         R                  " U 5      OUn[         R                  " U R                  5       H  nX   n[	        [        Xa5      U5      XE'   M      U$ rB  )r  r  r  rg   r  r  r7  r  r  r   r  r   r  s          rC   
np_clip_ssnp_clip.<locals>.np_clip_ssa	  sP     '*k"--"sCAGG, U!2E:
 - JrE   c                     Uc  [         R                  " U 5      OUn[         R                  " U R                  5       H  nX   n[	        Xa5      XE'   M     U$ rB  )r  r  r  rg   r  r  s          rC   
np_clip_snnp_clip.<locals>.np_clip_sno	  I     +.+bmmA&3ZZ0EHE!$U!2CJ 1 
rE   c                 F    [         R                  " X5      n[        XX#5      $ rB  r  	full_liker  )r7  r  r  r   
a_min_fulls        rC   
np_clip_sanp_clip.<locals>.np_clip_sa|	  s    
  \\!3
$QE??rE   c                     Uc  [         R                  " U 5      OUn[         R                  " U R                  5       H  nX   n[	        Xb5      XE'   M     U$ rB  )r  r  r  rg   r  r  s          rC   
np_clip_nsnp_clip.<locals>.np_clip_ns	  r  rE   c                 F    [         R                  " X5      n[        XXC5      $ rB  r  )r7  r  r  r   
a_max_fulls        rC   
np_clip_asnp_clip.<locals>.np_clip_as	  s    
  \\!3
$Qz??rE   c                     Uc  [         R                  " U 5      OUn[         R                  " X5      u  pV[        XVSU5      $ )NTr  r  r  r  )r7  r  r  r   r  r  r  s          rC   
np_clip_nanp_clip.<locals>.np_clip_na	  s7    *-+bmmA&3!221<)#cBBrE   c                     Uc  [         R                  " U 5      OUn[         R                  " X5      u  pV[        XVSU5      $ )NFr  )r7  r  r  r   r  r  r  s          rC   
np_clip_annp_clip.<locals>.np_clip_an	  s7    *-+bmmA&3!221<)#sCCrE   c                     [        XX#5      $ rB  )r  r  s       rC   
np_clip_aanp_clip.<locals>.np_clip_aa	  s     %Qu::rE   rB  )	r   r	   r   r   r   NoneTyper   r   r  )r7  r  r  r   r   a_min_is_nonea_max_is_noner  a_min_is_scalara_max_is_scalarr  r  r  r  r  r  r  r  s                     rC   np_clipr	  ?	  s   A  !FGGuenn-- ''   #4 6 	6 uenn-- ''   "4 5 	5 sEKK((K,<,<E  %% TMFZu~~%FMTMFZu~~%FM	G  5O 5O?		 		 @ 	 @  C D ; rE   clipc                     SS jnU$ )Nc                 0    [         R                  " XX#5      $ rB  )r  r
  r  s       rC   r   array_clip.<locals>.impl	  s    wwq,,rE   NNNrt   )r7  r  r  r   r   s        rC   
array_clipr  	  s    -KrE   c           	      `  ^^^^ UR                   UR                   :X  d   eUR                  UR                  :X  d   e[        UR                  5      n[        S5      m[        S5      m[        S5      m[        R                  mUUUU4S jnU R                  [        R                  [        X5      5      nU R                  [        R                  [        X5      5      nU R                  [        R                  UR                   5      n	[        R                  " XR                  S5      SS5      n
[        R                  " UUR                  S5      SS5      n[        R                  " [        R                  SSS	9nU R                  U5      n[        R                  " UU R                  [        R                  UR                   5      /5      nU R                  U R                  [        R                  5      5      nU R                  [        R                  U5      n[        R                  " X/5      nU" X5      n[!        UU
UUUS
S9  U" X5      n[!        UUUUUS
S9  UR#                  5       nUR#                  5       nU	UUXxU R                  [        R                  U5      /n[%        [        R&                  [        R                  UU[        R                  [        R                  [        R                  5      nU R)                  XUU5      n[+        X45        [-        XUR.                  U5      nU$ )z
Attempt to fix up *ary* for switching from *oldty* to *newty*.

See Numpy's array_descr_set()
(np/core/src/multiarray/getset.c).
Attempt to fix the array's shape and strides for a new dtype.
False is returned on failure, True on success.
r  r   Fc                    > UT	:X  a#  US   U:X  a	  T" T
5      nOUS   U:X  a  T" T5      nX4:w  a  UT	:X  d  U S:X  a  gUT
:X  a  U S-
  nOSnXC:  a  X4-  S:w  a  gX4-  nX==   U-  ss'   XBU'   gXC:  a  X   U-  nX-  S:w  a  gX-  X'   XBU'   g g)NrH  r   FrG   Trt   )r  rn   r   old_itemsizenew_itemsizer+  ro   newdim
bytelength
any_layoutc_layoutf_layoutint8s            rC   r  _change_dtype.<locals>.imp	  s     Zr{l*h|+h'Vz-AR1WXQAA& +1!1FGvG%AJ"  ( </J)a/ 0DG%AJ  rE   rg   r   r   rG   r&  Nr'  )rr   r+  ordr   r  r   r   r   r
   rj   ri   r   r~   rl   r   r   r   r   r%   booleanr*  r   r!   r   )r   r=   oldtynewtyr  
new_layoutr  r  r  r  
shape_datastrides_datashape_strides_array_typearyclsshape_constantsizeof_intpstrides_constantr  strides_aryrg   r   r   r\   r   r  r  r  r  s                           @@@@rC   _change_dtyper)  	  s    ::###<<5<<'''U\\"JSJ3xH3xH::D. .` ''

(4W(DFL''

(4W(DFL 
		ejj%**	5B%%g/C/CG/L&',J''(+(<(<Y(GAOL  %{{!CP 89F'')0)=)=ejj>Cjj*J )KLN (()>)>uzz)JKK&&uzz;?K))'=Aw(I9"'+'! *K;$'+'! !E##%Gw  Z8:D EMMJJ,,JJJJJJC 
"
"7d
;Ce!
Gcoos
CCJrE   c                 X    [        U 5      (       d  [        R                  " S5      eS nU$ )Nz+The argument to np.shape must be array-likec                 B    [         R                  " U 5      R                  $ rB  )r  r  rg   r  s    rC   r   np_shape.<locals>.implC
  s    zz!}"""rE   r   r	   r   r7  r   s     rC   np_shaper/  >
  s)    A  !NOO#KrE   c                 X    [        U 5      (       d  [        R                  " S5      eS nU$ )Nz*The argument to np.size must be array-likec                 B    [         R                  " U 5      R                  $ rB  )r  r  r   r  s    rC   r   np_size.<locals>.implM
  s    zz!}!!!rE   r-  r.  s     rC   np_sizer3  H
  s)    A  !MNN"KrE   c                     S nU$ )Nc                     [         R                  " U R                  5       5      n[        US S 5      n[	        USS  5       VVs/ s H  u  p4X   U:w  d  M  UPM     nnn[         R
                  " X%-   5      $ s  snnf r  )r  sortr  r   r  r   )arr  headro   r|  tails         rC   np_unique_impl!np_unique.<locals>.np_unique_implV
  sf    GGBHHJAbqE{'!".<.da!$!).<xx$$ =s   A7A7rt   )r7  r:  s     rC   	np_uniquer<  T
  s    %
 rE   c                    S n[        U [        R                  [        R                  [        R                  [        R
                  [        R                  45      (       a  [        U[        R                  5      (       a  [        $ [        U[        R                  [        R                  45      (       a+  [        UR                  [        R                  5      (       a  U$ [        R                  " S5      eg )Nc                 F   [         R                  " U[         R                  S9nUR                  S   S:X  a  [	        XS   5      $ [         R
                  " US:  5      (       a  [        S5      e[         R                  " U 5      nUR                  5       nUR                  S   nUR                  UR                  :w  a  [        S5      e[         R                  " [         R                  " U5      UR                  S9nSn[        U5       H  nXH   XgXrU   -   & XrU   -  nM     U$ )Nr   r   rG   r  z(operands could not be broadcast together)r  r  r  rg   np_repeat_impl_repeats_scalerrI  r   r  emptyr	  r   r8   )	r7  r  repeats_arrayasaaraveln	to_returnposro   s	            rC   !np_repeat_impl_repeats_array_like4np_repeat.<locals>.np_repeat_impl_repeats_array_likec
  s    

7"((;q!Q&0!4DEE66-!#$$BCCjjmLLO<<=...:< <HHRVVM2#))D	qA6<iIC"223##C  rE   zIThe repeats argument must be an integer or an array-like of integer dtype)r   r   r   ListrO  r  r  r   r@  r   r	   r   )r7  r  rH  s      rC   	np_repeatrK  ^
  s    
, !ekkjjoollmm	   gu}}--00%++uzz!:;;'--7788  01 	1rE   c                    US:  a  [        S5      e[        R                  " U 5      nUR                  5       nUR                  S   nUS:X  a  [        R
                  " SUR                  S9$ US:X  a  [        R                  " U5      $ [        R
                  " XA-  UR                  S9n[        U5       H  nX6   XVU-  US-   U-  & M     U$ )Nr   r  r?  rG   )	r   r  r  r  rg   rA  r   r  r8   )r7  r  rC  rD  rE  rF  ro   s          rC   r@  r@  
  s    {>??
**Q-CYY[FQA!|xx++	AwwvHHQ[		:	qA9?I'kQUg$56 rE   repeatc                     S nU$ )Nc                 .    [         R                  " X5      $ rB  )r  rM  )r7  r  s     rC   array_repeat_impl'array_repeat.<locals>.array_repeat_impl
  s    yy$$rE   rt   )r7  r  rP  s      rC   array_repeatrR  
  s    % rE   c                 :    [         R                  " U5      nS nX#4$ )z"Computes the itemsize of the dtypec                     U R                  UR                  S   R                  5      nU R                  UR                  5      nU" U R	                  U5      5      $ r   )r   r   r   r   r   )cgctxr=   r\   llargsr   llintps         rC   r  %_intrin_get_itemsize.<locals>.codegen
  sJ    ""388A;#4#45$$S__5e**4011rE   )r   r   )tyctxr   r\   r  s       rC   _intrin_get_itemsizerZ  
  s!     **U
C2 <rE   c                     g rB  rt   )r7  r   s     rC   _compatible_viewr\  
      rE   c                     S nU$ )zDDetermines if the array and dtype are compatible for forming a view.c                     [        U5      nX R                  :w  a  U R                  S:X  a  Sn[        U5      e U R                  S-
  nU R                  U   S:g  nU R
                  S:g  nU R                  U   U R                  :g  nU(       a  U(       a  U(       a  Sn[        U5      eX R                  :  a'  US:X  d  U R                  U-  S:w  a  Sn	[        U	5      eg U R                  U   U R                  -  n
X-  S:w  a  Sn[        U5      eg g )Nr   zOChanging the dtype of a 0d array is only supported if the itemsize is unchangedrG   zJTo change to a dtype of a different size, the last axis must be contiguouszZWhen changing to a smaller dtype, its size must be a divisor of the size of original dtypezuWhen changing to a larger dtype, its size must be a divisor of the total size in bytes of the last axis of the array.)rZ  r   rr   r   rg   r   r   )r7  r   
dtype_sizemsg1r   p1p2p3r  msg3r  msg4s               rC   r    ol_compatible_view.<locals>.impl
  s   )%0
#vv{7 &&  66A:D!#B1B4AJJ.Brb2 &&JJ&?ajj:&=&BID$T** 'C
 3&!+1D %T**	 ,9 $rE   rt   r7  r   r   s      rC   ol_compatible_viewri  
  s    "+F KrE   z
array.viewc                    UR                   S   nUR                  n[        U5      " XUS   5      n[        U5      " X5      n[        UR                  R
                  5      n[        U5       HN  n	[        Xi5      n
U	S:X  a.  UR                  R                  nUR                  X5      Ul        MB  [        XyU
5        MP     U R                  nUR                  [        5      nUR                  U/ UR                   Q70 5      nU R!                  X5      nU" X5        [#        XXEU5      nUR%                  SU['        UR                  S5      5      nUR)                  U5         SnU R*                  R-                  U[.        U45        S S S 5        UR1                  5       n[3        XUR                  U5      $ ! , (       d  f       N5= f)Nr   r   r  z"new type not compatible with array)r   r   r~   r   r   r   sortedgetattrr   r9   ra  r   r  r  r\  r  rR   r)  r  r   r  r^  r_  r   r   r!   )r   r=   r\   r   r   r  r  r  fieldsr   r   rX  rY  r  _compatible_view_sigr   r  r  r   r   s                       rC   
array_viewro  
  sn   HHQKEOOE
U
Gd1g
6C
U
G
-C''(FF^co;HHMMEs2CHCC   ""E##$45D--e\sxx\2F;D	ws	;B  r8BGGQ+?@D		2))':vF 
 --/CWsDD 
	s   %F11
F?r   c                 :    U R                  5       n[        XX$5      $ rB  )rd  r#   r   r=   r  r  r   s        rC   array_dtyperr    s    

!
!
#Cg99rE   rg   c                 Z    [        U5      nU" XU5      nUR                  n[        XX&5      $ rB  )r~   rg   r#   r   r=   r  r  r   r   r   s          rC   array_shaperu    s/     oGGe,E
++Cg99rE   r   c                 Z    [        U5      nU" XU5      nUR                  n[        XX&5      $ rB  )r~   r   r#   rt  s          rC   array_stridesrw    s/     oGGe,E
--Cg99rE   rr   c                 n    U R                  [        R                  UR                  5      n[	        XX$5      $ rB  )r   r   r   rr   r#   rq  s        rC   
array_ndimry    s+     

uzz388
4Cg99rE   r   c                 Z    [        U5      nU" XU5      nUR                  n[        XX&5      $ rB  )r~   r   r#   rt  s          rC   
array_sizer{  %  s-    oGGe,E
,,Cg99rE   r   c                 Z    [        U5      nU" XU5      nUR                  n[        XX&5      $ rB  )r~   r   r#   rt  s          rC   array_itemsizer}  -  s/     oGGe,E
..Cg99rE   nbytesc                     [        U5      nU" XU5      nUR                  UR                  UR                  5      n[	        XX&5      $ )z
nbytes = size * itemsize
)r~   r   r   r   r#   rt  s          rC   array_nbytesr  6  s>     oGGe,E
++ellENN
3Cg99rE   
contiguousc                 n    U R                  [        R                  UR                  5      n[	        XX$5      $ rB  )r   r   r  	is_contigr#   rq  s        rC   array_contiguousr  B  s)    


u}}cmm
<Cg99rE   c_contiguousc                 n    U R                  [        R                  UR                  5      n[	        XX$5      $ rB  )r   r   r  is_c_contigr#   rq  s        rC   array_c_contiguousr  H  )    


u}}coo
>Cg99rE   f_contiguousc                 n    U R                  [        R                  UR                  5      n[	        XX$5      $ rB  )r   r   r  is_f_contigr#   rq  s        rC   array_f_contiguousr  N  r  rE   r  c                 x    U R                  [        R                  UR                  (       + 5      n[	        XX$5      $ rB  )r   r   r  mutabler#   rq  s        rC   array_readonlyr  T  s+    


u}}#++o
>Cg99rE   ctypesc                     [        U5      nU" XU5      n[        R                  " U5      nU R                  X5      nUR                  Ul        UR
                  Ul        UR                  5       n[        XXh5      $ rB  )r~   r   ArrayCTypesr   r   r   r   r!   )	r   r=   r  r  r   r   actctinfor   s	            rC   array_ctypesr  \  sh    oGGe,E


C
 C  .F**FK]]FN



CWs88rE   r   c                     U R                  XUS9nUR                  nUR                  XPR                  [        R
                  5      5      n[        XX%5      $ Nr  )r   r   r>  r   r   r   r#   )r   r=   r  r  r  r   s         rC   array_ctypes_datar  i  sL      U ;F
++C


3 6 6uzz B
CCg99rE   c                     U R                  XUS9nUR                  nUR                  X`R                  U5      5      n[	        XX65      $ r  )r   r   ra  r   r#   )r   r=   fromtytotyr   r  r   s          rC   array_ctypes_to_pointerr  r  sH        <F
++C
//#55d;
<Cg::rE   c                    [        U5      " XUS9n[        R                  " [        R                  UR                  5      nUR                  UR                  UR                  5      5      n[        [        R                  XU[        R                  5      nUR                  UR                  UR                  [        R                  U5      /nUR                  X UU5      n	U	$ )a  Helper to invoke the contiguous checker function on an array

Args
----
checker :
    ``numba.numpy_supports.is_contiguous``, or
    ``numba.numpy_supports.is_fortran``.
context : target context
builder : llvm ir builder
aryty : numba type
ary : llvm value
r  )r~   r   r  r   rr   r   r   r   r%   bool_rg   r   r   r*  )
checkerr   r=   r   r  tup_intpr   	check_sig
check_argsr  s
             rC   _call_contiguous_checkr  {  s     U
GC
8C~~ejj%**5H%%g&<&<U[[&IJH%++x5::FI))S[[&&uzz8<>J((9)35IrE   r   c                     U R                  U[        R                  " U5      5      nX4l        UR	                  5       nU R
                  R                  XU5        [        XX%5      $ rB  )r   r   
ArrayFlagsr   r   r   r   r"   )r   r=   r  r  flagsobjr   s         rC   array_flagsr    sS    ""7E,<,<S,ABHO



CKKwU+Gc77rE   c                 .   UR                   R                  S:w  a7  U R                  XUS9n[        [        XUR                   UR
                  5      nO9UR                   R                  S:H  nU R                  [        R                  U5      n[        XX%5      $ )Nr   r  )
rc   r+  r   r  r   r   r   r   r  r#   )r   r=   r  r  r  r   r   s          rC   array_flags_c_contiguousr    s     ~~#&&w5&A$]G%(^^X__F nn##s*""5==#6g99rE   c                 p   UR                   R                  S:w  a7  U R                  XUS9n[        [        XUR                   UR
                  5      nOZUR                   R                  nUR                   R                  S:  a  US:H  OUS;   nU R                  [        R                  U5      n[        XX%5      $ )Nr  r  rG   r7  )rc   r+  r   r  r   r   rr   r   r   r  r#   )r   r=   r  r  r  r   r+  r   s           rC   array_flags_f_contiguousr    s    
~~#&&w5&A$Z%(^^X__F &&"~~22Q6fmFdN""5==#6g99rE   r\  c                     UR                   [        R                  ;   a  [        XX#SS9$ UR                   [        R                  ;   a  [        XX#5      $ [        SR                  [        R                   5      5      e)Nr\  attrzunsupported .real for {})	r   r   complex_domainarray_complex_attrnumber_domainr!   rS   r   r9   )r   r=   r  r  s       rC   array_real_partr    s]    
yyE(((!'CVLL	e))	) 3>>!"<"C"CDJJ"OPPrE   r^  c                    UR                   [        R                  ;   a  [        XX#SS9$ UR                   [        R                  ;   a  [        UR                  SS9U5      n[        XXC/5      u  pV[        XXV5      n[        R                  " XR                  UR                  UR                  UR                  5      S5        [        XUR                   UR#                  5       5      $ [%        SR'                  [(        R                   5      5      e)Nr^  r  Tr  r   zunsupported .imag for {})r   r   r  r  r  r%   r  _parse_empty_like_argsr)  r
   memsetr   r   r   r   r"   r   r   rS   r   r9   )r   r=   r  r  r\   r  r  r  s           rC   array_imag_partr    s    
yyE(((!'CVLL	e))	)$/503PWw?w'++cll69jj+BCD	F#// #1 	1 ""<"C"CDJJ"OPPrE   c                    US;  d  UR                   [        R                  ;  a  [        SR	                  U5      5      e[        U5      nU" XU5      nUR                   R                  nU R                  U R                  U5      5      nUR                  R                  U5      n	U R                  U5      R                  5       n
UR                  UR                  U
5      nUS:X  a-  UR                  U[         R"                  " S5      " S5      /5      nUR%                  USS9n[        U5      " X5      n['        XS9n[(        R*                  " XU5        [-        XXR/                  5       5      $ )	at  
Given a complex array, it's memory layout is:

    R C R C R C
    ^   ^   ^

(`R` indicates a float for the real part;
 `C` indicates a float for the imaginary part;
 the `^` indicates the start of each element)

To get the real part, we can simply change the dtype and itemsize to that
of the underlying float type.  The new layout is:

    R x R x R x
    ^   ^   ^

(`x` indicates unused)

A load operation will use the dtype to determine the number of bytes to
load.

To get the imaginary part, we shift the pointer by 1 float offset and
change the dtype and itemsize.  The new layout is:

    x C x C x C
      ^   ^   ^
)r\  r^  zcannot get attribute `{}`r^      rG   r  r   r+  )r   r   )r   r   r  rS   r   r~   underlying_floatr   r   r   r9   r   r)  ra  r   r,  r   IntTyper  r   r
   copy_structr!   r   )r   r=   r  r  r  r   r   fltysizeof_fltyr   
llfltptrtyr  resulttyr  repls                  rC   r  r    s5   8 ##syy8L8L'L!"="D"DT"JKKoGGe,E 99%%D(()>)>t)DEK~~"";/H ''-88:Jooejj*5G v~++g

2q(9':; xxd3x/H!'3FW0Dt,Wx9I9I9KLLrE   conj	conjugatec                     S nU$ )Nc                 .    [         R                  " U 5      $ rB  )r  r  r9  s    rC   r   array_conj.<locals>.impl  s    wws|rE   rt   r9  r   s     rC   
array_conjr    s    KrE   c                 "    U R                  5       $ rB  )rd  )r   r=   dtypetydtypevals       rC   
dtype_typer    s    ""$$rE   r9   kindstatic_getitemc                     UR                   n[        U[        R                  5      (       a#  U R	                  U5      " S5      n[        XXE5      $ Sn[        R                  " U5      e)zThis handles the "static_getitem" when a Numba type is subscripted e.g:
var = typed.List.empty_list(float64[::1, :])
It only allows this on simple numerical types. Compound types, like
records, are not supported.
NzlUnreachable; the definition of __getitem__ on the numba.types.abstract.Type metaclass should prevent access.)r   r   r   r   r   r#   r	   LoweringError)r   r=   r\   r   r  r   r   s          rC   static_getitem_number_clazzr  (  s[     OOE%%% $$U+D1!'E??L""3''rE   c           
         [        U5      nU" XU5      nUR                  n[        U[        R                  5      (       d  [        SU< SU< S35      eUR                  U5      nUR                  U5      n	[        U[        R                  5      (       a3  UR                  UR                  UR                  UR                  -   SS9n
OUR                  USS9n
[        U
5      nU" X5      nU R                  [        R                  U	5      n[        R                  " XR                  XR                  R                   S9n[        U[        R                  5      (       a  [        R"                  " XR$                  UR                  5      nXR$                   Vs/ s H#  nU R                  [        R                  U5      PM%     sn-  n[        R"                  " XR&                  UR                  5      nUUR&                   Vs/ s H#  nU R                  [        R                  U5      PM%     sn-  nU R)                  U R+                  UR                  5      5      nO8UR$                  nUR&                  nU R)                  U R+                  U5      5      n[-        UUUUU R                  [        R                  U5      UR.                  UR0                  S9  UR3                  5       n[5        XU
U5      $ s  snf s  snf )	ze
Generic getattr() implementation for record arrays: fetch the given
record member, i.e. a subarray.
z
attribute z of z not definedr  r&  r  )r   r8  )r~   r   r   r   RecordrS   typeofr  NestedArrayr  rr   r   r   r
   r   r   r9   r   rg   r   r   r   r   r   r   r   r!   )r   r=   r  r  r  r   r   rectyper   r  restyrarytyraryconstoffset
newdataptrrg   ro   r   datasizer   s                       rC   array_record_getattrr  @  sS    oGGe,EiiGgu||,,!%)3#0 1 	1NN4 E^^D!F%**++++CHHuzz$9#  G uS1F'#D&&uzz6:K$$[yy~~J %**++$$Wkk388D{{K{!'&&uzz15{KK&&wsxxHOAG((Q7OO))'*?*?*LM --))'*?*?*FG4""#00XF ==,,( ..
CWuc::' L Ps   *K/?*K4c                 ~    US   n[        U[        5      (       d  [        e[        XUR                  S   US   U5      $ r  )r   r  rS   r  r   )r   r=   r\   r   r   s        rC   array_record_getitemr  x  s;    GEeS!!!!#((1+tAwNNrE   c           
         U R                  X$5        UR                  U5      nUR                  U5      n[        U[        R
                  5      (       Ga3  [        U5      nU" X5      nUR                  n	UR                   V
s/ s H"  oR                  [        R                  U
5      PM$     nn
UR                   V
s/ s H"  oR                  [        R                  U
5      PM$     nn
[        R                  " XUU R                  U	5      5      n[        UU[        R                   " X5      [        R                   " X5      U R                  [        R                  UR"                  5      SSS9  UR%                  5       n['        XX.5      $ [        R                  " XUU R                  U5      5      nUR(                  (       a  SOSnU R+                  XUU5      n['        XX.5      $ s  sn
f s  sn
f )zL
Generic getattr() implementation for records: get the given record member.
Nr8  rG   )sentry_record_alignmentr  r  r   r   r  r~   r   rg   r   r   r   r
   get_record_memberr   r   rl   r   r   r!   r   r   )r   r=   r  r  r  r  elemtyr   r  r   r   r}  r~  newdatar   dptrr   s                    rC   record_getattrr    s   
 ##C.ZZFZZF&%++,, 6"G%LL"  =>((Q7  	 " nn&$ ?@**5::q9$ 	 &++GF,3,A,A%,HJ$$W7&&w;))%**fkkB	
 mmo 3<<(()0)>)>v)FH""7D%@ 3<<-"&s   )G":)G'c           	         UR                   u  pVUu  pxU R                  XT5        UR                  U5      n	UR                  U5      n
[	        U
[
        R                  5      (       a  [        R                  " U5      " XUS   S9nUR                  n[        R                  " XU	UR                  R                  5      n[        R                  " XUU R                  [
        R                  U
R                   5      5        g[        R                  " XU	U R#                  U
5      5      nU R%                  XXj5      nUR&                  (       a  SOSnU R)                  XXUS9  g)zL
Generic setattr() implementation for records: set the given record member.
rG   r  Nr   )r   r  r  r  r   r   r  r
   r}   r   r  r9   pointeememcpyr   r   r   r   r   r   r   )r   r=   r\   r   r  r  rR  r  r   r  r  
val_structrh  r  r  r   s                   rC   record_setattrr    s   
 JCKF##C.ZZFZZF&%++,,007>B1gG
oo((&),)9)9;wc++EJJF	H ((&)0)>)>v)FHll777CUCrE   c                     U R                  UR                  S   US   5      nU" XUR                  S   US   US   5      $ )+
Record.__getitem__ redirects to getattr()
r   rG   )get_getattrr   )r   r=   r\   r   r   s        rC   record_static_getitem_strr    sC    
 sxx{DG4D#((1+tAwQ@@rE   c                 ,   UR                   S   R                  n[        UR                   S   R                  5      nU R	                  UR
                  XT   5      nU R                  UR                   S   U5      nU" XUR                   S   US   XT   5      $ )r  rG   r   )r   r   r   rm  insert_const_stringr:   r  )r   r=   r\   r   r   rm  ll_fieldr   s           rC   record_static_getitem_intr    s    
 ((1+
#
#C#((1+$$%F**7>>6;GHsxx{H5D#((1+tAwDDrE   static_setitemc                     UR                   u  pEnUu  pxn	[        UR                  XF5      n
U R                  X5      nUc   eU" XU	45      $ )+
Record.__setitem__ redirects to setattr()
)r   r%   r   get_setattr)r   r=   r\   r   rectyr1  rR  recr   r   getattr_sigr   s               rC   record_static_setitem_strr    sU    
 hhOEeMCcCOOU:Ks0Ds$$rE   c                     UR                   u  pEnUu  pxn	[        UR                  XF5      n
[        UR                   S   R                  5      nU R                  X   U
5      nUc   eU" XU	45      $ )r  r   )r   r%   r   r   rm  r  )r   r=   r\   r   r  r1  rR  r  r   r   r  rm  r   s                rC   record_static_setitem_intr    sq    
 hhOEeMCcCOOU:K#((1+$$%Fv{K8Ds$$rE   c                 &    U R                  XU5      $ )z:
Create a constant array (mechanism is target-dependent).
)make_constant_array)r   r=   rE  pyvals       rC   constant_arrayr    s    
 &&wE::rE   c                     [         R                  " [         R                  " S5      UR                  5      nU" [	        UR                  5       5      5      n[        R                  " X5      $ )z?
Create a record constant as a stack-allocated array of bytes.
   )r   r(  r  r~  	bytearraytostringr
   r   )r   r=   rE  r  ltyr   s         rC   constant_recordr	    sG    
 ,,rzz!}ell
3C
i()
*C$$W22rE   c                 ~    [         R                  " [        U5      [         R                  S9nU R	                  XU5      $ )zE
Create a constant array from bytes (mechanism is target-dependent).
r?  )r  r   r  uint8r  )r   r=   rE  r  bufs        rC   constant_bytesr    s0    
 ((9U#288
4C&&wC88rE   c                 r    UR                   u  pEXE:w  a  [        R                  $ S nU R                  XX#5      $ )Nc                     U R                   UR                   :H  =(       aM    U R                  UR                  :H  =(       a-    U R                  R                  UR                  R                  :H  $ rB  )rg   r   r  r   r7  r  s     rC   array_is_implarray_is.<locals>.array_is_impl  sI    177" /		QYY&/.	0rE   )r   r
   r  r*  )r   r=   r\   r   atybtyr  s          rC   array_isr    s8    xxHC
z   0
 ##GCFFrE   __hash__c                     S $ )Nc                     g rB  rt   r  s    rC   r  ol_array_hash.<locals>.<lambda>,  s    trE   rt   r  s    rC   ol_array_hashr  *  s    rE   c                     [        U S5      $ )ze
Return the Structure representation of the given *flatiterty* (an
instance of types.NumpyFlatType).
flat_make_flattening_iter_cls)
flatitertys    rC   make_array_flat_clsr   2  s    
 %Z88rE   c                     [        U S5      $ )zj
Return the Structure representation of the given *nditerty* (an
instance of types.NumpyNdEnumerateType).
ndenumerater  nditertys    rC   make_array_ndenumerate_clsr%  :  s    
 %X}==rE   c                    U R                  [        R                  S5      nUR                  S5      n	Ub   UR	                  [
        R                  U5        [        [        U5      5       H  n
[
        R                  " XU
5      n[
        R                  " XR                  U5      5      nX:   nUR                  SX5      n[
        R                  " X5         UR	                  X5        Ub  U" U
5        UR                  U	5        S S S 5        UR	                  X5        Uc  M  U" U
5        M     Ub   UR	                  [
        R                  U5        UR                  U	5        UR!                  U	5        g ! , (       d  f       Nv= f)Nr   end_incrementr  )r   r   r   r  r  r
   
false_byter%  r8   rj   r  r>   r  	if_likelyr  	true_byter  )r   r=   rr   rg   r   end_flagloop_continue
loop_breakr   bbendr  idxptrr   r   	in_boundss                  rC   _increment_indicesr1  B  s,   

A.D&&7Eg(((3d$%%g<%%g||F/CD
''S8	w2MM#&(c"NN5! 3 	d#!sO %" g''2NN5E" 32s   .E22
F 	c                     [         R                  " XR                  UR                  5      n[	        XUR                  XdU5        g rB  )r
   r   rg   rr   r1  )r   r=   r8  r9  r   r+  rg   s          rC   _increment_indices_arrayr3  c  s.      ))UZZ@EwUXNrE   c                   ^ ^^^^^^^	^
^ T R                   m
T R                  m[        T R                  5      m	T R                  (       a  T
OSm " S S[
        5      n " S SU5      m " U 4S jSU5      m " S S	U5      m " S
 SU5      m " S SU5      m " UUUUUUU	U
U U4
S jS[        R                  " T 5      5      nU$ )ze
Return the Structure representation of the given *nditerty* (an
instance of types.NumpyNdIterType).
rG   c                   Z    \ rS rSrSrS rS r\R                  S 5       r	S r
S rS rS	rg
)$make_nditer_cls.<locals>.BaseSubIteris  z6
Base class for sub-iterators of a nditer() instance.
c                 F    Xl         X l        X0l        X@l        XC-
  U l        g rB  )nditermember_name	start_dimend_dimrr   )rZ   r8  r9  r:  r;  s        rC   r  -make_nditer_cls.<locals>.BaseSubIter.__init__x  s!     K*&N"L+DIrE   c                 F    [        U R                  U R                  U5        g rB  )r   r8  r9  )rZ   rm   s     rC   set_member_ptr3make_nditer_cls.<locals>.BaseSubIter.set_member_ptr  s    DKK!1!137rE   c                 B    [        U R                  U R                  5      $ rB  )rl  r8  r9  ri  s    rC   
member_ptr/make_nditer_cls.<locals>.BaseSubIter.member_ptr  s    4;;(8(899rE   c                     g rB  rt   )rZ   r   r=   s      rC   init_specific2make_nditer_cls.<locals>.BaseSubIter.init_specific  r  rE   c                     g rB  rt   rZ   r   r=   logical_dims       rC   r,  2make_nditer_cls.<locals>.BaseSubIter.loop_continue  r  rE   c                     g rB  rt   rG  s       rC   r-  /make_nditer_cls.<locals>.BaseSubIter.loop_break  r  rE   )r;  r9  rr   r8  r:  N)ru   rv   rw   rx   r}  r  r>  rm  cached_propertyrA  rD  r,  r-  rz   rt   rE   rC   BaseSubIterr6  s  s:    		,	8 
	"	"	: 
#	:			rE   rM  c                   0    \ rS rSrSrS rS rS rS rSr	g)	$make_nditer_cls.<locals>.FlatSubIteri  z
Sub-iterator walking a contiguous array in physical order, with
support for broadcasting (the index is reset on the outer dimension).
c                     UR                  [        R                  S5      nU R                  [        R
                  " X#5      5        g r   )r   r   r   r>  r
   r   )rZ   r   r=   r   s       rC   rD  2make_nditer_cls.<locals>.FlatSubIter.init_specific  s1    ''

A6D 9 9' HIrE   c                 r    UR                  U R                  5      nUR                  UR                  U/5      $ rB  )r>   rA  r,  r   )rZ   r   r=   r   r8  r9  r   s          rC   compute_pointer4make_nditer_cls.<locals>.FlatSubIter.compute_pointer  s+    LL1E;;sxx%11rE   c                     X0R                   S-
  :X  aM  UR                  U R                  5      n[        R                  " X$5      nUR                  X@R                  5        g g r  )rr   r>   rA  r
   r  r  )rZ   r   r=   rH  r   s        rC   r,  2make_nditer_cls.<locals>.FlatSubIter.loop_continue  sG    ii!m+T__5//?e__5	 ,rE   c                 F   US:X  a<  UR                  [        R                  S5      nUR                  X@R                  5        g X0R
                  S-
  :X  aM  UR                  U R                  5      n[        R                  " X%5      nUR                  XPR                  5        g g r  )	r   r   r   r  rA  rr   r>   r
   r  )rZ   r   r=   rH  r   r   s         rC   r-  /make_nditer_cls.<locals>.FlatSubIter.loop_break  su    a++EJJ:dOO4		A-T__5//?e__5	 .rE   rt   N)
ru   rv   rw   rx   r}  rD  rS  r,  r-  rz   rt   rE   rC   FlatSubIterrO    s    	
	J	2	6		6rE   rY  c                   ,   > \ rS rSrSrU 4S jrS rSrg)+make_nditer_cls.<locals>.TrivialFlatSubIteri  z`
Sub-iterator walking a contiguous array in physical order,
*without* support for broadcasting.
c                 ,   > TR                   (       a   eg rB  )need_shaped_indexing)rZ   r   r=   r$  s      rC   rD  9make_nditer_cls.<locals>.TrivialFlatSubIter.init_specific  s    44444rE   c                 x    [        U5      S::  d   [        U5      5       eUR                  UR                  U5      $ r  )r   r,  r   rZ   r   r=   r   r8  r9  s         rC   rS  ;make_nditer_cls.<locals>.TrivialFlatSubIter.compute_pointer  s2    w<1$2c'l2$;;sxx11rE   rt   N)ru   rv   rw   rx   r}  rD  rS  rz   r#  s   rC   TrivialFlatSubIterr[    s    	
	5	2rE   rb  c                       \ rS rSrSrS rSrg)'make_nditer_cls.<locals>.IndexedSubIteri  z1
Sub-iterator walking an array in logical order.
c           	      f    [        U5      U R                  :X  d   e[        R                  " XXEUSS9$ NFrN  )r   rr   r
   r*  r`  s         rC   rS  7make_nditer_cls.<locals>.IndexedSubIter.compute_pointer  s6    w<499,,,++Ge,3G GrE   rt   Nru   rv   rw   rx   r}  rS  rz   rt   rE   rC   IndexedSubIterrd    s    		GrE   ri  c                       \ rS rSrSrS rSrg)'make_nditer_cls.<locals>.ZeroDimSubIteri  z%
Sub-iterator "walking" a 0-d array.
c                     UR                   $ rB  )r   r`  s         rC   rS  7make_nditer_cls.<locals>.ZeroDimSubIter.compute_pointer  s    88OrE   rt   Nrh  rt   rE   rC   ZeroDimSubIterrk    s    		rE   rn  c                       \ rS rSrSrS rSrg)&make_nditer_cls.<locals>.ScalarSubIteri  z(
Sub-iterator "walking" a scalar value.
c                     U$ rB  rt   r`  s         rC   rS  6make_nditer_cls.<locals>.ScalarSubIter.compute_pointer  s    JrE   rt   Nrh  rt   rE   rC   ScalarSubIterrp    s    		rE   rs  c                      >
 \ rS rSrSr\R                  U UUUUU4S j5       rUUUU	4S jrU4S jr	S r
S rUUUU	4S jrS	 rS
 rSrg)make_nditer_cls.<locals>.NdIteri  z
.nditer() implementation.

Note: 'F' layout means the shape is iterated in reverse logical order,
so indices and shapes arrays have to be reversed as well.
c           	         > / nTR                   (       a  TOTTTTS.n[        TR                  5       H+  u  p4Uu  pVpxSU-  n	X%   n
UR                  U
" X	Xg5      5        M-     U$ )N)r  indexed0dscalarzindex%d)r]  r  r  rk   )rZ   l	factoriesro   r  r  r:  r;  r1  r9  factoryrY  ri  rs  rb  rn  r$  s              rC   subiters(make_nditer_cls.<locals>.NdIter.subiters  ss    A080M0M0$2-#0	I $H$5$56.1+'!m#/IGH	 7
 HrE   c                   > UR                  [        R                  S5      nUR                  U[        R                  " U5      U5      U l        [        U5       HP  u  pg[        U[        R                  5      (       a  M&  SU-  n[        R                  " X$U   5      n	[        XU	5        MR     U R                  XX45      n[        R                  " [        R                  T5      n
SnSn[        U5       HT  u  pm[        U[        R                  5      (       d  M&  UR                  T:X  d  M8  XF   R                  nXF   R                   n  O<   TS:X  d   eUR                  X*S5      nUR                  [        R                  S5      nS n[#        X45       H  u  p[        U[        R                  5      (       d  M&  UR                  S:  d  M8  [%        [        R&                  [        R                  " [        R                  UR                  5      U
5      nUR)                  X.UUR                  U45        M     [        R*                  " X+5      nTS:X  a  USSS2   nUR-                  S	X5      nUR/                  U[        R0                  [        R2                  5      nTR4                  (       d  U4n[7        U5      T:X  d   e[        R8                  " X%R:                  TS
9n[=        T5       H-  n[        R>                  " UUU5      nURA                  UU5        M/     UU l!        [        RD                  " UUUR:                  5      U l        [        R                  " UU5      U l#        U RH                   H  nURK                  X5        M     g)zA
Initialize the nditer() instance for the specific array inputs.
r   scalar%dNrt   rG   c                     [        U 5      n[        U5       H(  nX   U[        U5      U-
  U-      :w  d  M  [        S5      e   g )Nz2nditer(): operands could not be broadcast together)r   r8   r   )rg   
main_shaperE  ro   s       rC   check_shapeBmake_nditer_cls.<locals>.NdIter.init_specific.<locals>.check_shape  sH    JqAx:c*o.AA.E#FF( *> ? ? "rE   r  rH  r  r  )&r   r   r   r  r  arraysr  r   r   r
   r   r   _arrays_or_scalarsr  rr   rg   r   r   r%   noner*  r   r  r  r*  r(  r]  r   rX   r9   r8   rj   r  r   rl   	exhaustedr}  rD  )rZ   r   r=   arrtysr  r   ro   rE  r9  slotmain_shape_tyr  main_nitemsr8  r  r9  r\   r  shape_is_emptyr  r   r  r/  subiterr+  rr   r$  nshapess                           rC   rD  -make_nditer_cls.<locals>.NdIter.init_specific  s    ''

A6D ",,Wekk&6I-35DK #6*!"ekk22",q.K"44WQiHDDt4 + ,,WvNF "NN5::t<MJK%f-eU[[11ejjD6H!'J"()"2"2K	 . qy y$//K
%225::qA? "&1
eU[[11ejj1n#EJJ$)NN5::uzz$J$13C ,,W-0399j2IK 2 ))'>F}" %00{IN~w7H7H'.'9'9;I 00 &v;')))))'997KGW~ --gwDdF+ & #DL ++GVTYYGDJ$66w	JDN  ==%%g7 )rE   c                 <  > UR                  S5      n[        R                  " UUR                  U R                  5      5      n[        R
                  " X%5         UR                  S5        UR                  U5        SSS5        TR                  n[        R                  " X R                  5      nU R                  XXg5      nU R                  nUR                  S5        U R                  XXU5      n	U	 V
s/ s H  oR                  5       PM     n	n
[        U	5      S:X  a  UR                  U	S   5        O,UR                  UR!                  UTR"                  U	5      5        [        R                  " X R$                  5      n['        X[        U5      UXR                  [(        R*                  " U R,                  UU5      [(        R*                  " U R.                  UU5      5        UR                  U5        UR1                  U5        g! , (       d  f       GN= fs  sn
f )z2
Compute next iteration of the nditer() instance.
r@  FNTrG   r   )r  r
   as_bool_bitr>   r  if_unlikelyr  r  r  r   r  r   _make_viewsr   r   r  r  r  rg   r1  rm  partial_loop_continue_loop_breakr  )rZ   r   r=   r  r.  r  r  r  r   viewsr   rg   r$  s               rC   iternext_specific1make_nditer_cls.<locals>.NdIter.iternext_specific=  s    ..u5E  ++G,3LL,HJI$$W8  'u% 9 __F))';;?F,,WvNFllG T"$$WwOE,12Eq[[]EE25zQeAh'g00(:M:M168 9 ((**=EwUU&(001D1D1818 :  )001A1A1818 :! NN5!##E*? 98 3s   #H6H
Hc                     U R                    HH  nUR                  Us=::  a  UR                  :  d  M&  O  M*  UR                  XX4R                  -
  5        MJ     g rB  )r}  r:  r;  r,  rZ   r   r=   r  r  s        rC   r  .make_nditer_cls.<locals>.NdIter._loop_continueg  s?    }}==C5#++55%%gmm8KL %rE   c                     U R                    HH  nUR                  Us=::  a  UR                  :  d  M&  O  M*  UR                  XX4R                  -
  5        MJ     g rB  )r}  r:  r;  r-  r  s        rC   r  +make_nditer_cls.<locals>.NdIter._loop_breakl  s=    }}==C5#++55NN7S==5HI %rE   c                 N  > S/T-  nTR                   nU R                  nTR                  n	[        U	[        R
                  5      (       a  [        U	5      n	OU	/n	[        T5       V
s/ s H)  n
UR                  [        R                  " X#U
5      5      PM+     nn
[        Xx5       H_  u  pUu      pX<R                  UR                   nTS:X  a  USSS2   nU H(  n
Xj   b   eU R                  XUX   XJ   XZ   U5      Xj'   M*     Ma     [        S U 5       5      (       d   eU$ s  sn
f )z"
Compute the views to be yielded.
Nr  rH  c              3   $   #    U  H  ov   M     g 7frB  rt   rD  r   s     rC   rF  >make_nditer_cls.<locals>.NdIter._make_views.<locals>.<genexpr>  s     (%Qq%s   )r  r}  r  r   r   rO  r   r8   r>   r
   rj   r   r:  r;  
_make_viewr  )rZ   r   r=   r   r  r  r  r  r}  rettysro   r  r  r1  array_indicessub_indicesr+  narraysr$  r  s                   rC   r  +make_nditer_cls.<locals>.NdIter._make_viewsq  s3    FW$E((H}}H((F&%//22f  %g0 .1 ||G$8$81$MN .  0 !$H 7),&1a%&7&7HS="-dd"3K&A 8+++#w/5y/5y&)W NEH ' !8 (%(((((L0s   '0D"c           	         [        U[        R                  5      (       a  UR                  S:X  d   eUR	                  XX5U5      nUR                  U5      " X5      n	[        X5      n
UR                  U[        R                  " [        R                  S5      S5      nUR                  U[        R                  " [        R                  S5      S5      n[        XXU
SS9  U	$ )z,
Compute a 0d view for a given input array.
r   rt   N)r   )r   r   r   rr   rS  r~   r   r  r  r   r   )rZ   r   r=   r   r  r8  r9  r  rm   viewr   rg   r   s                rC   r  *make_nditer_cls.<locals>.NdIter._make_view  s    
 eU[[11ejjAoEE))'GCPC%%e,W>D#G3H&&wuzz10M')+E((%..Q2O)+-G 4ehMKrE   c           	         / n[        [        X45      5       Hm  u  nu  px[        U[        R                  5      (       a(  UR                  UR                  U5      " UUUS95        MO  UR                  [        U SU-  5      5        Mo     U$ )Nr  r  )r  r   r   r   r   rk   r~   rl  )	rZ   r   r=   r  r  rz  ro   r8  r9  s	            rC   r  2make_nditer_cls.<locals>.NdIter._arrays_or_scalars  s}     A#,S-@#A<EeU[[11HHW//6w7>=@B C HHWT:>:; $B HrE   )r  r  r   rg   N)ru   rv   rw   rx   r}  rm  rL  r}  rD  r  r  r  r  r  r  rz   )
rY  ri  rs  rb  rn  r+  r  rr   r$  r  s
   rC   NdIterru    sZ    	 
	"	"	 	 
#	M	8 M	8^(	+T	M
	J
	 	8	(	rE   r  )rr   r+  r   r  r]  objectr
   r}   )r$  rM  r  rY  ri  rs  rb  rn  r+  r  rr   r  s   `  @@@@@@@@@rC   make_nditer_clsr  i  s    
 ==D__F(//"G33dGf 86k 6@2[ 2G G  V V V,,X6 Vp MrE   c                 d   ^ U R                   m " U4S jS[        R                  " U 5      5      nU$ )zf
Return the Structure representation of the given *nditerty* (an
instance of types.NumpyNdIndexType).
c                   2   > \ rS rSrSrU 4S jrU 4S jrSrg)%make_ndindex_cls.<locals>.NdIndexIteri  z
.ndindex() implementation.
c                   > UR                  [        R                  S5      n[        R                  " X$R
                  UR                  [        R                  T5      S9n[        R                  " U[        R                  5      n[        T5       H  n[        R                  " X%U5      nUR                  XH5        X7   n	UR                  SX5      n
[        R                  " X*5         UR                  [        R                  U5        S S S 5        M     XPl        X`l        [        R                   " X#UR
                  5      U l        g ! , (       d  f       M  = fNr   r  r  )r   r   r   r
   rX   r9   r   r(  r8   rj   r  r  r  r*  r   r  rl   rg   )rZ   r   r=   r  r   r   r  r  r/  r  dim_is_emptyrr   s              rC   rD  3make_ndindex_cls.<locals>.NdIndexIter.init_specific  s   ''

A6D))'99/6/C/CEJJDH0JKG  11'7;M;MNIT{ --gDd+ ";&44T8J((?MM'"3"3Y? @? # #L&N ++GTYYGDJ @?s   &!E
E	c           
        > UR                  [        R                  S5      nUR                  S5      n[        R
                  " UUR                  U R                  5      5      n[        R                  " X&5         UR                  S5        UR                  U5        S S S 5        [        T5       Vs/ s H4  nUR                  [        R                  " UU R                  U5      5      PM6     nnU H  n	[        X)5        M     UR                  [        R                   " X(UR"                  5      5        UR                  S5        [        R$                  " X R&                  T5      n
[)        XTU
U R                  U R                  5        UR                  U5        UR+                  U5        g ! , (       d  f       GN= fs  snf )Nr   r@  FT)r   r   r   r  r
   r  r>   r  r  r  r  r8   rj   r   rI   r  rl   r9   r   rg   r1  r  )rZ   r   r=   r  r   r.  r  r  r   r>   rg   rr   s              rC   r  7make_ndindex_cls.<locals>.NdIndexIter.iternext_specific  s`   ''

A6D..u5E++G,3LL,HJI$$W8  'u% 9 #(+/ #.3 ||G$8$89=9<%> ? #.  /  g,   MM',,WtyyIJT"((**dCEwu#||T^^= NN5!##E*' 98/s   9#F*1;F<*
F9)r  r   rg   N)ru   rv   rw   rx   r}  rD  r  rz   rr   s   rC   NdIndexIterr    s    		H,	+ 	+rE   r  )rr   r
   r}   )r$  r  rr   s     @rC   make_ndindex_clsr    s.    
 ==D5+g11(; 5+n rE   c                    ^ TS;   d   eU R                   nUR                  S:X  a$   " U4S jS[        R                  " U 5      5      nU$  " U4S jS[        R                  " U 5      5      nU$ )N)r  r"  r   c                   >   > \ rS rSrSrU 4S jrU 4S jrS rS rSr	g)	6_make_flattening_iter_cls.<locals>.CContiguousFlatIteri  zB
.flat() / .ndenumerate() implementation for C-contiguous arrays.
c                   > UR                  [        R                  S5      n[        R                  " X%5      U l        UR                  U l        T	S:X  a  [        R                  " X%R                  UR                  [        R                  UR                  5      S9n[        UR                  5       H+  n[        R                  " X&U5      nUR                  XX5        M-     X`l        g g )Nr   r"  r  )r   r   r   r
   r   r   r   r  rX   r9   rr   r8   rj   r  r   )
rZ   r   r=   r8  r9  r   r   r  r/  r  s
            rC   rD  D_make_flattening_iter_cls.<locals>.CContiguousFlatIter.init_specific  s    ++EJJ:$66wE
 "ll=(%11$11%**ejjIKG  %UZZ0!(!5!5g!Ld3  1 $+L )rE   c                 ,  > UR                   nUR                  nUR                  U R                  5      nUR	                  SX5      n	UR                  U	5        [        R                  " X)5         UR                  UR                  U/5      n
[        XX:5      nTS:X  a  UR                  U5        OU R                  n[        U5       Vs/ s H*  nUR                  [        R                  " UUU5      5      PM,     nn[        R                  " X.5      nUR                  [        R                   " UX/5      5        [#        XUXL5        [        R$                  " X(5      nUR'                  XR                  5        S S S 5        g s  snf ! , (       d  f       g = f)Nr  r  )rr   r   r>   r   r  r  r
   r)  r,  r   r   r  r   r8   rj   rl   make_anonymous_structr3  r  r  )rZ   r   r=   r8  r9  r  rr   r   r   r  rm   r  r   r  idxvalsidxtupler  s                   rC   r  H_make_flattening_iter_cls.<locals>.CContiguousFlatIter.iternext_specific  s^   zzTZZ0"..sEB  *&&w9!++chh8C%gCEv~e, #',, /4Dk#; /:s $+<<0D0DWELEH1J $K /:   #; $+#5#5g#G#99';C:KMN 1514? $33GCEMM%4) :9#; :9s    .AF	1F :A=F F
Fc                 T    UR                  UR                  U/5      n[        XX65      $ rB  )r,  r   r   rZ   r   r=   r8  r9  r   rm   s          rC   r  >_make_flattening_iter_cls.<locals>.CContiguousFlatIter.getitem4  s%    kk#((UG4 5>>rE   c                 X    UR                  UR                  U/5      n[        XX6U5        g rB  )r,  r   r   rZ   r   r=   r8  r9  r   r  rm   s           rC   setitem>_make_flattening_iter_cls.<locals>.CContiguousFlatIter.setitem8  s$    kk#((UG47U3?rE   )r   r   r  N)
ru   rv   rw   rx   r}  rD  r  r  r  rz   r  s   rC   CContiguousFlatIterr    s    +25<?@rE   r  c                   >   > \ rS rSrSrS rU 4S jrS rS rS r	Sr
g	)
+_make_flattening_iter_cls.<locals>.FlatIteri?  z
Generic .flat() / .ndenumerate() implementation for
non-contiguous arrays.
It keeps track of pointers along each dimension in order to
minimize computations.
c                    UR                  [        R                  S5      nUR                  nUR                  n[
        R                  " X$R                  U5      n[
        R                  " X%R                  UR                  [        R                  UR                  5      S9n	[
        R                  " X&R                  UR                  [        R                  UR                  5      S9n
[
        R                  " U[
        R                  5      n[        U5       H  n[
        R                  " X)U5      n[
        R                  " X*U5      nUR                  Xn5        UR                  X]5        X   nUR                  SX5      n[
        R                   " UU5         UR                  [
        R"                  U5        S S S 5        M     Xl        Xl        Xl        g ! , (       d  f       M  = fr  )r   r   r   r   rr   r
   r   rg   rX   r9   r   r(  r8   rj   r  r  r  r*  r   pointersr  )rZ   r   r=   r8  r9  r   r   rr   r  r   r  r  r  r/  ptrptrr  r  s                    rC   rD  9_make_flattening_iter_cls.<locals>.FlatIter.init_specificG  su   ++EJJ:xxzz --gyy$G!--YYW-A-A%**BG**.NO #..YYW-A-A%**BG**.NO $55g6=6H6HJ	 !;C$11'CHF$11'SIFMM$/MM$/  &{H#*#8#8x#NL ,,WlCg&7&7C DC '  ' (!* DCs   !G
G'	c           
      t  > UR                   n[        R                  " X$R                  U5      n[        R                  " X$R                  U5      nU R
                  n	U R                  n
UR                  [        R                  S5      nUR                  S5      n[        R                  " X"R                  U R                  5      5      n[        R                  " X-5         UR                  S5        UR!                  U5        S S S 5        UR                  S5        [        R"                  " X*US-
  5      nUR                  U5      n[%        XX?5      nTS:X  a  UR'                  U5        O[)        U5       Vs/ s H*  nUR                  [        R"                  " UU	U5      5      PM,     nn[        R*                  " UU5      nUR'                  [        R,                  " UUU/5      5        [/        [)        U5      5       GHD  n[        R"                  " X)U5      n[        R0                  " UUR                  U5      5      nUU   nUU   nUR3                  SUU5      n[        R4                  " UU5         UR7                  UU5        [        R"                  " X*U5      nUR                  U5      n[        R8                  " X/U5      nUR7                  UU5        [)        US-   U5       H-  n[        R"                  " UU
U5      nUR7                  UU5        M/     UR!                  U5        S S S 5        UR7                  UU5        GMG     UR7                  [        R:                  U R                  5        UR!                  U5        UR=                  U5        g ! , (       d  f       GN= fs  snf ! , (       d  f       N= f)Nr   r@  FTrG   r  r  )rr   r
   r   rg   r   r   r  r   r   r   r  r  r>   r  r  r  r  rj   r   r  r8   rl   r  r%  r  r  r)  r  r   r*  r  )rZ   r   r=   r8  r9  r  rr   r  r   r   r  r   r.  is_exhaustedlast_ptrrm   r  r  r  r  r/  r   r   r  r0  r  	inner_dimr  s                              rC   r  =_make_flattening_iter_cls.<locals>.FlatIter.iternext_specifich  s   zz --gyy$G!..wTJ,,==++EJJ:2259  '22\\$..9 ;((?$$U+NN5) @   & #//4!8Lll8,!'E?6>MM%( +0+7 +63  '||G,@,@AHAD-F  G +6  7  '11'7CHMM55g7?6GIJ $E$K0C$11'CHF!11'29,,v2FHC #3KE$S\F ' 3 3Ce DI **7I>c62!(!5!5g!M%ll62%11'Gc62).sQw)=I%,%9%9':B:C&EF $MM#v6	 *>
  u- ? MM$// 14 g//@u%''.k @?7& ?>s   #N61N$1B5N)
N!)
N7	c           	         UR                   n[        R                  " X$R                  US9n[        R                  " X$R                  US9n/ n	[        [        U5      5       H:  n
U	R                  UR                  XWU
   5      5        UR                  XWU
   5      nM<     U	R                  5         [        R                  " XUR                  XxUR                  U	5      nU$ )Nr   )rr   r
   r   rg   r   r%  r8   rk   uremudivreverser*  r   r+  )rZ   r   r=   r8  r9  r   rr   r  r   r   r  rm   s               rC   _ptr_for_index:_make_flattening_iter_cls.<locals>.FlatIter._ptr_for_index  s    zz --gyyM!..w4P #E$K0CNN7<<c{#CD#LLs<E 1 !//#((06079 
rE   c                 @    U R                  XX4U5      n[        XX65      $ rB  )r  r   r  s          rC   r  3_make_flattening_iter_cls.<locals>.FlatIter.getitem  s#    ))'EN 5>>rE   c                 D    U R                  XX4U5      n[        XX6U5        g rB  )r  r   r  s           rC   r  3_make_flattening_iter_cls.<locals>.FlatIter.setitem  s"    ))'EN7U3?rE   )r  r   r  N)ru   rv   rw   rx   r}  rD  r  r  r  r  rz   r  s   rC   FlatIterr  ?  s%    +BC/J"?@rE   r  )rc   r+  r
   r}   )r  r  rc   r  r  s    `   rC   r  r    sr    ****&&JCB	@'"="=j"I B	@H #"E	@w22:> E	@N rE   r  c                 0   [        [        R                  " U5      5      nU" X5      nX5l        U R	                  U5      nU" XUR                  S5      S9nUR                  XX#5        UR                  5       n[        X[        R                  " U5      U5      $ Nr   )r[   )	r   r   NumpyFlatTyper   r~   ri   rD  r   r!   )r   r=   r8  r9  flatiterclsflatiterarrclsr   s           rC   make_array_flatiterr    s    %e&9&9%&@AK7,HN&F
x'@'@'I
JC7U8



CWu/B/B5/I3OOrE   c                     UR                   u  nUu  n[        U5      nU" XUS9nUR                  nU R                  U5      n	U	" XUR                  S9n
UR                  XXU5        g r  )r   r   rc   r~   r   r  )r   r=   r\   r   r  r  r  r  r8  r  r9  s              rC   iternext_numpy_flatiterr    si     88LZJX%j1K78<H!!E&F

8CwVDrE   c                     UR                   S   nUu  pV[        U5      nU" XUS9nUR                  nU R                  U5      n	U	" XUR                  S9n
UR                  XXU5      n[        XUR                  U5      $ Nr   r  )r   r   rc   r~   r   r  r!   r   )r   r=   r\   r   r  r  r   r  r8  r  r9  r   s               rC   iternext_numpy_getitemr    s~    !JOH%j1K78<H!!E&F

8C


7U
?CWsDDrE   c                     UR                   S   nUu  pVn[        U5      nU" XUS9nUR                  n	U R                  U	5      n
U
" XUR                  S9nUR                  XXXg5        U R                  5       $ r  )r   r   rc   r~   r   r  rd  )r   r=   r\   r   r  r  r   r  r  r8  r  r9  s               rC   iternext_numpy_getitem_anyr    s}     !J!HU%j1K78<H!!E&F

8CWu5@""$$rE   c                     UR                   S   n[        U5      nU" XUS   S9nU R                  UR                  5      nU" XUR                  S9nUR
                  $ r  )r   r   r~   rc   r   r   )	r   r=   r\   r   r  r  r  r  r9  s	            rC   iternext_numpy_getitem_flatr  
  sY    !J%j1K747;H
 5 56F

8C::rE   c                 @   UR                   u  nUu  n[        [        R                  " U5      5      nU" X5      nXWl        U R                  U5      nU" XUR                  S5      S9nUR                  XXE5        UR                  5       n	[        XUR                  U	5      $ r  )r   r%  r   NumpyNdEnumerateTyper   r~   ri   rD  r   r!   r   )
r   r=   r\   r   r8  r9  	nditerclsr8  r  r   s
             rC   make_array_ndenumerater    s    XXFEDC*5+E+Ee+LMIw(FL&F
v'>'>w'G
HC
56



CWsDDrE   c                     UR                   u  nUu  n[        U5      nU" XUS9nUR                  nU R                  U5      n	U	" XUR                  S9n
UR                  XXU5        g r  )r   r%  rc   r~   r   r  )r   r=   r\   r   r  r$  r8  r  r8  r  r9  s              rC   iternext_numpy_nditerr  '  si     JXHV*84Iwv6FE&F

6C
Wu6BrE   c           
      r   [        UR                  U5       VVs/ s H&  u  pEU R                  XU[        R                  5      PM(     nnn[        [        R                  " [        U5      5      5      nU" X5      nUR                  XU5        UR                  5       n	[        XUR                  U	5      $ s  snnf )zndindex(*shape))r   r   r   r   r   r  NumpyNdIndexTyper   rD  r   r!   r   )
r   r=   r\   r   argtyr  rg   r  r8  r   s
             rC   make_array_ndindexr   7  s    
  #388T242 \\'uzz:2 
 4 !!7!7E
!CDIw(F
51



CWsDD4s   -B3c           	         UR                   R                  nUS:  ag  UR                  S   R                  nUS   n[        R
                  " XU5      nU Vs/ s H$  nU R                  XU[        R                  5      PM&     nnO/ n[        [        R                  " [        U5      5      5      n	U	" X5      n
U
R                  XU5        U
R                  5       n[        XUR                   U5      $ s  snf )zndindex(shape)r   )r   rr   r   r   r
   r   r   r   r   r  r  r   rD  r   r!   )r   r=   r\   r   rr   r   rL  rg   r   r  r8  r   s               rC   make_array_ndindex_tupler  F  s     ??Dax!!1g$$W48!#!S gE5::>! 	 #  !7!7E
!CDIw(F
51



CWsDD#s   +C/c                 p    UR                   u  nUu  n[        U5      nU" XUS9nUR                  XU5        g r  )r   r  r  )r   r=   r\   r   r  r$  r8  r  s           rC   iternext_numpy_ndindexr  ]  s<     JXHV *Iwv6F
Wv6rE   c                 H   UR                   nUR                  n[        UR                  S   [        R
                  5      (       a  [        R                  " XS   5      nOUS   /n[        U5      " X5      nUR                  XXV5        UR                  5       n[        XXH5      $ )z
nditer(...)
r   )r   r  r   r   r   rO  r
   r   r  rD  r   r!   )	r   r=   r\   r   r$  r  r  r8  r   s	            rC   make_array_nditerr  i  s    
 H__F#((1+u//%%gAw7q'X&w8F
6:



CWx==rE   c                 l    UR                   u  nUu  n[        U5      " XUS9nUR                  XU5        g r  )r   r  r  )r   r=   r\   r   r  r$  r8  s          rC   iternext_numpy_nditer2r  }  s7     JXHVX&wvFF
Wv6rE   c                     UR                   u  pE[        R                  " [        R                  " S5      [	        XE:H  5      5      n[        XUR                  U5      $ r  )r   r   r   r  r   r#   r   )r   r=   r\   r   arg1arg2r   s          rC   dtype_eq_implr    s?    JD
++bjjmS%6
7CgEErE   c           	         [        U5      nU" X5      nU R                  UR                  5      nU R                  [        R
                  [        X5      5      nU R                  [        R
                  S5      n[        [        R                  " S5      S5      n	U HG  n
UR                  X5      nUR                  US5      nUR                  XR                  US5      5      n	MI     UR                  S:X  a  SnOUR                  S:X  aQ  U/n[        USS 5       H'  nUR!                  UR#                  US   U5      5        M)     [%        [        U5      5      nOsUR                  S:X  a?  U/nUSS  H'  nUR!                  UR#                  US   U5      5        M)     [%        U5      nO$['        SR)                  UR                  5      5      eUR                  X5      nUR                  US5      nUR                  XR                  US5      5      n	UR+                  U	S	S
9   U R,                  R/                  U[0        S5        SSS5        UR                  nU R3                  U5      nU R                  [        R4                  U5      nU R7                  5       UU4n[        R8                  " [        R:                  5      n[        R<                  " [?        U5      5      n[A        UU[        R
                  [        R4                  5      nU RC                  U[D        UU5      nU RF                  RI                  UU5      nU RK                  [        R
                  5      n[L        RN                  " XUS9n[L        RN                  " XUS9n[Q        UURS                  UURU                  5       5      UUUUS9  U$ ! , (       d  f       GNw= f)zUtility function used for allocating a new array during LLVM code
generation (lowering).  Given a target context, builder, array
type, and a tuple or list of lowered dimension sizes, returns a
LLVM value pointing at a Numba runtime allocated array.
rG   r   rt   r   NrH  r  z3Don't know how to allocate array with layout '{0}'.Fr\  )z[array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.)rE  r'  )+r~   r   r   r   r   r   r   r   r   r  smul_with_overflowrV  r  rr   r+  r%  rk   r   r   rS   r   r  r^  r_  r   get_preferred_array_alignmentuint32rd  MemInfoPointervoidptrTypeRefr9   r%   r*  _call_allocatorr   meminfo_datar   r
   rl   r   ra  r)  )r   r=   r  r  r$  r  datatyper   arrlenoverflowr   arrlen_multr   dimension_sizeallocsize_multri  r   	align_valr   r   miparytypeclassargtypesr   r   r   shape_arraystrides_arrays                               rC   r)  r)    s%     F

"C$$W]]3H##EJJW0NOH !!%**a0F

1q)H00;&&{A6;;++K;
  ||q	3	*&vabz2NNN7;;wr{NCD 3)*	3	*$SbkNNN7;;wr{NCD *.!AHH ! 	!
 //AN%%na8I{{8%:%:>1%MNH	%	0 	))Z-	
 
1 MME55e<I  y9E##%y%8D


u}}
-C==g/LlEJJEH&&w4PG;;##GW5D##EJJ/F$$W@K&&wFCM3h.A.A.CD$($"$ JA 
1	0s    "N22
O	_allocatec                     S nU$ )zLImplements a Numba-only default target (cpu) classmethod on the array
type.
c                     [        X5      $ rB  )intrin_alloc)clsri  r   s      rC   r    _ol_array_allocate.<locals>.impl  s    I--rE   rt   )r&  ri  r   r   s       rC   _ol_array_allocater(    s    
.KrE   c                 $    U R                  X5      $ )z9Trampoline to call the intrinsic used for allocation
    )r"  )r  r   r   s      rC   r  r    s     T))rE   c                 n    S n[         R                  " [         R                  5      n[        XAU5      nXS4$ )z3Intrinsic to call into the allocator for Array
    c                 F    Uu  pEU R                   R                  XU5      nU$ rB  )r   meminfo_alloc_aligned)r   r=   r%   r   ri  r   r   s          rC   r  intrin_alloc.<locals>.codegen  s%    !++33GNrE   )r   r  r  r%   )r  ri  r   r  r  r\   s         rC   r%  r%    s1    
 

u}}
-C
CE
*C<rE   c           	         S n[        U[        R                  5      (       a%  SnU R                  XU[        R                  5      /nOB[        U[        R
                  5      (       d   eUR                  n[        R                  " XUS9n/ nU H&  nUR                  U" XUR                  U5      5        M(     U R                  U[        R                  S5      n	[        U5       HX  n
UR                  SXz   U	5      n[        R                  " X5         U R                  R!                  U["        S5        SSS5        MZ     U$ ! , (       d  f       Mm  = f)z3
Parse the shape argument to an array constructor.
c                    U R                  [        R                  5      nUR                  n[        R
                  " U5      n[        USUS-
  -  S-
  5      nUR                  U:  a  UR                  X65      nU$ UR                  U:  aq  UR                  SX75      n	UR                  U	SS9   U R                  R                  U[        S5        SSS5        UR                  U:  a  UR                  X65      nU$ UnW$ ! , (       d  f       N5= f)z0Cast src to intp only if value can be maintainedrG   >Fr\  )z#Cannot safely convert value to intpN)r   r   r   rH   r   r  r   sextr  r  r^  r_  r   trunc)
r   r=   src_trh  r   
intp_widthintp_irmaxvalr   	is_largers
             rC   safecast_intp#_parse_shape.<locals>.safecast_intp  s    ''

3\\
**Z('Q*q.%8A$=?;;#,,s,C 
 [[J&++C=I59!!11Z< :
 {{Z'mmC1 
 
 :9s   ,"C==
DrG   r   r   r  )znegative dimensions not allowedN)r   r   r   r   r   rO  r   r
   r   rk   r9   get_constant_genericr8   r  r  r^  r_  r   )r   r=   rE  r   r8  rr   passed_shapesr  r   r   r  is_negs               rC   _parse_shaper=    s   * "emm$$ gB

CD"eoo....xx,,WFFmGaffa@A  ''Q?DT{$$S&+t<  1--%I 21  M 21s   "E
E	c                 ^    UR                   S   nUS   nUR                  nU[        XXE5      4$ )zD
Parse the arguments of a np.empty(), np.zeros() or np.ones() call.
r   )r   r   r=  )r   r=   r\   r   arrshapetypearrshaper  s          rC   _parse_empty_argsrA  .  s5     88A;LAwHooGL<JJJrE   c                    UR                   S   n[        U[        R                  5      (       aJ  [	        U5      " XUS   S9n[
        R                  " XR                  UR                  S9nUR                  U4$ UR                  S4$ )zS
Parse the arguments of a np.empty_like(), np.zeros_like() or
np.ones_like() call.
r   r  r   rt   )
r   r   r   r   r~   r
   r   rg   rr   r   )r   r=   r\   r   arytyper  r  s          rC   r  r  8  so    
 hhqkG'5;;''!'$q'B%%gyyM&&""rE   c                 z    [        U[        R                  5      (       a  SU  S3n[        R                  " U5      eg )NzIf np.z0 dtype is a string it must be a string constant.)r   r   UnicodeTyper	   r   )fnamer   r   s      rC   _check_const_str_dtyperG  F  s:    %**++ugMN  %% ,rE   c                 8    UR                   nU" XU5      nS nXV4$ )Nc                 V    [        XX#5      u  pE[        XXE5      nUR                  5       $ rB  )rA  r)  r   rU  r=   r\   rV  r  r  r  s          rC   r  numpy_empty_nd.<locals>.codegenQ  s(    +ECHUW=}}rE   instance_type)rY  ty_shapety_dtypety_retty_refty_rettyr\   r  s          rC   numpy_empty_ndrR  L  s(    ))H
8|
4C <rE   c                   ^ [        SU5        U[        L dB  [        U[        R                  5      (       a  UR
                  [        L d  [        U5      (       a  [        R                  nO[        U5      n[        U 5      nUb'  Ub$  [        R                  " X#SS9m[        4U4S jjnU$ SU  SU S3n[        R                  " U5      e)NrA  r   r&  c                    > [        XT5      $ rB  )rR  )rg   r   r  s     rC   r   ol_np_empty.<locals>.implf  s    !%66rE   z.Cannot parse input types to function np.empty(r  r  )rG  floatr   r   Function
typing_keyr   doublety_parse_dtypety_parse_shaper   r	   r   )rg   r   nb_dtyperr   r   r   r  s         @rC   ol_np_emptyr]  X  s    7E*	E5>>	*	*u/?/?5/H<<!%(% D 0(cB# 	7>ugRwaP  %%rE   c                 8    UR                   nU" XU5      nS nXV4$ )Nc                 V    [        XX#5      u  pE[        XXE5      nUR                  5       $ rB  )r  r)  r   rJ  s          rC   r  $numpy_empty_like_nd.<locals>.codegens  s(    0MUW=}}rE   rL  )rY  ty_prototyperO  rP  rQ  r\   r  s          rC   numpy_empty_like_ndrb  n  s(    ))H
<<
8C <rE   c                   ^ [        SU5        [        U5      (       d  [        U5      nO.[        U [        R
                  5      (       a  U R                  nOU nUbg  [        U [        R
                  5      (       a/  U R                  S:w  a  U R                  OSnU R                  X#SS9mO8[        R
                  " USS5      mOSU  SU S	3n[        R                  " U5      eSU4S
 jjnU$ )Nr  r  r   F)r   r+  r  r   z3Cannot parse input types to function np.empty_like(r  r  c                    > [        XT5      $ rB  )rb  )r9  r   r  s     rC   r   ol_np_empty_like.<locals>.impl  s    "3u55rE   rB  )rG  r   rZ  r   r   r   r   r+  r  r	   r   )r9  r   r\  r+  r   r   r  s         @rC   ol_np_empty_likerf  z  s    </u!%(	C	%	%99c5;;''#&::#4SZZ#FHH8UHKEKK!S1E  #uBugQ0  %%6KrE   c                 :    [         R                  " U5      nS nX#4$ )Nc                     [        UR                  S   5      " XUS   5      n[        R                  " XR                  UR                  UR                  UR                  5      S5        g r   )r~   r   r
   r  r   r   r   r   )rU  r=   r\   rV  r  s        rC   r  (_zero_fill_array_method.<locals>.codegen  sI    !%efQi@w'++cllCJJ*O	rE   )r   r  )rY  rZ   r\   r  s       rC   _zero_fill_array_methodrj    s    
**T
C <rE   
_zero_fillc                     S nU$ )z?Adds a `._zero_fill` method to zero fill an array using memset.c                     [        U 5        g rB  )rj  ri  s    rC   r    ol_array_zero_fill.<locals>.impl  s
    %rE   rt   )rZ   r   s     rC   ol_array_zero_fillro    s    &KrE   c                 2    [        SU5        [        4S jnU$ )Nr  c                 N    [         R                  " XS9nUR                  5         U$ Nr?  )r  rA  rk  )rg   r   r9  s      rC   r   ol_np_zeros.<locals>.impl  s    hhu*
rE   )rG  rV  rg   r   r   s      rC   ol_np_zerosru    s    7E*  KrE   c                 (    [        SU5        SS jnU$ )N
zeros_likec                 N    [         R                  " XS9nUR                  5         U$ rr  )r  r  rk  )r7  r   r9  s      rC   r   ol_np_zeros_like.<locals>.impl  s    mmA+
rE   rB  rG  rh  s      rC   ol_np_zeros_liker{    s    </ KrE   c                 (    [        SU5        SS jnU$ )N	ones_likec                     [         R                  " XS9nUR                  n[        [	        U5      5       H  nSX4'   M	     U$ Nr?  rG   r  r  r  r8   r   )r7  r   r9  arr_flatr   s        rC   r   ol_np_ones_like.<locals>.impl  s8    mmA+88X'CHM (
rE   rB  rz  rh  s      rC   ol_np_ones_liker    s    ;. KrE   c                 l   ^ [        SU5        [        U5      (       d  [        U5      mOUmSU4S jjnU$ )Nfullc                    > [         R                  " U T5      nUR                  n[        [	        U5      5       H  nXU'   M	     U$ rB  r  rA  r  r8   r   )rg   
fill_valuer   r9  r  r   r\  s         rC   r  impl_np_full.<locals>.full  s;    hhuh'88X'C&SM (
rE   rB  )rG  r   rZ  )rg   r  r   r  r\  s       @rC   impl_np_fullr    s3    65)u!%( KrE   c                 (    [        SU5        SS jnU$ )Nr  c                     [         R                  " X5      nUR                  n[        [	        U5      5       H  nXU'   M	     U$ rB  r  )r7  r  r   r9  r  r   s         rC   r  $impl_np_full_like.<locals>.full_like  s8    mmA%88X'C&SM (
rE   rB  rz  )r7  r  r   r  s       rC   impl_np_full_liker    s    ;. rE   c                 (    [        SU5        SS jnU$ )Nonesc                     [         R                  " XS9nUR                  n[        [	        U5      5       H  nSX4'   M	     U$ r  r  )rg   r   r9  r  r   s        rC   r   ol_np_ones.<locals>.impl  s8    hhu*88X'CHM (
rE   rB  rz  rt  s      rC   
ol_np_onesr    s     65) KrE   c                    ^ [        SU5        [        U5      (       d  [        U5      mO[        R                  mSU4S jjnU$ )Nidentityc                 h   > [         R                  " X 4T5      n[        U 5       H	  nSX#U4'   M     U$ r  )r  r  r8   )rE  r   r9  ro   r\  s       rC   r  "impl_np_identity.<locals>.identity  s3    hhvx(qAC1I 
rE   rB  )rG  r   rZ  r   rY  )rE  r   r  r\  s      @rC   impl_np_identityr    s7    :u-u!%(<<
 OrE   c                     g rB  rt   NMs     rC   _eye_none_handlerr  	  r]  rE   c                 T    [        U[        R                  5      (       a  S nU$ S nU$ )Nc                     U $ rB  rt   r  s     rC   r   $_eye_none_handler_impl.<locals>.impl      HrE   c                     U$ rB  rt   r  s     rC   r   r    r  rE   )r   r   r  )r  r  r   s      rC   _eye_none_handler_implr    s)    !U^^$$	
 K	KrE   c                 X  ^ Ub  [        U[        R                  5      (       a  [        R                  " [
        5      mO\[        U[        R                  [        R                  45      (       a  [        [        USU5      5      mO[        R                  " U5      mS S[
        4U4S jjnU$ )Nr   r   c                    > [        X5      n[        R                  " X4T5      nUS:  a*  [        XU-
  5      n[	        U5       H  nSXWXr-   4'   M     U$ [        X-   U5      n[	        U5       H  nSXWU-
  U4'   M     U$ r  )r  r  r  r  r8   )	r  r  r   r   _Mr9  dro   r  s	           rC   r   numpy_eye.<locals>.impl#  s    q$hhw#6AAvA1X !quH  
 AE2A1X !E1H 
rE   )
r   r   r  r  r   rV  	DTypeSpecr  r   rl  )r  r  r   r   r   r  s        @rC   	numpy_eyer    st     }
5%..99XXe_	EEOOU\\:	;	;geWe45XXe_!5  KrE   c                     [        U 5      (       d  [        R                  " S5      e[        U [        R
                  5      (       a-  U R                  S;  a  [        R                  " S5      eSS jnU$ g )N#The argument "v" must be array-like)rG   rb  zInput must be 1- or 2-d.c                 b   U R                   S:X  a  U R                  nUS   [        U5      -   n[        R                  " X34U R
                  5      nUS:  a   [        X1-
  5       H  nX   XEX-   4'   M     U$ [        X1-   5       H  nX   XEU-
  U4'   M     U$ U R                  u  pgUS:  a  Xa-   nUS:  a  Xq-
  n[        [        Xg5      S5      n[        R                  " X0R
                  5      nUS:  a  [        U5       H  nXX-   4   XE'   M     U$ [        U5       H  nXU-
  U4   XE'   M     U$ r  )
rr   rg   r#  r  r  r   r8   r  r  rA  )r   r   r   rE  r  ro   rowscolss           rC   	diag_implimpl_np_diag.<locals>.diag_impl;  s,   vv{GGaD3q6Mhhvqww/6"15\()quH *
 
 #15\()E1H *
WW
q58Dq58DD+hhq''*6"1X!"ae8 &
 
 #1X!"q5!8 &
rE   r  )r   r	   r   r   r   r   rr   NumbaTypeError)r   r   r  s      rC   impl_np_diagr  2  s`    A  !FGG!U[[!!66''(BCC	6 ? "rE   c                 (  ^^ [        U [        R                  5      (       d  Sn[        R                  " U5      e[        U R
                  [        R                  5      (       d  Sn[        R                  " U5      e[        U 5      mST-  mUU4S jnU$ )Nz5The argument "dimensions" must be a tuple of integersr  c                    > [         R                  " T4U -   [         R                  S9nSnU  HH  n[         R                  " U[         R                  S9R	                  [        TX#5      5      nXAU'   US-  nMJ     U$ )Nr?  r   rG   )r  rA  r  aranger  r/   )
dimensionsr   ro   r  r   r  rg   s        rC   r   numpy_indices.<locals>.implf  so    hhtj(9C))Crxx088eQ,C FFA  
rE   )r   r   r  r	   r   r   r   r   )r  r   r   r  rg   s      @@rC   numpy_indicesr  Y  su    j%..11E  %%j&&66E  %%JA1HE
 KrE   c                     [        U 5      (       d  Sn[        R                  " U5      e[        U[        [
        R                  45      (       d  Sn[        R                  " U5      eSS jnU$ )Nr  z#The argument "k" must be an integerc                 f   [         R                  " U 5      n U R                  5       n [        U 5      n[	        U5      nX#-   n[         R
                  " XD4U R                  5      n[         R                  " SU* 5      n[         R                  " SU5      n[        U5       H  nX   XVU-   Xx-   4'   M     U$ r   )	r  r  r  r   r#  r  r   maximumr8   )	r   r   r   abs_krE  r   ro   jts	            rC   r   numpy_diagflat.<locals>.impl  s    JJqMGGIFAIhhvqww'JJq1"JJq!qA !CAqu  
rE   r  )r   r	   r   r   r   r   r   )r   r   r   r   s       rC   numpy_diagflatr  u  s[    A3  %%a#u}}-..3  %% KrE   c                 ~   US;   d   eUS:X  a6  Sn[        SU 5       H#  nSU-  nUSU SSR                  U5       S	3-  nM%     O5S
n[        SU 5       H#  nSU-  nUSU SSR                  U5       S3-  nM%     [        R                  " U5      n[	        U[        5       5        [        5       SU 3   n[        U5      $ )N)r  r  r  zv
            def _getitem(a, idx, axis):
                if axis == 0:
                    return a[idx, ...]
        rG   ):z
                elif axis == z:
                    return a[r  z, idx, ...]
            z|
            def _setitem(a, idx, axis, vals):
                if axis == 0:
                    a[idx, ...] = vals
        z:
                    a[z, idx, ...] = vals
            r1  )r8   r  textwrapdedentexecglobalsr'   )rr   r  r  ro   lsts        rC   "generate_getitem_setitem_with_axisr    s    ))))y
 q$A1*C S !"iin- . B   q$A1*C S !yy~& ' B   
	BWY	Qtf:	BBrE   takec                   ^^^^^	 [         R                  " U5      (       a  [        U [        R                  5      (       a&  [        U[        R
                  5      (       a  SS jnU$ [        U [        R                  5      (       a8  [        U[        R                  5      (       a  UR                  S:H  mSU4S jjnU$ [        U [        R                  5      (       a7  [        U[        R                  [        R                  45      (       a  SS jnU$ g g [        U [        R                  5      (       aJ  [        U[        R
                  5      (       a+  SU R                  S-
  -  m	[        U	4S j5       mSU4S jjnU$ [        U [        R                  5      (       an  [        U[        R                  [        R                  [        R                  45      (       a/  U R                  n[        US	5      m[        US
5      mSUU4S jjnU$ g g )Nc                     XR                   S-
  :  d  XR                   * :  a  [        S5      eU R                  5       U   $ )NrG   Index out of bounds)r   
IndexErrorr  )r7  r   r   s      rC   	take_implnumpy_take.<locals>.take_impl  s8    ffqj)Ww->$%:;;wwy))rE   r  c                   > [         R                  " UR                  U R                  S9nT	(       a  UR	                  5       nOUn[         R
                  " U5      nSnU R                  5       nU H;  nXR                  S-
  :  d  XR                  * :  a  [        S5      eXx   X6'   US-   nM=     UR                  UR                  5      $ )Nr?  r   rG   r  )
r  rA  r   r   r  r8  r  r  r  rg   )
r7  r   r   r  walkeritro   r  r|  F_orders
            rC   r  r    s    hhw||177;$\\^F$FYYv&wwyAFFQJ'1w;()>??!WCFAA	 
 {{7==11rE   c                 Z    [         R                  " U5      n[         R                  " X5      $ rB  )r  r   r  )r7  r   r   converts       rC   r  r    s    ((7+wwq**rE   r  rG   c                 R  > [        T5      nSnU[        U R                  5      :  a  U R                  U   S:X  d   U R                  5       e[        [        U R                  5      5       H*  nU R                  U   nXA:w  d  M  [	        X#U5      nUS-  nM,     U R                  U5      $ r  )r   r   rg   r8   r/   r  )r  r   rL  r  r   r   r  s         rC   _squeezenumpy_take.<locals>._squeeze  s    Ahc!''l*qwwt}/AJ177JA QWW.CA{+CA6Q	 /
 yy~%rE   c                    > [         R                  " X4US9nU R                  S:X  a  US   $ US:  a  X R                  -  nT" X25      $ )Nr  rG   r   )r  r  rr   )r7  r   r   r  r  s       rC   r  r    sF    GGAz566Q;Q4K!8FFND((rE   r  r  c                 p  > US:  a  X R                   -  nUS:  d  X R                   :  a  SU SU R                    3n[        U5      e[        U R                  U[	        U5      5      n[
        R                  " X@R                  S9n[        [	        U5      5       H  nT" XU   U5      nT	" XVX'5        M     U$ )Nr   zaxis z) is out of bounds for array of dimension r?  )	rr   r   r/   rg   r   r  rA  r   r8   )
r7  r   r   r   rg   r   ro   r}  _getitem_setitems
           rC   r  r    s    !8FFND!8tvv~"4& )++,66(4C$S/)%aggtS\BhhuGG4s7|,A AJ5AST- - 
rE   rB  )r
   r   r   r   r   r   r+  rJ  rO  rr   r'   r  )
r7  r   r   r  rr   r  r  r  r  r  s
        @@@@@rC   
numpy_taker    s    4  a%%*Wemm*L*L* a%%*Wekk*J*Jnn+G2 a%%7UZZ$ABB+ 	 C & a%%*Wemm*L*L
#A
 	& 	&) a%%7U[[%**eoo$NOO66D9$	JH9$	JH  - P &rE   c                     U  Vs/ s H&  n[        U[        R                  5      (       a  M$  UPM(     nn[        S U 5       5      (       a  [        R                  nU$ [        S U 5       5      (       a  [        R
                  nU$ [        [        SS[        R                  " [        5      R                  -  -  5      nU Vs/ s H  n[        R                  " U5      PM     nn[        Xd/-   5      nU$ s  snf s  snf )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  rU  rD  r7  s     rC   rF   _arange_dtype.<locals>.<genexpr>  s     
8A:a''rH  c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  )r   r   Floatr  s     rC   rF  r    s     8AZ5;;''rH  zint%sr  )r   r   r  rI  
complex128r   rl  r  r   r   r   	unliteralr  )r   r7  boundsr   NPY_TYr|  unliteral_boundss          rC   _arange_dtyper    s    CAZ5>>%BaFC

8
888  & L% 
88	8	8" L 1rxx}/E/E+E FG 9??1EOOA.?$y01L- D& @s   #C4C4 C9c          	      *  ^^^^	^
 [        U[        R                  5      (       a  UR                  n[        U[        R                  5      (       a  UR                  n[        U[        R                  5      (       a  UR                  nUc  [        R                  nUc  [        R                  nUc  [        R                  n[        U [        R
                  5      (       a  [        U[        R                  [        R
                  45      (       a^  [        U[        R                  [        R
                  45      (       a/  [        U[        R                  [        R                  45      (       d  g [        U[        R                  5      (       a  [        XU5      m	OUR                  m	[        XU4 Vs/ s H  n[        U[        R                  5      PM     sn5      m
[        U SS 5      m[        USS 5      m[        USS 5      mSUUUU	U
4S jjnU$ s  snf )Nr   c                  > Tb  TOU nTb  TOUnTb  TOUnUb  UOSnUc  SUpOXEpUS:X  a  [        S5      eX-
  U-  n
[        [        R                  " U
R                  5      5      nTSL a?  [        [        R                  " U
R
                  5      5      n[        [        X5      S5      nO[        US5      n[        R                  " UT5      nUn[        U5       H  nUUU-  -   UU'   M     U$ )NrG   r   zMaximum allowed size exceededT)r   r   mathceilr\  r^  r  r  r  rA  r8   )r&  r  r  r   	lit_startlit_stoplit_step_step_start_stopnitems_cnitems_rnitems_ir   r9  r   ro   start_value
step_value
stop_value
true_dtypeuse_complexs                    rC   r   np_arange.<locals>.implL  s    #.#:K	!+!7:T!+!7:T$0ayE%EA:<==Ne+tyy/0 $499X]]34HX0!4F1%Fhhvz*vAAI&CF 
rE   r  )r   r   Optionalr9   r  r  r  r  r  r   rI  rV  rl  )r&  r  r  r   r|  r   r  r  r  r  r  s         @@@@@rC   	np_aranger  )  s{   $''yy$''yy%((

|zz|zz}

uell++tennell;<<tennell;<<55>>5??"CDD%(("55
[[
!&d 35 31 "!U]]3 35 6K %$7K5J5J < KK5s   0$Hc                   ^ [        S X4 5       5      (       d  g [        U[        [        R                  45      (       d  Sn[
        R                  " U5      e[        S X4 5       5      (       a7  [        R                  (       a  [        R                  mO![        R                  mO[        R                  mSU4S jjnU$ )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  )r   r   r  rW  s     rC   rF  !numpy_linspace.<locals>.<genexpr>o  s     Fz#u||,,rH  rS  c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  rU  rW  s     rC   rF  r  v  rY  rH  c                    > [         R                  " UT5      nU S-  n US-  nUS:X  a  U$ US-
  nUS:  a7  X-
  n[         R                  " XT5      n[        SU5       H  nXU-  -   X7'   M     OXS'   US:  a  XS'   U$ )Ng      ?r   rG   rH  )r  rA  divider8   )	r&  r  rM  r9  divdeltar  ro   r   s	           rC   rK   numpy_linspace.<locals>.linspace  s    hhsE" cz!8JAg7LE99U(D1c]d(+ # F7G
rE   rO  )r  r   r   r   r   r	   r   rI  r   USE_LEGACY_TYPE_SYSTEMr  np_complex128r   )r&  r  rM  r   rK  r   s        @rC   numpy_linspacer  m  s    FFFFcC/005  %%

Ce]
CCC(($$E''E, OrE   c           
         UR                   S   n[        U5      " XUS   S9n[        R                  " XR                  5      nUR
                  n[        XXv5      nUR                  n	UR                  n
UR                  S;   d   eUR                  UR                  :X  a,  [        R                  " XXR                  UR                  SS9  O[        R                  " XR                  5      n[        R                  " XR                  5      nU R                  [        R                  5      n[        R                   " XU5       n[        R"                  " XU	XkUR                  U5      n[        R"                  " XU
XlUR                  U5      nUR%                  UR'                  U5      U5        SSS5        [)        XUR
                  UR+                  5       5      $ ! , (       d  f       N3= f)z
Array copy.
r   r  r7  rG   r   N)r   r~   r
   r   rg   r   r)  r   r+  
raw_memcpyr   r   r   r   r   r   rg  r*  r  r>   r"   r   )r   r=   r\   r   rC  r  r  rettyper  rY  r  r[  r
  r   r   rQ  rj  s                    rC   _array_copyr    sx    hhqkG
W
gd1g
>C!!'995FooG
7
;CxxHI>>T!!!~~'7x<<q	2 **7KK@++G[[A''

3w77//(0607IG 0091718JH MM',,w/: 8 Gcoos}}OO 87s   A*G
G&c                     [        U[        R                  5      (       d   eUR                  S:X  a  SOSnUR	                  USS9nU" U5      nU[
        4$ )Nr  r   F)r+  r  )r   r   r   r+  r  r  )r  r7  r+  r  r\   s        rC   _array_copy_intrinsicr    sP    a%%%%HHOSF
&&&
/C
a&CrE   z
array.copyc                     [        XX#5      $ rB  )r  r   s       rC   
array_copyr    s    w33rE   c                 J    [        U [        R                  5      (       a  S nW$ )Nc                     [        U 5      $ rB  )r  r  s    rC   
numpy_copy#impl_numpy_copy.<locals>.numpy_copy  s    (++rE   rC  )r7  r  s     rC   impl_numpy_copyr    s    !U[[!!	,rE   c           	      X   UR                   nUR                  S   nUR                  U:X  d   S5       eUR                  S:X  a  UR                  S:X  d   e[	        U5      " XUS   S9n[	        U5      " X5      nU R                  U[        R                  " [        R                  S5      S5      n	U R                  U[        R                  " [        R                  S5      UR                  45      n
[        XR                  XUR                  UR                  UR                  5        [        XXXR!                  5       5      $ UR                  UR                  :X  d   UR                  S:X  a  UR                  S;   a  [        XXSS   5      $ UR                  S:X  a  US;   d   eUS:X  a  ["        O[$        n['        UU UUUS   5      nUR)                  U5       u  pU   [        XUUS   5      nUR*                  nS	S	S	5        U   [-        XX#5      nUR*                  nS	S	S	5        S	S	S	5        UR/                  WR0                  5      nUR3                  UW5        UR3                  WW5        U$ [-        XX#5      $ ! , (       d  f       N= f! , (       d  f       Nt= f! , (       d  f       N}= f)
zX
Common logic for layout conversion function;
e.g. ascontiguousarray and asfortranarray
r   z return-type has incorrect layoutrG   r  r  r7  r  r   N)r   r   r+  rr   r~   r:  r   r  r   r  r   r   r   r   r   r!   r   r   r   r  rO  blockr  phir9   add_incoming)r   r=   r\   r   output_layoutr  r   r  r  rg   r   
check_funcr  thenorelseout_thenthen_blk
out_orelse
orelse_blkret_phis                       rC   _as_layout_arrayr&    s:   
 OOEHHQKE<<=(L*LL(zzQzzQQ@1,,U^^EJJ2D
 $$W%*^^EJJ%B&)ll_6 	sHHecll{{CJJ	0 5--/JJ
,,%,,
&

aELLD$8 5q'BB <<3 !D(((*73*>JJ.z/6/6/4/3Aw	8I
 +~0515a :H&}}H 
 !,Ws!IJ!(J  , kk(--0G  84  Z8N w;;! T
 V ,+s<   JI99
JJ
J9
J	J

J	J
J)c                    ^ [        T[        R                  5      (       d  [        R                  " T5      eUR                  TR                  [        UR                  S5      S9nU" UT5      nUU4S j4$ )NrG   )r+  rr   c                 .   > [        XX#TR                  S9$ )N)r  )r&  r   )r  r  r   r7  r  s       rC   r  ,_as_layout_array_intrinsic.<locals>.<lambda>  s    #3	a-"="=$?rE   )	r   r   r&   r	   RequireLiteralValuer  r   r  rr   )r  r7  r  r  r\   s     `  rC   _as_layout_array_intrinsicr+    sg    mU%8%899((77
&&33#affa.&
IC
a
C ? ? ?rE   c                     [        U 5      (       d  [        R                  " S5      e[        U [        R
                  [        R                  45      (       a  S nU$ [        U [        R                  5      (       a  S nW$ )Nr  c                 V    [         R                  " [         R                  " U 5      5      $ rB  )r  ascontiguousarrayr   r  s    rC   r   %array_ascontiguousarray.<locals>.impl&  s    ''44rE   c                     [        U S5      $ Nr   r+  r  s    rC   r   r/  )      -a55rE   r   r	   r   r   r   r  r  r   r.  s     rC   array_ascontiguousarrayr5     sb    A  !FGG!ellEMM344	5
 K 
Au{{	#	#	6KrE   c                     [        U 5      (       d  [        R                  " S5      e[        U [        R
                  [        R                  45      (       a  S nU$ [        U [        R                  5      (       a  S nU$ g )Nr  c                 V    [         R                  " [         R                  " U 5      5      $ rB  )r  asfortranarrayr   r  s    rC   r   "array_asfortranarray.<locals>.impl4  s    $$RXXa[11rE   c                     [        U S5      $ )Nr  r2  r  s    rC   r   r9  8  r3  rE   r4  r.  s     rC   array_asfortranarrayr;  .  sc    A  !FGG!ellEMM344	2	Au{{	#	#	6 
$rE   zarray.astypec           
      d   UR                   S   n[        U5      " XUS   S9n[        R                  " XR                  5      nUR
                  n[        XXv5      nUR                  n	UR                  n
[        R                  " XR                  5      n[        R                  " XR                  5      nU R                  [        R                  5      n[        R                  " XU5       n[        R                  " XU	XkUR                  U5      n[        R                  " XU
XlUR                  U5      n[        XXO5      nU R!                  UUUR"                  UR"                  5      n[%        XUUU5        S S S 5        ['        XUR
                  UR)                  5       5      $ ! , (       d  f       N3= fr  )r   r~   r
   r   rg   r   r)  r   r   r   r   r   rg  r*  r+  r   r   r   r   r"   r   )r   r=   r\   r   rC  r  r  r  r  rY  r  r[  r
  r   r   rQ  rj  items                     rC   array_astyper>  =  sT    hhqkG
W
gd1g
>C!!'995FooG
7
;CxxHI&&w<K''=L##EJJ/F			7F	3w++Gh,2,3NNGE ,,Wy-3-4^^WF 7<||GT7=='--H7WdH= 
4 Gcoos}}OO 
4	3s   )BF!!
F/c                 8    UR                   nU" XU5      nS nXV4$ )Nc           
         UR                   S   nUR                  n[        U5      " XUS   S9n[        U5      nU" X5      nUR                  n	[	        X5      n
[        UR                  R                  U
5      nUR                  UR                  UR                  5      nUR                  X5      n[        R                  " X5      nUR                  USS9   SnU R                  R                  U[         U45        S S S 5        [        R"                  " XR%                  X5      /5      n[        R"                  " X/5      nUR'                  UR(                  U R+                  U	R-                  S5      5      5      n[/        UUUUUUR0                  UR2                  S9  UR5                  5       n[7        XUR                  U5      $ ! , (       d  f       N= f)Nr   r  Fr\  z.buffer size must be a multiple of element sizer   r8  )r   r   r~   r   r   r   r   r9   r   r   sremr
   is_not_nullr  r^  r_  r   rl   sdivra  r   r   r   r   r   r   r   r!   )r   r=   r\   r   buftyr   r  
out_ary_tyout_aryout_datamodelr   ll_itemsizer~  remis_incompatibler   rg   r   r   r   s                       rC   r  np_frombuffer.<locals>.codegena  s   Q@&
W.**/s||00(;SZZ6 ll6/!--g;___U_;BC--gzC6J < ""7\\&-N,OP$$Wm<HHg,,]-C-CF-KL
 	w "& +"{{!jj	+ ! 3??CHH' <;s   %G
GrL  )r  bufferr   r  rE  r\   r  s          rC   np_frombufferrM  \  s*    			B
VE
"C#IH <rE   c                 .  ^ [        SU5        [        U [        R                  5      (       a  U R                  S:w  a  SU  3n[
        R                  " U5      eU[        L dB  [        U[        R                  5      (       a  UR                  [        L d  [        U5      (       a  [        R                  nO[        U5      nUb'  [        R                  " USSU R                  (       + S9mOSU  SU S3n[
        R                  " U5      e[        4U4S	 jjnU$ )
N
frombufferr   z+Argument "buffer" must be buffer-like. Got rG   )r   rr   r+  r  z3Cannot parse input types to function np.frombuffer(r  r  c                    > [        XT5      $ rB  )rM  )rL  r   r  s     rC   r    impl_np_frombuffer.<locals>.impl  s    VE22rE   )rG  r   r   r  r+  r	   r   rV  rW  rX  r   rY  rZ  r   r  )rL  r   r   r\  r   r  s        @rC   impl_np_frombufferrR    s    </fell++v}}/C;F8D  %%	E5>>	*	*u/?/?5/H<<!%((3)/%79  &xr%3  %%  3KrE   c                    ^ [        U5      (       a  [        SS 5      mSU4S jjnU$ [        U[        R                  5      (       a  [        SU5      mSU4S jjnU$ g )Nr   c                    > T" X5      $ rB  rt   rm   rg   r   intrinsic_cfarrays      rC   r   impl_carray.<locals>.impl      $S00rE   c                    > T" X5      $ rB  rt   rU  s      rC   r   rW    rX  rE   rB  r   get_cfarray_intrinsicr   r   r  rm   rg   r   r   rV  s       @rC   impl_carrayr]    R    51#t<	1	E5??	+	+1#u=	1 
,rE   c                    ^ [        U5      (       a  [        SS 5      mSU4S jjnU$ [        U[        R                  5      (       a  [        SU5      mSU4S jjnU$ g )Nr  c                    > T" X5      $ rB  rt   rU  s      rC   r   impl_farray.<locals>.impl  rX  rE   c                    > T" X5      $ rB  rt   rU  s      rC   r   ra    rX  rE   rB  rZ  r\  s       @rC   impl_farrayrc    r^  rE   c                 *   ^ ^ [         UU 4S j5       nU$ )Nc                   > U[         R                  L a  S nOH[        U[         R                  5      (       a  UR                  nOSU S3n[
        R                  " U5      eT	c  Uc  Sn[
        R                  " U5      eUnOo[        T	[         R                  5      (       a4  T	R                  nUb$  XS:w  a  SU SU S3n[
        R                  " U5      eOST	 S3n[
        R                  " U5      e[        U5      nUc  SU S3n[
        R                  " U5      e[         R                  " XVT
5      n[        XqU5      nU[        4$ )Nz pointer argument expected, got ''z*explicit dtype required for void* argumentzmismatching dtype 'z' for pointer type 'zinvalid dtype spec 'zinvalid shape ')r   r  r   CPointerr   r	   r  r  r[  r   r%   
np_cfarray)r  rm   rg   	ptr_dtyper   r   rr   r  r\   dtype_r+  s            rC   rV  0get_cfarray_intrinsic.<locals>.intrinsic_cfarray  s2   %--IU^^,,		I4SE;C'',,> B++C00E00LLE$);+E72Fse1M++C00(2C'',,e$<#E7!,C'',,E0E*JrE   r*   )r+  rj  rV  s   `` rC   r[  r[    s     > rE   c           
         UR                   SS u  pEUSS u  pgUR                  nUR                  S;   d   e[        U5      " X5      n	[	        X5      n
[
        R                  " U
5      n[        U[        R                  5      (       a  [
        R                  " X5      nOU4nU4n[        X\5       VVs/ s H&  u  pU R                  XU[        R                  5      PM(     nnnUn/ nUR                  S:X  a-  U H&  nUR                  U5        UR                  UU5      nM(     OE[!        U5       H&  nUR                  U5        UR                  UU5      nM(     UR#                  5         UR%                  UU R'                  UR(                  5      R+                  5       5      n[-        U	UUUUSS9  U	R/                  5       n[1        XUR                  U5      $ s  snnf )zF
numba.numpy_support.carray(...) and
numba.numpy_support.farray(...).
Nrb  r7  r  r'  )r   r   r+  r~   r   r
   r   r   r   rO  r   r   r   r   rk   r   r%  r  ra  r   r   r)  r   r   r"   )r   r=   r\   r   rX  r  rm   rg   r   rF  r   rH  r  r  r  offr   r   r   r   s                       rC   rh  rh    s   
 XXbq\NEbqJCOOE<<41GG+H..*K'5??++%%g5*#&w#79#7-& ll765::>#7  9 CG||sANN3++c1%C  &!ANN3++c1%C " 	??3"00=HHJLD 7"' 


CGcoosCC99s   3-Gc                 B   [        U[        R                  5      (       a)  U R                  [        R                  [        U5      5      $ [        U[        R                  5      (       a7  U R                  [
        [        [        R                  U5      5      nU" X45      $  erB  )	r   r   rO  r   r   r   r  rR   r%   )r   r=   seqtyseqr  s        rC   _get_seq_sizerr    sn    %))##EJJE
;;	E5>>	*	*''Yuzz5-JK((qrE   c                    ^ ^^ UR                   mT R                  [        R                  [	        TU[
        R                  5      5      mU UU4S jnU$ )zC
Return a getitem() implementation that doesn't incref its result.
c                 t   > T" X5      nTR                   (       a  TR                  R                  U TU5        U$ rB  )r   r   decref)r=   r   r  r   r   r  s      rC   wrap$_get_borrowing_getitem.<locals>.wrap.  s1    7)KKws3
rE   )r   rR   r  r  r%   r   r   )r   rp  rv  r   r  s   `  @@rC   _get_borrowing_getitemrx  &  sC     KKE''(8(8(1%

(KML KrE   c           	        ^ ^^ T R                  [        R                  5      n[        US5      mUU U4S jn/ nX4p[	        U5       H/  n
U
S:  a
  U" X5      u  pUR                  [        T TX5      5        M1     [        U5      $ )z>
Compute the likely shape of a nested sequence (possibly 0d).
r   c                    > [        U [        R                  5      (       a'  [        U 5      S:X  a  gU S   TR	                  US5      4$ [        TU 5      nU R                  U" TUT45      4$ )Nr   NN)r   r   rO  r   rV  rx  r   )rp  rq  r   r=   r   r   s      rC   get_first_item.compute_sequence_shape.<locals>.get_first_item>  sd    eU__--5zQ!Qx!6!6sA!>>>1'5AL;;WsDk BBBrE   )r   r   r   r   r8   rk   rr  r   )r   r=   rr   rp  rq  r   r|  r  innertyinnerro   r   s   ``         @rC   compute_sequence_shaper  7  sy     ##EJJ/FFADC FU4[q5+G;NGmGWgEF 
 =rE   c                 >   ^ ^^^ UU 4S jmUUUU 4S jmT" X#U5        g)z7
Check the nested sequence matches the given *shapes*.
c                  H   > TR                   R                  T [        S5        g )N)zincompatible sequence shape)r^  r_  r   )r=   r   s   rC   _fail#check_sequence_shape.<locals>._failZ  s    ))':*J	LrE   c                   > [        U5      S:X  a  g [        TTX5      nUS   nTR                  SX45      nTR                  USS9   T" 5         S S S 5        [        U5      S:X  a  g [	        U [
        R                  5      (       aY  [        TU 5      n[        R                  " TU5       nU R                  nU" TXR                  45      n	T" XUSS  5        S S S 5        g [	        U [
        R                  5      (       a=  [        [        U 5      5       H$  n
X
   nTR                  X5      n	T" XUSS  5        M&     g  U 5       e! , (       d  f       N= f! , (       d  f       g = f)Nr   r[  Fr\  rG   )r   rr  r  r  r   r   r  rx  r
   r  r   r   rO  r8   rV  )rp  rq  r  r   expectedrz  r   r  r~  r  ro   r  r=   check_seq_sizer   s              rC   r  ,check_sequence_shape.<locals>.check_seq_size^  s3   v;!Wgu:!9&&tT<__Xe_4G 5 v;!eU^^,,1'5AL""7D1T++$WsJJ.?@wvabz: 21
 u//3u:&(--c5wvabz: ' eO1) 54 21s   E(-E
E
E Nrt   )r   r=   rp  rq  r  r  r  s   ``   @@rC   check_sequence_shaper  U  s    
L : 5v&rE   c                 P   ^ ^^^^^^^	 UUU UUU4S jm	UU	UU 4S jmT" XgTS5        g)z`
Assign a nested sequence contents to an array.  The shape must match
the sequence's structure.
c                    > [         R                  " TTTTT	TR                  U SS9nTR                  TX!TR                  5      n[        TTTX#5        g rf  )r
   r*  r+  r   r   r   )
r   rR  r   rm   r8  r=   r   r   r  r   s
       rC   assign_item-assign_sequence_to_array.<locals>.assign_item  sM    ''$(-g%Qll7C<7GUC5rE   c                   > [        U5      S:X  a;  [        U [        R                  [        R                  45      (       a   eT" X0U5        g US   n[        U [        R                  5      (       ag  [        TU 5      n[        R                  " TU5       nU R                  nU" TXR                  45      nT" XxUSS  X6R                  4-   5        S S S 5        g [        U [        R                  5      (       aa  [        [        U 5      5       HH  n	X	   nTR                  X5      nTR                  [        R                  U	5      n
T" XxUSS  X:4-   5        MJ     g  U 5       e! , (       d  f       g = fr  )r   r   r   r  rO  rx  r
   r  r   r   r8   rV  r   r   )rp  rq  r  r   r   r   r  r~  r  ro   r   assignr  r=   r   s              rC   r  (assign_sequence_to_array.<locals>.assign  s1   v;!!%%..%//)JKKKK,ayeU^^,,1'5AL""7D1T++$WsJJ.?@wvabz7jj]3JK 21
 u//3u:&(--c5,,UZZ;wvabz7X3EF	 ' eO1 21s   ;E
E,rt   Nrt   )
r   r=   r   r  r   r8  rp  rq  r  r  s
   ``````  @@rC   assign_sequence_to_arrayr  ~  s%    6 6 2 5vr"rE   c                     [        X5      u  p4[        U5      (       a  UnO[        U5      nUc  g [        R                  " X#S5      $ r1  )r4   r   rZ  r   r   )r  r  r   rr   	seq_dtypes        rC   np_array_typerr    sA    ,Y?OD5u%=;;uC((rE   c                 N    [        SU5        [        XU5      nU" X5      nS nXE4$ )Nr   c           
      Z   UR                   nUR                  nUR                  S   nUS   n[        XXVU5      n[	        U5      U:X  d   e[        XXgU5        [        XXH5      n	[        XU	R                  UU	R                  XFU5        [        XUR                   U	R                  5       5      $ r   )r   rr   r   r  r   r  r)  r  r   r   r"   r   )
r   r=   r\   r   r8  rr   rp  rq  r  r9  s
             rC   r  np_array.<locals>.codegen  s    zz1g'$sK6{d"""Wu6BWu= 388V!$eC	A  #// #1 	1rE   )rG  r  )r  objr   r  r\   r  s         rC   np_arrayr    s0    7E*

/C
c/C1" <rE   c                     [        SU5        [        U 5      (       d  [        R                  " S5      e[	        U5      (       d$  [        U5      c  Sn[        R                  " U5      eSS jnU$ )Nr   z(The argument "object" must be array-likez:The argument "dtype" must be a data-type if it is providedc                     [        X5      $ rB  )r  )r  r   s     rC   r   impl_np_array.<locals>.impl  s    &&rE   rB  )rG  r   r	   r   r   rZ  )r  r   r   r   s       rC   impl_np_arrayr    sd    7E*F##   "1 2 	2u."7"?J  %%'KrE   c                    UR                  S5      nUR                  U5      nUR                  SXE5      nUR                  XqR                  XF5      U5      nUR	                  UR                  SXE5      UR                  SXF5      5      nUR                  USS9   SU-  n	U R                  R                  U[        U	45        S S S 5        U$ ! , (       d  f       U$ = f)Nr   r  r  Fr\  z%s(): axis out of bounds)	r9   r  r  r  r  r  r^  r_  r  )
r   r=   r   rr   r   r   ll_ndimis_neg_axisaxis_out_of_boundsr   s
             rC   _normalize_axisr    s    99Q<DiioG %%c46K>>+{{4'A4HD !C,D$02 
+E	:(94))':vF 
; K	 
;	: Ks   (C


Cc           
      |   [        U5      US-
  :X  d   e[        R                  " [        R                  U5      n[        R
                  " X5      n[        R                  " S5      n[        US-
  5       Hy  n[        R                  " U5      n	UR                  SX5      n
X(   nUR                  U
UR                  X5      U	5      nUR                  U[        R                  " XSU5      5        M{     UR                  U[        R                  " XSU5      5        [        R                  " XR                  U5      5      $ )z
Compute shape with the new axis inserted
e.g. given original shape (2, 3, 4) and axis=2,
the returned new shape is (2, 3, 1, 4).
rG   r  r   r   r   r(  r
   r   rX   r8   r  r  r  r  rj   r   r>   )r   r=   
orig_shaperr   r   ll_shtyr  r+  r  ll_dim
after_axisr4  r   s                rC   _insert_axis_in_shaper    s     z?dQh&&&ll7>>40G  2F
..
C TAX$((v<
_nnZ$[[5#% 	b'..w3GH  MM#w++GQEFf)=>>rE   c           
         [        U5      US-
  :X  d   e[        R                  " [        R                  U5      n[        R
                  " X5      n[        R                  " S5      n[        R                  " S5      n[        US-
  5       Hw  n	[        R                  " U	5      n
UR                  SX5      nUR                  UUR                  X5      U
5      nUR                  X)   [        R                  " XSU5      5        My     UR                  U[        R                  " XSU5      5        [        R                  " XR                  U5      5      $ )z<
Same as _insert_axis_in_shape(), but with a strides array.
rG   r   r  r  )r   r=   orig_stridesrr   r   r  r   r+  r   r  r  r  r   s                rC   _insert_axis_in_stridesr    s    |q(((ll7>>40G!!'3G
..
C>>!D TAX$((v<
nnZ$[[5#% 	l'**7QD	F  MM$,,Wq$GHg)>??rE   c           
         UR                   nUR                  nUR                  S   n[        U5      " XUS   S9n[        U5      " X5      n	[        R
                  " XR                  5      n
[        R
                  " XR                  5      n[        XXU5      n[        XXU5      n[        U	UR                  UUUR                  UR                  UR                  S9  U	R                  5       $ )z'
np.expand_dims() with the given axis.
r   r  r8  )r   rr   r   r~   r
   r   rg   r   r  r  r   r   r   r   r   r   )r   r=   r\   r   r   r  rr   r8  r9  r  r  r   
new_shapesnew_stridess                 rC   expand_dimsr  (  s     OOE::DHHQKE
U
GDG
<C
U
G
-C!!'995F""7KK8G&wtLJ)'G4PK3#&LL;;**& ==?rE   c                     UR                   S::  a  UR                  OSnUR                  UR                   S-   US9nU" X5      nS nXV4$ )NrG   r  r  c                     U R                  XS   UR                  S   [        R                  5      n[	        XSUR
                  R                  U5      n[        XX#U5      n[        XUR
                  U5      $ )NrG   znp.expand_dims)	r   r   r   r   r  r   rr   r  r!   )r   r=   r\   r   r   r  s         rC   r  np_expand_dims.<locals>.codegenJ  se    ||G!Wchhqk5::Fw1A"33T; 'Ct< 3??CHHrE   )rr   r+  r  )r  r7  r   r+  r  r\   r  s          rC   np_expand_dimsr  D  sJ    1QXX#F
&&affqj&
0C
a,CI <rE   c                     [        U [        R                  5      (       d  SU  3n[        R                  " U5      e[        U[        R
                  5      (       d  SU 3n[        R                  " U5      eS nU$ )Nz)First argument "a" must be an array. Got z(Argument "axis" must be an integer. Got c                     [        X5      $ rB  )r  )r7  r   s     rC   r   !impl_np_expand_dims.<locals>.impl_  s    a&&rE   )r   r   r   r	   r   r   )r7  r   r   r   s       rC   impl_np_expand_dimsr  U  sh    a%%9!=  %%dEMM**8?  %%'KrE   c                 4   ^ ^^ [         UU 4S j5       mU4S j$ )Nc           	      4  >^^ UmU Vs/ s H%  o"R                  [        UR                  T5      S9PM'     snmUUUU4S jn[        [	        T5      S:  a  [
        R                  " T5      OTS   [
        R                  R                  U5      5      U4$ s  snf )Nr  c                 D  > [        TT5      n[        R                  " XS   5      n[        UTT5       VVVs/ s H  u  pgnU" XXgU5      PM     n	nnn[	        U	5      S:  a  U R                  XR                  U	5      n
OU	S   n
[        XUR                  U
5      $ s  snnnf r  )_atleast_nd_transformr
   r   r   r   r  r   r!   )r   r=   r\   r   	transformarrsr9  r8  r  retsr  r  rA  minimumr  s              rC   r  *_atleast_nd.<locals>.impl.<locals>.codegenj  s    -gt<I''a9D .1vv-FH-F)E gEB-F  H 4y1}((//4H1g$WsLLHs   BrG   r   )	r  r  rr   r%   r   r   r  StarArgTuple
from_types)typingcontextr   r  r  r  r  rA  r  s       @@rC   r   _atleast_nd.<locals>.imple  s    CGH4C((CHHg 6(74H	M 	M FaV,VAY++66t<>?FG 	G Is   ,Bc                     > T" U 6 $ rB  rt   )r   r   s    rC   r  _atleast_nd.<locals>.<lambda>z  s	    trE   rl  )r  rA  r   s   ``@rC   _atleast_ndr  d  s    G G( %$rE   c                 :   ^ ^ T [        T5      :X  d   eUU 4S jnU$ )zT
Return a callback successively inserting 1-sized dimensions at the
following axes.
c           	        > [        T
5       Ht  nUS-   nUR                  U:  d  M  [        R                  " T	U   5      nUR	                  UR                  S-   S9n[        X[        R                  " X5      U4U5      nUnMv     U$ )NrG   r  )r8   rr   r
   r   r  r  r   r%   )r   r=   r9  r8  r  ro   rr   r   newarrtyrA  min_ndims            rC   r  (_atleast_nd_transform.<locals>.transform  s    xAq5DzzD ~~d1g. ::5::>::!'"("2"28"CcV"&( ! ! 
rE   )r   )r  rA  r  s   `` rC   r  r  }  s$    
 s4y    rE   c                  L    [        S U  5       5      (       a  [        SS/5      $ g )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  rC  rW  s     rC   rF   np_atleast_1d.<locals>.<genexpr>       
84C:c5;;''4rH  rG   r   r  r  r  s    rC   np_atleast_1dr    s'    

84
8881qc"" 9rE   c                  N    [        S U  5       5      (       a  [        SSS/5      $ g )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  rC  rW  s     rC   rF   np_atleast_2d.<locals>.<genexpr>  r  rH  rb  r   r  r  s    rC   np_atleast_2dr    s)    

84
8881q!f%% 9rE   c                  N    [        S U  5       5      (       a  [        S/ SQ5      $ g )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  rC  rW  s     rC   rF   np_atleast_3d.<locals>.<genexpr>  r  rH  ro  )r   r   rb  r  r  s    rC   np_atleast_3dr    s%    

84
8881i(( 9rE   c	                 p   [        U5      [        U5      s=:X  a   [        U5      s=:X  a  [        U5      :X  d   e   e[        R                  " S5      n	[        XXx5      n
[        R                  " XR
                  5      n/ nU H  nU	n[        [        X5      5       H`  u  nu  nnUR                  SUR                  U5      U5      nUR                  UU5      nUR                  UUR                  UU5      U5      nMb     UR                  U5        M     U
R                  n[        X4UXl5       H  u  nnnnnUR                  n[        R                  " X[        R                  UR                   S9nU n[        R"                  " XUUUUR                   U5      n[%        XUU5      nU R'                  UUUR(                  UR(                  5      n[        R"                  " XUXUR                   U5      n[+        XUUU5        SSS5        [        R,                  " UUU5      nM     U
$ ! , (       d  f       N,= f)z*
Concatenate arrays along the given axis.
r   r  )orderN)r   r
   r   r)  r   r   r  r   r  r9   r   r  r  rk   r   rg  r+  r*  r   r   r   r   r   )r   r=   r   r  r  
arr_shapesarr_stridesr  
ret_shapesr   r  ret_stridescopy_offsetsarr_shr  r  r   r  is_axisaddendret_datar8  r9  arr_starr_datarg  r   rQ  r   rj  s                                 rC   _do_concatenater    s    v;#d)Js:J#k:JJJJJJ>>!D 5
=C&&w<K L#,S-E#FC$))$		#EG[[v.F^^G$+KK$?$*,F $G 	F#  xxH.1&
2=/M*sFFF88 %%gw~~,1LL:	 '//(0605gGG GeW=C,,wU[[%++FC0081;16wHH wX>  &&w&A+/M. J Ys   4BH''
H5	c                    UR                   n[        X#5       VVs/ s H  u  px[        U5      " XUS9PM     nnn[        XSXe5      nU V	s/ s H#  n	[        R
                  " XR                  5      PM%     n
n	U V	s/ s H#  n	[        R
                  " XR                  5      PM%     nn	U
S    Vs/ s H  n[        R                  " X5      PM     nn[        U5       GHE  nUR                  SUR                  U5      U5      nX   nUR                  U5      nU
SS   Vs/ s H  oU   PM	     nnUR                  U5       u  nnU   [        R                  " UR                   UU/-   5      nUR#                  UU5        S S S 5        U   [        R$                  nU H&  nUR'                  UUR                  SUU5      5      nM(     UR)                  UR+                  U5      SS9   U R,                  R/                  U[0        SU-  45        S S S 5        S S S 5        S S S 5        GMH     U Vs/ s H  oR                  U5      PM     nn[3        XUX#XXM5	      n[5        XUUR7                  5       5      $ s  snnf s  sn	f s  sn	f s  snf s  snf ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GM  = fs  snf )	Nr  np.concatenater   r  rG   Fr\  z<np.concatenate(): input sizes over dimension %d do not match)rr   r   r~   r  r
   r   rg   r   r   r8   r  r9   r>   rO  rm  rn  r  r  ro  rE  r  r  r^  r_  r   r  r"   r   )r   r=   r  r  r  r   rr   r  r7  r9  r  r  r4  r  r  r  ret_shape_ptrret_shother_shapeson_axison_other_dimis_okr  s                          rC   _np_concatenater    s   ::D f+-+ sOGA6+ 	 - 7-=tJD GKKds'&&w		:dJKIMN#7''=KN 'qM+)b ++G8)  + T{%%dDIIcNDA"m,*4QR.9.B3.9__W%)@'<%%KK F8+- b-0	  ((&B#LL)0)<)<T2v)NPE ' __W\\%%8_G%%5557:; => H  &% 0 .88Zr,,r"ZJ8
'D 
-C GeS]]_EEY- LN
+ :  HG  &%$ 9sx   I/*I5;*I:. I?J>J=8J	<
J=AJ,"&J	J,J=)K	
JJ=
J)%J,,
J:6J==
K	c                 
   UR                   n[        R                  " S5      n[        R                  " S5      n[        R                  " [        U5      5      n	[	        X#5       V
Vs/ s H  u  p[        U
5      " XUS9PM     nn
n[        XSXe5      n[        R                  " XS   R                  5      nUSS   H  n[        R                  n[	        [        R                  " XR                  5      U5       Hq  u  nnUR                  XR                  SUU5      5      nUR                  UR                  U5      SS9   U R                  R                  U[         S5        S S S 5        Ms     M     U Vs/ s H#  n[        R                  " XR"                  5      PM%     nn[$        R&                  " [        R                  U5      n[        R(                  " UU5      n[        R(                  " UU5      n[+        US-
  5       H  n[        R                  " U5      nUR                  S	UU5      nUU   nUR-                  UUR/                  UU5      U5      nUR1                  U[        R2                  " UUSU5      5        UR1                  U[        R2                  " UUSU5      5        M     UR1                  U[        R2                  " UUSU5      5        UR1                  U	[        R2                  " UUSU5      5        [        R                  " XR5                  U5      5      nU/[        U5      -  n[        R                  " XR5                  U5      5      n[+        [        U5      5       Vs/ s H  n[        R(                  " UU5      PM     nn[+        US-
  5       H  n[        R                  " U5      nUR                  S	UU5      nUR-                  UUR/                  UU5      U5      n[+        [        U5      5       H5  nUR1                  UU   U   [        R2                  " UUU   SU5      5        M7     M     [+        [        U5      5       H/  nUR1                  U[        R2                  " UUU   SU5      5        M1     U Vs/ s H(  n[        R                  " XR5                  U5      5      PM*     nn[7        XUX#UUUU5	      n[9        XUUR;                  5       5      $ s  snn
f ! , (       d  f       GM  = fs  snf s  snf s  snf )
Nr   rG   r  np.stackr  Fr\  )z5np.stack(): all input arrays must have the same shaper  )rr   r
   r   r   r   r~   r  r   rg   ro  rE  r  r  r  r^  r_  r   r   r   r(  rX   r8   r  r  r  rj   r>   r  r"   r   )r   r=   r  r  r  r   rr   r   r+  
ll_narraysr  r7  r  r9  r  r4  orig_shr  r  input_shapesr  r  r  r  r   ro   input_stridesr5  r  s                                rC   	_np_stackr    s_   ::D>>!D
..
CD	*J f+-+ sOGA6+ 	 - 7ZDD %%gAw}}=JABx  w33GYYG)+KBLL(;(;D"g(NOEe!4UC!!11ZNP DC+  KOO$3G((++>$LO
 ll7>>40G&&w8L$$Wg6J TAX$((vt<
_nnZ$[[5#% 	b'..waMNb'..w
AsKL  MM#w++G\1dKLMM*g2273=34379 :
 ''l1KLL >CI-L%%g||J/GHJ $CI.0. ((':.  0 TAX$((vt<
nnZ$[[5#% s4y!AMM,q/#.!..wa8H!/245 "  3t9dG00-:JA157 	8 
  -., ))'<<3CD,  . 'D m-C GeS]]_EE_- DC
 PB0*.s$   &S%>"S+4*S>,!T/T+
S;c                     Ub   [        U[        R                  5      (       d  g [        U SU5      u  p4US:X  a  Sn[        R
                  " U5      e[        U5      n[        R                  " X4U5      $ )Nr  r   z.zero-dimensional arrays cannot be concatenated)r   r   r   r5   r	   r  r6   r   )r  r  r   r   rr   r   r+  s          rC   np_concatenate_typerr  n  sk    
4 ? ? 	 &i&6@KEqy>##C(()&1F;;uF++rE   c                 x    [        XU5      n[        U[        R                  5      (       d   eU" X5      nS nXE4$ )Nc           
          U R                  XS   UR                  S   [        R                  5      n[	        X[        UR                  S   5      [        R                  " XS   5      UR                  U5      $ r  )	r   r   r   r   r  r   r
   r   r   r   r=   r\   r   r   s        rC   r  np_concatenate.<locals>.codegen  s_    ||G!Wchhqk5::Fw#CHHQK0&33G!WE"#	% 	%rE   )r  r   r   r   )r  r  r   r  r\   r  s         rC   np_concatenater     s>    
y$
7Cc5;;''''
f
C% <rE   c                 P    [        U [        R                  5      (       a  SS jnU$ g )Nc                     [        X5      $ rB  )r   r  r   s     rC   r   !impl_np_concatenate.<locals>.impl  s    !&//rE   r  r   r   rO  r  r   r   s      rC   impl_np_concatenater    s"    &%//**	0 +rE   c                     U H;  nUR                   S:  d  UR                   S:  d  M%  Sn[        R                  " U5      e   g)NrG   rb  z7np.column_stack() is only defined on 1-d and 2-d arrays)rr   r	   r  )r   r   r  r7  r   s        rC   _column_stack_dimsr	    s<    66A:!KC'',,  rE   c                     [        U SU[        S9u  p#[        U5      n[        R                  " X#U5      nU" U5      nS nXg4$ )Nznp.column_stack)dim_chooserc                 :   [        UR                  S   5      n[        R                  " XS   5      n/ n/ nU R	                  [
        R                  S5      n[        XE5       H  u  pU	R                  S:X  a$  UR                  U	5        UR                  U
5        M9  U	R                  S:X  d   eU	R                  SS9n[        R                  " X5      n[        XX4U5      nUR                  U5        UR                  U5        M     [        XXgUR                  U5      $ )Nr   rG   rb  r  )r   r   r
   r   r   r   r   r   rr   rk   r  r   r%   r  r  r   )r   r=   r\   r   orig_arrtys	orig_arrsr  r  r   r8  r9  r  
expand_signewarrs                 rC   r   np_column_stack.<locals>.codegen  s    388A;'((q':	##EJJ2k5JEzzQe$C  zzQ&


*#--e;
$Wz64Pe$F# 6 w"6 	6rE   )r5   r	  r6   r   r   )r  rL  r   rr   r+  r  r\   r  s           rC   np_column_stackr    sM    %i&72DFKE *#.F
++e6
*C
c(C64 <rE   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      $ rB  )r  rL  s    rC   r   impl_column_stack.<locals>.impl  s    "3''rE   r  rL  r   s     rC   impl_column_stackr    s"    #u''	( (rE   c           
          [        X[        UR                  S   5      [        R                  " XS   5      UR
                  U5      $ )z'
np.stack() with the given axis value.
r   )r  r   r   r
   r   r   r  s        rC   _np_stack_commonr    s?     W#((1+&))'7;__	 rE   c                     [        U SU5      u  p4[        S U 5       5      (       a  SOSn[        R                  " X4S-   U5      nU" X5      nS nXx4$ )Nr  c              3   >   #    U  H  oR                   S :H  v   M     g7f)r  N)r+  r  s     rC   rF  "np_stack_common.<locals>.<genexpr>  s     8ACs   r  r   rG   c                 ~    U R                  XS   UR                  S   [        R                  5      n[	        XX#U5      $ r  )r   r   r   r   r  r  s        rC   r   np_stack_common.<locals>.codegen  s3    ||G!Wchhqk5::F#TBBrE   )r5   r  r   r   )	r  r  r   r   rr   r+  r  r\   r  s	            rC   np_stack_commonr     s\     &i&0&:KE8888ScF
++eAXv
.C
f
CC <rE   c                 P    [        U [        R                  5      (       a  SS jnU$ g )Nc                     [        X5      $ rB  )r   r  s     rC   r   impl_np_stack.<locals>.impl  s    "600rE   r  r  r  s      rC   impl_np_stackr$    s"    &%//**	1 +rE   c                 |    [        XU5      u  pE[        XS5      n[        U5      n[        R                  " XEU5      nU$ rB  )r5   r  r6   r   r   )r  r   r  ndim_minr   rr   r+  r  s           rC   NdStack_typerr'    s9    %iFCKEtD)&1F
++e6
*CJrE   c                 :    [        U SUS5      nU" U5      nS nX44$ )Nz	np.hstackrG   c                    ^ UR                   S   nUS   R                  nUS:X  a-  U R                  [        R                  S5      m[        XX#T5      $ US:X  a  SOSmU4S jnU R                  XX#5      $ )Nr   rG   c                 .   > [         R                  " U TS9$ r  r  r  s    rC   np_hstack_impl3_np_hstack.<locals>.codegen.<locals>.np_hstack_impl  s    ~~f488rE   r   rr   r   r   r   r  r*  )r   r=   r\   r   rK  rr   r+  r   s          @rC   r  _np_hstack.<locals>.codegen  sr    Qx}}19''

A6D#GcFF
 	1qD9 ++GSOOrE   r'  r  rL  r  r\   r  s        rC   
_np_hstackr1    s+    
	;Q
7C
c(CP& <rE   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      $ rB  )r1  r  s    rC   r   impl_np_hstack.<locals>.impl      c?"rE   r  r  s     rC   impl_np_hstackr6    "    #u''	# (rE   c                 :    [        U SUS5      nU" U5      nS nX44$ )Nz	np.vstackrb  c                     UR                   S   nUS   R                  nUS:X  a  S nO6US:X  a-  U R                  [        R                  S5      n[        XX#U5      $ S nU R                  XX#5      $ )Nr   c                 X    [         R                  " [         R                  " U 5      S5      $ r  )r  r  hstackr  s    rC   np_vstack_impl3_np_vstack.<locals>.codegen.<locals>.np_vstack_impl)  s    ~~bii&7;;rE   rG   c                 ,    [         R                  " U SS9$ )Nr   r  r  r<  s    rC   r=  r>  2      ~~f155rE   r-  )r   r=   r\   r   rK  rr   r=  r   s           rC   r  _np_vstack.<locals>.codegen$  sp    Qx}}19< QY''

A6D#GcFF6 ''KKrE   r/  r0  s        rC   
_np_vstackrB    s+    
	;Q
7C
c(CL& <rE   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      $ rB  )rB  r  s    rC   r   impl_np_vstack.<locals>.impl=  r5  rE   r  r  s     rC   impl_np_vstackrF  :  r7  rE   c                 :    [        U SUS5      nU" U5      nS nX44$ )Nz	np.dstackro  c                    UR                   S   nUR                  nUS   R                  nUS:X  a  S nU R                  XX#5      $ US:X  a  U R	                  [
        R                  S5      nUR                  UR                  S-
  S9n	[        R                  " U	/UR                   Q76 n
[        XXU5      nU R	                  [
        R                  S5      n[        R                  " XY5      n[        XX4U5      $ US:X  a-  U R	                  [
        R                  S5      n[        XX#U5      $ S nU R                  XX#5      $ )Nr   c                 P    [         R                  " U 5      R                  SSS5      $ )NrG   rH  )r  r;  r  r<  s    rC   r=  3_np_dstack.<locals>.codegen.<locals>.np_vstack_implQ  s     yy(00Ar::rE   rG   r  rb  c                 ,    [         R                  " U SS9$ )Nrb  r  r  r<  s    rC   r=  rJ  h  r@  rE   )r   r   rr   r*  r   r   r   r  r   r%   r  r  )r   r=   r\   r   rK  r  rr   r=  r   stack_retty	stack_sig	stack_retr  s                rC   r  _np_dstack.<locals>.codegenK  s$   Qx}}19; ++GSOOQY''

A6D**%**q.*9K((@sxx@I(9)-/I ''

A6D))%=Jw\4PPQY''

A6D#GcFF6 ++GSOOrE   r/  r0  s        rC   
_np_dstackrP  F  s,    
	;Q
7C
c(C PD <rE   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      $ rB  )rP  r  s    rC   r   impl_np_dstack.<locals>.impls  r5  rE   r  r  s     rC   impl_np_dstackrT  p  r7  rE   fillc                     S nU$ )Nc                     XS S & g rB  rt   )r9  r   s     rC   	fill_implarr_fill.<locals>.fill_impl{  s    ArE   rt   )r9  r   rX  s      rC   arr_fillrZ  x  s     rE   dotc                     S nU$ )Nc                 .    [         R                  " X5      $ rB  )r  r[  )r9  others     rC   dot_implarray_dot.<locals>.dot_impl  s    vvc!!rE   rt   )r9  r^  r_  s      rC   	array_dotra    s    " OrE   c                 ^    [        U 5      (       d  [        R                  " SU -  5      eS nU$ )NzCannot np.fliplr on %s typec                 ~    [         R                  " U 5      nUR                  S:  a  [        S5      eUS S 2S S S2S4   $ )Nrb  rl  rH  .r  r  rr   r   r  r  s     rC   r   np_flip_lr.<locals>.impl  s=    JJqM 66A:455TrT3rE   r-  r  r   s     rC   
np_flip_lrrh    s2     A  !>!BCC  KrE   c                 ^    [        U 5      (       d  [        R                  " SU -  5      eS nU$ )NzCannot np.flipud on %s typec                 x    [         R                  " U 5      nUR                  S:  a  [        S5      eUS S S2S4   $ )NrG   zInput must be >= 1-d.rH  .rd  re  s     rC   r   np_flip_ud.<locals>.impl  s:    JJqM 66A:4552s|rE   r-  rg  s     rC   
np_flip_udrl    s2     A  !>!BCC KrE   c                   ^^ [        U[        R                  5      (       d  [        R                  " U5      e[        UR                  5      m[        R                  " [        R                  TS9mT" U5      nUU4S jnX#4$ )zTCreates a tuple of slices for np.flip indexing like
`(slice(None, None, -1),) * sz` r  c                    > S n[         R                  T/n[        R                  " T/UQ76 nU R	                  [         R                  5      nU R                  T5      nU" T5      U/n	U R                  XXi5      n
U
$ )Nc           
      \    Un[        U 5       H  n[        X#[        S S S5      5      nM     U$ )NrH  )r8   r/   r3  )lengthempty_tupler   ro   s       rC   r   6_build_flip_slice_tuple.<locals>.codegen.<locals>.impl  s/    C6]#CE$b,AB #JrE   )r   r   r   r%   r   get_constant_undefr*  )r   r=   r%   r   r   inner_argtypes	inner_sigll_idx_typerq  
inner_argsr   r   
tuple_types              rC   r  (_build_flip_slice_tuple.<locals>.codegen  sw    	  **j1$$ZA.A	,,UZZ800<!$'5
&&wiL
rE   )	r   r   r  r	   r*  r   r   r  slice3_type)rY  szr\   r  r   rx  s       @@rC   _build_flip_slice_tupler|    sg     b%..//((,,r De&7&7tDJ
R.C" <rE   c                 |    [        U [        R                  5      (       d  [        R                  " SU -  5      eS nU$ )NzCannot np.flip on %s typec                 4    [        U R                  5      nX   $ rB  )r|  rr   )r  sls     rC   r   np_flip.<locals>.impl  s    $QVV,urE   )r   r   r   r	   r   rg  s     rC   np_flipr    s8     a%%  !<q!@AA KrE   c                    [        U [        R                  [        R                  [        R                  45      (       a  SS jnU$ [        U[        R
                  5      (       a  SS jnU$ [        U[        R                  5      (       a:  [        UR                  R                  [        R
                  5      (       a  SS jnU$ [        U[        R                  5      (       a)  [        S UR                   5       5      (       a  SS jnU$ g g )Nc                 V    [         R                  " [         R                  " U 5      UUS9$ r  )r  array_splitr  r  indices_or_sectionsr   s      rC   r   np_array_split.<locals>.impl  s$    >>

3# rE   c                     [        U R                  U   U5      u  p4[        R                  " [        R                  " US-   /U-  U/X-
  S-
  -  -   5      5      n[        R
                  " XUS9$ )NrG   r  )divmodrg   r  cumsumr   r  )r  r  r   rz  rI  r   s         rC   r   r    sj    CIIdO-@AFAiiQ#*01456! G >>#T::rE   c                    [        U R                  5      n[        SSU R                  U5      n/ nSnU H-  n[        X2[	        XV5      5      nUR                  X   5        UnM/     UR                  U [        X2[	        WS 5      5         5        U$ Nznp.splitr   r   )r0   rr   r   r/   r3  rk   r  r  r   	slice_tupr   prevr2  r   s           rC   r   r    s    .sxx8I!*fchhEDCD*#IU45EF

38$ + JJs=%T:JKLMJrE   c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  r   r   r   )rD  r  s     rC   rF  !np_array_split.<locals>.<genexpr>  s      P6O
1emm,,6OrH  c                 0   [        U R                  5      n[        SSU R                  U5      n/ nSn[        U5       H-  n[	        X2[        XV5      5      nUR                  X   5        UnM/     UR                  U [	        X2[        WS 5      5         5        U$ r  )r0   rr   r   r   r/   r3  rk   r  s           rC   r   r    s    .sxx8I!*fchhEDCD%&9:#IU45EF

38$ ; JJs=%T:JKLMJrE   r  )r   r   r  ListTyperJ  r   IterableTypeiterator_typer  r  r  r  r  r   r   s       rC   np_array_splitr    s    #

CDD	 %u}}55	;  	&(:(:;;--88MM
 


	  	&44P6I6O6OPPP
	  Q 	5rE   c                     [        U [        R                  [        R                  [        R                  45      (       a  SS jnU$ [        U[        R
                  5      (       a  SS jnU$ [        XUS9$ )Nc                 T    [         R                  " [         R                  " U 5      XS9$ r  )r  splitr  r  s      rC   r   np_split.<locals>.impl  s    88BJJsO-@LLrE   c                     [        U R                  U   U5      u  p4US:w  a  [        S5      e[        R                  " XUS9$ )Nr   z0array split does not result in an equal divisionr  )r  rg   r   r  r  )r  r  r   r1  rI  s        rC   r   r  "  sH    CIIdO-@AFAax F  >>t rE   r  r  )r   r   r  r  rJ  r   r  r  s       rC   np_splitr    s^     #

CDD	M %u}}55	  cTBBrE   c                 D   [        U [        R                  5      (       d  Sn[        R                  " U5      e[        U[        R
                  [        R                  [        R                  [        R                  45      (       d  Sn[        R                  " U5      eS nU$ )N#The argument "ary" must be an array:The argument "indices_or_sections" must be int or 1d-arrayc                 b    U R                   S:  a  [        S5      e[        R                  " XSS9$ )Nrb  z3vsplit only works on arrays of 2 or more dimensionsr   r  rr   r   r  r  r  r  s     rC   r   numpy_vsplit.<locals>.impl=  s2    88a< ? A Axxq99rE   r   r   r   r	   r   r   rJ  r  r  r  r   r   s       rC   numpy_vsplitr  2  |    c5;;''3  %%)EMM5;;,1JJ,H I IK  %%: KrE   c                 D   [        U [        R                  5      (       d  Sn[        R                  " U5      e[        U[        R
                  [        R                  [        R                  [        R                  45      (       d  Sn[        R                  " U5      eS nU$ )Nr  r  c                     U R                   S:X  a  [        S5      eU R                   S:  a  [        R                  " XSS9$ [        R                  " XSS9$ )Nr   z3hsplit only works on arrays of 1 or more dimensionsrG   r  r  r  s     rC   r   numpy_hsplit.<locals>.implQ  sN    88q= ? A A88a<88C1==xxq99rE   r  r  s       rC   numpy_hsplitr  F  s|    c5;;''3  %%)EMM5;;,1JJ,H I IK  %%: KrE   c                 D   [        U [        R                  5      (       d  Sn[        R                  " U5      e[        U[        R
                  [        R                  [        R                  [        R                  45      (       d  Sn[        R                  " U5      eS nU$ )Nr  r  c                 b    U R                   S:  a  [        S5      e[        R                  " XSS9$ )Nro  z3dsplit only works on arrays of 3 or more dimensionsrb  r  r  r  s     rC   r   numpy_dsplit.<locals>.implg  s0    88a< * + +xxq99rE   r  r  s       rC   numpy_dsplitr  \  r  rE   c                 
    X:  $ )z/
Trivial comparison function between two keys.
rt   r  s     rC   
default_ltr  v  s     5LrE   c                    XR                   U4n [        U   $ ! [         a^    U S:X  a#  [        R                  " UUSS9nUR
                  nO'U S:X  a!  [        R                  " UUS9nUR                  nW[        U'   Us $ f = f)z.
Get a sort implementation of the given kind.
r,   T)lt
is_argsortis_np_arrayr-   )r  r  )	ru   _sortsKeyErrorr,   make_jit_quicksortrun_quicksortr-   make_jit_mergesortrun_mergesort)r  lt_implr  keyr6  r  s         rC   get_sort_funcr  }  s       *
,Cc{ ;//% "D %%D[ //%'D %%Dss    A%B Bc                     [        U [        R                  5      (       a  [        $ [        U [        R                  5      (       a  [
        $ [        $ rB  )r   r   r  r   rV  r   r  r?  s    rC   lt_implementationr    s6    %%%	E5==	)	)rE   z
array.sortc                    ^ UR                   S   n[        S[        UR                  5      S9mU4S jnU R	                  XX#5      $ )Nr   r,   )r  r  c                    > T" U 5        g rB  rt   r9  	sort_funcs    rC   array_sort_impl#array_sort.<locals>.array_sort_impl  s
    #rE   )r   r  r  r   r*  )r   r=   r\   r   rC  r  r  s         @rC   
array_sortr    sC    hhqkG;&7&FHI ##GcHHrE   c                 X    [        U 5      (       d  [        R                  " S5      eS nU$ )NzArgument "a" must be array-likec                 F    U R                  5       nUR                  5         U$ rB  )r  r6  )r7  r   s     rC   np_sort_impl"impl_np_sort.<locals>.np_sort_impl  s    ffh

rE   r-  )r7  r  s     rC   impl_np_sortr    s2    A   "1 2 	2 rE   zarray.argsortc                    ^	 UR                   u  pE[        UR                  [        UR                  5      SS9m	U	4S jnUR                  UR                   S S S9nUS S nU R                  XXx5      $ )NT)r  r  r  c                    > T" U 5      $ rB  rt   r  s    rC   array_argsort_impl)array_argsort.<locals>.array_argsort_impl  s    ~rE   rG   r  )r   r  r   r  r   replacer*  )
r   r=   r\   r   rC  r  r  innersig	innerargsr  s
            @rC   array_argsortr    su     HHMG4#5#5&7&F)-/I {{!{-HRaI##G$,9 9rE   c                 ^    UR                   UR                   :w  d  UR                  S:X  d   eU$ )Nr  )r  r+  )r   r=   r  r  r   s        rC   array_to_arrayr    s*     >>T\\)T[[C-???JrE   c                 r    S n[        X25      nU R                  XXd/5      n[        XUR                  U5      $ )Nc                 $    U R                  S5      $ r   )r  r  s    rC   r   array0d_to_scalar.<locals>.impl  s    vvayrE   )r%   r*  r#   r   r   r=   r  r  r   r   r\   r   s           rC   array0d_to_scalarr    s:     D
!C

"
"7#u
=CgEErE   c                 r    S n[        X25      nU R                  XXd/5      n[        XUR                  U5      $ )Nc                     [        U S   5      $ r  )r  r  s    rC   r    array_to_unichrseq.<locals>.impl  s    1R5zrE   )r%   r*  r!   r   r  s           rC   array_to_unichrseqr    s:     D
!C

"
"7#u
=CWsDDrE   c                     [         e)zJ
An intrinsic returning a derived array with the given shape and strides.
r   )r7  rg   r   s      rC   reshape_uncheckedr    r  rE   c                    ^ S mU4S jnU$ )Nc                 h    [        U [        R                  5      =(       a    [        S U  5       5      $ )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frB  r  r  s     rC   rF  >type_reshape_unchecked.<locals>.check_shape.<locals>.<genexpr>  s     @%QJq%--00%rH  )r   r   rO  r  rg   s    rC   r  +type_reshape_unchecked.<locals>.check_shape  s*    5%//2 A@%@@	BrE   c                    > [        U [        R                  5      (       d  g T" U5      (       a  T" U5      (       d  g [        U5      [        U5      :w  a  g U R	                  [        U5      SS9$ )Nr  r  )r   r   r   r   r  )r7  rg   r   r  s      rC   typer%type_reshape_unchecked.<locals>.typer   sY    !U[[))5!!W)=)=u:W%vv3u:cv22rE   rt   )r   r  r  s     @rC   type_reshape_uncheckedr    s    B3 LrE   c           	      x   UR                   S   nUR                  n[        U5      " XUS   5      n[        U5      " X5      n[        R                  " XS   5      n[        R                  " XS   5      n	[        UUR                  UU	UR                  UR                  S9  UR                  5       n
[        XXZ5      $ )Nr   rG   rb  r'  )r   r   r~   r
   r   r   r   r   r   r   r!   )r   r=   r\   r   r   r  r  r   rg   r   r   s              rC   impl_shape_uncheckedr    s    HHQKEOOE
U
Gd1g
6C
U
G
-C  q'2E""7G4G3"LL;; --/CWu::rE   c                    ^^ US [         R                  4;   a  [        S 5       mO[        S 5       mUS [         R                  4;   a  [        R                  " S5      e[        S 5       mSUU4S jjnU$ )Nc                     U R                   $ rB  r  r|  rg   s     rC   rr  as_strided.<locals>.get_shape%  s    77NrE   c                     U$ rB  rt   r  s     rC   rr  r  )  s    LrE   z,as_strided() strides argument cannot be Nonec                     U$ rB  rt   )r|  r   s     rC   get_stridesas_strided.<locals>.get_strides4  s    NrE   c                 :   > [        U T" X5      T" X5      5      n U $ rB  )r  )r|  rg   r   rr  r  s      rC   as_strided_impl#as_strided.<locals>.as_strided_impl8  s     a1!4k!6MNrE   r{  )r   r  r'   r	   r   )r|  rg   r   r  rr  r  s       @@rC   
as_stridedr  "  s    uzz""		 
	 
	 
	 4$$
   !OPP		 
	  rE   c                   ^^^^ [        U[        R                  5      (       aO  [        [	        U R
                  S-   5      5      m[        [	        U R
                  S-   5      5      m[        S 5       mO[        U[        R                  5      (       a  [        UR                  [        R                  5      (       aa  [        [	        U R
                  [        U5      -   5      5      m[        [	        U R
                  [        U5      -   5      5      m[        S 5       mO[        R                  " S5      e[        U5      (       a  [        S 5       mO[        U[        R                  5      (       a  [        S 5       mOk[        U[        R                  5      (       a6  [        UR                  [        R                  5      (       a  [        S 5       mO[        R                  " S5      eS
UUUU4S	 jjnU$ )NrG   c                     U 4$ rB  rt   window_shapes    rC   get_window_shape-sliding_window_view.<locals>.get_window_shapeI  s
     ?"rE   c                     U $ rB  rt   r  s    rC   r 	  r	  R  s    rE   z4window_shape must be an integer or tuple of integersc                 *    [        [        U5      5      $ rB  )r   r8   r  r   rr   s      rC   get_axis%sliding_window_view.<locals>.get_axis]  s    d$$rE   c                     [        SSX!5      /$ Nsliding_window_viewr   r   r	  s      rC   r	  r	  b  s     4fdI rE   c           	      H    U Vs/ s H  n[        SSX#5      PM     sn$ s  snf r	  r
	  )r  r   rr   r7  s       rC   r	  r	  j  s3     "#! ##8&$J!# # #s   z2axis must be None, an integer or tuple of integersc                 H  > T" U5      nT
" XU R                   5      n[        U5      [        U5      :w  a  [        S5      eTnTn[        U R                   5       H5  n[	        X5U R
                  U   5      n[	        XEU R                  U   5      nM7     U R                   n[        X!5       Hi  u  pgUS:  a  [        S5      eX6   U:  a  [        S5      eX6   U-
  S-   n[	        X6U5      n[	        X5U5      n[	        XEU R                  U   5      nUS-  nMk     [        XU5      n	U	$ )Nz2Must provide matching length window_shape and axisr   z-`window_shape` cannot contain negative valuesz4window_shape cannot be larger than input array shaperG   )	rr   r   r   r8   r/   rg   r   r   r  )r|  r  r   	out_shapeout_stridesro   r0  r  trimmedr  r	  r 	  shape_bufferstride_buffers             rC   sliding_window_view_impl5sliding_window_view.<locals>.sliding_window_view_implt  s.   '5AFF3|D	)D 
 !	#qvvA%iAGGAJ?I'		!EK  FF4.GBQw C  }s" J   mc)A-G%iW=I%iC8I'		"FKFA /$ !{;rE   rB  )r   r   r   r   r8   rr   r'   r  r   r   r	   r   r   )r|  r  r   r	  r	  r 	  r	  r	  s       @@@@rC   r		  r		  ?  s    ,..U166A:./eAFFQJ/0		# 
	# \5>>
2
2|))5==99U166C,=#=>?eAFFS->$>?@		  
	    B
 	

 4		% 
	% 
D%--	(	(		 
	
 T5>>
*
*tzz5==11		# 
	#
   @
 	
% %N $#rE   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     U R                   S:X  a  [        S:  a  g[        S5      eU R                   S:X  a  [        U R	                  S5      5      $ [        S5      e)Nr   )rb  rb  FziThe truth value of an empty array is ambiguous. Use `array.size > 0` to check that an array is not empty.rG   z[The truth value of an array with more than one element is ambiguous. Use a.any() or a.all())r   r   r   rP  r  r  s    rC   r   ol_bool.<locals>.impl  s_    xx1} 6) $ 'J L L QCHHQK((  #- / /rE   rC  r  s     rC   ol_boolr	    s$    #u{{##	/  $rE   c                   ^^ [        U[        [        R                  45      (       d  [        R
                  " S5      e[        U[        [        R                  45      (       d  [        R
                  " S5      e[        U [        R                  5      (       d  [        R
                  " S5      eU R                  m[        [        T5      5      mUU4S jnU$ )Nz.The second argument "axis1" must be an integerz-The third argument "axis2" must be an integerz'The first argument "a" must be an arrayc                    > [        SSTU5      n[        SSTU5      nUS:  a  UT-  nUS:  a  UT-  n[        TX5      n[        X2U5      n[        R                  " X5      $ )Nznp.swapaxesaxis1axis2r   )r   r/   r  r?  )r7  r	  r	  
axes_tuple	axes_listrr   s       rC   r   numpy_swapaxes.<locals>.impl  sl    }gtUC}gtUC 19TME19TME"9e;
":e<
||A**rE   )
r   r   r   r   r	   r   r   rr   r   r8   )r7  r	  r	  r   r	  rr   s       @@rC   numpy_swapaxesr	    s    ec5==122   "+ , 	,ec5==122   "+ , 	,a%%  !JKK 66DeDk"I+ KrE   c                 >   [        SSU R                  U5      n[        U R                  5      nSXb'   [	        [        XaR                  5      5       H8  u  nu  pUS:X  a  U	n
OU	S:X  a  Un
OX:w  a  [        S5      eUn
[        XWU
5      nM:     [        XRU R                  U   5      n[        R                  " X5      n [        R                  " X5      nUn[        U5      S:  a4  [        [        U5      5       H  n[        XU R                  U   5      nM     Un[        U5      S:  a:  [        [        U5      5       H"  n[        XU R                  US-   U-      5      nM$     UR                  U   n[        R                  " X4-   U-   U R                  5      n[        S S S 5      4n[        R                  " U5       H^  n[        R                  " U5       HA  nU UU-   U-      nUUU-   U-      nUUU-   U-      n[        U5       H  nUUU      UU'   M     MC     M`     U$ )Nznp.take_along_axisr   rG   z*`arr` and `indices` dimensions don't matchr   )r   rr   r   rg   r  r   r   r/   r  r  r   r8   rA  r   r3  r  )r9  r   r   Ni_origNk_origindices_broadcast_shape	arr_shapero   d1d2new_valarr_broadcast_shapeNiNkJr   np_s_iikka_1d
indices_1dout_1dr  s                          rC   _take_along_axis_implr2	    s    .$GD SYYIIO Y!>?8B7G1WGx @  G"/##
 @ (syy //#
3Coog?G	B
7|as2wArciil3B  	B
7|as2wArciiq1&=>B   	dA
((29r>399
-C4t$&Ejjn**R.BrEzB'D eb1Jeb)F1X A/q	 	 !  JrE   c                   ^^^ [        U [        R                  5      (       d  [        R                  " S5      e[        U[        R                  5      (       d  [        R                  " S5      e[        UR
                  [        R                  5      (       d  [        R                  " S5      e[        U5      (       a  SnOU R                  nX1R                  :w  a  [        R                  " S5      e[        [        UR                  5      5      m[        U5      (       a  U4S jnU$ [        US5        [        U[        R                  5      (       d  [        R                  " S5      eUR                  nUS	:  a  U R                  U-   nUS	:  d  X R                  :  a  [        R                  " S
5      e[        [        U5      5      m[        [        US-   U R                  5      5      mUUU4S jnU$ )Nz)The first argument "arr" must be an arrayz.The second argument "indices" must be an arrayz'The indices array must contain integersrG   z;`indices` and `arr` must have the same number of dimensionsc                 @   > [        U R                  5       USSST5      $ )Nr   rt   )r2	  r  )r9  r   r   r#	  s      rC   take_along_axis_impl1arr_take_along_axis.<locals>.take_along_axis_impl#  s%    (B)@B BrE   r   zaxis must be a literal valuer   zaxis is out of boundsc                 "   > [        XUTTT5      $ rB  )r2	  )r9  r   r   r)	  r*	  r#	  s      rC   r5	  r6	  4  s    (tR)@B BrE   )r   r   r   r	   r   r   r   r   rr   r   r8   r   r  rt  r   )r9  r   r   arr_ndimr5	  r)	  r*	  r#	  s        @@@rC   arr_take_along_axisr9	    s   c5;;''  !LMMgu{{++  <> 	>gmmU]]33  !JKK488<<  I
 	
 $E',,$784	B(  ! 	v&$ 4 455(()GHH!!!888d?D!8txx'(()@AA5;5388,-	B  rE   c                    [        U [        R                  5      (       a  [        U [        R                  5      (       a  S	S jnU$ [        U [        R                  5      (       a  S	S jnU$ [        U [        R
                  5      (       a  S	S jnU$ [        R                  " S5      e[        U 5      (       a  [        U R                  [        R                  5      (       a  S	S jnU$ [        U R                  [        R                  5      (       a  S	S jnU$ [        U R                  [        R
                  5      (       a  S	S jnU$ [        R                  " S5      e[        R                  " S5      e)
Nc                     U $ rB  rt   r|  r  nans      rC   r   nan_to_num_impl.<locals>.impl?      rE   c                 P   [         R                  " U 5      (       a  U$ [         R                  " U 5      (       a)  [         R                  " [	        U 5      5      R
                  $ [         R                  " U 5      (       a)  [         R                  " [	        U 5      5      R                  $ U $ rB  )r  isnanisneginffinfor9   r  isposinfr  r<	  s      rC   r   r>	  C  se    88A;;J[[^^88DG,000[[^^88DG,000rE   c                     [         R                  " U R                  US9n[         R                  " U R                  US9n[	        X45      $ )N)r=	  )r  
nan_to_numr\  r^  complex)r|  r  r=	  r  r  s        rC   r   r>	  L  s4    MM!&&c2MM!&&c2q}$rE   z4Only Integer, Float, and Complex values are acceptedc                     U $ rB  rt   r<	  s      rC   r   r>	  X  r?	  rE   c                 :   [         R                  " U R                  5      R                  n[         R                  " U R                  5      R                  n[         R
                  " U 5      nU(       a  [         R                  " U5      OUnUR                  n[        UR                  5       Hl  n[         R                  " Xx   5      (       a  X'U'   M&  [         R                  " Xx   5      (       a  X7U'   MI  [         R                  " Xx   5      (       d  Mh  XGU'   Mn     U$ rB  )r  rC	  r   r  r  r  r  r  r8   r   rA	  rB	  rD	  )	r|  r  r=	  min_infmax_infx_outputoutput_flatro   s	            rC   r   r>	  [  s    ((177+//((177+//ZZ](,"$kkv{{+Axx//),A[^44)0A[^44)0A , rE   c                     [         R                  " U 5      nU(       a  [         R                  " U5      OUn[         R                  " UR                  SUS9  [         R                  " UR
                  SUS9  U$ )NF)r  r=	  )r  r  r  rF	  r\  r^  )r|  r  r=	  rL	  rM	  s        rC   r   r>	  l  sM    ZZ](,"fkk3?fkk3?rE   z4The first argument must be a scalar or an array-likeTg        )
r   r   r  r   r  rV  r	   r   r   r   )r|  r  r=	  r   s       rC   nan_to_num_implrQ	  :  s4   !U\\""a''v Kq 5;;''n K_ 5==))%\ KS $$F  
!		aggu}}--D KA --> K // K $$F     ". / 	/rE   rB  rO  r  r  r  )Fr{  rP	  (  r}  rm  r  r  r  llvmliter   llvmlite.irr   numpyr  numbar   r   
numba.corer   r   r	   r
   r   r   numba.np.numpy_supportr   r   r   r   r   r   r   r   r   r   r   r   r   numba.core.imputilsr   r   r   r   r   r   r    r!   r"   r#   r$   numba.core.typingr%   numba.core.typesr&   numba.core.extendingr'   r(   r)   r*   r+   
numba.miscr,   r-   numba.cpythonr.   numba.cpython.unsafe.tupler/   r0   r1   numba.core.typing.npydeclr2   rZ  r3   r[  r4   r5   r6   rD   rI   r~   r   r   r   r   r   r   r   r   r   r   r  r   r
  ArrayIteratorBORROWEDr  r6  r  r<  r  r   r#  r?  rO  rM  r  AnyrT  r   rY  r   r`  re  r  rg  r  r  r  r  r  r  rJ  r5  r<  rA  rC  rK  rk  rt  r  r  r  r  r  r  r  r  r  broadcast_shapesr  r  r  r  r  r  rQ  r  r!  r$  r8  VarArgr;  r?  rE  r  r`  rQ  	geomspacerj  rot90ru  r  r  r  r  r  r  resizer  rk   r  r  r  r  r  r  r  r
  r	  r  r)  rg   r/  r   r3  uniquer<  rM  rK  r@  rR  rZ  r\  ri  r  ro  rr  
MemoryViewru  rw  ry  r{  r}  r  r  r  r  r  r  r  r  rg  r  r  r  r  r  r  r  r  r  r  r  r  DTypeNumberClassr  r  r  r  r  r  r  r  r  r  r  r  r	  Bytesr  is_r  r  r   r%  r1  r3  r  r  r  r  r  r  r  r  r  r"  r  r  r  r  r   r  r  r  r8  r  NumpyNdIterTyper  eqr  r)  r(  r  r%  r=  rA  r  rG  rR  rA  rV  r]  rb  r  rf  rj  ro  r  ru  rw  r{  r}  r  r  r  r  r  r  r  r  r  r  r  eyer  diagr  r   r  diagflatr  r  r  r  r  r  r  rK  r  r  r  r  r  r  r&  r+  r.  r5  r8  r;  r>  rM  rO  rR  r]  rc  r[  rh  rr  rx  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  
atleast_1dr  
atleast_2dr  
atleast_3dr  r  r  r  r  r   r  r  r	  r  column_stackr  r  r   stackr$  r'  r1  r;  r6  rB  vstackrF  	row_stackrP  dstackrT  rZ  ra  rq  rh  rr  rl  r|  flipr  r  r  r  r  vsplitr  hsplitr  dsplitr  r  r  r  r  r  r6  r  argsortr  r  UnicodeCharSeqr  rV  r  NPTimedelta
NPDatetimer  r  r  type_callabler  r  libstride_tricksr  r		  rP  r	  rp  r	  r2	  take_along_axisr9	  rF	  rQ	  rt   rE   rC   <module>r	     s  
         * H H; ; ; P O* * * * ( *A A + ! L 5E E#69x(-M	

  BJH& 
 
. , y%,,' (.;* z5../w - ! 0-6  $A4H ;* xu}}=xu?E @ >E xu?E @E0 xuyy%))D%6 E%6P sELL!F "F |U[[)8 *8 6?EKK;) <)(/"f /"d/-G /-dW >:-' :-zN-' N-bB-7 B-JL6 L^(GV xu{{;; <;&'TH
:$z"J!. 4  ,  " 5 5>- 
"//'& '&T 3 3  
"

% %P 
"

6 6r 

"95
 6
 

"51 2*U%v&  %++.; /;
  %++u?3E @3El  %++u||EII/FGF HF
 
",,  u{{C 9 !9& 
"++  
",,I IX 
"(( 4!H;< U__==E >=E@ U\\%))-DE> F>
 6bjj 
 bjj  
"))+ +\ 
")) 2 }ekk* +, rxx%G &G , - 
 
   
"''v vr f% &{| 
"((  
"''  
"))  
")))1 )1X  " 5;;1 2  	 

9-( .(V |U[[%//:E ;EH u{{G$: %:
 u{{G$u): * %: u{{I&u+: , ': u{{F#u(: ) $:
 u{{F#: $: u{{J'u,: - (: u{{H%u*: + &: u.: /:
 u0: 1:
 u0: 1:
 u,: -: u{{H%	9 &	9 u  &): *: Eu~~.Eu}}-; . /;4 u{{G$8 %8 u.u0	: 1 /	: u0
: 1
:  u{{F#Q $Q u{{F#Q $Q 4Mn f%k* + &%
 ekk6 ": . ekk6 ": . !2!2EII>( ?(. u{{#4; $4;n e.A.ABO CO u||$$= %$=N u||$D %D: u/B/BCA DA u/C/CDE EE u/B/BEIIN	% O	% u/C/CUYYO
% P
%" ; ; 3 3 9 9 x||U[[%++6
G 7
G  EKK, -9> IM6:#D '+OEP
>BTn u{{F#P $P z5../w E ! 0E x!4!4emmDE EE x!4!4emmyy%% sE''( ) r~~u{{+E ,E" z5556w C ! 7C xemm45rzz5<<67
E 8 6
E x)rzz5??+E , *E* z5112w 7 ! 37 ryy%))$> %>& z5001w 7 ! 27 x{{EKK5F 6FL^ ekk;/ 0* 
 
-`K#&   
"((" & &*   
"-- 0   l+ , 
"(("   
"--  
",,
 
 
"''   
",,
 
 
"''  
"++ 	 %& ' BFF1E  2 
"''# #L 
"** 6 
"++ 4  F 
"''f%W & Wt4 
"))@ @F 
"++' 'T"PJ   |U[[)4 *4 
"'' ><B ? ? 
"


  
 
"

  ~u{{EOO<~u{{E,?,?@P A =P: ( (V 
"--%*  6 
&  
& !H1Dh"<&'R&#R)  2 
"(( &?:@:8    
".. %2. 
"--# #
 
"--& &
 
"--) )
:z/FdVFr,$    
"..  " "J 
"//    
"((   4 
"))   4 
"))  FR\\>* & &R 
"))  5;;/ 0 5;;. / 
"))   
"))    : 
"''
 
 
"..; ;| 
"((C C4 
")) & 
")) * 
")) , 
0 |U[[)
I *
I 
"''	 	 U-@-@Arzz5;;(;(;<9 = B9& EKK% & EKK--.EKK%EKK'EKK'EKK'EKK**+EKK))*F + , ( ( ( & /F EKK--.E /E *+ ,"  %++uP; Q;* BFF((334 58 BFF((<<=[$ >[$| 
$ & 
"++ > 8 8v 
"

(  ( V 
"--? ?rE   