o
    ;Di~                     @   s   d dl mZmZmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZ dd Zee_ee_d	d
 Zee_ee_dd Zee_ee_dd Zee_ee_dddZee_dddZee_dddZee_G dd deZdS )    )absolute_importprint_functiondivisionN)OrderedDict)islice)izip_longest	text_typenext)	asindicesTablec                 C      dd | D S )Nc                 S      g | ]}t |qS  list.0rowr   r   N/var/www/Datamplify/venv/lib/python3.10/site-packages/petl/util/materialise.py
<listcomp>       zlistoflists.<locals>.<listcomp>r   tblr   r   r   listoflists      r   c                 C      t dd | D S )Nc                 s       | ]}t |V  qd S Ntupler   r   r   r   	<genexpr>       z tupleoftuples.<locals>.<genexpr>r   r   r   r   r   tupleoftuples      r"   c                 C   r   )Nc                 S   r   r   r   r   r   r   r   r      r   z listoftuples.<locals>.<listcomp>r   r   r   r   r   listoftuples   r   r$   c                 C   r   )Nc                 s   r   r   r   r   r   r   r   r    &   r!   ztupleoflists.<locals>.<genexpr>r   r   r   r   r   tupleoflists%   r#   r%   c           	      C   s   t  }t| }zt|}W n ty   g }Y nw ttt|}|D ]}t ||< q"|D ]}t|||dD ]\}}||v rD|| | q5q,|S )ap  
    Construct a :class:`dict` mapping field names to lists of values. E.g.::

        >>> import petl as etl
        >>> table = [['foo', 'bar'], ['a', 1], ['b', 2], ['b', 3]]
        >>> cols = etl.columns(table)
        >>> cols['foo']
        ['a', 'b', 'b']
        >>> cols['bar']
        [1, 2, 3]

    See also :func:`petl.util.materialise.facetcolumns`.

    	fillvalue)	r   iterr	   StopIterationr   mapr   r   append)	tablemissingcolsithdrfldsfr   vr   r   r   columns-   s"   r4   c                 C   s   t  }t| }zt|}W n ty   g }Y nw ttt|}t||}t|dks/J dt	j
| }|D ]7}	||	}
|
|vrRt  }|D ]}t ||< qE|||
< n||
 }t||	|dD ]\}}||v rl|| | q]q6|S )a  
    Like :func:`petl.util.materialise.columns` but stratified by values of the
    given key field. E.g.::

        >>> import petl as etl
        >>> table = [['foo', 'bar', 'baz'],
        ...          ['a', 1, True],
        ...          ['b', 2, True],
        ...          ['b', 3]]
        >>> fc = etl.facetcolumns(table, 'foo')
        >>> fc['a']
        {'foo': ['a'], 'bar': [1], 'baz': [True]}
        >>> fc['b']
        {'foo': ['b', 'b'], 'bar': [2, 3], 'baz': [True, None]}

    r   zno key field selectedr&   )dictr(   r	   r)   r   r*   r   r
   lenoperator
itemgetterr   r+   )r,   keyr-   fctr/   r0   r1   indicesgetkeyr   kvr.   r2   r3   r   r   r   facetcolumnsP   s2   


r>   c                 C   s   t | |dS )z
    Wrap the table with a cache that caches up to `n` rows as they are initially
    requested via iteration (cache all rows be default).

    )n)	CacheView)r,   r?   r   r   r   cache   s   rA   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	r@   Nc                 C   s   || _ || _t | _d| _d S NF)innerr?   r   rA   cachecomplete)selfrC   r?   r   r   r   __init__   s   
zCacheView.__init__c                 C   s   t  | _d| _d S rB   )r   rA   rD   )rE   r   r   r   
clearcache   s   
zCacheView.clearcachec                 c   s    | j D ]}|V  q| jsBt| j}t|t| j d D ]}| jr(t| j | jk r.| j | |V  q| jr=t| j | jk rDd| _d S d S d S )NT)rA   rD   r(   rC   r   r6   r?   r+   )rE   r   r/   r   r   r   __iter__   s   


zCacheView.__iter__r   )__name__
__module____qualname__rF   rG   rH   r   r   r   r   r@      s    
r@   r   )
__future__r   r   r   r7   collectionsr   	itertoolsr   petl.compatr   r   r	   petl.util.baser
   r   r   lolr"   totr$   lotr%   tolr4   r>   rA   r@   r   r   r   r   <module>   s2    
 
-

