
    Hfn*                     X    d Z ddlZddlZddlmZ ddlmZ  G d dej	                  Z
dS )z
    pyexcel.internal.sheets.column
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Generic table column

    :copyright: (c) 2015-2022 by Onni Software Ltd.
    :license: New BSD License
    N)_compact   )_sharedc                   P    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 ZddZd Zd
S )Columnap  Represent columns of a matrix

    .. table:: "example.csv"

        = = =
        1 2 3
        4 5 6
        7 8 9
        = = =

    Let us manipulate the data columns on the above data matrix::

        >>> import pyexcel as pe
        >>> data = [[1,2,3], [4,5,6], [7,8,9]]
        >>> m = pe.internal.sheets.Matrix(data)
        >>> m.column[0]
        [1, 4, 7]
        >>> m.column[2] = [0, 0, 0]
        >>> m.column[2]
        [0, 0, 0]
        >>> del m.column[1]
        >>> m.column[1]
        [0, 0, 0]
        >>> m.column[2]
        Traceback (most recent call last):
            ...
        IndexError

    c                 &   g }t          j        |t                    r t          j        || j        j                  }n|}g }| j                                        D ]}||vr|                    |           | j        	                    |           dS )a]  
        Examples:

            >>> import pyexcel as pe
            >>> data = [[1,2,3,4,5,6,7,9]]
            >>> sheet = pe.Sheet(data)
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+---+---+---+---+
            | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
            +---+---+---+---+---+---+---+---+
            >>> sheet.column.select([1,2,3,5])
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+
            | 2 | 3 | 4 | 6 |
            +---+---+---+---+
            >>> data = [[1,2,3,4,5,6,7,9]]
            >>> sheet = pe.Sheet(data)
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+---+---+---+---+
            | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
            +---+---+---+---+---+---+---+---+
            >>> sheet.column.select([1,2,3,5])
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+
            | 2 | 3 | 4 | 6 |
            +---+---+---+---+
            >>> data = [
            ...     ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
            ...     [1,2,3,4,5,6,7,9],
            ... ]
            >>> sheet = pe.Sheet(data, name_columns_by_row=0)
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+---+---+---+---+
            | a | b | c | d | e | f | g | h |
            +===+===+===+===+===+===+===+===+
            | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
            +---+---+---+---+---+---+---+---+
            >>> del sheet.column['a', 'b', 'i', 'f'] # doctest:+ELLIPSIS
            Traceback (most recent call last):
                ...
            ValueError: ...
            >>> sheet.column.select(['a', 'c', 'e', 'h'])
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+
            | a | c | e | h |
            +===+===+===+===+
            | 1 | 3 | 5 | 9 |
            +---+---+---+---+
        column_indicesN)
compactis_array_typestrutilsnames_to_indices_refcolnamescolumn_rangeappendfilter)selfindicesnew_indices	to_removeindexs        `/var/www/ffwdstore.be/apps/py-env/lib/python3.11/site-packages/pyexcel/internal/sheets/column.pyselectzColumn.select1   s    p  #.. 	"0$):LMMKK!K	Y++-- 	( 	(EK''  '''		22222    c                    t          j        t          |                    ot          | j        d          }|r| j                            |           dS t          j        |          rHt          j        t          |          | j        j
                  }| j                            |           dS t          |t                    rHt          j        || j                                                  }| j                            |           dS t          |t                     r1t          j        |          }| j                            |g           dS t          |t$                    r,t          |          }| j                            |           dS t          |t                    r|}| j                            |           dS t          |t(                    r| j                            |g           dS t          |t*          j                  r|                     |           dS t          |t*          j                  r|                     |           dS t2          )a  Override the operator to delete items

        Examples:

            >>> import pyexcel as pe
            >>> data = [[1,2,3,4,5,6,7,9]]
            >>> sheet = pe.Sheet(data)
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+---+---+---+---+
            | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
            +---+---+---+---+---+---+---+---+
            >>> del sheet.column[1,2,3,5]
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+
            | 1 | 5 | 7 | 9 |
            +---+---+---+---+
            >>> data = [
            ...     ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
            ...     [1,2,3,4,5,6,7,9],
            ... ]
            >>> sheet = pe.Sheet(data, name_columns_by_row=0)
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+---+---+---+---+
            | a | b | c | d | e | f | g | h |
            +===+===+===+===+===+===+===+===+
            | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
            +---+---+---+---+---+---+---+---+
            >>> del sheet.column['a', 'b', 'i', 'f'] # doctest:+ELLIPSIS
            Traceback (most recent call last):
                ...
            ValueError: ...
            >>> del sheet.column['a', 'c', 'e', 'h']
            >>> sheet
            pyexcel sheet:
            +---+---+---+---+
            | b | d | f | g |
            +===+===+===+===+
            | 2 | 4 | 6 | 7 |
            +---+---+---+---+

        delete_named_column_atr	   N)r   	is_stringtypehasattrr   r   is_tuple_consists_of_stringsr   r   listr   delete_columns
isinstancesliceanalyse_slicenumber_of_columnsr   excel_column_indextupler   inttypes
LambdaType_delete_columns_by_contentFunctionType
IndexError)r   asliceis_sheetr   my_ranger   s         r   __delitem__zColumn.__delitem__t   sA   Z $T&\\22 
wI/8
 8
  	I,,V444441&99 	,T&\\49;MNNGI$$W-----&& 	*	3355 H I$$X.....$$ 	,V44EI$$eW-----&& 	6llGIG44444%% 
	GIG44444$$ 	I$$fX..... 011 	++F33333 233 	++F33333r   c                    g }t          | j                                                  D ]&\  }} |||          r|                    |           't	          |          dk    r| j                            |           d S d S Nr   )	enumerater   columnsr   lenr$   )r   locatorr   r   columns        r   r.   z!Column._delete_columns_by_content   s    	&ty'8'8':':;; 	( 	(ME6wuf%% (  '''y>>AI$$Y///// r   c                 p   t          j        t          |                    ot          | j        d          }|r| j                            ||           dS t          |t                    rNt          j	        || j        
                                          }|D ]}| j                            ||           dS t          |t                    r1t          j        |          }| j                            ||           dS t          |t                    r| j                            ||           dS t          )z"Override the operator to set itemsset_named_column_atN)r   r   r    r!   r   r=   r%   r&   r   r'   r(   set_column_atr   r)   r+   r0   )r   r1   a_columnr2   r3   ir   s          r   __setitem__zColumn.__setitem__   s<   $T&\\22 
wI,8
 8
  	I))&(;;;;;&& 	*	3355 H  5 5	''844445 5$$ 	,V44EI##E844444$$ 	I##FH55555r   c                    |}t          j        t          |                    ot          | j        d          }|r| j                            |          S t          |t                    rbt          j	        || j        
                                          }g }|D ]/}|                    | j                            |                     0|S t          |t                    rt          j        |          }t          j        |          | j                                        v r| j                            |          S t"          )zNBy default, this class recognize from top to bottom
        from left to rightnamed_column_at)r   r   r    r!   r   rC   r%   r&   r   r'   r(   r   	column_atr   r)   absr   r0   )r   r1   r   r2   r3   resultsr@   s          r   __getitem__zColumn.__getitem__   s2    $T&\\22 
wI(8
 8
  
	9,,V444&& 	*	3355 H G 7 7ty221556666Nfc"" 	5,V44E9Uty5577779&&u--- r   c                    t          |t          j                  r-| j                            t          j        |                     nt          |t                    r-| j                            t          j        |                     nVt          |d          r?| j        	                    t          j        |
                                                     nt          | S )z0Overload += sign

        :return: self
        get_internal_array)r%   r   OrderedDictr   extend_columnscopydeepcopyr#   r!   extend_columns_with_rowsrI   	TypeError)r   others     r   __iadd__zColumn.__iadd__   s    
 eW011 		I$$T]5%9%9::::t$$ 	I$$T]5%9%9::::U011 	I..e668899    Or   c                    | j                                         }t          |t          j                  r(|                    t          j        |                     nt          |t                    r(|                    t          j        |                     nQt          |d          r:|
                    t          j        |                                                     nt          |S )z6Overload + sign
        :return: new instance
        rI   )r   cloner%   r   rJ   rK   rL   rM   r#   r!   rN   rI   rO   )r   rP   new_instances      r   __add__zColumn.__add__
  s     y((eW011 		''e(<(<====t$$ 	''e(<(<====U011 	11e668899    Or   c                     |}|| j         j        vr6|                    dd          }|| j         j        vrt          d|z            | j                             |          S )z,
        Refer to sheet.column.name
        _ z%s is not found)r   r   replaceAttributeErrorrC   )r   attrthe_attrs      r   __getattr__zColumn.__getattr__  sh     ty)))''S11Hty111$%6%=>>>y((222r   Nc                     ||                      ||           dS |r'|D ]&}|                      |d         |d                    %dS dS )zFormat a columnNr   r   )_handle_one_formatter)r   column_index	formatterformat_specsspecs        r   formatzColumn.format(  sp    #&&|Y????? 	=$ = =**47DG<<<<	= 	== =r   c                    |}t          | j        j                  dk    rt          j        || j        j                  }t          j                            |          }t          |t                    r| j        	                                D ]d}||v r^| j        
                                D ]D}| j                            ||          } ||          }| j                            |||           Eed S | j        
                                D ]D}| j                            ||          } ||          }| j                            |||           Ed S r6   )r9   r   r   r   r   CommonPropertyAmongRowNColumnget_converterr%   r#   r   	row_range
cell_value)r   r8   theformatterr   	converterrcolumnrowvalues           r   r_   zColumn._handle_one_formatter0  sj   ty!""Q&&0$):LMMK7EE
 
	 k4(( 	>91133 B Bk))#y2244 B B $	 4 4S' B B )	% 0 0	,,S'5AAAAB B y**,, > >	,,S+>>!	%((	$$S+u====> >r   )NNN)__name__
__module____qualname____doc__r   r4   r.   rA   rG   rQ   rU   r]   rd   r_    r   r   r   r      s         <A3 A3 A3FJ J JX0 0 0  *  6  $  $
3 
3 
3= = = => > > > >r   r   )rr   rL   r,   pyexcelr   r    r   r   rf   r   rs   r   r   <module>rv      s       ' ' ' ' ' '      q> q> q> q> q>U0 q> q> q> q> q>r   