
    Ćh+U              	          S r SSKJrJrJrJrJr  SSKJr  SSK	r	 " S S5      r
S2S\S\S	\4S
 jjrS\S	\4S jrS\S	\4S jrS\S\S	\4S jrS\S	\4S jr " S S\
5      r " S S\5      r " S S\5      r " S S5      rS\S\S	\4S jrS\S	\\\4   4S jr " S S5      r " S  S!\5      r " S" S#\5      r " S$ S%\5      r " S& S'\5      r " S( S)\5      r " S* S+5      rS,\S	\\\4   4S- jr S,\S.\S/\\\!\"4   S	\#4S0 jr$S1 r%g)3z/Lower level layer for slicer.
Mom's spaghetti.
    )AnyAnyStrUnionListTuple)abstractmethodNc                   Z    \ rS rSrSrSS\S\S\\4   4S jjr	S\4S jr
S	\S\4S
 jrSrg)AtomicSlicer   aG  Wrapping object that will unify slicing across data structures.

What we support:
    Basic indexing (return references):
    - (start:stop:step) slicing
    - support ellipses
    Advanced indexing (return references):
    - integer array indexing

Numpy Reference:
    Basic indexing (return views):
    - (start:stop:step) slicing
    - support ellipses and newaxis (alias for None)
    Advanced indexing (return copy):
    - integer array indexing, i.e. X[[1,2], [3,4]]
    - boolean array indexing
    - mixed array indexing (has integer array, ellipses, newaxis in same slice)
omax_dimNc                 r    Xl         X l        U R                  S:X  a  [        R                  U5      U l        gg)a\  Provides a consistent slicing API to the object provided.

Args:
    o: Object to enable consistent slicing.
        Currently supports numpy dense arrays, recursive lists ending with list or numpy.
    max_dim: Max number of dimensions the wrapped object has.
        If set to "auto", max dimensions will be inferred. This comes at compute cost.
autoN)r   r   UnifiedDataHandler)selfr   r   s      iC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\slicer/slicer_internal.py__init__AtomicSlicer.__init__   s1     <<6!-55a8DL "    returnc                 j    U R                   R                   SU R                  R                  5        S3$ )zNOverride default repr for human readability.

Returns:
    String to display.
())	__class____name__r   __repr__)r   s    r   r   AtomicSlicer.__repr__-   s.     ..))*!DFFOO,=+>a@@r   itemc                     [        XR                  5      n[        R                  U R                  X R                  5      $ )zConsistent slicing into wrapped object.

Args:
    item: Slicing key of type integer or slice.

Returns:
    Sliced object.

Raises:
    ValueError: If slicing is not compatible with wrapped object.
)unify_slicer   r   slicer   )r   r   	index_tups      r   __getitem__AtomicSlicer.__getitem__5   s/      ll3	 "''	<<HHr   )r   r   r   )r   
__module____qualname____firstlineno____doc__r   r   intr   r   r   r#   __static_attributes__ r   r   r
   r
      sJ    &9# 9dC.?(@ 9A& AI I Ir   r
   r   r   r   c                 l    [        U 5      n [        U 5      n[        X15      nU(       a  [        X25      nU$ )zResolves aliases and ellipses in a slice item.

Args:
    item: Slicing key that is passed to __getitem__.
    max_dim: Max dimension of object to be sliced.
    alias_lookup: AliasLookup structure.

Returns:
    A tuple representation of the item.
)_normalize_slice_key_normalize_subkey_types_handle_newaxis_ellipses_handle_aliases)r   r   alias_lookupr"   s       r   r    r    H   s5      %D'-I(<I#I<	r   r"   c                 B   / n1 SknU  H  n[        USU5      (       a  [        U5      nOW[        USS5      (       aC  [        UR                  5      S:X  a  UR	                  5       nO[        SUR                   S35      eUnUR                  U5        M     [        U5      $ )zCasts subkeys into basic types such as int.

Args:
    key: Slicing key that is passed within __getitem__.

Returns:
    Tuple with subkeys casted to basic types.
>   int8int16int32int64uint8uint16uint32uint64numpyndarray   zCannot use array of shape z as subkey.)_safe_isinstancer*   lenshapetolist
ValueErrorappendtuple)r"   new_index_tupnp_int_typessubkey
new_subkeys        r   r/   r/   [   s     M	L FG\::VJfgy996<< A%#]]_
 #=fll^;!WXXJZ(  r   keyc                 6    [        U [        5      (       d  U 4$ U $ )zNormalizes slice key into always being a top-level tuple.

Args:
    key: Slicing key that is passed within __getitem__.

Returns:
    Expanded slice as a tuple.
)
isinstancerE   )rJ   s    r   r.   r.      s     c5!!v
r   c                 p  ^ S[         4m[        U4S jU  5       5      n/ nSnSnU  H  n[        U[        R                  5      (       a  US-  nUc  M,  U[         :X  ag  U(       a  [        S5      eSn[        U5      n[        U5      X'-
  -   U:  a2  UR                  [        S5      5        [        U5      X'-
  -   U:  a  M0  M  M  UR                  U5        M     [        U5      U:  a  [        S5      e[        U5      U:  a+  UR                  [        S5      5        [        U5      U:  a  M+  [        U5      $ )	aW  Expands newaxis and ellipses within a slice for simplification.
This code is mostly adapted from: https://github.com/clbarnes/h5py_like/blob/master/h5py_like/shape_utils.py#L111

Args:
    index_tup: Slicing key as a tuple.
    max_dim: Maximum number of dimensions in the respective sliceable object.

Returns:
    Expanded slice as a tuple.
Nc              3   ,   >#    U  H	  oT;  v   M     g 7fNr,   ).0idxnon_indexess     r   	<genexpr>+_handle_newaxis_ellipses.<locals>.<genexpr>   s     GYck1Ys   Fr   r>   z0an index can only have a single ellipsis ('...')Tztoo many indices for array)
EllipsissumrL   numbersNumber
IndexErrorr@   rD   r!   rE   )	r"   r   concrete_indices
index_listhas_ellipsis	int_countr   initial_lenrR   s	           @r   r0   r0      s&    "KGYGGJLIdGNN++NI <X !STTLj/Kj/%5%CDwN!!%+. j/%5%CDwNN d#! $ : 566
j/G
#%+& j/G
# r   c                    ^ / nU4S jn[        U 5       HV  u  pE[        U[        5      (       a#  / nU H  nUR                  U" Xt5      5        M     OU" XT5      nUR                  U5        MX     [	        U5      $ )Nc                 Z   > [        U [        5      (       a  U $ TR                  XU 5      n U $ rO   )rL   r!   get)r   dimr2   s     r   resolve _handle_aliases.<locals>.resolve   s,    dE""K40r   )	enumeraterL   listrD   rE   )r"   r2   rF   rc   rb   r   new_itemsub_items    `      r   r1   r1      st    M y)	dD!!H  67 ! t)HX& * r   c            
       L   ^  \ rS rSrSrSS\S\\\\	S\
4   4U 4S jjjrSrU =r$ )	Tracked   z,Tracked defines an object that slicer wraps.r   rb   Nc                   > [         TU ]  U5        SU l        US:X  a$  [        [	        U R
                  5      5      U l        gUc  / U l        g[        U[        5      (       a	  U/U l        g[        U[        5      (       a  X l        g[        U[        5      (       a  [        U5      U l        g[        S[        U5       35      e)zDefines an object that will be wrapped by slicer.

Args:
    o: Object that will be tracked for slicer.
    dim: Target dimension(s) slicer will index on for this object.
Nr   zCannot handle dim of type: )superr   _namerf   ranger   rb   rL   r*   rE   rC   typer   r   rb   r   s      r   r   Tracked.__init__   s     	 
 &=E$,,/0DH[DHS!!uDHT""HU##CyDH:49+FGGr   )rn   rb   r%   )r   r&   r'   r(   r)   r   r   r*   r   rE   strr   r+   __classcell__r   s   @r   rj   rj      s2    7H# HE#tUD#*E$F H Hr   rj   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )Obj   zAn object that slicer wraps. c                 $   > [         TU ]  X5        g rO   )rm   r   rq   s      r   r   Obj.__init__   s     r   r,   r%   r   r&   r'   r(   r)   r   r+   rt   ru   s   @r   rw   rw      s    (! !r   rw   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Alias   zADefines a tracked object as well as additional __getitem__ keys. c                    > [        U[        5      (       d5  [        U[        [        45      (       a  [	        U5      S::  d  [        S5      e[        TU ]  X5        g )Nr>   z%Aliases must track a single dimension)rL   r*   rf   rE   r@   rC   rm   r   rq   s      r   r   Alias.__init__   sD    sC  ZdE]%C%CCTUDEE r   r,   r{   ru   s   @r   r}   r}      s    L! !r   r}   c                   0    \ rS rSrS rS rS rSS jrSrg)	AliasLookup   c                 f    0 U l         UR                  5        H  u  p#U R                  U5        M     g rO   )_lookupitemsupdate)r   aliases_aliass       r   r   AliasLookup.__init__   s)      HAKK (r   c                    UR                   b  [        UR                   5      S:X  a  g UR                   S   nX R                  ;  a  0 U R                  U'   U R                  U   n[        UR                  [
        5      (       a  [        UR                  5      OUR                  R                  5       nU H)  u  pVXc;  a  [        5       X6'   X6   R                  U5        M+     g Nr   )
rb   r@   r   rL   r   rf   re   r   setaddr   r   rb   
dim_lookupitrixs          r   r   AliasLookup.update  s    99EII! 3iilll" "DLL\\#&
$.uww$=$=i 577==?DA" #
Ma  r   c                     UR                   S   nU R                  U   n[        UR                  [        5      (       a  [        UR                  5      OUR                  R                  5       nU H  u  pVX6	 M	     g)z'Delete an alias that exists from lookupr   N)rb   r   rL   r   rf   re   r   r   s          r   deleteAliasLookup.delete  sX    iil\\#&
$.uww$=$=i 577==?DA r   Nc                     XR                   ;  a  U$ U R                   U   R                  US 5      nUc  U$ [        U5      S:X  a  [        [	        U5      5      $ [        U5      $ )Nr>   )r   ra   r@   nextiterrf   )r   rb   targetdefaultindexess        r   ra   AliasLookup.get   s[    ll"N,,s#''5?Nw<1W&&= r   )r   rO   )	r   r&   r'   r(   r   r   r   ra   r+   r,   r   r   r   r      s    ! !r   r   slicer_index
slicer_dimc           	      $   / n/ n[        U 5       HI  u  pE[        U[        [        [        45      (       a  UR                  S5        M8  UR                  S5        MK     U H-  nX6   S:X  d  M  UR                  U[        USU 5      -
  5        M/     U$ )z[Extracts new dim after applying slicing index and maps it back to the original index list. r   r>   N)re   rL   rE   rf   r!   rD   rV   )r   r   new_slicer_dimreduced_maskr   curr_idxcurr_dims          r   resolve_dimr   .  s     NL .he 455""	 / !Q&!!(Six1H-I"IJ  r   trackedc                 v    U  Vs/ s H  oR                   PM     nn[        U5      S:X  a  US   nU$ UnU$ s  snf )Nr>   r   )r   r@   )r   toss      r   	reduced_or   A  sA    	w!##wB	b'Q,ABI %'BI 
 s   6c                   v    \ rS rSr\\S 5       5       r\\SS j5       5       r\\S 5       5       r\S 5       r	Sr
g)	BaseHandleriG  c                     [        5       erO   NotImplementedError)clsr   r"   r   s       r   
head_sliceBaseHandler.head_sliceH       "##r   c                     [        5       erO   r   r   r   
tail_indexr   flattens        r   
tail_sliceBaseHandler.tail_sliceM  r   r   c                     [        5       erO   r   r   r   s     r   r   BaseHandler.max_dimR  r   r   c                     / $ rO   r,   r   s     r   default_aliasBaseHandler.default_aliasW  s    	r   r,   NT)r   r&   r'   r(   classmethodr   r   r   r   r   r+   r,   r   r   r   r   G  sh    $  $ $  $ $  $  r   r   c                   X    \ rS rSr\S 5       r\SS j5       r\S 5       r\S 5       rSr	g)	SeriesHandleri\  c                 d    US   n[        U[        5      (       a  SOSnUR                  U   nXVS4$ )Nr   TFr>   rL   r*   iloc)r   r   r"   r   
head_index
is_elementsliced_os          r   r   SeriesHandler.head_slice]  s7    q\
'
C88Te
66*%Q&&r   c                     [        XS9U   $ Nr   r
   r   s        r   r   SeriesHandler.tail_slicee       A/
;;r   c                 ,    [        UR                  5      $ rO   r@   rA   r   s     r   r   SeriesHandler.max_dimk      177|r   c                 ^    [        UR                  R                  5       S5      nSUl        U/$ )Nr   index)r}   r   to_listrn   )r   r   index_aliass      r   r   SeriesHandler.default_aliaso  s)    AGGOO-q1#}r   r,   Nr   
r   r&   r'   r(   r   r   r   r   r   r+   r,   r   r   r   r   \  sP    ' ' < <
    r   r   c                   X    \ rS rSr\S 5       r\SS j5       r\S 5       r\S 5       rSr	g)	DataFrameHandleriv  c                 d    Un[        US   [        5      (       a  SOSnUR                  U   nXVS4$ )NTF   r   )r   r   r"   r   	cut_indexr   r   s          r   r   DataFrameHandler.head_slicew  s9     	'	"s;;T
66)$Q&&r   c                     [        XS9U   $ r   r   r   s        r   r   DataFrameHandler.tail_slice  r   r   c                 ,    [        UR                  5      $ rO   r   r   s     r   r   DataFrameHandler.max_dim  r   r   c                     [        UR                  R                  5       S5      nSUl        [        UR                  R                  5       S5      nSUl        X#/$ )Nr   r   r>   columns)r}   r   r   rn   r   )r   r   r   column_aliass       r   r   DataFrameHandler.default_alias  sK    AGGOO-q1#QYY..0!4&**r   r,   Nr   r   r,   r   r   r   r   v  sP    ' ' < <
   + +r   r   c                   H    \ rS rSr\S 5       r\SS j5       r\S 5       rSrg)ArrayHandleri  c           	         US   USS  pTSnU H8  n[        U[        5      (       d  U[        UR                  5      :X  a    O	US-  nM:     US U n[	        U V	s/ s H  n	[        U	[
        5      (       a  SOSPM     sn	5      n
X   nXU4$ s  sn	f )Nr   r>   TF)rL   rs   r@   rA   anyr*   )r   r   r"   r   r   r   cut	sub_indexr   r   r   r   s               r   r   ArrayHandler.head_slice  s     "+1y}J#I)S))SCL-@1HC $ dsO	SA*Q"4"4$%?ST
<S(( Ts   #B
c                 L  ^ U(       a  [        USS5      (       a)  [        UR                  5       R                  5       US9U   $ [        USS5      (       a)  [        UR                  5       R                  5       US9U   $ [        USS5      (       a)  [        UR                  5       R                  5       US9U   $ [        USS	5      (       a)  [        UR                  5       R                  5       US9U   $ [        XS9U   $ U Vs/ s H  n[        XSS9U   PM     snm[        US
S5      (       ap  SS Kn[        T5      S:  a/  [        TS   S5      (       a  [        U4S jT 5       5      (       + nOSnU(       a  UR                  T[        S9$ UR                  T5      $ [        USS5      (       aS  SS K
n[        T5      S:  a/  [        TS   UR                  5      (       a  UR                  T5      $ UR                  T5      $ [        USS5      (       a  SSKJn	  U	" TSS9n
U
$ [        USS5      (       a  SSKJn	  U	" TSS9n
U
$ [        USS5      (       a  SSKJn	  U	" TSS9n
U
$ [        USS	5      (       a  SSKJn	  U	" TSS9n
U
$ [#        S[%        U5       S35      es  snf )Nscipy.sparse.csc
csc_matrixr   scipy.sparse.csr
csr_matrixscipy.sparse.dok
dok_matrixscipy.sparse.lil
lil_matrixr<   r=   r   __len__c              3   X   >#    U  H  n[        U5      [        TS    5      :H  v   M!     g7f)r   N)r@   )rP   r   inners     r   rS   *ArrayHandler.tail_slice.<locals>.<genexpr>  s"     $LeSVs58}%<es   '*F)dtypetorchTensor)vstackcsc)formatcsrdoklilzCannot handle type .)r?   r
   toarrayr   r<   r@   hasattrallarrayobjectr  rL   r  stacktensorscipy.sparser  rC   rp   )r   r   r   r   r   er<   raggedr  r  outr   s              @r   r   ArrayHandler.tail_slice  sc     #5|DD#AIIK$7$7$97KJWW!!%7FF#AIIK$7$7$97KJWW!!%7FF#AIIK$7$7$97KJWW!!%7FF#AIIK$7$7$97KJWW#A7
CCKLM1a\!5jA1ME7I66u:>geAh	&B&B!$$Le$L!LLF"F ;;uF;;; ;;u--!!Wh77u:>jq5<<&H&H ;;u-- <<..!!%7FF/U51
!!%7FF/U51
!!%7FF/U51
!!%7FF/U51
 #6tAwiq!ABBG Ns   J!c                     [        USS5      (       aA  UR                  S:X  a1  [        U Vs/ s H  n[        R	                  U5      PM     snSS9S-   $ [        UR                  5      $ s  snf )Nr<   r=   r  r   r   r>   )r?   r   maxr   r   r@   rA   r   r   r   s      r   r   ArrayHandler.max_dim  s^    Aw	22qww(7JqAq!*2215qA2NQRRRqww< Bs   A)r,   Nr   	r   r&   r'   r(   r   r   r   r   r+   r,   r   r   r   r     s?    ) )" 3C 3Cj    r   r   c                   H    \ rS rSr\S 5       r\SS j5       r\S 5       rSrg)DictHandleri  c           
      ^   US   n[        U[        [        45      (       a  [        U5      S:X  a  SUS4$ [        U[        [        45      (       a!  SU Vs0 s H  nU[	        XS9U   _M     snS4$ [        U[
        5      (       a  U[        S S S 5      :X  a  SUS4$ SX   S4$ SX   S4$ s  snf )Nr   Fr>   r   T)rL   rE   rf   r@   r
   r!   )r   r   r"   r   r   r   s         r   r   DictHandler.head_slice  s    q\
j5$-00S^q5H!Q;j4-00 &0%/	 |A?	JJ%/   
E**U4t44a{"!-**))s   B*c           
          U(       a  [        XS9U   $ UR                  5        VVs0 s H  u  pVU[        XcS9U   _M     snn$ s  snnf r   )r
   r   )r   r   r   r   r   kr  s          r   r   DictHandler.tail_slice  sQ    3J?? MNGGILUDA<3J??I  s   Ac                     [        UR                  5        Vs/ s H  n[        R                  U5      PM     snSS9S-   $ s  snf Nr   r  r>   )r  valuesr   r   r  s      r   r   DictHandler.max_dim  s:    188:F:a&..q1:FPRSVWWWFs   A r,   Nr   r  r,   r   r   r  r    s>    * **   X Xr   r  c                   H    \ rS rSr\S 5       r\SS j5       r\S 5       rSrg)ListTupleHandleri	  c                    US   n[        U[        [        45      (       a  [        U5      S:X  a  SUS4$ [        U[        [        45      (       aW  [        U5      S:X  a  SUS4$ U Vs/ s H  n[	        XS9U   PM     nn[        U[        5      (       a  [        U5      OUnSUS4$ [        U[
        5      (       a  SX   S4$ [        U[        5      (       a  SX   S4$ [        SU SU 35      es  snf )Nr   Fr>   r   TzInvalid key z for )rL   rE   rf   r@   r
   r!   r*   rC   )r   r   r"   r   r   r   resultss          r   r   ListTupleHandler.head_slice
  s   q\
j5$-00S^q5H!Q;j4-00:!#a{" &0%/	 !4Y?%/   -7q%,@,@%.ggq((
E**!-**
C(())|J<uQC@AAs   (C0c                     U(       a  [        XS9U   $ U Vs/ s H  n[        XSS9U   PM     nn[        U[        5      (       a  [        U5      $ U$ s  snf r   )r
   rL   rE   )r   r   r   r   r   r  r*  s          r   r   ListTupleHandler.tail_slice!  sT    3J??MNOQ|A7
CQGO%/5%9%95>FwF Ps   Ac                 n    [        U Vs/ s H  n[        R                  U5      PM     snSS9S-   $ s  snf r$  )r  r   r   r  s      r   r   ListTupleHandler.max_dim)  s2    1=1a&..q11=rJQNN=s   2r,   Nr   r  r,   r   r   r(  r(  	  sB    B B, G G O Or   r(  c                   f    \ rS rSrSr \\\\\\\\\\\	S.r
\S 5       r\S 5       r\S 5       rSrg)	r   i.  z6Registry that maps types to their unified slice calls.))builtinsrf   )r1  rE   )r1  dict)r  r  )r<   r=   )r   r   )r   r   )r   r   )r   r   )zpandas.core.frame	DataFrame)zpandas.core.seriesSeriesc                    [        U[        [        45      (       a  [        U5      S:X  a  U$ [	        U5      nU R
                  U   R                  nU R
                  U   R                  nU" XU5      u  pxn	U" XU	S  X9-
  U5      n
U
$ r   )rL   rE   rf   r@   
_type_nametype_mapr   r   )r   r   r"   r   o_typer   r   r   r   r   r  s              r   r!   UnifiedDataHandler.slice@  s     i%//C	Na4GH A\\&)44
\\&)44
$.qW$E!
cST?GM:N
r   c                 t    [        U5      nX R                  ;  a  gU R                  U   R                  U5      $ r   )r6  r7  r   r   r   r8  s      r   r   UnifiedDataHandler.max_dimP  s2    A%||F#++A..r   c                 v    [        U5      nX R                  ;  a  0 $ U R                  U   R                  U5      $ rO   )r6  r7  r   r;  s      r   r    UnifiedDataHandler.default_aliasW  s4    A%I||F#11!44r   r,   N)r   r&   r'   r(   r)   r(  r  r   r   r   r7  r   r!   r   r   r+   r,   r   r   r   r   .  sl    AG./))*,8,8,8,8,<*7H   / / 5 5r   r   r   c                 l    [        U R                  R                  5      U R                  R                  4$ rO   )_handle_module_aliasesr   r&   r   )r   s    r   r6  r6  _  s&    !!++"8"891;;;O;OOOr   module_name	type_namec                     [        U 5      u  p4[        U[        5      (       a  X1:H  =(       a    XB:H  $ X1:H  =(       a    XB;   $ rO   )r6  rL   rs   )r   rA  rB  o_moduler8  s        r   r?   r?   c  s?     "!}H)S!!&>6+>>&>6+>>r   c                 2    SSSSS.nUR                  X 5      $ )Nr   r   r   r   )zscipy.sparse._csczscipy.sparse._csrzscipy.sparse._dokzscipy.sparse._lil)ra   )rA  
module_maps     r   r@  r@  m  s(    
 0///	J >>+33r   rO   )&r)   typingr   r   r   r   r   abcr   rW   r
   r*   r    r/   r.   r0   r1   rj   rw   r}   r   r   r   r   r   r   r   r  r(  r   r  rs   r6  r   rE   boolr?   r@  r,   r   r   <module>rJ     s  
 3 2  :I :Izc C u &! u !  ! Hc e ) ) ) )X u  u  .Hl H<!' !!G !,! ,!^e  $ &w 5s#3  *K 4+{ +:N ; N b"X+ "XJ"O{ "OJ.5 .5bP& PU38_ P???,1#sE/,B?	?
4r   