o
    NrfL"                     @  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s!tjt| | dd} nt| |d} t	| |d} t
| |d} | t|} tdsA| S |  }t| } td}|d u rTd}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   `/var/www/html/software/conda/envs/catlas/lib/python3.10/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 r9q&j }t	fdd
|D r[fdd|D dhddhfvr\q&fdd|D }|| }t
|dkrqq&fdd|r| }t
j| dkrq&jtj| d  }	|	r|	dkr|	jd d }
|tt|
tr|
n|
gO }nq&t	fdd
|D sq&|D ]}j| jd d }
|tt|
tr|
n|
gO }qÇfdd|D } }||}|j|jkr@t
|sJ | D ]6\}}|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rP|j= q&t|}|S )Nr   DataFrameIOLayerc                   s   g | ]\}}t | r|qS r   )r   ).0kvr   r   r   
<listcomp><   s    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 rt|ttttjfst|rd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r4   r   r   )r&   r   r   r   r5   |   s    c                   s   h | ]	} j | qS r   r7   r8   r0   r   r   r   	<setcomp>|   s    z-optimize_dataframe_getitem.<locals>.<setcomp>r(   r)   c                   s"   h | ]} j | d kr|qS )r)   r7   r8   r9   r   r   r:      s   " r'   c                   s6   |krdS  | }|rt  fdd|D S dS )NTc                 3  s    | ]	} |V  qd S r6   r   r   dep)
_walk_deps
dependentssuccessr   r   r5      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 r6   )r>   )r   col_select_layer)r=   r   r   r   r5      s
    
c                   s   i | ]}| j | qS r   r7   r;   )r   r   r   
<dictcomp>   s    z.optimize_dataframe_getitem.<locals>.<dictcomp>)Zdask.layersr   r4   itemscopyr   r   anyr>   r@   lenpopr   r*   r   Zproject_columnsr1   	numblocksr   r"   Zoutput_indicesr   ZconcatenateZnew_axesr   )r   r   Z	io_layersr   columnsrA   Zrow_select_layersZcol_select_layersZrow_select_layerZ_layerZ	selectionrB   Zupdate_blocksoldnewZ	block_keyblockZnew_indicesrI   Z	new_blockZnew_hlgr   )r   r&   r0   r=   r   r3   r4   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    $