U
    ±[Öe*  ã                   @   sB   d Z ddl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-2022 by Onni Software Ltd.
    :license: New BSD License
é    N)Ú_compacté   )Ú_sharedc                   @   sb   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„ 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 ]}||kr4| |¡ q4| 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 |
            +---+

        ©Zrow_indicesN)
ÚcompactZis_array_typeÚstrÚutilsÚnames_to_indicesÚ_refÚrownamesÚ	row_rangeÚappendÚfilter)ÚselfÚindicesÚnew_indicesÚ	to_removeÚindex© r   ú]/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pyexcel/internal/sheets/row.pyÚselect/   s    )z
Row.selectc                 C   sì   t  t|ƒ¡r| j |¡ nÌt  |¡rHt t|ƒ| jj	¡}| j 
|¡ n t|tƒrrt || j ¡ ¡}| j 
|¡ nvt|tƒr| jjt|ƒd nXt|tƒrª| jj|d n>t|tjƒrÂ|  |¡ n&t|tjƒrÚ|  |¡ n| 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   Zdelete_named_row_atZ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__c   s"    )



zRow.__delitem__c                 C   s@   |}|| j jkr4| dd¡}|| j jkr4td| ƒ‚| j  |¡S )z)
        Refer to sheet.row.name
        Ú_ú z%s is not found)r   r   ÚreplaceÚAttributeErrorÚnamed_row_at)r   ÚattrZthe_attrr   r   r   Ú__getattr__Ÿ   s    zRow.__getattr__c                 C   sL   g }t | j ¡ ƒD ]\}}|||ƒr| |¡ qt|ƒdkrH| j |¡ d S ©Nr   )Ú	enumerater   Úrowsr   Úlenr   )r   r%   r   r   Úrowr   r   r   r#   «   s    
zRow._delete_rows_by_contentc                 C   sf   t  t|ƒ¡r| j ||¡ nDt|tƒrTt || j 	¡ ¡}|D ]}| j 
||¡ q>n| j 
||¡ dS )z"Override the operator to set itemsN)r   r   r   r   Zset_named_row_atr   r   r	   r   r   Z
set_row_at)r   ÚasliceZ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 |¡¡ qB|S t|ƒ| j ¡ kr|| j |¡S t‚dS )zNBy default, this class recognize from top to bottom
        from left to rightN)r   r   r   r   r,   r   r   r	   r   r   r   Zrow_atÚabsr   Ú
IndexError)r   r4   r   r&   Úresultsr5   r   r   r   Ú__getitem__¾   s    
zRow.__getitem__c                 C   sh   t |tjƒr | j t |¡¡ nDt |tƒr>| j t |¡¡ n&t|dƒr`| j t | 	¡ ¡¡ nt
‚| S )z0Overload += sign

        :return: self
        Úget_internal_array)r   r   ÚOrderedDictr   Úextend_rowsÚcopyÚdeepcopyr   Úhasattrr;   Ú	TypeError)r   Úotherr   r   r   Ú__iadd__Ð   s    

zRow.__iadd__c                 C   sl   | j  ¡ }t|tjƒr(| t |¡¡ n@t|tƒrD| t |¡¡ n$t	|dƒrd| t | 
¡ ¡¡ nt‚|S )z7Overload + sign

        :return: new instance
        r;   )r   Úcloner   r   r<   r=   r>   r?   r   r@   r;   rA   )r   rB   Znew_instancer   r   r   Ú__add__ß   s    


zRow.__add__Nc                 C   s<   |dk	r|   ||¡ n"|r8|D ]}|   |d |d ¡ qdS )zFormat a rowNr   r   )Ú_handle_one_formatter)r   Z	row_indexÚ	formatterZ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ƒrŠ| j 	¡ D ]B}||krD| j 
¡ D ]*}| j ||¡}||ƒ}| j |||¡ qZqDn6| j 
¡ D ]*}| j ||¡}||ƒ}| j |||¡ q”d S r/   )r2   r   r   r	   r
   ÚCommonPropertyAmongRowNColumnZget_converterr   r   r   Zcolumn_rangeZ
cell_value)r   r1   Ztheformatterr   Ú	converterÚrindexÚcolumnÚvaluer   r   r   rF   ÷   s"    ÿ
zRow._handle_one_formatter)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r.   r#   r6   r:   rC   rE   rI   rF   r   r   r   r   r      s   4<
r   )rR   r>   r!   Zpyexcelr   r   Ú r   r	   rJ   r   r   r   r   r   Ú<module>   s
   	