
    ˀhX                       d dl mZ d dlZd dlmZmZmZ d dl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mZ d dlmZ d dlmc mZ d d	lmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z= d dl8m>Z? d dl8m@ZA d dl8mBZC d dlDmEZEmFZF d dlGmHZH  ej                  eJ      5  d dlKmLZL ddd       er"d dlmMZMmNZN d dlmOZOmPZP d dlQmRZRmSZSmTZTmUZU d dlKmVZV dZW	 dCddddd	 	 	 	 	 	 	 	 	 	 	 	 	 dDdZXdddd	 	 	 	 	 	 	 	 	 dEdZY	 dCdd	 	 	 	 	 	 	 dFd ZZ	 	 dGdd!	 	 	 	 	 	 	 	 	 	 	 dHd"Z[ddddd#	 	 	 	 	 	 	 	 	 	 	 dId$Z\dd!	 	 	 	 	 	 	 dJd%Z]	 dCddde/dd&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dKd'Z^eddd(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dLd)       Z_e_j                  ea      dd*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dMd+       Zb	 	 	 	 	 	 	 	 	 	 	 	 	 	 dNd,Zce_j                  ed      dd*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dOd-       Zee_j                  e      e_j                  ef      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dPd.              Zge_j                  eh      	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQd/       Zi	 	 	 	 	 	 dRd0Zj	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd1Zkdd!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd2Zl	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd3Zm	 	 	 	 	 	 	 	 	 	 dUd4Zn	 	 	 	 	 	 dVd5Zo	 dCdddde/dd6	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWd7ZpdXd8Zq	 dCdddddd9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dYd:ZrdZd;Zs	 dCdddd<	 	 	 	 	 	 	 	 	 	 	 d[d=Zt	 dCddddd>	 	 	 	 	 	 	 	 	 	 	 	 	 d\d?Zu	 	 dGdd!	 	 	 	 	 	 	 	 	 d]d@Zv	 dCdddA	 	 	 	 	 	 	 	 	 d^dBZwy# 1 sw Y   xY w)_    )annotationsN)	GeneratorMappingSequence)datedatetimetime	timedelta)singledispatch)islicezip_longest)
itemgetter)TYPE_CHECKINGAnyCallable)	functions)contains_nestedget_first_non_noneis_namedtupleis_pydantic_model$is_simple_numpy_backed_pandas_seriesis_sqlalchemy_row	nt_unpacktry_get_type_hints)_is_generatorarrlenissue_warningparse_version)	N_INFER_DEFAULTCategoricalEnumStringStructUnknownis_polars_dtypeparse_into_dtypetry_parse_into_dtype)_NUMPY_AVAILABLE_PYARROW_AVAILABLE_check_for_numpy_check_for_pandasdataclasses)numpy)pandas)pyarrow)DataOrientationWarning
ShapeError)thread_pool_size)PyDataFrame)IterableMutableMapping)	DataFrameSeries)OrientationPolarsDataTypeSchemaDefinition
SchemaDict)PySeries  TF)schema_overridesstrictnan_to_nullallow_multithreadedc               D   t        t              r6| r4t        fd| D              sd}t        |      D ci c]  }|| |   
 } }t	        | j                         |      \  }}|st        |       }| rt        rt        fd| j                         D              }	|	dk\  rr	 ddl
}
t               }|
j                  j                  |      5 }t        t        ||j!                  fdt        | j#                                                 } ddd       | sC|rA|D cg c]5  }t)        j*                  |g |j-                  |      |      j.                  7 }}n4t1        | ||      j                         D cg c]  }|j.                   }}t3        ||d      }t5        |      }|r9|j7                         t        |j                               k7  rt9        ||||      }|S c c}w # 1 sw Y   xY w# t$        $ r t'        | ||d	
      cY S w xY wc c}w c c}w )z7Construct a PyDataFrame from a dictionary of sequences.c              3  &   K   | ]  }|v  
 y wN ).0colschemas     /var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/polars/_utils/construction/dataframe.py	<genexpr>zdict_to_pydf.<locals>.<genexpr>W   s     3sC6M3   z>the given column-schema names do not match the data dictionary)lookup_namesr>   c              3    K   | ]~  }t        xrm t        |      xr` t        |t        j                        xrD t        |      t        kD  xr0 xr, |j                  t        j                  t        j                  fv         y wrD   )
intr*   
isinstancenpndarraylen"_MIN_NUMPY_SIZE_FOR_MULTITHREADINGdtypefloat32float64)rF   valrA   r@   s     rI   rJ   zdict_to_pydf.<locals>.<genexpr>d   s      
  # :$S):sBJJ/: HAA:
  : II"**bjj!99
s   BB   r   Nc                    t        | d   t        j                        rt        j                  | d   | d         S | d   S )N   r   r@   )rO   rP   rQ   plr7   )tr@   s    rI   <lambda>zdict_to_pydf.<locals>.<lambda>   sB    '1!A$

'C %'IIadAaDk$R  *+1     F)datarH   r>   r?   r@   rA   rT   r?   r@   )r>   r?   r@   T)columns	from_dictr>   r?   )rO   r   all
ValueError_unpack_schemakeyslistr(   sumvaluesmultiprocessing.dummyr2   dummyPooldictzipmapitemsFileNotFoundErrordict_to_pydfr\   r7   get_s_expand_dict_values_handle_columns_argr3   dtypes_post_apply_columns)r`   rH   r>   r?   r@   rA   msgrG   column_namescount_numpymultiprocessing	pool_sizepoolnamedata_seriesspydfs    `  ``           rI   rt   rt   L   s>    &'"t3d33RCS/!*013T#Y11%3TYY[;K&"L" Dz  
 {{}
 
 !,,.	$**//	: d( HH!"
 !%TZZ\ 2
D0 $ %	
  II&**40' b	
 	
 )!1'	
 fh
 DD
 
 &k<SWXK{#DDKKMT2B2I2I2K-LL",1A&
 Kk 2@  % #!%5! +(- 	

s<   G'')G8 A G,G8  :H<H,G51G8 8HH)r>   
n_expectedrL   c                  dd	 d	 	 	 d	fd} ||      }| s$|t        |      D cg c]  }d| 	 c}ng }||fS t        | t              r%t        |       }t        | j	                               } nNg }t        |       D ]>  \  }}t        |t              r| xr ||v}	|	rd| n|}n|d   }|j                  |       @ |t        |      |k7  rd}
t        |
      |r"t        ||      D ci c]
  \  }}||| c}}nd}i }| D ]>  }t        |t              r|\  }}| |      }|r|j                  ||      n|}|||<   @ |r|j                  |       ||fS c c}w c c}}w )
z
    Unpack column names and create dtype lookup.

    Works for any (name, dtype) pairs or schema dict input,
    overriding any inferred dtypes with explicit dtypes if supplied.
    c                6    t        | d      r| S t        |       S )z1Parse non-Polars data types as Polars data types.T)include_unknown)r%   r&   )rT   s    rI   _normalize_dtypez(_unpack_schema.<locals>._normalize_dtype   s    5$7L#E**r_   Nc                l    | i S | j                         D ci c]  \  }}| |       c}}S c c}}w )zCParse schema overrides as a dictionary of name to Polars data type.)rr   )r>   r   rT   r   s      rI   _parse_schema_overridesz/_unpack_schema.<locals>._parse_schema_overrides   sH     #I >N=S=S=U
.9dED"5))
 	
 
s   0column_r   z)data does not match the number of columns)rT   r   returnr9   rD   )r>   SchemaDict | Noner   zdict[str, PolarsDataType])rangerO   r   ri   rr   	enumeratestrappendrR   r1   r   ru   update)rH   r>   r   rL   r   irb   r|   rG   unnamedr{   r   lookupcolumn_dtypesrT   r   s                  @rI   rg   rg      s   + /3	
+	
	"	
 //?@ :D:PE*$56qwqc]6VX 	 ((( &'""&v,flln%' 	%FAs#s#!'Ac1A&A'.smC!f$	% #l"3z"A9o  )|D	
T I	
   02M 
$c3e=$U+E)/vzz$%T#d
$ -.&&e 70	
s   E!0E&)rc   c               @   || S | s.|D cg c]"  }t        j                  |      j                  $ c}S t        |       t        |      k7  r&dt        |       dt        |        d}t	        |      |rF| D ci c]  }|j                         | c}t        fd|D              r|D cg c]  }|   	 c}S t        |      D ]F  \  }}|| |   j                         k7  s| |   j                         | |<   | |   j                  |       H | S c c}w c c}w c c}w )z*Rename data according to columns argument.)r   zdimensions of columns arg () must match data dimensions ()c              3  &   K   | ]  }|v  
 y wrD   rE   )rF   rG   
series_maps     rI   rJ   z&_handle_columns_arg.<locals>.<genexpr>  s     6sz!6rK   )
r\   r7   rv   rR   rf   r   re   r   clonerename)	r`   rb   rc   cr{   r   rG   r   r   s	           @rI   rx   rx     s    .56		q!$$66	Tc'l	"+CL>9WX[\`XaWbbcdo+/0aaffhk0
6g66/67JsO77'" 1Q1gmmoDGGNN1
 K 7 17s   'D9D,Dr?   c                  | j                         | j                         }}t        |xs ||      \  }}g }||k7  r<t        |      t        |      k  r||dt        |       k(  r|}n| j	                  |       g }	t        |      D ]t  \  }
}|j                  |      }||
   }|t        cxk(  r|k7  rGn nD|	j                  t        j                  |      j                  t        |      j                         s|t        cxk(  r|k7  rCn n@|	j                  t        j                  |      j                  ||      j                         |rY|j                  |      x}rF||k7  rA|	j                  t        j                  |      j                  ||      j                          |$|t        k7  s/||k7  s6|	j                  t        j                  |      j                  ||      j                         w |	s|rs| j                         } |	r| j!                  |	      } |r<| j#                  |D cg c]!  }t        j                  |      j                  # c}      } | j%                  d      } | S c c}w )zGApply 'columns' param *after* PyDataFrame creation (if no alternative).r>   Nr   z	in-memory)engine)rb   ry   rg   rR   set_column_namesr   ru   r    r   FrG   cast_pyexprr!   r$   lazywith_columnsselectcollect)r   rb   structsr>   r?   pydf_columnspydf_dtypesry   column_subsetcolumn_castsr   rG   rT   
pydf_dtypestructs                  rI   rz   rz   (  s    !%+L$		 L4DOGV  "M,w<#l++<#g,;W0W#M!!'*LG$ 
O3

3 ^
K-:-c
F K S STd(j(c
f E M MNGKK$44&4&J:Nc
v F N NO5G#38Kc
f E M MN
O }yy{$$\2D;;mLsc
 2 2LMD||;|/K  Ms   5&I6)r>   r?   orderr@   c               \   i }| rkt        d | j                         D              rd}t        |      |xs i }t        | ||      } t	        d | j                         D              }|dkD  r/| j                         D ]  \  }	}
|j                  |	      }t        |
t              r|t        k7  rt        j                  |
|      }|j                  dk(  r|dkD  rt        d |j                  j                         D              r_|
j                         D ci c]  \  }}|||   j                  ||dz
        ! }}}t        j                  |      j!                  |	      }n|j!                  |	      }|||	<   t        |
t        j"                        rM|	|
j$                  k7  r|
j'                  |	      n|
}|r"||j(                  k7  r|j+                  ||      }|||	<   ct-        |
      t/        |
      rt        j"                  |	|
|||	      ||	<   |
4t        |
t0        t2        t4        t6        t8        t:        t<        t>        f      r-tA        jB                  |
||d
      jE                  |	      ||	<   t        j"                  |	|
g|z  ||      ||	<    nt        d | j                         D              rD| j                         D ]0  \  }	}
t        j"                  |	|
|j                  |	      |      ||	<   2 nqt        d | j                         D              rQ| j                         D ]>  \  }	}
t        j"                  |	t/        |
      r|
n|
g|j                  |	      |      ||	<   @ |r.tG        |      |k7  r |D ci c]  }||jI                  |       c}S |S c c}}w c c}w )zCExpand any scalar values in dict data (propagate literal as array).c              3  P   K   | ]  }t        |t        j                           y wrD   )rO   r\   ExprrF   rW   s     rI   rJ   z&_expand_dict_values.<locals>.<genexpr>_  s     ACz#rww'As   $&zpassing Expr objects to the DataFrame constructor is not supported

Hint: Try evaluating the expression first using `select`, or if you meant to create an Object column containing expressions, pass a list of Expr objects instead.r   c              3  :   K   | ]  }t        |      xs d   ywr   Nr   r   s     rI   rJ   z&_expand_dict_values.<locals>.<genexpr>j  s     Ds))Ds   r   rZ   c              3  >   K   | ]  }|j                            y wrD   )	is_nested)rF   ds     rI   rJ   z&_expand_dict_values.<locals>.<genexpr>s  s     OaAKKM 1Os   )nr   rk   rT   r?   r@   T)rT   eager)r   rk   rT   r?   c              3  8   K   | ]  }t        |      d k(    ywr   r   r   s     rI   rJ   z&_expand_dict_values.<locals>.<genexpr>  s     =&+"=s   )rk   rT   r?   c              3  6   K   | ]  }t        |      d u   y wrD   r   r   s     rI   rJ   z&_expand_dict_values.<locals>.<genexpr>  s     @3&+%@s   )%anyrk   	TypeError_expand_dict_datamaxrr   ru   rO   ro   r#   r\   r6   heightre   rH   extend_constant	to_structr7   r   r   rT   r   r   r   rN   floatr   boolr   r   r	   r
   r   repeataliasri   pop)r`   r>   r?   r   r@   updated_datar{   ry   	array_lenr   rW   rT   vdfnmvs_valsstr   rG   s                      rI   rw   rw   T  sN    LA4;;=AA8  C. !'R vf=DdkkmDD	q=!ZZ\ )	c

4(c4(Uf_,,s6:C

a%MO3::;L;L;NOO *-" %A B 7 7i!m 7 MM" "  \\&1;;DA ]]40)+L&RYY/,0CHH,<

4(#A!''!1FF5F8)*L&C[,c0B)+!"#%$/*L& [J#uc4xyQ% *+Ye4*eDk !& *,!3%)*;5QW*L&O)V =t{{}==!ZZ\ 	c%'YYFJJt,<V&T"
 @$++-@@!ZZ\ 	c%'YY#0#5CC5 **T*!	&T" l#u,6;<s\%%c**<<e"b =s   $N#N)c                   i }| j                         D ]=  \  }}t        |      r(t        j                  |||j	                  |      |      n|||<   ? |S )z
    Expand any unsized generators/iterators.

    (Note that `range` is sized, and will take a fast-path on Series init).
    r   )rr   r   r\   r7   ru   )r`   ry   r?   expanded_datar   rW   s         rI   r   r     s^     MZZ\ 
	c S! IIdCD!1&A 	d
 r_   )r>   r?   orientinfer_schema_lengthr@   c          
     Z    | st        i ||      S t        t        |       | ||||||      S )z(Construct a PyDataFrame from a sequence.)rH   r>   r`   rH   r>   r?   r   r   r@   )rt   _sequence_to_pydf_dispatcherr   r   s          rI   sequence_to_pydfr     sA     Bv@PQQ'4 )/	 	r_   )r?   r@   c                  |||||||d}d}	t        | t              r't        }
|D cg c]  }t        |       }}|d   } d}	nt        | t        j
                        rt        }
nt        |       r!t        | t        j                        rt        }
nt        |       r@t        | t        j
                  t        j                  t        j                  f      rt        }
nmt!        j"                  |       rt$        }
nQt'        |       rt(        }
n?t+        |       rt,        }
n-t        | t.              rt        | t0              st        }
nt2        }
|	rt4        j7                  t9        |       |
       | |d<    |
di |S c c}w )Nr   Tr   Ffirst_elementrE   )rO   r   _sequence_of_sequence_to_pydfri   r\   r7   _sequence_of_series_to_pydfr*   rP   rQ   _sequence_of_numpy_to_pydfr+   pdIndexDatetimeIndex_sequence_of_pandas_to_pydfr,   is_dataclass _sequence_of_dataclasses_to_pydfr   $_sequence_of_pydantic_models_to_pydfr   _sequence_of_tuple_to_pydfr   r   _sequence_of_elements_to_pydfr   registertype)r   r`   rH   r>   r?   r   r   r@   common_paramsregister_with_singledispatchto_pydfrows               rI   r   r     s:   $ ,2"M $( -+/%)*cS	**Q',$	M299	--	-	(Zrzz-R,	=	)j		288R-=-=>/ .		!	!-	02	=	)6	=	),	M8	,Zs5S//#$--d=.A7K%2M/"#]##C +s   E7r[   c                  |M|d}nHt        |      t        |       k(  xr t        |      t        |      k7  }|rdnd}|rt        dt               |dk(  rt        ||t        |             \  }	}|rt	        ||	      ni }
d}|
j                         D ]b  \  }}|t        t        fv r
t        |
|<   |r!|j                         t        t        fv s>t        t        | |d       j                  t              }d |r1|D cg c]  }t!        |       }}t#        j$                  |||      }nt#        j&                  ||
xs d |      }|	s|rt)        ||	||      }|S |dk(  ryt        ||t        |            \  }	}t+        |      D cg c]>  \  }}t-        j.                  |	|   ||j1                  |	|         ||	      j2                  @ }}}t#        |      S d
|}t5        |      c c}w c c}}w )NrG   r   zRow orientation inferred during DataFrame construction. Explicitly specify the orientation by passing `orient="row"` to silence this warning.r>   r   Fr?   r   rH   r   rd   ra   2`orient` must be one of {'col', 'row', None}, got )rR   r   r0   rg   _include_unknownsrr   r    r!   r"   	base_typer$   r#   r   getattr	__class__r   r   r3   
from_dicts	from_rowsrz   r   r\   r7   ru   rv   rf   )r   r`   rH   r>   r?   r   r   r@   is_row_orientedr|   local_schema_overrideunpack_nestedrG   tpr   dictsr   r   elementr   r{   s                        rI   r   r     s8    ~>F  #6{c-.@@ Fs4y(  .U5Fm* )7%5#mBT*
&&
   .= 	 ,224 	GCk4((-3%c*"7F:K(K /M35??!		 +/0aYq\0E0))f:MD ((,4$7D
 +&l5EfD 	5)7%5#d)*
&& (o	'
 7 IIQ&**<?;' b	'
 	'
 ;'' EVJOoE 1(	'
s   =G)AG.c                  |D cg c]  }|j                    }}t        |xs ||t        |            \  }}g }	t        |      D ]y  \  }
}|j                   s|j	                  ||
         }|j                  ||
         }|r#||j                  k7  r|j                  ||d      }|	j                  |j                         { t        |	|      }	t        |	      S c c}w )Nr   Fr?   wrap_numericalrb   )r   rg   rR   r   r   ru   rT   r   r   rv   rx   r3   )r   r`   rH   r>   r?   kwargsr   series_namesr|   r   r   	new_dtypes               rI   r   r   r  s     %))qAFF)L)%3,)t9&"L"
 #%K$ !1vvQ(A$((a9	agg-yFA144 ! &k<HK{##! *s   Cc          
     R   t        | j                        st        |       ro|i| j                  }t	        | dd       }|rNt        |      t        |      k(  r7| j                  j                         D 	
cg c]  \  }	}
|	t        |
      f }}	}
|d}t        | |||||||      S c c}
}	w )N__annotations__r   r   )
r   r   r   _fieldsr   rR   r  rr   r'   r   )r   r`   rH   r>   r?   r   r   r@   r   r   r   s              rI   r   r     s     ],,-1B=1Q>"**F!-1BDIKs;/3v;> %2$A$A$G$G$I b /34  >F ))/	 	s   2B#c                   t        ||      \  }}|rt        ||xs t        |            nd }t        j                  |||||      }	|rt        |	|||      }	|	S )Nr   r   )rb   r>   r?   )rg   r   ri   r3   r   rz   )
r   r`   rH   r>   r?   r   r  r|   dicts_schemar   s
             rI   _sequence_of_dict_to_pydfr    s     &4!1&"L"
  	*L,RDAQ<RS  !!/D ",9IRX
 Kr_   c                   t        ||d      \  }}t        j                  |d   ||j                  |d         |      j                  g}t        ||      }t        |      S )NrZ   r   r   r   r  )rg   r\   r7   ru   rv   rx   r3   )r   r`   rH   r>   r?   r  r|   r   s           rI   r   r     sp     &4!1a&"L" 			O  a1		

 "#K &k<HK{##r_   c                P    | j                   dk(  rt        | fi |S t        | fi |S )NrZ   )ndimr   r   )r   r  s     rI   r   r     s2     Q,]EfEE,]EfEEr_   c               d   |g }nt        ||d      \  }}|xs i }g }t        |      D ]z  \  }}	|r||   n|	j                  }
t        j                  |
|	      }|j                  |
      }|'||j                         k7  r|j                  ||d      }|j                  |       | t        |      S )NrZ   r   )r   rk   Fr  )
rg   r   r   plcpandas_to_pyseriesru   rT   r   r   r3   )r   r`   rH   r>   r?   r  r|   r   r   r   r   pyseriesrT   s                rI   r   r     s     ~"$)7%5!*
&& (-2"$K$ %1".|AAFF))tA> $$T*(..*:!:}}U6%}PH8$% {##r_   c                  ddl m}m} t        | ||d      \  }	}
}}|	r.|D cg c]
  } ||       }}t	        j
                  |||      }n1|D cg c]
  } ||       }}t	        j                  ||xs d|      }|rD|j                         D ci c]  \  }}t        |t              s|| }}}t        ||
|||      }|S c c}w c c}w c c}}w )z-Initialize DataFrame from Python dataclasses.r   )asdictastupleN)model_fieldsr   r   r   )r,   r  r  $_establish_dataclass_or_model_schemar3   r   r   rr   rO   r#   rz   )r   r`   rH   r>   r   r?   r  r  r  r   r|   	overridesmdr  r   dcrowsr   r   r   s                       rI   r   r     s     , 	-v/d	 &*+++%%&6I
 '++++$$*d@S
 &/oo&7RUQ:b&;Q1b5RR",)9&
 K! ,
 , Ss   CCC,Cc               4   ddl }t        |j                        dk  }t        |r| j                  n| j
                  j                        }	t        | |||	      \  }
}}}|
rY|r|D cg c]  }|j                          c}n|D cg c]  }|j                  d       c}}t        j                  |||      }nt        |	      dkD  r@t        |	 }|D cg c]  } ||j                         }}t        j                  |||      }n2|D cg c]  }|j                   }}t        j                  ||||	      }|rD|j!                         D ci c]  \  }}t#        |t$              s|| }}}t'        |||||
      }|S c c}w c c}w c c}w c c}w c c}}w )z1Initialise DataFrame from pydantic model objects.r   N)   r   python)moder   2   r   )rH   r?   r   r   )pydanticr   __version__ri   
__fields__r   r  r  ro   
model_dumpr3   r   rR   r   __dict__r   rr   rO   r#   rz   )r   r`   rH   r>   r   r?   r  r%  old_pydanticr  r   r|   r  r  r  r   
get_valuesr  r   r   r   s                        rI   r   r   C  s     !5!56?L 	  $$11L 	-v/	 
  "&&2RWWY&9=>2"--X-.> 	
 %%&6I
 
\	R	.
267B
2;;'77$$8K

 (,,,,%% 3	
 &/oo&7RUQ:b&;Q1b5RR",)9&
 K? '> 8 - Ss$   %F FF

FF&Fc                t   ddl m} d}|r5t        ||      \  }}|D ci c]  }||j                  |t               }}ng }t        | j                        j                         D 	ci c]%  \  }}	|r||v rn|dk7  r|t        |	      xs t        ' }}}	|r|j                  |       nA|s=t         ||             }
|j                         D 	ci c]  \  }}	||
v s||	 c}	}x}}n|}|j                         D ]j  \  }}	|	t        t        fv r
t        ||<   |r!|	j                         t        t        fv s>t!        t#        | |d      |rt$        nt         j&                        }l |r:t)        |      t)        |      k(  r#t+        t-        ||j/                                     }||||fS c c}w c c}	}w c c}	}w )zLShared utility code for establishing dataclasses/pydantic model cols/schema.r   )r  Fr   	__slots__N)r,   r  rg   ru   r$   r   r   rr   r'   r   setr    r!   r"   r   r#   r   r   r   r   rR   ro   rp   rk   )r   rH   r>   r  r  r   r|   rG   r  r   	dc_fieldsr   s               rI   r  r    s    #M)7%5*
&& IUUS*..sG<<U	U .m.E.EFLLN
R)5$C;<N &r*5g5
	 

 -.F=12I%.__%6,!2r"	/B, y  )??$ R+t$$#IcNBLLNw6G$G+sD1%1!{7O7OM	 L)S^;\9+;+;+=>?	,(8)CC= V
,s   F)(*F.F4F4c                f    |D ci c]!  }|| j                  |t              xs t        # c}S c c}w )z7Complete partial schema dict by including Unknown type.)ru   r$   )rH   colsrG   s      rI   r   r     s9      	fjjg&1'1  s   &.)r>   r?   r   
chunk_sizer   rechunkc                  |}g }	i }
|t        ||      \  }	}n|rt        ||      \  }}t        | t              st        |       } |dk(  r|	r4|r2t	        |	      D ci c]  \  }}||j                  |t               }
}}t        j                  t	        |       D ci c]7  \  }}|	r|	|   nd| t        j                  ||
j                  |            9 c}}      j                  S dfd}d}d}|r|}n|	r|t        |	      z  }nd}d}t        xs d|xs d	      }	 t        t        | |            }|sni |||      }|E|}|s#t        |j                  j!                               }||k7  r1|j"                  x}dkD  r ||z  x}}n|j%                  |d
       |dz  }|	 |g |      }|dkD  r|r|j'                         }|j                  S c c}}w c c}}w )z3Construct a PyDataFrame from an iterable/generator.Nr   rG   r   )rT   r?   c                8    t        j                  | |d      S )Nr   )r`   rH   r?   r   r   )r\   r6   )rk   rH   r   r?   s     rI   to_frame_chunkz(iterable_to_pydf.<locals>.to_frame_chunk  s#    || 3
 	
r_   r   i@B r=   T)in_placerZ   )rk   z	list[Any]rH   SchemaDefinition | Noner   r6   )rg   rO   r   iterr   ru   r$   r\   r6   r7   _dfrR   r   ri   r   rH   rr   widthvstackr3  )r`   rH   r>   r?   r   r2  r   r3  original_schemar|   dtypes_by_idx_idxrG   coldatar6  n_chunksn_chunk_elemsadaptive_chunk_sizedfrk   frame_chunk	n_columnss      `  `                rI   iterable_to_pydfrH    s2    O L/1M)7%5*
&& 
,VFVWdI&Dz, !*, 7C %))#w77M 
 || %.dO !C '3c"'#"))'++C0!K 	
 #		
 HM(	+s</@@"B		!		$J fT:./$V_=:B""&ryy'8"900!#)IQ.7D	7QQJ!4IIkDI1MH   
zB0!|ZZ\66M}s    !G!<G
c                  | j                   D ch c]  }t        |       }}|r-| j                  j                  D ch c]  }t        |       c}n	t	               }t        |      t        | j                         k  }|r+t        |      t        | j                  j                        k  nd}|s|rd}t        |      ||z  }	t        |	      dkD  rd}t        |      yc c}w c c}w )z:Check pandas dataframe columns can be converted to polars.Fz|Pandas dataframe contains non-unique indices and/or column names. Polars dataframes require unique string names for columns.r   z1Pandas indices and column names must not overlap.N)rb   r   indexnamesr.  rR   rf   )
r`   include_indexrG   stringified_colsr@  stringified_indexnon_unique_colsnon_unique_indicesr{   overlapping_cols_and_indicess
             rI   _check_pandas_columnsrR    s    6:ll!Cs#c(!C!C2?TZZ--.cS.SU    01C4EEO<I	#djj&6&6"7	7u  ,I 	 o-=@Q-Q 
'(1,Ao -# "D.s
   CC#)r>   r?   r3  r@   rL  c                   t         |       |xr t                }|sut         fd j                  D              rWt	        j
                   j                  D ci c]  }t        |       |   j                         ! c}||||      j                  S t        sd}	t        |	      i }
 j                  d   }|rX j                  j                  D ]?  }t        j                   j                  j!                  |      ||      |
t        |      <   A  j#                         D ])  \  }}t        j                  |||      |
t        |      <   + t%        j&                  |
      }t)        |||||      S c c}w )z0Construct a PyDataFrame from a pandas DataFrame.)rL  c              3  :   K   | ]  }t        |           y wrD   )r   )rF   rG   r`   s     rI   rJ   z!pandas_to_pydf.<locals>.<genexpr>?  s       !<?,T#Y7!s   )rH   r?   r>   r@   zpyarrow is required for converting a pandas dataframe to Polars, unless each of its columns is a simple numpy-backed one (e.g. 'int64', 'bool', 'float32' - not 'Int64')r   )r@   length)rH   r>   r?   r3  )rR  _pandas_has_default_indexre   rb   r\   r6   r   to_numpyr:  r)   ImportErrorshaperJ  rK  r  pandas_series_to_arrowget_level_valuesrr   patablearrow_to_pydf)r`   rH   r>   r?   r3  r@   rL  convert_indexrG   r{   
arrow_dictrU  idxcolcol_idxcol_dataarrow_tables   `               rI   pandas_to_pydfre  1  sw    $m<!I*CD*I&IMS !CG<<!  ||7;||DSXtCy))++D-#
 #	 > 	
 #JZZ]Fjj&& 	F&)&@&@ 

++F3''Js6{#	 "ZZ\ 
#&#=#=+f$

3w< 

 ((:&K) C Es   $E5c                   ddl m} | j                  j                  }t	        |      dkD  s|dgdgfvry| j                  j                   |dt	        |       d            ryt        | j                  j                        j                  d	      xrG | j                  j                         t        j                  t	        |             k(  j                         S )
zFIdentify if the pandas frame only has a default (or equivalent) index.r   )
RangeIndexrZ   N F)startstopstepTrN   )pandas.core.indexes.rangerg  rJ  rK  rR   equalsr   rT   
startswithsort_valuesrP   arangere   )rE  rg  
index_colss      rI   rV  rV  n  s    4J
:j$">	!#b'B	C
 **51 E%%'299SW+==BBD	
r_   )r>   r?   r3  c                  t        |xs | j                  j                  |      \  }}	 || j                  j                  k7  r| j                  |      } t        | t        j                        r| g}n| j                         }t        j                  || j                        }	|r|	j                         }	|t        |	|||      }	|	S # t        j
                  $ r}d}t        |      |d}~ww xY w)z;Construct a PyDataFrame from an Arrow Table or RecordBatch.r   z4dimensions of columns arg must match data dimensionsNrd   )rg   rH   rK  rename_columnsr\  ArrowInvalidrf   rO   RecordBatch
to_batchesr3   from_arrow_record_batchesr3  rz   )
r`   rH   r>   r?   r3  r|   er{   batchesr   s
             rI   r^  r^    s     &4		$4;;$$8H&"L"%4;;,,,&&|4D $'&//# 00$++FD||~#"-	
 K1 ?? %Do1$%s   *C C-C((C-)r>   r   r?   r@   c                  | j                   }t        |      dk(  }| j                  j                  xd\  }}t	        | j                  j                        }	t        |	      }
|	D ]?  }| |   j                   }t        | |   j                         dkD  s.d|d| }t        |       |s|	}ndg }	}|dk(  rd}
nt        |      d	k(  rd	}
nt        |      dk(  r|
||d	   }
d
}n|L|Jt        |      }||d   k(  r||d	   k7  rd}|d   }
no| j                  d   r|d   |d	   k(  rd}|}
nPd
}|d	   }
nH|d
k(  r|d	   }
n=|dk(  r|d   }
n2d|}t        |      |dk(  rd}t        |      d| }t        |      |4t        |      |
k7  r&t        |      x}d	k7  rd| d|
 d}t        |      |}
t        |||
      \  }}|rTt        ||	      D cg c];  \  }}t        j                  || |   |j                  |      ||      j                  = }}}n'|dk(  r	|
dk(  rg }nt        |      d	k(  r;t        j                  |d   | |j                  |d         ||      j                  g}n|d
k(  rht        |
      D cg c]S  }t        j                  ||   |r|
d	k(  r
|d	   d	kD  r| n| dd|f   |j                  ||         ||      j                  U }}nct        |
      D cg c]O  }t        j                  ||   |r|
d	k(  r
|d	   d	kD  r| n| |   |j                  ||         ||      j                  Q }}t        ||      }t        |      S c c}}w c c}w c c}w )zMConstruct a PyDataFrame from a NumPy ndarray (including structured ndarrays).r!  N)TrG   zHcannot create DataFrame from structured array with elements > 2D; shape[z] = F)r   r   rZ   r   rG   F_CONTIGUOUSr   rE   z3cannot create DataFrame from zero-dimensional arrayzJcannot create DataFrame from array with more than two dimensions; shape = zdimensions of `schema` (r   r   r   r   r  )rY  rR   rT   rK  ri   rf   flagsrg   rp   r\   r7   ru   rv   r   rx   r3   )r`   rH   r>   r   r?   r@   rY  two_dstructured_arrayrecord_namesrG  r   r{   n_schema_colsr|   series_namerecord_namer   r   s                      rI   numpy_to_pydfr    s    JJEJ!OEzz##. &DJJ,,-%	 	&BHNNE48>>"Q&`ac`ffjkpjqr o%		&
 !F */,D=IZ1_IZ1_~&.!!H	F$6 !$F E!H,%(1J"F %aIZZ/E!Ha4H"F -I"F %aI5!!H	5!!H	LVJW o%{K S/! cchbijS/!c&kY6 [(MQ.,]O;YZcYddefCS/!!	%3!1i&"L"
  -0l,K	
 )[ II K(&**;7' b	
 	
 
$9>	UqII!!_&**<?;' b
 U? y)  		%a !Y!^a1 !!Q$Z*..|A?! +
 "
K 2 y)  		%a %)q.U1X\tTUw*..|A?! + "K  &k<HK{##m	
2s   A M<AM$AMc                  ||t        | j                  g      S | j                  g}|D cg c]  }|j                          }}t        |xs ||d      \  }}|rKt	        t        |j                                     }|| j                  k7  r|d   j                  ||d      |d<   t        ||      }t        |      S c c}w )z-Construct a PyDataFrame from a Polars Series.rZ   r   r   Fr  r  )
r3   rv   r   rg   nextr9  rk   rT   r   rx   )	r`   rH   r>   r?   r   r   r  r|   r	  s	            rI   series_to_pydfr  5  s     ~*2DGG9%%77)K%0116681K1%3+0@Q&"L" .55789	

"(^00& 1 KN &k<HK{## 2s   B?rd   c                  ||| j                   j                         S | D ci c]  }|j                  |j                   }}t	        |xs | j
                  |      \  }}|rG| j                  }|j                         D ](  \  }}	|	||   k7  s||   j                  |	|d      ||<   * t        t        |j                               |      }
t        |
      S c c}w )z:Construct a PyDataFrame from an existing Polars DataFrame.r   Fr  r  )r:  r   r   rv   rg   rb   rH   rr   r   rx   ri   rk   r3   )r`   rH   r>   r?   r   r   r|   existing_schemar   r	  series_colss              rI   dataframe_to_pydfr  P  s     ~*2xx~~)-.A166144<.K.%3$,,1A&"L" ++/557 	OD)OD11$/$5$:$:fU %; %D!	 &d;+=+=+?&@,WK{## /s   CrD   )r`   HMapping[str, Sequence[object] | Mapping[str, Sequence[object]] | Series]rH   r8  r>   r   r?   r   r@   r   rA   r   r   r3   )
rH   r8  r>   r   r   
int | NonerL   zIterable[str] | Noner   ztuple[list[str], SchemaDict])r`   list[PySeries]rb   Sequence[str] | Nonerc   r   r   r  )NN)r   r3   rb   r8  r   zdict[str, Struct] | Noner>   r   r?   r   r   r3   )r`   r  r>   r   r?   r   r   r  r@   r   r   zdict[str, Series])r`   r  ry   r;   r?   r   r   r  )r`   Sequence[Any]rH   r8  r>   r   r?   r   r   Orientation | Noner   r  r@   r   r   r3   )r   r   r`   r  rH   r8  r>   r   r?   r   r   r  r   r  r@   r   r   r3   )r   z$Sequence[Any] | np.ndarray[Any, Any]r`   r  rH   r8  r>   r   r?   r   r   r  r   r  r@   r   r   r3   )r   r7   r`   r  rH   r8  r>   r   r?   r   r  r   r   r3   )r   ztuple[Any, ...]r`   r  rH   r8  r>   r   r?   r   r   r  r   r  r@   r   r   r3   )r   zdict[str, Any]r`   r  rH   r8  r>   r   r?   r   r   r  r  r   r   r3   )r   r   r`   r  rH   r8  r>   r   r?   r   r  r   r   r3   )r   np.ndarray[Any, Any]r  r   r   r3   )r   z1pd.Series[Any] | pd.Index[Any] | pd.DatetimeIndexr`   r  rH   r8  r>   r   r?   r   r  r   r   r3   )r   r   r`   r  rH   r8  r>   r   r   r  r?   r   r  r   r   r3   )
r   r   rH   r8  r>   r   r  zlist[str] | Noner   z.tuple[bool, list[str], SchemaDict, SchemaDict])rH   r;   r1  zSequence[str]r   z#MutableMapping[str, PolarsDataType])r`   zIterable[Any]rH   r8  r>   r   r?   r   r   r  r2  r  r   r  r3  r   r   r3   )r`   pd.DataFramerL  r   r   None)r`   r  rH   r8  r>   r   r?   r   r3  r   r@   r   rL  r   r   r3   )rE  r  r   r   )r`   zpa.Table | pa.RecordBatchrH   r8  r>   r   r?   r   r3  r   r   r3   )r`   r  rH   r8  r>   r   r   r  r?   r   r@   r   r   r3   )
r`   r7   rH   r8  r>   r   r?   r   r   r3   )
r`   r6   rH   r8  r>   r   r?   r   r   r3   )x
__future__r   
contextlibcollections.abcr   r   r   r   r   r	   r
   	functoolsr   	itertoolsr   r   operatorr   typingr   r   r   polars._reexport	_reexportr\   polars._utils.construction_utilsconstructionr  polarsr   r    polars._utils.construction.utilsr   r   r   r   r   r   r   r   polars._utils.variousr   r   r   r   polars.datatypesr   r    r!   r"   r#   r$   r%   r&   r'   polars.dependenciesr(   r)   r*   r+   r,   r-   rP   r.   r   r/   r\  polars.exceptionsr0   r1   polars.metar2   suppressrX  polars.polarsr3   r4   r5   r6   r7   polars._typingr8   r9   r:   r;   r<   rS   rt   rg   rx   rz   rw   r   r   r   r   ri   r   r   tupler   ro   r  r   r   r   r   r   r   r  r   rH  rR  re  rV  r^  r  r  r  rE   r_   rI   <module>r     s6	   "  8 8 4 4 $ )    ( ( !	 	 	 
 
 
  , , - @ (Z% *)* 8(  '%) "
 '+c +/ $c
Rc#c (	c
 c c c cR +/!)-W'#W' (W' 	W'
 'W' "W'x %) 	
! 	
 > )-*.	) )
)$) &) (	) ) )^ +/"&S
RS (S 	S
  S S St 	
R 	
 N. '+ +/!%&5
# (	
   $  4   ?$?$
?$ $?$
 (?$ ?$ ?$ $?$ ?$ ?$ ?$D &&t, R7R
R $R
 (R R R $R R R -Rj$$
$ $$
 ($ $ $ $8 &&u- """
" $"
 (" " " $" " " ."J &&w/&&t,!!!
! $!
 (! ! $! ! ! - 0!H &&s+$$
$ $$ (	$ $ $ $ ,$0F'FF F$D$
$ $$ (	$ $ $ $H &&
& $& (	&
 $& & & &R>>
> $> (	>
 $> > > >B,D,D#,D (,D #	,D
 4,D^+( '+Y +/!%!&5Y
Y#Y (	Y
 Y Y Y $Y Y Yx4 '+: +/:
:#: (	:
 : : : : :z
. '+' +/'
#'#' (	'
 ' ' 'X '+E$ +/!%E$
E$#E$ (	E$
 E$ E$ E$ E$T '+*.$
 $
$#$ ($
 $ $: '+$ +/$
$#$ (	$
 $ $m(* *s   
M//M9