
    ȅiHU                    ,   S SK Jr  S SKrS SKrS SKrS SKJr  S SKrSSKJ	r	J
r
JrJrJr  SSKJrJrJrJr  Sr/ SQrSS	S
SSSSSSS.	r " S S5      rSQS jr0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_S!S_S"S_S#S_S$S_S%S_SSSSSSSSSSSS&.ErS'SS(S)S*S+S,S-S..rSS/S0S1S2S3S4S5S6S7S8S9SS:.rS; rS< rS= rS> rS? r " S@ SA5      r \ " 5       \ l!         " SB SC5      r"SD r#SQSESFSGS SSH.SI jjr$SRSSJ.SK jjr%SQSSJ.SL jjr&SM r'SN r(SSSO jr)SP r*g)T    )annotationsN)Sequence   )_dtypes_dtypes_impl_funcs_ufuncs_util)	ArrayLikenormalize_array_like
normalizerNotImplementedType)C_CONTIGUOUSF_CONTIGUOUSOWNDATA	WRITEABLEALIGNEDWRITEBACKIFCOPYFNCFORCBEHAVEDCARRAYFARRAYr   r   r   r   r   r   r   r   r   )	CFOWAXBCAFAc                  H   ^  \ rS rSrSS jrS	S jrS rU 4S jrS rSr	U =r
$ )
Flags2   c                ~    U Vs/ s H  o"[         ;  d  M  UPM     nnU(       a  [        SU 35      eXl        g s  snf )NzInvalid flag keys: )FLAGSAssertionError_flag_to_value)selfflag_to_valuekinvalid_keyss       O/home/james-whalen/.local/lib/python3.13/site-packages/torch/_numpy/_ndarray.py__init__Flags.__init__3   s<    #0C=aUN=C #6|n!EFF+ Ds   ::c                    UR                  5       (       a*  UR                  5       [        ;   a  XR                  5          $ [        SU S35      e)NzNo flag attribute '')islowerupperr'   AttributeError)r*   attrs     r.   __getattr__Flags.__getattr__9   s>    <<>>djjle3

%% #6tfA!>??    c                    U[         ;   a	  [         U   nU[        ;   a   U R                  U   $ [        SU S35      e! [         a  n[	        SU< 35      UeS nAff = f)Nzkey=No flag key 'r2   )SHORTHAND_TO_FLAGSr'   r)   KeyErrorNotImplementedError)r*   keyes      r.   __getitem__Flags.__getitem__?   sm    $$$S)C%<<**3// ]3%q122  <)TSF)4!;<s   = 
AAAc                   > UR                  5       (       a+  UR                  5       [        ;   a  X UR                  5       '   g [        TU ]  X5        g N)r3   r4   r'   super__setattr__)r*   r6   value	__class__s      r.   rF   Flags.__setattr__J   s6    <<>>djjle3!&G,r9   c                ^    U[         ;   d
  U[        ;   a  [        S5      e[        SU S35      e)Nz"Modifying flags is not implementedr;   r2   )r'   r<   r>   r=   )r*   r?   rG   s      r.   __setitem__Flags.__setitem__P   s1    %<3"44%&JKK]3%q122r9   )r)   )r+   dict)r6   str)__name__
__module____qualname____firstlineno__r/   r7   rA   rF   rK   __static_attributes____classcell__)rH   s   @r.   r$   r$   2   s"    ,@	3-3 3r9   r$   c                ^   ^  U=(       d    T R                   nU 4S jnXl         SU 3Ul        U$ )Nc                    > T" U 0 UD6$ rD    )argskwargsfns     r.   fcreate_method.<locals>.fZ   s    4"6""r9   zndarray.)rO   rQ   )rZ   namer[   s   `  r.   create_methodr^   W   s0    2;;D# Jv&ANHr9   clipnonzerorepeatroundsqueezeswapaxesraveldiagonaldottraceargsortsearchsortedargmaxargminanyallmax)minptpsumprodmeanvarstdcumsumcumprodtakechooseabsolutepositivenegativegreaterlessgreater_equal
less_equal)absinvertposneggtltgelesubtractmultiplydividefloor_dividepower	remainderbitwise_and
bitwise_orbitwise_xor
left_shiftright_shift)addsubmultruedivfloordivpowmodandorxorlshiftrshiftmatmulc                n   [        U [        R                  5      (       an  U R                  [        R                  [        R
                  [        R                  [        R                  4;   a  U R                  [        R                  5      $  U $ [        U [        5      (       a  [        S U  5       5      $ U $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frD   )_upcast_int_indices).0is     r.   	<genexpr>&_upcast_int_indices.<locals>.<genexpr>   s     ;U(++U   )
isinstancetorchTensordtypeint8int16int32uint8toint64tupleindexs    r.   r   r      s}    %&&;;5::u{{EKKMM88EKK(( N L 
E5	!	!;U;;;Lr9   c                &    [        S U  5       5      $ )z&Check if there's any advanced indexingc              3    #    U  Hv  n[        U[        [        45      =(       dT    [        U[        R                  5      =(       a3    UR
                  [        R                  :H  =(       d    UR                  S :  v   Mx     g7fr   N)r   r   boolr   r   r   ndimr   idxs     r.   r   )_has_advanced_indexing.<locals>.<genexpr>   s_       C 	34() 	YsELL)WsyyEJJ/F/V#((UV,	Ys   A>B )rm   r   s    r.   _has_advanced_indexingr      s        r9   c                   [        U [        5      (       d  U 4n [        U 5      nU(       d  U $ / nU  H  n[        U[        5      (       a)  [        U[        5      (       d  UR                  U/5        MA  [        U[        R                  5      (       a]  UR                  S:X  aM  [        R                  " U5      (       d2  UR                  [        R                  :w  a  UR                  U/5        M  UR                  U5        M     [        U5      $ )zZConvert scalar indices to lists when advanced indexing is present for NumPy compatibility.r   )r   r   r   intr   appendr   r   r   is_floating_pointr   )r   has_advanced	convertedr   s       r.   _numpy_compatible_indexingr      s    eU## *%0L Ic3
3(=(=cU#sELL))A++C00		UZZ' cU# S!   r9   c                <   [        U [        5      (       a  g[        U [        R                  5      (       a,  U R                  [        R                  :X  a  SU R
                  4$ [        U [        5      (       a  U (       a	  U S   U :w  d  g[        U S   5      u  pXS-   4$ )z.Returns the depth of a boolean sequence/tensor)Tr   Tr   )Fr   r   )r   r   r   r   r   r   r   _get_bool_depth)sis_booldepths      r.   r   r      sy    !T!U\\""qww%**'<QVV|q(##adai$QqT*NGAIr9   c                  ^ [        U [        5      (       d  U 4n Sn[        U 5       H  u  p4U[        L d  M  Un  O   Uc  U S S 4$ SnU  H0  n[	        U5      u  pgU(       a  XW-  nM  U[        L d  Uc  M+  US-  nM2     X-
  nUS:X  af  [        U SU 5      n	[        XS-   S 5      n
U	(       aA  U
(       a:  U SU S-   XS-   S -   nS[        S XS-   S  5       5      -   mU4S jnU4S	 jnXU4$ U S
 S 4$ )a  
Patch for NumPy-compatible ellipsis behavior when ellipsis doesn't match any dimensions.

In NumPy, when an ellipsis (...) doesn't actually match any dimensions of the input array,
it still acts as a separator between advanced indices. PyTorch doesn't have this behavior.

This function detects when we have:
1. Advanced indexing on both sides of an ellipsis
2. The ellipsis doesn't actually match any dimensions
Nc                    U $ rD   rW   xs    r.   <lambda>-_numpy_empty_ellipsis_patch.<locals>.<lambda>   s    r9   c                    U $ rD   rW   r   s    r.   r   r      s    Qr9   r   r   rD   c              3  T   #    U  H  n[        U[        5      (       d  M  S v   M      g7f)r   N)r   slicer   s     r.   r   ._numpy_empty_ellipsis_patch.<locals>.<genexpr>  s       6c*S%:P6s   (	(c                (   > U R                  T* 5      $ rD   )rc   r   	end_ndimss    r.   
squeeze_fn/_numpy_empty_ellipsis_patch.<locals>.squeeze_fn  s    yy),,r9   c                   > [        U [        R                  5      (       a"  U R                  T:  a  U R	                  T* 5      $ U $ rD   )r   r   r   r   	unsqueezer   s    r.   unsqueeze_fn1_numpy_empty_ellipsis_patch.<locals>.unsqueeze_fn  s5    a..166Y3F;;	z22r9   c                    U $ rD   rW   r   s    r.   r   r   #  s    Ar9   c                    U $ rD   rW   r   s    r.   r   r   #  s    r9   )r   r   	enumerateEllipsisr   r   rr   )r   tensor_ndimellipsis_posr   r   consumed_dimsr   r   ellipsis_dimsleft_advancedright_advanced	new_indexr   r   r   s                 @r.   _numpy_empty_ellipsis_patchr      sD    eU## LE"(?L # k;.. M(-"MH_QM   /M .u]l/CD/Q6F6H0IJ^ m|,w6a?O?Q9RRIC  "!#3#56   I-
 ,66+{**r9   c                      \ rS rSrSrg)_Unspecifiedi(  rW   N)rO   rP   rQ   rR   rS   rW   r9   r.   r   r   (  s    r9   r   c                     \ rS rSrS<S jr\R                  5        H)  u  rr\	" \
\=(       d    \5      r\" \\5      \" 5       \'   M+     \" \R                  S5      r\" \R                  5      r\R                  5        H/  u  rr\	" \\=(       d    \5      rS\ S3r\" \\5      \" 5       \'   M1     \R                  5        He  u  rr\	" \\=(       d    \5      rS\ S3r\" \\5      \" 5       \'   S\ S3r\" \4S j\5      \" 5       \'   S\ S3r\" \4S	 j\5      \" 5       \'   Mg     \" \R,                  S
5      r\" S S5      rCCCCCC\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S 5       r#\S 5       r$\$RJ                  S 5       r$\S 5       r&\&RJ                  S 5       r&S=S jr'\(S>S?S jj5       r)\(S>S?S jj5       r*SS .S! jr+\,RZ                  \,RZ                  4S" jr.\(S@S# j5       r/S$ r0S% r1S& r2\" \25      r3S' r4S( r5S) r6S* r7S+ r8S, r9S- r:S. r;S/ r<S0 r=S1 r>SS2.S3 jr?SAS4 jr@S5 rAS6 rBS7 rC\
R                  rD\
R                  rESS8.S9 jrFS: rGS;rHg)Bndarrayi3  Nc                    Uc  [         R                  " 5       U l        g [        U[         R                  5      (       a  Xl        g [	        S5      e)NzSndarray constructor is not recommended; prefereither array(...) or zeros/empty(...))r   r   tensorr   
ValueError)r*   ts     r.   r/   ndarray.__init__4  s<    9,,.DK5<<((K8 r9   conj____rc                    U" X5      $ rD   rW   r*   otherrZ   s      r.   r   ndarray.<lambda>R  s    5r9   __ic                    U" XU S9$ )N)outrW   r   s      r.   r   r   U  s    r$4'@r9   
__divmod__c                .    [         R                  " X5      $ rD   )r	   divmodr*   r   s     r.   r   r   [  s    GNN57r9   __rdivmod__c                @    [        U R                  R                  5      $ rD   )r   r   shaper*   s    r.   r  ndarray.shapea  s    T[[&&''r9   c                6    U R                   R                  5       $ rD   )r   numelr  s    r.   sizendarray.sizee  s    {{  ""r9   c                .    U R                   R                  $ rD   )r   r   r  s    r.   r   ndarray.ndimi  s    {{r9   c                V    [         R                  " U R                  R                  5      $ rD   )r   r   r   r  s    r.   r   ndarray.dtypem  s    }}T[[..//r9   c                   ^ U R                   R                  5       m[        U4S jU R                   R                  5        5       5      $ )Nc              3  ,   >#    U  H	  oT-  v   M     g 7frD   rW   )r   strideelsizes     r.   r   "ndarray.strides.<locals>.<genexpr>t  s     H3Gf_3Gs   )r   element_sizer   r  )r*   r  s    @r.   stridesndarray.stridesq  s3    ))+H4;;3E3E3GHHHr9   c                6    U R                   R                  5       $ rD   )r   r  r  s    r.   itemsizendarray.itemsizev  s    {{''))r9   c                    [        U R                  R                  5       U R                  R                  R                  5       U R                  R                  S L SS.5      $ )NT)r   r   r   r   )r$   r   is_contiguousT_baser  s    r.   flagsndarray.flagsz  sO      $ 9 9 ; $ ; ; =;;,,4!	
 	
r9   c                6    U R                   R                  5       $ rD   )r   data_ptrr  s    r.   datandarray.data  s    {{##%%r9   c                R    U R                   R                  5       R                  5       $ rD   )r   storagenbytesr  s    r.   r&  ndarray.nbytes  s    {{""$++--r9   c                "    U R                  5       $ rD   )	transposer  s    r.   r  	ndarray.T  s    ~~r9   c                .    [         R                  " U 5      $ rD   )r   realr  s    r.   r,  ndarray.real      {{4  r9   c                L    [        U5      R                  U R                  l        g rD   )asarrayr   r,  r*   rG   s     r.   r,  r-        "5>00r9   c                .    [         R                  " U 5      $ rD   )r   imagr  s    r.   r4  ndarray.imag  r.  r9   c                L    [        U5      R                  U R                  l        g rD   )r0  r   r4  r1  s     r.   r4  r5    r2  r9   c                :   US:w  a  [        SU S35      eUS:w  a  [        SU S35      eU(       d  [        SU S35      eU(       d  [        SU S35      e[        R                  " U5      R                  nU R                  R                  U5      n[        U5      $ )NKzastype(..., order= is not implemented.unsafezastype(..., casting=zastype(..., subok=zastype(..., copy=)r>   r   r   torch_dtyper   r   r   )r*   r   ordercastingsubokcopyr;  r   s           r.   astypendarray.astype  s    C<%(:5'AU&VWWh%&wi/CD  %(:5'AU&VWW%(9$?S&TUUmmE*66KKNN;'qzr9   r   c                "    U R                  5       $ rD   )cloner*   r<  s     r.   r?  ndarray.copy  s    zz|r9   c                .    [         R                  " U 5      $ rD   )r   flattenrD  s     r.   rG  ndarray.flatten  s    }}T""r9   F)refcheckc               <   U(       a  [        SU S35      eUS;   a  g [        U5      S:X  a  US   n[        U[        5      (       a  U4n[        R
                  " S U 5       5      (       a  [        S5      e[        R                  " U5      U R                  R                  5       pCU R                  R                  U5        X4:  aW  U R                  R                  5       (       d  [        S5      eU R                  R                  5       nXTS  R                  5         g g )	Nzresize(..., refcheck=r9  )rW   rD   r   r   c              3  *   #    U  H	  oS :  v   M     g7fr   rW   r   r   s     r.   r   !ndarray.resize.<locals>.<genexpr>  s     1y!Ays   z0all elements of `new_shape` must be non-negativez0tensor must be contiguous for resize with growth)r>   lenr   r   builtinsrm   r   mathrs   r   r  resize_r  r(   rG  zero_)r*   rI  	new_shape	new_numel	old_numelbs         r.   resizendarray.resize  s    %'z1EF  % y>Q!!Ii%%"I<<1y111OPP#yy3T[[5F5F5H9I&!;;,,..$%WXX##%AjM! "r9   c                   U[         R                  L a  U R                  nU[         R                  La  [        SU S35      e[        R                  " U5      R
                  nU R                  R                  U5      n[        U5      $ )Nzview(..., type=r9  )	r   unspecifiedr   r>   r   r;  r   viewr   )r*   r   typer;  tviews        r.   r[  ndarray.view  sn    L,,,JJE|///%v=Q&RSSmmE*66  -u~r9   c                :    U R                   R                  U5        g rD   )r   fill_r1  s     r.   fillndarray.fill  s     	% r9   c                6    U R                   R                  5       $ rD   )r   tolistr  s    r.   rd  ndarray.tolist  s    {{!!##r9   c                D    S U R                   R                  5        5       $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frD   )r   rL  s     r.   r   #ndarray.__iter__.<locals>.<genexpr>  s     ;$:q

$:r   )r   __iter__r  s    r.   ri  ndarray.__iter__  s    ;DKK$8$8$:;;r9   c                l    [        U R                  5      R                  SS5      R                  SS5      $ )Nr   ztorch.ndarrayzdtype=torch.zdtype=)rN   r   replacer  s    r.   __str__ndarray.__str__  s+    WX/W^X.	
r9   c                     [         R                  " X5      $ ! [        [        4 a2    [        R
                  " U R                  S[        S9n[        U5      s $ f = f)NF)
fill_valuer   )	r	   equalRuntimeError	TypeErrorr   fullr  r   r0  )r*   r   falsys      r.   __eq__ndarray.__eq__  sJ    	"==--i( 	"JJtzze4HE5>!	"s    ?AAc                    X:H  ) $ rD   rW   r  s     r.   __ne__ndarray.__ne__  s    r9   c                     [         R                  " U R                  R                  5       5      $ ! [         a  n[        S5      UeS nAff = f)Nz=only integer scalar arrays can be converted to a scalar index)operatorr   r   item	Exceptionrs  )r*   excs     r.   	__index__ndarray.__index__   sF    	>>$++"2"2"455 	O	s   -0 
AAAc                ,    [        U R                  5      $ rD   )r   r   r  s    r.   __bool__ndarray.__bool__  s    DKK  r9   c                ,    [        U R                  5      $ rD   )r   r   r  s    r.   __int__ndarray.__int__  s    4;;r9   c                ,    [        U R                  5      $ rD   )floatr   r  s    r.   	__float__ndarray.__float__  s    T[[!!r9   c                ,    [        U R                  5      $ rD   )complexr   r  s    r.   __complex__ndarray.__complex__  s    t{{##r9   c                ~     U R                   R                  5       n[        U5      U:H  nU$ ! [         a    Sn U$ f = f)NF)r   r}  r   r~  )r*   vresults      r.   
is_integerndarray.is_integer  sH    	  "AVq[F   	F	s   (, <<c                4    U R                   R                  S   $ )Nr   )r   r  r  s    r.   __len__ndarray.__len__  s    {{  ##r9   c                8    U R                   R                  U5      $ rD   )r   __contains__)r*   r   s     r.   r  ndarray.__contains__  s    {{''**r9   c                .    [         R                  " X5      $ rD   )r   r)  )r*   axess     r.   r)  ndarray.transpose"  s    ++r9   r<  c               ,    [         R                  " XUS9$ )Nr  )r   reshape)r*   r<  r  s      r.   r  ndarray.reshape&  s    ~~d77r9   c           	     \    [         R                  " U [         R                  " XX#5      5        g rD   )r   copytosort)r*   axiskindr<  s       r.   r  ndarray.sort*  s    dFKKD@Ar9   c                    US:X  a  U R                   R                  5       $ [        U5      S:X  a  U R                  5       US      $ U R	                  U5      $ )NrW   r   r   )r   r}  rN  re   rA   )r*   rX   s     r.   r}  ndarray.item.  sO     2:;;##%%Y!^::<Q((##D))r9   c                z  ^^ U R                   mU4S jm[        U[        5      (       a%  [        U5      " U4S j[	        U5       5       5      nO	T" SU5      n[
        R                  " U5      n[        U5      n[        U5      n[        UTR                  5      u  pnU" [        TR                  U5      5      5      $ )Nc                  > [        U[        5      (       a  UR                  b  UR                  S:  d  U$ [        R                  " TU 45      m[        UR
                  [        5      (       d8  UR
                  b+  [        S[        UR
                  5      R                   35      e[        UR                  [        5      (       d8  UR                  b+  [        S[        UR                  5      R                   35      eUR                  (       a  UR                  S-   OS nUR
                  (       a  UR
                  S-   OS n[        X#UR                  * 5      $ )Nr   z%slice start must be int or None, got z$slice stop must be int or None, got r   )r   r   stepr   flipstartr   r(   r\  rO   stop)r   r   r  r  r   s       r.   neg_step%ndarray.__getitem__.<locals>.neg_step=  s    q%((QVV-?AFFQJ ZZ-F qww,,$;DM<R<R;ST  qvvs++qvv~$:4<;P;P:QR  #$&&AFFQJdE"#''177Q;tDqvvg..r9   c              3  8   >#    U  H  u  pT" X5      v   M     g 7frD   rW   )r   r   r   r  s      r.   r   &ndarray.__getitem__.<locals>.<genexpr>S  s     L;K41;Ks   r   )r   r   r   r\  r   r
   ndarrays_to_tensorsr   r   r   r   r   rA   )r*   r   maybe_squeeze_r  r   s       @@r.   rA   ndarray.__getitem__:  s    	/* eX&&KL9U;KLLEQ&E))%0#E**51"=eV[["QaWV%7%7%>?@@r9   c                   [         R                  " U5      n[        U5      n[        U5      n[	        XR
                  R                  5      u  pn[        R                  " U5      (       d5  [        U5      n[         R                  " X R
                  R                  5      nU R
                  R                  X" U5      5      $ rD   )r
   r  r   r   r   r   r   r   	is_scalarr   cast_if_neededr   rK   )r*   r   rG   r  maybe_unsqueezes        r.   rK   ndarray.__setitem__^  s    ))%0#E**51$?{{GWGW$X!/%%e,,(/E((0A0ABE{{&&uoe.DEEr9   streamc               4    U R                   R                  US9$ )Nr  )r   
__dlpack__)r*   r  s     r.   r  ndarray.__dlpack__o  s    {{%%V%44r9   c                6    U R                   R                  5       $ rD   )r   __dlpack_device__r  s    r.   r  ndarray.__dlpack_device__r  s    {{,,..r9   )r   rD   )r8  r:  TT)r   )r*   r   r<  r   )rG   r   )NN)IrO   rP   rQ   rR   r/   methodsitemsmethodr]   getattrr   rZ   r^   varsr	   	conjugater   dunder	ri_dunderplainrvarivarr   r   r  propertyr  r	  r   r   r  r  r  r"  r&  r  r,  setterr4  r@  r   r?  rG  rW  r   rZ  r[  ra  rd  ri  rm  __repr__rv  ry  r  r  r  r  r  r  r  r  r)  r  r  r}  rA   rK   ry   putr  r  rS   rW   r9   r.   r   r   3  s~   	  VT^V,&r62v (
 **F3Dg//0IWdnf-fXR&r62v '
 ")Wdnf-VHB%b%0uVHB$B%OQUVtVHB$#%@$
t * w~~|<J7K
 	dD%V( ( # #     0 0 I I * * 	
 	
 & & . .     ! ! 
[[1 1 ! ! 
[[1 1   # # +0 ": &118P8P  ! !
$<
 W%H" ! "$$+, %( 8B
*"AHF ;;D
**C#' 5/r9   r   c                
   / nU  Hz  n[        U[        [        45      (       a  [        U5      n[        U[        5      (       a+  UR                  UR                  R                  5       5        Mi  UR                  U5        M|     U$ )z'Recursively convert tensors into lists.)r   listr   _tolistr   r   r   rd  )obja1elems      r.   r  r  v  sc    	BdT5M**4=DdG$$IIdkk((*+IIdO  Ir9   Tr8  F)r?  r<  r>  ndminlikec               8   USLa  [        S5      eUb  [        S5      eUS:w  a  [         e[        U [        5      (       a  USL a  Uc  XPR                  ::  a  U $ [        U [        [
        45      (       a@  U (       a.  [        S U  5       5      (       a  [        R                  " U 5      n O[        U 5      n [        U [        5      (       a  U R                  n S nUb   [        R                  " U5      R                  n[        R                  " XX%5      n[        U5      $ )NFz#'subok' parameter is not supported.z"'like' parameter is not supported.r8  c              3  V   #    U  H  n[        U[        R                  5      v   M!     g 7frD   )r   r   r   rL  s     r.   r   array.<locals>.<genexpr>  s     @Cqz!U\\22Cs   '))r>   r   r   r   r  r   rn   r   stackr  r   r   r   r;  r
   _coerce_to_tensor)	r  r   r?  r<  r>  r  r  r;  r   s	            r.   arrayr    s    E!"GHH!"FGG|!! 	3  EMMXX
#e}%%3@C@@@++c"C #,C #wjj KmmE*66$$StCF6?r9   )r  c          	         [        XX#SSS9$ )NFr   )r   r<  r  r?  r  )r  )ar   r<  r  s       r.   r0  r0    s    ue1MMr9   c                   [        XUS9nUR                  R                  5       (       d  UR                  R                  5       Ul        U$ )N)r   r  )r0  r   r  
contiguous)r  r   r  arrs       r.   ascontiguousarrayr    s:    
!t
,C::##%%ZZ**,
Jr9   c               D    [         R                  " U 5      n[        U5      $ rD   )r   from_dlpackr   )r   r   s     r.   r  r    s    !A1:r9   c                     [         R                  " U 5      nU$ ! [         a    [        U 5      R                  n U$ f = frD   )r   r   r~  r0  )entrydtys     r.   _extract_dtyper    sA    #mmE" J  #en""J#s    ==c                    [        U 5      n [        U5      n[        R                  " U R                  UR                  U5      $ rD   )r  r   can_cast_implr;  )from_r   r=  to_s       r.   can_castr    s5    5!E

C%%e&7&7'RRr9   c                 X   / nU  H*  n [        U5      R                  nUR                  U5        M,     [        R                  " U6 n[
        R                  " U5      $ ! [        [        [        4 a8    [
        R                  " U5      n[        R                  " SUR                  S9n Nf = f)Nr   )r   )r0  r   rr  r   rs  r   r   r   emptyr;  r   r   result_type_impl)arrays_and_dtypestensorsr  r   r  r;  s         r.   result_typer    s    G"	6%%A 	q # //9K==%% j)4 	6--&CAS__5A	6s   AA
B)(B)rD   )Nr8  )safe)+
__future__r   rO  rP  r|  collections.abcr   r    r   r   r   r	   r
   _normalizationsr   r   r   r   newaxisr'   r<   r$   r^   r  r  r  r   r   r   r   r   r   rZ  r   r  r  r0  r  r  r  r  r  rW   r9   r.   <module>r      s=   #    $  ; ;  	 
						


 "3 "3J"
D"t" d" T	"
 t" " T" " 
4" T" t" D"  d!"" d#"$ 
4%"& 
4'"( 
4)"* C"J 



	
 
	"B	?+H	 	 (> @/ @/F

"%4s%qt %PNd NT 
S&r9   