
    Ćh"                     P    S 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
   " S S5      rg)z>Public facing layer for slicer.
The little slicer that could.
   )AtomicSlicerAliasObjAliasLookupTrackedUnifiedDataHandler)	reduced_oresolve_dimunify_slicec                      ^  \ rS rSrSrS r\S 5       r\S 5       rS r	U 4S jr
U 4S jrU 4S	 jrS
 rS rSS jrS rSrU =r$ )Slicer
   z1Provides unified slicing to tensor-like objects. c                 D    U R                   R                  " U /UQ70 UD6  g)a{  Wraps objects in args and provides unified numpy-like slicing.

Currently supports (with arbitrary nesting):

- lists and tuples
- dictionaries
- numpy arrays
- pandas dataframes and series
- pytorch tensors

Args:
    *args: Unnamed tensor-like objects.
    **kwargs: Named tensor-like objects.

Examples:

    Basic anonymous slicing:

    >>> from slicer import Slicer as S
    >>> li = [[1, 2, 3], [4, 5, 6]]
    >>> S(li)[:, 0:2].o
    [[1, 2], [4, 5]]
    >>> di = {'x': [1, 2, 3], 'y': [4, 5, 6]}
    >>> S(di)[:, 0:2].o
    {'x': [1, 2], 'y': [4, 5]}

    Basic named slicing:

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame({'A': [1, 3], 'B': [2, 4]})
    >>> ar = np.array([[5, 6], [7, 8]])
    >>> sliced = S(first=df, second=ar)[0, :]
    >>> sliced.first
    A    1
    B    2
    Name: 0, dtype: int64
    >>> sliced.second
    array([5, 6])

N)	__class___init_slicer)selfargskwargss      `C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\slicer/slicer.py__init__Slicer.__init__   s!    T 	##D:4:6:    c                 T    U R                  U 5      nU R                  " U/UQ70 UD6  U$ )zEAlternative to SUPER SLICE
Args:
    *args:
    **kwargs:

Returns:

)__new__r   )clsr   r   slicer_instances       r   from_slicerSlicer.from_slicer9   s0     ++c*:4:6:r   c                 4   SUl         / Ul        0 Ul        0 Ul        S Ul        UR                  SU5        UR                  5        H  u  pEUR                  XE5        M     [        UR                  5      n[        UR                  5      n[        UR                  5      nUS:H  US:H  -  (       aj  US:X  ac  S n	UR                  5        H  u  pUn	M	     [        R                  " U	R                  5      nU H  nUR                  UR                  U5        M!     g g g )N    or   )_max_dim_anon_objects_aliases_alias_lookup__setattr__itemslen_iter_trackedr   default_aliasr!   _name)r   r   r   r   keyvalueobjects_lenanon_lenaliases_lenobj_tgenerated_aliasesgenerated_aliass                 r   r   Slicer._init_slicerG   s    $%  !##% #% (,% 	##C. !,,.JC''3 ) /223,,-/223A(a-0kQ6FC'557 8 !3 @ @ G#4++O,A,A?S $5 7G0r   c                    [        XR                  U R                  5      n/ n0 nU R                  SS9 H  u  pV[	        UR
                  5      S:X  a  UnOS[        USS9nXR
                     n	Xi   n
[        X&R
                  5      nUR                  X5      nUR                  Ul	        US:X  a  UR                  U5        M  XtU'   M     U R                  R                  " U0 UD6$ )NT)include_aliasesr    r   )max_dimr!   )r   r"   r&   r*   r)   dimr   r
   r   r,   appendr   )r   item	index_tupnew_args
new_kwargsnametrackednew_trackedindex_slicerslicer_indexsliced_o
sliced_dims               r   __getitem__Slicer.__getitem__f   s    mmT5G5GH	
!///EMD7;;1$%+IqA+KK8"0(KK@
%//E$+MM!s{,#.4  F" ~~))8BzBBr   c                 >  > UR                  S5      (       a  [        [        U ]  U5      $ US:X  a  [	        U R
                  5      $ U R                  R                  US5      nUc  U R                  R                  US5      nUc  [        SU S35      eUR                  $ )zOverride default getattr to return tracked attribute.

Args:
    item: Name of tracked attribute.
Returns:
    Corresponding object.
r3   r!   NzAttribute 'z' does not exist.)
startswithsuperr   __getattr__r	   r#   r$   getr%   AttributeErrorr!   )r   r=   rB   r   s      r   rM   Slicer.__getattr__}   s     ??324883;TZZ((mm''d3G--++D$7${4&8I%JKK99r   c                   > UR                  S5      (       a  [        [        U ]  X5      $ U R                  R                  US5      nU R                  R                  US5      n[        XS5      bP  US:w  aJ  [        U[        5      (       d5  U(       a  [        X#R                  S9nOU(       a  [        X$R                  S9n[        U[        5      (       a  Xl        X R                  U'   U(       a  U R                  U	 U R                  c  [        U R                  5      U l        gU(       a  U R                  R!                  U5        U R                  R#                  U5        gUS:X  a{  U Vs/ s H%  n[        U[        5      (       d  [        U5      OUPM'     nnX`l        U H  nU R'                  U5        M     [)        U R$                  5      n[        [        U ]  X5        gU(       a(  U R                  R!                  U5        U R                  U	 [        U[        5      (       d  [        U5      OUnXl        X R                  U'   U R'                  U5        [        [        U ]  XR*                  5        gs  snf )zOverride default setattr to sync tracking of slicer.

Args:
    key: Name of tracked attribute.
    value: Either an Obj, Alias or Python Object.
r3   Nr!   )r;   )rK   rL   r   r'   r$   rN   r%   getattr
isinstancer   r   r;   r   r,   r&   r   deleteupdater#   _update_max_dimr	   r!   )
r   r-   r.   old_obj	old_aliasxrB   r4   osr   s
            r   r'   Slicer.__setattr__   s    >>#23>> --##C.MM%%c40	 4d#/C3JeW--;;7E!%]];EeU##K!&MM#MM#& !!)%0%?"&&--i8""))%0czLQREqAs););3q6BER$
 A((+ ! tzz*fd/8&&--i8c**4UC*@*@E
e!%*c"$$U+fd/WW=! Ss   -,I8c                   > UR                  S5      (       a  [        [        U ]  U5      $ U R                  R                  US5        U R                  R                  US5        US:X  a  U R                  R                  5         U R                  5         [        U R                  5      U l        [        [        U ]  U5        g)zlOverride default delattr to remove tracked attribute.

Args:
    item: Name of tracked attribute to delete.
r3   Nr!   )rK   rL   r   __delattr__r$   popr%   r#   clear_recompute_max_dimr   r&   )r   r=   r   s     r   r]   Slicer.__delattr__   s     ??32488 	$%$%3;JJ 	! )7 	fd'-r   c                     U R                   n0 nUR                  5        H!  u  p4UR                  S5      (       a  M  XBU'   M#     U R                  R                   S[        U5       S3$ )zNOverride default repr for human readability.

Returns:
    String to display.
r3   ())__dict__r(   rK   r   __name__str)r   origdir-   r.   s        r   __repr__Slicer.__repr__   s^     }}**,JC>>#&&3 ' ..))*!CG9A66r   c                 d    [        U R                  [        UR                  SS9S-   5      U l        g )Ndefaultr   )maxr"   r;   )r   rB   s     r   rV   Slicer._update_max_dim   s$    DMM3w{{B+G!+KLr   c              #      #    U R                    H	  nSU4v   M     U R                  R                  5        H
  u  p2X24v   M     U(       a)  U R                  R                  5        H
  u  p2X24v   M     g g 7f)Nr!   )r#   r$   r(   r%   )r   r9   rB   rA   s       r   r*   Slicer._iter_tracked   sg     zzGw, "!]]002MD- 3!%!4!4!6m# "7 s   A3A5c                     [        U R                  5        VVs/ s H  u  p[        UR                  SS9S-   PM     snnSS9U l        g s  snnf )Nrm   rn   r   r    )rp   r*   r;   r"   )r   r3   r!   s      r   r`   Slicer._recompute_max_dim   sC    484F4F4HI4HDAS#a'4HIST
Is   #A	
)r&   r#   r"   )F)rf   
__module____qualname____firstlineno____doc__r   classmethodr   r   rH   rM   r'   r]   rj   rV   r*   r`   __static_attributes____classcell__)r   s   @r   r   r   
   sf    <*;X   T T<C..6>p.27M$
 
r   r   N)ry   slicer_internalr   r   r   r   r   r   r	   r
   r   r    r   r   <module>r      s%   
 ` _ @ @w
 w
r   