a
    vDfL"                     @  s   d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ d	d
 Zdd ZdS )z Dataframe optimizations     )annotationsN)configcore)	Blockwise
fuse_rootsoptimize_blockwise)HighLevelGraph)cullfuse)ensure_dictc                 K  s   t |ttfs|g}tt|}t | tsBtjt| | dd} n$t| |d} t	| |d} t
| |d} | t|} tds| S |  }t| } td}|d u rd}t| |||d\} }t| |\} }| S )N )dependencies)keyszoptimization.fuse.activezoptimization.fuse.subgraphsT)r   fuse_subgraphs)
isinstancelistsetr   flattenr   Zfrom_collectionsidoptimize_dataframe_getitemr   r   r	   r   getZget_all_dependenciesr   r
   )dskr   kwargsr   r   _r   r   d/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/dask/dataframe/optimize.pyoptimize   s0    



r   c              
     s  ddl m   fddj D }dd dd j j }|D ]^t }tfd	d
|D rrqLj }t	fdd
|D rLfdd|D dhddhfvrqLfdd|D }|| }t
|dkrqLfdd|r| }t
j| dkrqLjtj| d  }	|	rL|	dkrL|	jd d }
|tt|
tr`|
n|
gO }nqLt	fdd
|D sqL|D ]8}j| jd d }
|tt|
tr|
n|
gO }qfdd|D } }||}|j|jkrt
|sJ | D ]l\}}|j|jd d f|jd f}|j|j|j i}t|j|j|j|||j|j}||< |jh||< q|||j< ||j< |j|jkrL|j= qLt|}|S )Nr   DataFrameIOLayerc                   s   g | ]\}}t | r|qS r   )r   ).0kvr   r   r   
<listcomp><       z.optimize_dataframe_getitem.<locals>.<listcomp>c                 S  s,   t | tsdS | j| j d tjkr(dS dS )NFr   T)r   r   r   outputoperatorgetitem)layerr   r   r   _is_selection>   s
    
z1optimize_dataframe_getitem.<locals>._is_selectionc                 S  s<   | j d \}}|d u r8t|ttttjfs4t|r8dS dS )N   column-selectionrow-selection)indicesr   tuplestrr   npZndarrayZisscalar)r&   keyindr   r   r   _kindK   s
    z)optimize_dataframe_getitem.<locals>._kindc                 3  s*   | ]"}t |tr  j|d  kV  qdS )r   N)r   r,   name)r   x)io_layer_namelayersr   r   	<genexpr>a   s   z-optimize_dataframe_getitem.<locals>.<genexpr>c                 3  s   | ]} j | V  qd S Nr5   r   r   )r'   r   r   r   r6   |   r"   c                   s   h | ]} j | qS r   r8   r9   r1   r   r   r   	<setcomp>|   s   z-optimize_dataframe_getitem.<locals>.<setcomp>r)   r*   c                   s"   h | ]} j | d kr|qS )r*   r8   r9   r:   r   r   r;      r"   r(   c                   s:   |krdS  | }|r2t  fdd|D S dS d S )NTc                 3  s   | ]} |V  qd S r7   r   r   dep)
_walk_deps
dependentssuccessr   r   r6      s   zAoptimize_dataframe_getitem.<locals>._walk_deps.<locals>.<genexpr>F)all)r?   r/   r@   deps)r>   )r?   r@   r   r>      s    z.optimize_dataframe_getitem.<locals>._walk_depsc                 3  s   | ]} j ||V  qd S r7   )r?   )r   col_select_layer)r>   r   r   r   r6      s   c                   s   i | ]}| j | qS r   r8   r<   )r   r   r   
<dictcomp>   r"   z.optimize_dataframe_getitem.<locals>.<dictcomp>)Zdask.layersr   r5   itemscopyr   r   anyr?   rA   lenpopr   r+   r   Zproject_columnsr2   	numblocksr   r#   Zoutput_indicesr   ZconcatenateZnew_axesr   )r   r   Z	io_layersr   columnsrB   Zrow_select_layersZcol_select_layersZrow_select_layerZ_layerZ	selectionrC   Zupdate_blocksoldnewZ	block_keyblockZnew_indicesrJ   Z	new_blockZnew_hlgr   )r   r'   r1   r>   r   r4   r5   r   r   3   s    



$
"
	


r   )__doc__
__future__r   r$   numpyr.   Zdaskr   r   Zdask.blockwiser   r   r   Zdask.highlevelgraphr   Zdask.optimizationr	   r
   Z
dask.utilsr   r   r   r   r   r   r   <module>   s   $