o
    ;Di                     @   s   d dl mZmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ dddZee_G d	d
 d
eZdd Z		dddZee_G dd deZdd ZdS )    )absolute_importprint_functiondivisionN)next	text_type)ArgumentError)TableFc                 C   s   t | ||||dS )a  
    Unpack data values that are lists or tuples. E.g.::

        >>> import petl as etl
        >>> table1 = [['foo', 'bar'],
        ...           [1, ['a', 'b']],
        ...           [2, ['c', 'd']],
        ...           [3, ['e', 'f']]]
        >>> table2 = etl.unpack(table1, 'bar', ['baz', 'quux'])
        >>> table2
        +-----+-----+------+
        | foo | baz | quux |
        +=====+=====+======+
        |   1 | 'a' | 'b'  |
        +-----+-----+------+
        |   2 | 'c' | 'd'  |
        +-----+-----+------+
        |   3 | 'e' | 'f'  |
        +-----+-----+------+

    This function will attempt to unpack exactly the number of values as
    given by the number of new fields specified. If there are more values
    than new fields, remaining values will not be unpacked. If there are less
    values than new fields, `missing` values will be added.

    See also :func:`petl.transform.unpacks.unpackdict`.

    )	newfieldsinclude_originalmissing)
UnpackView)tablefieldr	   r
   r    r   O/var/www/Datamplify/venv/lib/python3.10/site-packages/petl/transform/unpacks.pyunpack   s   r   c                   @   s"   e Zd Z		dddZdd ZdS )r   NFc                 C   s"   || _ || _|| _|| _|| _d S N)sourcer   r	   r
   r   )selfr   r   r	   r
   r   r   r   r   __init__3   s
   
zUnpackView.__init__c                 C   s   t | j| j| j| j| jS r   )
iterunpackr   r   r	   r
   r   r   r   r   r   __iter__;   s   zUnpackView.__iter__NFN__name__
__module____qualname__r   r   r   r   r   r   r   1   s
    
r   c                 #   s   t | }zt|}W n ty   g }Y nw ttt|} |v r(| nt tr: t	|k r: |  nt
dt|}|sI|  t|ttfrZ|| t	|}	n#t|trr|}	 fddt|D }|| n|d u ryd}	nt
dt|V  |D ]@}
|
 }|rt|
}nfddt|
D }t	|}|	dkr||	kr|d |	 }nt||g|	|   }|| t|V  qd S )Nz1field invalid: must be either field name or indexc                    s    g | ]}t  t |d   qS )   )r   ).0i)r   r   r   
<listcomp>Y   s     ziterunpack.<locals>.<listcomp>r   z\newfields argument must be list or tuple of field names, or int (number of values to unpack)c                    s   g | ]
\}}| kr|qS r   r   )r   r    v)field_indexr   r   r!   h   s    )iterr   StopIterationlistmapr   index
isinstanceintlenr   removetupleextendrange	enumerate)r   r   r	   r
   r   ithdrfldsouthdrnunpackrowvalueout_rownvalsnewvalsr   )r   r#   r   r   @   sR   







r     c                 C   s   t | |||||dS )a  
    Unpack dictionary values into separate fields. E.g.::

        >>> import petl as etl
        >>> table1 = [['foo', 'bar'],
        ...           [1, {'baz': 'a', 'quux': 'b'}],
        ...           [2, {'baz': 'c', 'quux': 'd'}],
        ...           [3, {'baz': 'e', 'quux': 'f'}]]
        >>> table2 = etl.unpackdict(table1, 'bar')
        >>> table2
        +-----+-----+------+
        | foo | baz | quux |
        +=====+=====+======+
        |   1 | 'a' | 'b'  |
        +-----+-----+------+
        |   2 | 'c' | 'd'  |
        +-----+-----+------+
        |   3 | 'e' | 'f'  |
        +-----+-----+------+

    See also :func:`petl.transform.unpacks.unpack`.

    )keysincludeoriginal
samplesizer   )UnpackDictViewr   r   r<   r=   r>   r   r   r   r   
unpackdicts   s   rA   c                   @   s"   e Zd Z		dddZdd ZdS )	r?   NFr;   c                 C   s(   || _ || _|| _|| _|| _|| _d S r   r@   )r   r   r   r<   r=   r>   r   r   r   r   r      s   
zUnpackDictView.__init__c                 C   s   t | j| j| j| j| j| jS r   )iterunpackdictr   r   r<   r=   r>   r   r   r   r   r   r      s   zUnpackDictView.__iter__NFr;   Nr   r   r   r   r   r?      s
    
	r?   c                 c   s:   t | }zt|}W n ty   g }Y nw ttt|}||}	t|}
|s,|
|	= |s]tt||}t	 }|D ]}z|t	||	 
 O }W q; tyR   Y q;w t||}t|}|
| t|
V  |D ]1}t|}|st||	= |D ]}z|||	 |  W qv tttfy   || Y qvw t|V  qid S r   )r$   r   r%   r&   r'   r   r(   	itertoolsislicesetr<   AttributeErrorchainsortedr.   r-   append
IndexErrorKeyError	TypeError)r   r   r<   r=   r>   r   r1   r2   r3   fidxr4   sampler6   outrowkeyr   r   r   rB      sJ   


rB   r   rC   )
__future__r   r   r   rD   petl.compatr   r   petl.errorsr   petl.util.baser   r   r   r   rA   r?   rB   r   r   r   r   <module>   s    
"3
