
    biH1                    .   d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ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
lmZmZ d dlm Z m!Z!m"Z"  G d de      Z# G d de#      Z$ G d de$      Z% G d de      Z& G d de&      Z'y)    )annotationsN)merge_sortedunique)flatten)methods)AsType	BlockwiseExpr
ProjectionToFrameare_co_aligneddetermine_column_projection)_convert_to_list)	make_metameta_nonemptyconcat_and_check)
check_metastrip_unknown_categories)applyis_dataframe_likeis_series_likec                     e Zd Zg dZddi ddddZd Zed        Zej                  d        Z
d	 Zej                  d
        Zej                  d        Zej                  d        Zej                  d        Zd Zd Zy)Concat)joinignore_orderaxisignore_unknown_divisionsinterleave_partitions_kwargsouterFr   )r   r   r    r   r   r   c                    dt        | j                               z   dz   dj                  | j                               z   }t	        |       j
                   d| dS )Nzframes=z, ())strdependenciesr   _operands_for_reprtype__name__)selfss     [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/dask_expr/_concat.py__str__zConcat.__str__-   sd    $##%&' ii//123 	
 t*%%&as!,,    c                "    | j                         S N)r&   r*   s    r,   _frameszConcat._frames6   s      ""r.   c           
     \   t        t        j                  | j                  D cg c]H  }|j                  dk  s"t        |j                  j                        dkD  rt        |j                        J c}f| j                  d| j                  | j                  d| j                        S c c}w )N   r   F)r   filter_warningr   r   )r   r   concatr2   ndimlen_metacolumnsr   r   r   r   r    r*   dfs     r,   r9   zConcat._meta:   s     NN #llww{c"((*:*:&;a&? ""((+ YY$YY!.. ,,
 	
s   AB)c           
        | j                   }| j                  dk(  r| j                  r| j                   D ch c]  }|j                   c}dhk(  rHt	        t        |D cg c]  }|j                   c}t                    }t        |      t        |      fS |d   j                  S | j                  rLt        t        t        |D cg c]  }|j                   c}             }t        |      dk(  r
|d   |d   f}|S dt        d |D              dz   z  S | j                  r2g }|d d D ]  }||j                  d d z  } ||d   j                  z  }|S | j                  rX| j                   rLt        t        t        |D cg c]  }|j                   c}             }t        |      dk(  r
|d   |d   f}|S d gt#        d |D              dz   z  S c c}w c c}w c c}w c c}w )N   )	containerr   r0   c              3  4   K   | ]  }|j                     y wr0   npartitions.0r<   s     r,   	<genexpr>z$Concat._divisions.<locals>.<genexpr>\   s     !?R"..!?   c              3  4   K   | ]  }|j                     y wr0   rA   rC   s     r,   rE   z$Concat._divisions.<locals>.<genexpr>j   s     :R^^:rF   )r2   r   #_are_co_alinged_or_single_partitionrB   setr   	divisionstupleminmax_all_known_divisionslistr   r   r8   _monotonic_divisionsr   sum)r*   dfsr<   erK   s        r,   
_divisionszConcat._divisionsL   s   ll99>77-1\\:rBNN:qcA #c : :eL!I y>3y>991v'''** c6Rr||6R(S!TU	y>Q&!*1y| <I  c!?3!??!CDD$$I#2h /R\\#2..	/ R***I&&4+E+EVL#2NB2<<2N$OPQI9~"&q\9Q<8	v:c::Q>??3 ; :
 7S 3Os   GGG G!c                B    d| j                   v r| j                  d      S y)Nr   F)_parametersoperandr1   s    r,   r   zConcat.interleave_partitionsl   s#    "d&6&66<< 788r.   c                >    | j                   }t        d |D              S )Nc              3  4   K   | ]  }|j                     y wr0   known_divisionsrC   s     r,   rE   z.Concat._all_known_divisions.<locals>.<genexpr>u   s     4"2%%4rF   )r2   allr*   rS   s     r,   rO   zConcat._all_known_divisionsr   s    ll4444r.   c                    | j                   | j                  r)t        fdt        t	              dz
        D              S y)Nc              3  n   K   | ],  }|   j                   d    |dz      j                   d   k   . yw)rG   r>   r   N)rK   )rD   irS   s     r,   rE   z.Concat._monotonic_divisions.<locals>.<genexpr>}   s@       A  $s1q5z';';A'>>s   25r>   F)r2   rO   r]   ranger8   r^   s    @r,   rQ   zConcat._monotonic_divisionsw   sA    ll$$ s3x!|,   r.   c                    t        | j                   xs( | j                  D ch c]  }|j                   c}dhk(  S c c}w Nr>   )r   r2   rB   r;   s     r,   rI   z*Concat._are_co_alinged_or_single_partition   sB    t||, %)\\1
!BNN1
S1 	 1
s   =c                   | j                   }| j                  dk(  re| j                  r7t        | j                  | j
                  | j                  | j                  g| S t        d |D              r~t        |D ch c]  }|j                   c}      dk(  rX| j                  st        j                  d       t        | j                  | j
                  | j                  | j                  g| S | j                  r{ddlm} | j#                         }|D cg c]  } |||d       }}t%        | j                  | j                  | j                  | j                  | j&                  | j
                  g| S t)        d      g }|D ]  }t+        |j,                        rt/        t1        |j2                        j5                  | j,                  j2                              }|D ci c]  }|j,                  |   j6                  | j,                  |   j6                  k7  rKt9        ||   j,                  j6                  t:        j<                        s|| j,                  |   j6                   }}|r|j?                  tA        ||	             |j?                  |       tC        |      rtC        | j,                        r|j6                  | j,                  j6                  k7  rVt9        |j6                  t:        j<                        s2|j?                  tA        || j,                  j6                  	             |j?                  |       |j?                  |        | jD                  s| j                  r| j&                  r{ddlm} | j#                         }|D cg c]  } |||d       }}t%        | j                  | j                  | j                  | j                  | j&                  | j
                  g| S tG        | j                  | j                  | j                  | j                  | j&                  | j
                  g| S c c}w c c}w c c}w c c}w )
Nr>   c              3  6   K   | ]  }|j                      y wr0   r[   rC   s     r,   rE   z Concat._lower.<locals>.<genexpr>   s     9r***9s   zConcatenating dataframes with unknown divisions.
We're assuming that the indices of each dataframes are 
 aligned. This assumption is not generally safe.r   )RepartitionT)new_divisionsforcezGUnable to concatenate DataFrame with unknown division specifying axis=1)dtypes)$r2   r   rI   ConcatIndexedr   r    r   r]   r8   rB   r   warningswarnConcatUnindexedrO   %dask.dataframe.dask_expr._repartitionrg   rU   StackPartitionInterleavedr   
ValueErrorr   r9   rP   rJ   r:   intersectiondtype
isinstancepdCategoricalDtypeappendr   r   rQ   StackPartition)	r*   rS   r<   rg   divscast_dfsshared_columnscolneeds_astypes	            r,   _lowerzConcat._lower   s   ll99>77$%%t||TYY		LO 
 9S99#6B671<44MM  '%%t||TYY		LO  **M(NQHJK$dC  1II%%II11..LL   !1 
  	$B !*!%c"**o&B&B4::CUCU&V!W  . xx}**djjo.C.CC&r#w}}':':B<O<OP C...     OOF2l$CDOOB'#tzz(B88tzz///
HHb119 OOF2djj6F6F$GHOOB'#3	$8 ))))**I??$DJRDFBd$?H  -		!!		--**   IIII))&&LL
 
 	
i 7 4 :s   ;Q
Q$BQQc           
       
 t        |t              rdd
t        | ||      }t        |      }| j                  D cg c]  } 
|      D cg c]	  }||v s| c} }}}t        
fdt        | j                  |      D              ry t        | j                  |      D cg c]T  \  }}t        |      dkD  rAt        |      t         
|            k7  st        |      t         
|            k7  r||   n|V }}} t        |       | j                  | j                  | j                  | j                  | j                  | j                  g| }	|	j                   t        |j#                  d            k(  r?|	j$                  |j$                  k(  r|	S |	j$                  |j$                  k  rt'        |	      S  t        |      |	g|j(                  dd   S y c c}w c c}}w c c}}w )Nc                R    | j                   dk(  r| j                  S | j                  gS )Nr4   )r7   r:   name)rT   s    r,   get_columns_or_namez0Concat._simplify_up.<locals>.get_columns_or_name   s!    $%FFaKqyy=affX=r.   c              3     K   | ]C  \  }}t        |      t         |            k(  xr t        |      t         |            k(   E y wr0   )rJ   r8   )rD   framecolsr   s      r,   rE   z&Concat._simplify_up.<locals>.<genexpr>   sV        E4 D	S!4U!;<< AI%8%?!@@As   A	Ar   r:   r>   )rT   r
   )rt   r   r   r   r2   r]   zipr8   rJ   r(   r   r   r   r   r   r    r:   rX   r7   r   operands)r*   parent
dependentsr:   r   r|   columns_framer   framesresultr   s             @r,   _simplify_upzConcat._simplify_up   s   fj)> 2$
KG&w/G "\\ !4E :McWnMM    $'t||]#C 
  $'t||]#C	  E4t9q= 4yC(;E(B$CC4yC(;E(B$CC $K 	F 	  T$Z		!!		--** F ~~!1&..2K!LL;;&++-!M[[6;;."6?*4<=)<==Y * N	s$   G	GGG%AG%GN)r)   
__module____qualname__rW   	_defaultsr-   propertyr2   	functoolscached_propertyr9   rU   r   rO   rQ   rI   r~   r    r.   r,   r   r      s    K $)!&I- # # 
 
"@@  
 5 5 	 	  
f
P->r.   r   c                      e Zd Zd Zd Zy)rx   c           	     >   i d}}| j                   j                         }| j                  |d<   d}t        | j                        }| j
                  D ]  }	 t        |j                  | j                         d}t        |j                        D ]u  }|r|j                  |f|| j                  |f<   nNt        t        j                  ||j                  |fg| j                  | j                   ddg|f|| j                  |f<   |dz  }w  |S # t        t        f$ r d}Y w xY w)Nr   r   TFr>   )r    copyr   r   r9   r2   r   rq   	TypeErrorrb   rB   _namer   r   r6   r   r   )r*   dskra   kwargsctrmetar<   matchs           r,   _layerzStackPartition._layer#  s#   QQ""$!%!2!2~'

3,, 	B288TZZ0 2>>* -/XXq[CS)* !BHHa=1 II II!  .CS)* q!	0 
) 	* s   "DDDc                     y r0   r   r1   s    r,   r~   zStackPartition._lowerC  s    r.   N)r)   r   r   r   r~   r   r.   r,   rx   rx   !  s    @r.   rx   c                      e Zd Zd Zd Zy)rp   c                4    | j                   d   j                  S )Nr   )r2   rK   r1   s    r,   rU   z$StackPartitionInterleaved._divisionsH  s    ||A(((r.   c                j   i d}}| j                   j                         }| j                  |d<   | j                  }t	        | j
                        D ]\  }t        t        j                  |D cg c]  }|j                  |f c}| j                  | j                  ddg|f|| j                  |f<   ^ |S c c}w )Nr   r   FT)r    r   r   r2   rb   rB   r   r   r6   r   r   r   )r*   r   ra   r   rS   r<   s         r,   r   z StackPartitionInterleaved._layerK  s    QQ""$!%!2!2~llt''( 	A-01rbhh]1IIII $CQ 	 
 2s   *B0
N)r)   r   r   rU   r   r   r.   r,   rp   rp   G  s    )r.   rp   c                  ^    e Zd Zg dZdi dddZg dZej                  d        Ze	d        Z
y)rn   )r   r    r   r   Fr>   r!   c                    t        j                  | j                         D cg c]  }|j                   c}f| j                  | j
                  | j                  d| j                  d      S c c}w )Nr   r   r   r    )r   r6   r&   r9   r   r   r   rX   r;   s     r,   r9   zConcatUnindexed._metaf  s`    ~~ $ 1 1 34"RXX4
**	

 ll9%
 	
4s   A.c                    t        ||       S )N)r   r   r   r    r   r   argss        r,   	operationzConcatUnindexed.operationp  s    <@@r.   N)r)   r   r   rW   r   _keyword_onlyr   r   r9   staticmethodr   r   r.   r,   rn   rn   a  sH    =K!&2q'RI?M
 
 A Ar.   rn   c                  $    e Zd Zed        ZddZy)rk   c                4    t        j                  || ||      S )Nr   )r   r6   r   s        r,   r   zConcatIndexed.operationv  s    ~~dDtTTr.   c                     |j                   dk(  S rd   rA   )r*   deps     r,   _broadcast_depzConcatIndexed._broadcast_depz  s    !##r.   N)r   r
   )r)   r   r   r   r   r   r   r.   r,   rk   rk   u  s    U U$r.   rk   )(
__future__r   r   rl   pandasru   toolzr   r   	dask.corer   dask.dataframer   dask.dataframe.dask_expr._exprr   r	   r
   r   r   r   r   dask.dataframe.dask_expr._utilr   dask.dataframe.dispatchr   r   dask.dataframe.multir   dask.dataframe.utilsr   r   
dask.utilsr   r   r   r   rx   rp   rn   rk   r   r.   r,   <module>r      s    "    &  "   < < 1 E ? ?C>T C>L#V #L 4Ai A($O $r.   