o
    ‹¨ÊhÎ  ã                   @   s:   d Z ddlZddlmZ ddlmZ G dd„ dejƒZ	dS )z¹
    pyexcel.internal.sheets.row
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Generic table row

    :copyright: (c) 2015-2017 by Onni Software Ltd.
    :license: New BSD License
é    Né   )Ú_sharedc                   @   sZ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ddd„Zdd„ ZdS )ÚRowa[  Represent row of a matrix

    .. table:: "example.csv"

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

    Above column manipulation can be performed on rows similarly. This section
    will not repeat the same example but show some advance usages.


        >>> import pyexcel as pe
        >>> data = [[1,2,3], [4,5,6], [7,8,9]]
        >>> m = pe.internal.sheets.Matrix(data)
        >>> m.row[0:2]
        [[1, 2, 3], [4, 5, 6]]
        >>> m.row[0:3] = [0, 0, 0]
        >>> m.row[2]
        [0, 0, 0]
        >>> del m.row[0:2]
        >>> m.row[0]
        [0, 0, 0]

    c                 C   s^   g }t  |t¡rt || jj¡}n|}g }| j ¡ D ]}||vr%| |¡ q| jj	|d� dS )a,  Delete row indices other than specified

        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.row.select([1,2,3,5])
            >>> sheet
            pyexcel sheet:
            +---+
            | 2 |
            +---+
            | 3 |
            +---+
            | 4 |
            +---+
            | 6 |
            +---+

        ©Úrow_indicesN)
ÚcompactÚis_array_typeÚstrÚutilsÚnames_to_indicesÚ_refÚrownamesÚ	row_rangeÚappendÚfilter)ÚselfÚindicesÚnew_indicesÚ	to_removeÚindex© r   úM/var/www/html/env/lib/python3.10/site-packages/pyexcel/internal/sheets/row.pyÚselect-   s   )
€z
Row.selectc                 C   sú   t  t|ƒ¡r| j |¡ dS t  |¡r&t t|ƒ| jj	¡}| j 
|¡ dS t|tƒr<t || j ¡ ¡}| j 
|¡ dS t|tƒrL| jjt|ƒd� dS t|tƒrZ| jj|d� dS t|tjƒrg|  |¡ dS t|tjƒrt|  |¡ dS | j 
|g¡ dS )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.row[1,2,3,5]
            >>> sheet
            pyexcel sheet:
            +---+
            | 1 |
            +---+
            | 5 |
            +---+
            | 7 |
            +---+
            | 9 |
            +---+

        r   N)r   Ú	is_stringÚtyper   Údelete_named_row_atÚis_tuple_consists_of_stringsr
   r   Úlistr   Údelete_rowsÚ
isinstanceÚsliceÚanalyse_sliceÚnumber_of_rowsÚtupler   ÚtypesÚ
LambdaTypeÚ_delete_rows_by_contentÚFunctionType)r   Úlocatorr   Úmy_ranger   r   r   Ú__delitem__a   s"   )



zRow.__delitem__c                 C   s@   |}|| j jvr| dd¡}|| j jvrtd| ƒ‚| j  |¡S )z)
        Refer to sheet.row.name
        Ú_ú z%s is not found)r   r   ÚreplaceÚAttributeErrorÚnamed_row_at)r   ÚattrÚthe_attrr   r   r   Ú__getattr__�   s   zRow.__getattr__c                 C   sP   g }t | j ¡ ƒD ]\}}|||ƒr| |¡ q	t|ƒdkr&| j |¡ d S d S ©Nr   )Ú	enumerater   Úrowsr   Úlenr   )r   r(   r   r   Úrowr   r   r   r&   ©   s   

€ÿzRow._delete_rows_by_contentc                 C   sj   t  t|ƒ¡r| j ||¡ dS t|tƒr,t || j 	¡ ¡}|D ]	}| j 
||¡ q dS | j 
||¡ dS )z"Override the operator to set itemsN)r   r   r   r   Úset_named_row_atr   r    r
   r!   r"   Ú
set_row_at)r   ÚasliceÚa_rowr)   Úir   r   r   Ú__setitem__±   s   
ÿzRow.__setitem__c                 C   s€   |}t  t|ƒ¡r| j |¡S t|tƒr/t || j 	¡ ¡}g }|D ]}| 
| j |¡¡ q!|S t|ƒ| j ¡ v r>| j |¡S t‚)zNBy default, this class recognize from top to bottom
        from left to right)r   r   r   r   r/   r   r    r
   r!   r"   r   Úrow_atÚabsr   Ú
IndexError)r   r:   r   r)   Úresultsr<   r   r   r   Ú__getitem__¼   s   
zRow.__getitem__c                 C   sX   t |tjƒr| j |¡ | S t |tƒr| j |¡ | S t|dƒr*| j | ¡ ¡ | S t‚)z0Overload += sign

        :return: self
        Úget_internal_array)	r   r   ÚOrderedDictr   Úextend_rowsr   ÚhasattrrC   Ú	TypeError)r   Úotherr   r   r   Ú__iadd__Î   s   
ú
üÿzRow.__iadd__Nc                 C   sB   |dur|   ||¡ dS |r|D ]}|   |d |d ¡ qdS dS )zFormat a row
        Nr   r   )Ú_handle_one_formatter)r   Ú	row_indexÚ	formatterÚformat_specsÚspecr   r   r   ÚformatÝ   s   þz
Row.formatc                 C   sÆ   |}t | jjƒdkrt || jj¡}tj |¡}t|tƒrF| j 	¡ D ]!}||v rC| j 
¡ D ]}| j ||¡}||ƒ}| j |||¡ q-q"d S | j 
¡ D ]}| j ||¡}||ƒ}| j |||¡ qKd S r3   )r6   r   r   r
   r   ÚCommonPropertyAmongRowNColumnÚget_converterr   r   r   Úcolumn_rangeÚ
cell_value)r   r5   Útheformatterr   Ú	converterÚrindexÚcolumnÚvaluer   r   r   rJ   æ   s(   ÿ
€ûýzRow._handle_one_formatter)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r2   r&   r=   rB   rI   rO   rJ   r   r   r   r   r      s    4<
	r   )
r\   r$   Úpyexcel._compactÚ_compactr   Ú r   r
   rP   r   r   r   r   r   Ú<module>   s
    	