
    >ieJ"                    ~    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	 Zd
 ZdS )z Dataframe optimizations     )annotationsN)configcore)	Blockwise
fuse_rootsoptimize_blockwise)HighLevelGraph)cullfuse)ensure_dictc                   t          |t          t          f          s|g}t          t          j        |                    }t          | t
                    s%t          j        t          |           | d          } n3t          | |          } t          | |          } t          | |          } |                     t          |                    } t          j        d          s| S |                                 }t          |           } t          j        d          }|d}t!          | |||          \  } }t          | |          \  } }| S )N )dependencies)keyszoptimization.fuse.activezoptimization.fuse.subgraphsT)r   fuse_subgraphs)
isinstancelistsetr   flattenr	   from_collectionsidoptimize_dataframe_getitemr   r   r
   r   getget_all_dependenciesr   r   )dskr   kwargsr   r   _s         7lib/python3.11/site-packages/dask/dataframe/optimize.pyoptimizer      sE   dT3K(( vT""##Dc>** )-bggsLLL )4888 40004(((
((3t99

C
 :011 
++--L
c

CZ =>>N!%	  FC #t__FCJ    c                    ddl m fd j                                        D             }d d  j                                         j                                        }|D ]t                      }t          fd|D                       r. j                 }t           fd|D                       r fd|D             d	hd	d
hfvrn fd|D             }||z
  }t          |          dk    rfd|r|                                }t           j        |                   dk    rЉ j        t           j        |                   d                  }	 |	          rM |	          d	k    r>|	j        d         d         }
|t          t          |
t                    r|
n|
g          z  }nUt           fd|D                       ss|D ]J} j        |         j        d         d         }
|t          t          |
t                    r|
n|
g          z  }K fd|D             }         }|                    |          }|j        |j        k    rt          |          sJ |                                D ]\  }}|j        |j        d         d         f|j        d         f}|j        |j        |j                 i}t%          |j        |j        |j        |||j        |j                  }||<   |j        h||<   |                              ||j        <   ||j        <   |j        |j        k    r|j        = t1          |          }|S )Nr   )DataFrameIOLayerc                :    g | ]\  }}t          |          |S r   )r   ).0kvr"   s      r   
<listcomp>z.optimize_dataframe_getitem.<locals>.<listcomp><   s-    UUUtq!ZCS5T5TUUUUr    c                    t          | t                    sdS | j        | j                 d         t          j        k    rdS dS )NFr   T)r   r   r   outputoperatorgetitem)layers    r   _is_selectionz1optimize_dataframe_getitem.<locals>._is_selection>   sC     %++ 	5 9U\"1%)9995tr    c                    | j         d         \  }}|Ct          |t          t          t          t
          j        f          st          j        |          rdS dS )N   column-selectionrow-selection)indicesr   tuplestrr   npndarrayisscalar)r,   keyinds      r   _kindz)optimize_dataframe_getitem.<locals>._kindK   sR     =#S;#sD"*=>> *"+cBRBR *))r    c              3  p   K   | ]0}t          |t                             j        |d          k    V  1dS )r   N)r   r3   name)r$   xio_layer_namelayerss     r   	<genexpr>z-optimize_dataframe_getitem.<locals>.<genexpr>a   sW       
 
34
1e@T@T
=!&!A$.
 
 
 
 
 
r    c              3  D   K   | ]} j         |                   V  d S Nr?   )r$   r%   r-   r   s     r   r@   z-optimize_dataframe_getitem.<locals>.<genexpr>|   s3      >>A==A//>>>>>>r    c                <    h | ]} j         |                   S r   rC   r$   r%   r:   r   s     r   	<setcomp>z-optimize_dataframe_getitem.<locals>.<setcomp>|   s<     C
 C
 C
%&EE#*Q-  C
 C
 C
r    r0   r1   c                H    h | ]} j         |                   d k    |S )r1   rC   rE   s     r   rF   z-optimize_dataframe_getitem.<locals>.<setcomp>   s3    XXX1cjm0D0D0W0WQ0W0W0Wr    r/   c                j     |k    rdS  |         }|rt           fd|D                       S dS )NTc              3  2   K   | ]} |          V  d S rB   r   )r$   dep
_walk_deps
dependentssuccesss     r   r@   zAoptimize_dataframe_getitem.<locals>._walk_deps.<locals>.<genexpr>   sB        =@JJz388     r    F)all)rL   r8   rM   depsrK   s   ` ` r   rK   z.optimize_dataframe_getitem.<locals>._walk_deps   sm    g~~tc?D       DH      ur    c              3  <   K   | ]} j         ||          V  d S rB   )rL   )r$   col_select_layerrK   r   s     r   r@   z-optimize_dataframe_getitem.<locals>.<genexpr>   sI        $ 
3>+;=MNN     r    c                ,    i | ]}|j         |         S r   rC   )r$   rJ   r   s     r   
<dictcomp>z.optimize_dataframe_getitem.<locals>.<dictcomp>   s!    >>>#cjo>>>r    )dask.layersr"   r?   itemscopyr   r   anyrL   rN   lenpopr   r2   r   project_columnsr<   	numblocksr   r)   output_indicesr   concatenatenew_axesr	   )r   r   	io_layersr   columnsrO   row_select_layerscol_select_layersrow_select_layer_layer	selectionrQ   update_blocksoldnew	block_keyblocknew_indicesr[   	new_blocknew_hlgr"   r-   r:   rK   r>   r?   s   `                    @@@@@@r   r   r   3   s   
 -,,,,, VUUUsz//11UUUI     Z__F#((**L" N! N!%%  
 
 
 
 
8<
 
 
 
 
 	  ~m,* >>>>>>>>>> 	 C
 C
 C
 C
 C
*.C
 C
 C
   1
C
 C
  YXXXXXXX #44  !!A%%
		 		 		 		 		.  	  144663>"234499ZS^4D%E F Fq IJF}V$$ v:L)L)L"N1-a0	3!+It!<!<MII9+         (9       !2 	V 	V
#34<Q?BIs
9d(C(CT99)UUUGG ?>>>>>> ]#!!'**8sx}%%%%%$1$7$7$9$9 5 5 	5 !$%-*:1*=>a@PQ Xusx'@A	%L(I%N 	 %.y!+.8*Y''%1%5%5m%D%DL"sx8sxsx V\22GNr    )__doc__
__future__r   r*   numpyr5   daskr   r   dask.blockwiser   r   r   dask.highlevelgraphr	   dask.optimizationr
   r   
dask.utilsr   r   r   r   r    r   <module>rv      s      " " " " " "              D D D D D D D D D D . . . . . . ( ( ( ( ( ( ( ( " " " " " "! ! !Hv v v v vr    