
    q-Ph                       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jI        eJ          5  d dlKmLZL ddd           n# 1 swxY w Y   er"d dlmMZMmNZN d dlmOZOmPZP d dlQmRZRmSZSmTZTmUZU d dlKmVZV dZW	 d{dddddd|d(ZXdddd)d}d/ZY	 d{dd0d~d5ZZ	 	 ddd6dd:Z[ddddd;dd>Z\dd6ddAZ]	 d{ddde/ddBddGZ^edddHddK            Z_e_`                    ea          ddLddN            ZbddQZce_`                    ed          ddLddS            Zee_`                    e          e_`                    ef          ddU                        Zge_`                    eh          ddV            ZiddXZjddZZkdd6dd[Zldd\Zmdd`ZndddZo	 d{dddde/ddeddiZpddmZq	 d{ddddddnddoZrddqZs	 d{ddddrddtZt	 d{ddddduddvZu	 	 ddd6ddwZv	 d{dddxddzZwdS )    )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_multithreadeddataHMapping[str, Sequence[object] | Mapping[str, Sequence[object]] | Series]schemaSchemaDefinition | Noner>   SchemaDict | Noner?   boolr@   rA   returnr3   c               |    t          t                    r< r:t          fd D                       sd}t          |           fdD              t	                                                     \  }|st                     } rt          rt          fd 	                                D                       }|dk    r	 ddl
}	t                      }
|	j                            |
          5 }t          t          ||                    fd	t                                                                                    ddd           n# 1 swxY w Y   n%# t$          $ r t'           d
          cY S w xY w srfd|D             }n/d t)                     	                                D             }t+          ||d          }t-          |          }rJ|                                t          	                                          k    rt1          ||          }|S )z7Construct a PyDataFrame from a dictionary of sequences.c              3      K   | ]}|v V  	d S N .0colrD   s     d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/_utils/construction/dataframe.py	<genexpr>zdict_to_pydf.<locals>.<genexpr>W   s'      33sC6M333333    z>the given column-schema names do not match the data dictionaryc                "    i | ]}||         S rL   rL   rN   rO   rB   s     rP   
<dictcomp>z dict_to_pydf.<locals>.<dictcomp>Z   s    1113T#Y111rR   )lookup_namesr>   c              3     K   | ]u}t          oat          |          oRt          |t          j                  o8t          |          t          k    o o|j        t          j        t          j	        fv           V  vd S rK   )
intr*   
isinstancenpndarraylen"_MIN_NUMPY_SIZE_FOR_MULTITHREADINGdtypefloat32float64)rN   valrA   r@   s     rP   rQ   zdict_to_pydf.<locals>.<genexpr>d   s       
 
  # :$S)):sBJ//: HHAA:
  : I"*bj!99 
 
 
 
 
 
rR      r   Nc                    t          | d         t          j                  r#t          j        | d         | d                   n| d         S )N   r   r@   )rY   rZ   r[   plr7   )tr@   s    rP   <lambda>zdict_to_pydf.<locals>.<lambda>   sE    '1!A$
'C'C%.BIadAaDk$R$R$R$R)*1 rR   F)rB   rD   r>   r?   r@   rA   c           	     r    g | ]3}t          j        |g                     |                     j        4S )r^   r?   r@   rf   r7   get_s)rN   namer@   r>   r?   s     rP   
<listcomp>z dict_to_pydf.<locals>.<listcomp>   s^     	
 	
 	
  I&**400'   	
 	
 	
rR   c                    g | ]	}|j         
S rL   )rm   rN   ss     rP   ro   z dict_to_pydf.<locals>.<listcomp>   s*     
 
 
 D
 
 
rR   )r>   r?   r@   T)columns	from_dictr>   r?   )rY   r   all
ValueError_unpack_schemakeyslistr(   sumvaluesmultiprocessing.dummyr2   dummyPooldictzipmapitemsFileNotFoundErrordict_to_pydf_expand_dict_values_handle_columns_argr3   dtypes_post_apply_columns)rB   rD   r>   r?   r@   rA   msgcolumn_namescount_numpymultiprocessing	pool_sizepooldata_seriespydfs   ``````        rP   r   r   L   sE    &'"" 2t 23333d33333 	"RCS//!1111&111%3TYY[[;K& & &"L"  "Dzz .  . 
 
 
 
 
 {{}}
 
 
 
 
 !,,,,,..	$*//	:: d( HH!" !" !" !"
 !%TZZ\\ 2 2 
 
 D               %   #!%5! +(-       
$ 
	
 	
 	
 	
 	
 	
 %	
 	
 	

 
(!1'	  
 fhh
 
 
 &k<SWXXXK{##D 
DKKMMT2B2I2I2K2K-L-LLL",1A&
 
 
 Ks7   ,E& :AEE& EE& !E"E& &FF)r>   
n_expectedrV   r   
int | NonerV   Iterable[str] | Nonetuple[list[str], SchemaDict]c                  dd	 ddfd
} ||          }| s!|d t          |          D             ng }||fS t          | t                    r1t          |           }t          |                                           } nZg }t          |           D ]H\  }}t          |t                    r| o||v}	|	rd| n|}n|d         }|                    |           I|$t          |          |k    rd}
t          |
          |rd t          ||          D             nd}i }| D ]J}t          |t                    r|\  }}|  |          }|r|                    ||          n|}|||<   K|r|                    |           ||fS )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.
    r^   r   rH   r9   c                F    t          | d          r| S t          |           S )z1Parse non-Polars data types as Polars data types.T)include_unknown)r%   r&   )r^   s    rP   _normalize_dtypez(_unpack_schema.<locals>._normalize_dtype   s*    5$777 	+L#E***rR   Nr>   rF   dict[str, PolarsDataType]c                L    | i S fd|                                  D             S )zCParse schema overrides as a dictionary of name to Polars data type.Nc                .    i | ]\  }}| |          S rL   rL   )rN   rn   r^   r   s      rP   rU   zC_unpack_schema.<locals>._parse_schema_overrides.<locals>.<dictcomp>   s8     
 
 
.9dED""5))
 
 
rR   )r   )r>   r   s    rP   _parse_schema_overridesz/_unpack_schema.<locals>._parse_schema_overrides   sG     #I
 
 
 
=M=S=S=U=U
 
 
 	
rR   c                    g | ]}d | S )column_rL   )rN   is     rP   ro   z"_unpack_schema.<locals>.<listcomp>   s    666q]q]]666rR   r   r   z)data does not match the number of columnsc                    i | ]
\  }}|||S rK   rL   )rN   rO   rn   s      rP   rU   z"_unpack_schema.<locals>.<dictcomp>   s.     	
 	
 	
T rR   )r^   r   rH   r9   rK   )r>   rF   rH   r   )rangerY   r   rz   r   	enumeratestrappendr\   r1   r   rl   update)rD   r>   r   rV   r   rs   r   r   rO   unnamedr   lookupcolumn_dtypesrn   r^   r   s                  @rP   rx   rx      sM   + + + + /3	
 	
 	
 	
 	
 	
 	
 /./?@@  ):D:P66E*$5$56666VX 	 ((( &'"" %"&v,,fllnn%%'' 	% 	%FAs#s## !'Ac1A&A'.7mmmmC!f$$$$#l"3"3z"A"A9oo 	 	
 	
(|DD	
 	
 	
 	
   02M 
$ 
$c3 	e=$$U++E)/9vzz$%%%T#d  /-...&&rR   )rt   list[PySeries]rs   Sequence[str] | Nonert   c                  || S | sd |D             S t          |           t          |          k    r2dt          |           dt          |            d}t          |          |r5d | D             t          fd|D                       rfd|D             S t          |          D ][\  }}|| |                                         k    r8| |                                         | |<   | |                             |           \| S )	z*Rename data according to columns argument.Nc                B    g | ]}t          j        |           j        S )rn   )rf   r7   rm   rN   cs     rP   ro   z'_handle_columns_arg.<locals>.<listcomp>  s(    666	q!!!$666rR   zdimensions of columns arg () must match data dimensions ()c                8    i | ]}|                                 |S rL   r   rq   s     rP   rU   z'_handle_columns_arg.<locals>.<dictcomp>  s"    000aaffhh000rR   c              3      K   | ]}|v V  	d S rK   rL   rN   rO   
series_maps     rP   rQ   z&_handle_columns_arg.<locals>.<genexpr>  s(      66sz!666666rR   c                     g | ]
}|         S rL   rL   r   s     rP   ro   z'_handle_columns_arg.<locals>.<listcomp>  s    777JsO777rR   )r\   rw   rv   r   rn   clonerename)rB   rs   rt   r   r   r   r   s         @rP   r   r     s3     66g6666	Tc'll	"	"dCLLddX[\`XaXadddoo 8004000
6666g66666 	87777w7777'""  1Q1gmmooDGGNN1KrR   r?   r   structsdict[str, Struct] | Nonec               B   |                                  |                                 }}t          |p||          \  }}g }||k    rSt          |          t          |          k     r||dt          |                   k    r|}n|                     |           g }	t          |          D ]\  }
}|                    |          }||
         }|t          cxk    r|k    rJn nG|	                    t          j
        |                              t          |          j                   |t          cxk    r|k    rEn nB|	                    t          j
        |                              ||          j                   |r`|                    |          x}rI||k    rC|	                    t          j
        |                              ||          j                   8|R|t          k    rG||k    rA|	                    t          j
        |                              ||          j                   |	s|rb|                                 } |	r|                     |	          } |r|                     d |D                       } |                     d          } | S )zGApply 'columns' param *after* PyDataFrame creation (if no alternative).r>   Nr   c                @    g | ]}t          j        |          j        S rL   )FrO   _pyexprrN   rO   s     rP   ro   z'_post_apply_columns.<locals>.<listcomp>N  s#    LLLsc

 2LLLrR   z	in-memory)engine)rs   r   rx   r\   set_column_namesr   rl   r    r   r   rO   castr   r!   r$   lazywith_columnsselectcollect)r   rs   r   r>   r?   pydf_columnspydf_dtypesr   column_subsetcolumn_castsr   rO   r^   
pydf_dtypestructs                  rP   r   r   (  s    !%+L$		 L4D  OGV  "M,w<<#l++++<#g,,;W0W0W#MM!!'***LG$$ 
O 
O3

3 ^
K----:-----c

F K K STTTTd((((j(((((c

f E E MNNNN 	OGKK$4$44& 	O&J:N:Nc

v F F NOOOO5G#3#38K8Kc

f E E MNNN 0} 0yy{{ 	3$$\22D 	N;;LLmLLLMMD||;|//KrR   )r>   r?   orderr@   r   dict[str, Series]c                  i | rt          d |                                 D                       rd}t          |          |pi }t          | ||          } t	          d |                                 D                       dk    rA|                                 D ]*\  }}|                    |          }	t          |t                    r|	t          k    rt          j        ||          j        dk    rdk    ryt          d j                                        D                       rIfd|                                D             }
t          j        |
                              |          }n                    |          }||<   t          |t          j                  rM||j        k    r|                    |          n|}|	r"|	|j        k    r|                    |	|          }||<   ]t+          |          t-          |          rt          j        |||	||
          |<   |@t          |t.          t0          t2          t4          t6          t8          t:          t<          f          r0t?          j         ||	d          !                    |          |<   t          j        ||gz  |	|          |<   ,nt          d |                                 D                       rI|                                 D ]3\  }}t          j        |||                    |          |          |<   4nt          d |                                 D                       rZ|                                 D ]E\  }}t          j        |t-          |          r|n|g|                    |          |          |<   F|r!tE                    |k    rfd|D             S S )zCExpand any scalar values in dict data (propagate literal as array).c              3  J   K   | ]}t          |t          j                  V  d S rK   )rY   rf   ExprrN   ra   s     rP   rQ   z&_expand_dict_values.<locals>.<genexpr>_  s.      AACz#rw''AAAAAArR   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  8   K   | ]}t          |          pd V  dS r   Nr   r   s     rP   rQ   z&_expand_dict_values.<locals>.<genexpr>j  s-      DDs)DDDDDDrR   r   rd   c              3  @   K   | ]}|                                  V  d S rK   )	is_nestedrN   ds     rP   rQ   z&_expand_dict_values.<locals>.<genexpr>s  s-      OOaAKKMM 1OOOOOOrR   c                X    i | ]&\  }}||                              |d z
            'S )rd   )n)extend_constant)rN   nmv	array_lenvdfs      rP   rU   z'_expand_dict_values.<locals>.<dictcomp>u  sJ     " " " %A B 7 7i!m 7 M M" " "rR   Nrn   r|   r^   r?   r@   T)r^   eager)rn   r|   r^   r?   c              3  <   K   | ]}t          |          d k    V  dS r   r   r   s     rP   rQ   z&_expand_dict_values.<locals>.<genexpr>  s-      ==&++"======rR   )r|   r^   r?   c              3  8   K   | ]}t          |          d u V  d S rK   r   r   s     rP   rQ   z&_expand_dict_values.<locals>.<genexpr>  s-      @@3&++%@@@@@@rR   c                <    i | ]}|                     |          S rL   )pop)rN   rO   updated_datas     rP   rU   z'_expand_dict_values.<locals>.<dictcomp>  s)    <<<s\%%c**<<<rR   )#anyr|   	TypeError_expand_dict_datamaxr   rl   rY   r   r#   rf   r6   heightrv   rD   	to_structr7   rn   r   r^   r   r   r   rX   floatr   rG   r   r   r	   r
   r   repeataliasrz   )rB   r>   r?   r   r@   r   r   rn   ra   r^   s_valsstrr   r   r   r   s                @@@rP   r   r   T  s?    L FAA4;;==AAAAA 	!8  C.. !'R vf===DDdkkmmDDDDD	q==!ZZ\\ ) )	c

4((c4(( 'Uf__,s6:::C
a%MMOO3:;L;L;N;NOOOOO *" " " " ")," " "  \&11;;DAA ]]400)+L&&RY// ,0CH,<,<

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

    (Note that `range` is sized, and will take a fast-path on Series init).
    r   )r   r   rf   r7   rl   )rB   r   r?   expanded_datarn   ra   s         rP   r   r     sr     MZZ\\ 
 
	c S!!BIdCD!1!1&AAAA 	d
 rR   )r>   r?   orientinfer_schema_lengthr@   Sequence[Any]r   Orientation | Noner   c          
     r    | st          i ||          S t          t          |           | ||||||          S )z(Construct a PyDataFrame from a sequence.)rD   r>   rB   rD   r>   r?   r   r   r@   )r   _sequence_to_pydf_dispatcherr   r   s          rP   sequence_to_pydfr     sZ      RBv@PQQQQ'4  )/	 	 	 	rR   )r?   r@   first_elementr   c               ,   |||||||d}d}	t          | t                    rt          }
d |D             }|d         } d}	nt          | t          j                  rt
          }
nt          |           r"t          | t          j                  rt          }
nt          |           r9t          | t          j        t          j        t          j        f          rt          }
nt          j        |           rt"          }
ngt%          |           rt&          }
nPt)          |           rt*          }
n9t          | t,                    rt          | t.                    st          }
nt0          }
|	r(t2                              t7          |           |
           | |d<    |
di |S )Nr   Tc                ,    g | ]}t          |          S rL   )rz   )rN   rows     rP   ro   z0_sequence_to_pydf_dispatcher.<locals>.<listcomp>  s    ***cS		***rR   r   Fr   rL   )rY   r   _sequence_of_sequence_to_pydfrf   r7   _sequence_of_series_to_pydfr*   rZ   r[   _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   rB   rD   r>   r?   r   r   r@   common_paramsregister_with_singledispatchto_pydfs              rP   r   r     s   $ ,2" M $( -++ 0/**T***Q',$$	M29	-	- 0-	-	(	( 0Zrz-R-R 0,	=	)	) 0j	28R-=>/ / 0 .		!-	0	0 02	=	)	) 	06	=	)	) 0,	M8	,	, 0Zs5S5S 0//# L$--d=.A.A7KKK%2M/"7##]###rR   re   $Sequence[Any] | np.ndarray[Any, Any]c                  |b|d}n]t          |          t          |           k    ot          |          t          |          k    }|rdnd}|rt          dt                     |dk    rt          |t          |                     \  rt	                    ni }	d}
|	                                D ]m\  }}|t          t          fv rt          |	|<    |
sK|	                                t          t          fv r)t          t          | |d           j        t                    }
n|
r$d |D             }t!          j        ||          }nt!          j        ||	pd |          }srt'          |	          }|S |dk    rOt          |t          |                    \  fd
t)          |          D             }t!          |          S d|}t+          |          )NrO   r  zRow orientation inferred during DataFrame construction. Explicitly specify the orientation by passing `orient="row"` to silence this warning.r>   r   Fc                ,    g | ]}t          |          S rL   )r   r   s     rP   ro   z1_sequence_of_sequence_to_pydf.<locals>.<listcomp>M  s    000aYq\\000rR   r?   r   rD   r   ru   c           
         g | ]B\  }}t          j        |         |                    |                              j        CS rj   rk   )rN   r   elementr   r@   r>   r?   s      rP   ro   z1_sequence_of_sequence_to_pydf.<locals>.<listcomp>a  sj     	'
 	'
 	'
 7 IQ&**<?;;'   	'
 	'
 	'
rR   2`orient` must be one of {'col', 'row', None}, got )r\   r   r0   rx   _include_unknownsr   r    r!   r"   	base_typer$   r#   r   getattr	__class__r   r3   
from_dicts	from_rowsr   r   rw   )r   rB   rD   r>   r?   r   r   r@   is_row_orientedlocal_schema_overrideunpack_nestedrO   tpdictsr   r   r   r   s      ``  `         @rP   r  r    s    ~>FF  #6{{c-.@.@@ Fs4yy(  .8UU5F m*   )7%5#mBTBT*
 *
 *
&&
  .=== 	 ,2244 	 	GCk4(((-3%c**" 7F:K(K(K /M355?! !  
	004000E)f:M  DD (,4$7  D
  	+ 	&l5Ef  D 	5)7%5#d))*
 *
 *
&&	'
 	'
 	'
 	'
 	'
 	'
 	'
 (oo	'
 	'
 	'
 ;''' PVOOoorR   r7   kwargsc                  d |D             }t          |p||t          |                    \  }}g }t          |          D ]\  }	}
|
j        s|
                    ||	                   }
|                    ||	                   }|r#||
j        k    r|
                    ||d          }
|                    |
j	                   t          ||          }t          |          S )Nc                    g | ]	}|j         
S rL   r   rq   s     rP   ro   z/_sequence_of_series_to_pydf.<locals>.<listcomp>{  s    )))qAF)))rR   r  Fr?   wrap_numericalrs   )rx   r\   r   rn   r   rl   r^   r   r   rm   r   r3   )r   rB   rD   r>   r?   r)  series_namesr   r   r   rr   	new_dtypes               rP   r  r  r  s     *)D)))L%3,)t99& & &"L"
 #%K$ ! !1v 	)Q((A$((a99	 	Gag--yFFA14    %k<HHHK{###rR   tuple[Any, ...]c          
     <   t          | j                  st          |           rc|]| j        }t	          | dd           }|rCt          |          t          |          k    r#d | j                                        D             }|d}t          | |||||||          S )N__annotations__c                6    g | ]\  }}|t          |          fS rL   )r'   )rN   rn   r'  s      rP   ro   z._sequence_of_tuple_to_pydf.<locals>.<listcomp>  s:        b /334  rR   r  r   )	r   r!  r   _fieldsr   r\   r3  r   r  )	r   rB   rD   r>   r?   r   r   r@   r   s	            rP   r  r    s     ],-- 
1B=1Q1Q 
>"*F!-1BDIIK s;//3v;;>> $1$A$G$G$I$I   >F ))/	 	 	 	rR   dict[str, Any]c                   t          ||          \  }}|rt          ||pt          |                    nd }t          j        |||||          }	|rt          |	|||          }	|	S )Nr   r  )rs   r>   r?   )rx   r  rz   r3   r"  r   )
r   rB   rD   r>   r?   r   r)  r   dicts_schemar   s
             rP   _sequence_of_dict_to_pydfr9    s     &4!1& & &"L"
 	*L,RDAQ<R<RSSS  !/  D  
",9IRX
 
 
 KrR   c                   t          ||d          \  }}t          j        |d         ||                    |d                   |          j        g}t          ||          }t          |          S )Nrd   r  r   r   r.  )rx   rf   r7   rl   rm   r   r3   )r   rB   rD   r>   r?   r)  r   r   s           rP   r  r    s     &4!1a& & &"L" 		O  a11		
 	
 	

 #K &k<HHHK{###rR   np.ndarray[Any, Any]c                L    | j         dk    rt          | fi |S t          | fi |S )Nrd   )ndimr  r  )r   r)  s     rP   r  r    s>     Q,]EEfEEE,]EEfEEErR   1pd.Series[Any] | pd.Index[Any] | pd.DatetimeIndexc                  |g }nt          ||d          \  }}|pi }g }t          |          D ]\  }}	|r||         n|	j        }
t          j        |
|	          }|                    |
          }|0||                                k    r|                    ||d          }|                    |           t          |          S )Nrd   r  )rn   r|   Fr,  )
rx   r   rn   plcpandas_to_pyseriesrl   r^   r   r   r3   )r   rB   rD   r>   r?   r)  r   r   r   rr   rn   pyseriesr^   s                rP   r
  r
    s     ~"$)7%5!*
 *
 *
&& (-2"$K$ % %1".:|AAF)tA>>> $$T**(..*:*:!:!:}}U6%}PPH8$$$${###rR   c               P   ddl mm t          | ||d          \  }}}}	|r&fd|D             }
t	          j        |
||          }n'fd|D             }t	          j        ||	pd|          }|	r2d	 |	                                D             }t          |||||
          }|S )z-Initialize DataFrame from Python dataclasses.r   )asdictastupleN)model_fieldsc                &    g | ]} |          S rL   rL   )rN   mdrD  s     rP   ro   z4_sequence_of_dataclasses_to_pydf.<locals>.<listcomp>0  s!    ++++++rR   r  c                &    g | ]} |          S rL   rL   )rN   dcrE  s     rP   ro   z4_sequence_of_dataclasses_to_pydf.<locals>.<listcomp>5  s!    ++++++rR   r  c                D    i | ]\  }}t          |t                    ||S rL   rY   r#   rN   r   r'  s      rP   rU   z4_sequence_of_dataclasses_to_pydf.<locals>.<dictcomp>;  -    RRRUQ:b&;Q;QR1bRRRrR   r   )	r,   rD  rE  $_establish_dataclass_or_model_schemar3   r"  r#  r   r   )r   rB   rD   r>   r   r?   r)  r&  r   	overridesr(  r   rowsr   rD  rE  s                 @@rP   r  r    s    ,+++++++ 	-v/d	 	 	  	
++++d+++%&6I
 
 
 ,+++d+++$*d@S
 
 
  
RRioo&7&7RRR",)9&
 
 
 KrR   c               N   ddl }t          |j                  dk     }t          |r| j        n| j        j                  }	t          | |||	          \  }
}}}|
r2|rd |D             nd |D             }t          j	        |||          }nft          |	          dk    r/t          |	 fd|D             }t          j        |||	          }n$d
 |D             }t          j	        ||||          }|r2d |                                D             }t          |||||          }|S )z1Initialise DataFrame from pydantic model objects.r   N)   r   c                6    g | ]}|                                 S rL   )r   rN   rH  s     rP   ro   z8_sequence_of_pydantic_models_to_pydf.<locals>.<listcomp>b  s     &&&2RWWYY&&&rR   c                :    g | ]}|                     d           S )python)mode)
model_dumprU  s     rP   ro   z8_sequence_of_pydantic_models_to_pydf.<locals>.<listcomp>d  s&    >>>2"--X-..>>>rR   r  2   c                0    g | ]} |j                   S rL   __dict__)rN   rH  
get_valuess     rP   ro   z8_sequence_of_pydantic_models_to_pydf.<locals>.<listcomp>m  s%    777B

2;''777rR   r  c                    g | ]	}|j         
S rL   r\  rU  s     rP   ro   z8_sequence_of_pydantic_models_to_pydf.<locals>.<listcomp>s  s    ,,,,,,rR   )rD   r?   r   c                D    i | ]\  }}t          |t                    ||S rL   rL  rM  s      rP   rU   z8_sequence_of_pydantic_models_to_pydf.<locals>.<dictcomp>|  rN  rR   r   )pydanticr   __version__rz   
__fields__r!  rF  rO  r3   r"  r\   r   r#  r   r   )r   rB   rD   r>   r   r?   r)  ra  old_pydanticrF  r&  r   rP  r(  r   rQ  r   r^  s                    @rP   r  r  C  s    OOO !566?L	2  $1 L 	-v/	 	  

 ?&&&&&&>>>>> 	
 %&6I
 
 
 
\		R		.
7777$777$8K
 
 

 -,t,,,% 3	
 
 
  
RRioo&7&7RRR",)9&
 
 
 KrR   rF  list[str] | None.tuple[bool, list[str], SchemaDict, SchemaDict]c                <  
 ddl m} d}|r#t          |          \  }fd|D             }ng }fdt          | j                                                  D             }r|                               n?s;t           ||                     

fd|                                D             x}n||                                D ]v\  }}	|	t          t          fv rt          ||<    |sT|	                                t          t          fv r2t          t          | |d          rt           nt           j                  }wrOt%                    t%          |          k    r/t'          t)          |                                                    }|||fS )	zLShared utility code for establishing dataclasses/pydantic model cols/schema.r   )rD  Fr   c                H    i | ]}|                     |t                    S rL   rl   r$   )rN   rO   r>   s     rP   rU   z8_establish_dataclass_or_model_schema.<locals>.<dictcomp>  s,    UUUS*..sG<<UUUrR   c                ^    i | ])\  }}r|v n|d k    |t          |          pt          *S )	__slots__)r'   r$   )rN   rO   r'  rF  s      rP   rU   z8_establish_dataclass_or_model_schema.<locals>.<dictcomp>  sY     
 
 
R)5
 $$$C;<N<N &r**5g<N<N<NrR   c                $    i | ]\  }}|v 	||S rL   rL   )rN   r   r'  	dc_fieldss      rP   rU   z8_establish_dataclass_or_model_schema.<locals>.<dictcomp>  s+     , , ,!2r"	//B///rR   N)r,   rD  rx   r   r!  r   r   setr    r!   r"   r  r$   r#   r   r   r   r  r\   r   r   r|   )r   rD   r>   rF  rD  r&  r   rP  rO   r'  rm  s     ``      @rP   rO  rO    s
    #"""""M ))7%5*
 *
 *
&& VUUUUUU		
 
 
 
-m.EFFLLNN
 
 
	
  	)-.... 	)FF=1122I, , , ,%.__%6%6, , , yy  )??$$  R+t$$$#IcNN 	BLLNNw6G$G$G+sD11%1O!!{7O M
  @L))S^^;;\9+;+;+=+=>>??	,(8)CCrR   colsSequence[str]#MutableMapping[str, PolarsDataType]c                       fd|D             S )z7Complete partial schema dict by including Unknown type.c                V    i | ]%}|                     |t                    pt          &S rL   ri  rM   s     rP   rU   z%_include_unknowns.<locals>.<dictcomp>  s>        	fjjg&&1'  rR   rL   )rD   ro  s   ` rP   r  r    s.          rR   )r>   r?   r   
chunk_sizer   rechunkIterable[Any]rt  ru  c               j   |}g i |t          |          \  nrt          |          \  }	t          | t                    st          |           } |dk    rSrrfdt	                    D             t          j        fdt	          |           D                       j        S dfd}
d}d}|r|}nr|t                    z  }nd}d}t          pd|pd          }	 t          t          | |                    }|snp |
||          }|E|}|s&t          |j                                                  }||k    r|j        x}dk    r||z  x}}n|                    |d           |dz  }| |
g |          }|dk    r|r|                                }|j        S )z3Construct a PyDataFrame from an iterable/generator.Nr   rO   c                N    i | ]!\  }}|                     |t                    "S rL   ri  )rN   idxrO   r>   s      rP   rU   z$iterable_to_pydf.<locals>.<dictcomp>  s@       C %))#w77  rR   c           	         i | ]=\  }}r|         nd | t          j        |                    |                    >S )r   )r^   r?   )rf   r7   rl   )rN   ry  coldatar   dtypes_by_idxr?   s      rP   rU   z$iterable_to_pydf.<locals>.<dictcomp>  sq        !C '3Gc""#")'++C00!K K K  rR   r|   	list[Any]rD   rE   rH   r6   c                6    t          j        | |d          S )Nr  )rB   rD   r?   r   r   )rf   r6   )r|   rD   r   r?   s     rP   to_frame_chunkz(iterable_to_pydf.<locals>.to_frame_chunk  s+    | 3
 
 
 	
rR   r   i@B r=   T)in_placerd   )r|   r}  rD   rE   rH   r6   )rx   rY   r   iterr   rf   r6   _dfr\   r   rz   r   rD   r   widthvstackru  )rB   rD   r>   r?   r   rt  r   ru  original_schema_r  n_chunksn_chunk_elemsadaptive_chunk_sizedfr|   frame_chunk	n_columnsr   r|  s     ``  `           @@rP   iterable_to_pydfr    s    O L/1M)7%5*
 *
 *
&&& 
 X,VFVWWWdI&& Dzz 	, 	    ), 7 7  M
 |      %.dOO  	
 	
 		
 
 
 
 
 
 
 HM #(	 #+s</@/@@"B		!		$ JfT:..// 	$nV_==:B" :"&ry'8'8"9"9000!#)IQ..7D	7QQJ!4IIkDI111MH  
z^B00!|||ZZ\\6MrR   pd.DataFrameinclude_indexNonec                  d | j         D             }|rd | j        j        D             nt                      }t	          |          t	          | j                   k     }|r*t	          |          t	          | j        j                  k     nd}|s|rd}t          |          ||z  }t	          |          dk    rd}t          |          dS )z:Check pandas dataframe columns can be converted to polars.c                ,    h | ]}t          |          S rL   r   r   s     rP   	<setcomp>z(_check_pandas_columns.<locals>.<setcomp>  s    !C!C!Cs#c((!C!C!CrR   c                ,    h | ]}t          |          S rL   r  )rN   ry  s     rP   r  z(_check_pandas_columns.<locals>.<setcomp>  s    ...cS...rR   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)rs   indexnamesrn  r\   rw   )rB   r  stringified_colsstringified_indexnon_unique_colsnon_unique_indicesr   overlapping_cols_and_indicess           rP   _check_pandas_columnsr    s    !C!Cdl!C!C!C2?J..TZ-....SUU    011C4E4EEO<IT		#dj&6"7"7	7	7u   , I 	 oo-=@Q-Q 
'((1,,Aoo -,rR   )r>   r?   ru  r@   r  c                   t           |           |ot                      }|sOt           fd j        D                       r/t	          j         fd j        D             ||||          j        S t          sd}t          |          i }	 j	        d         }
|rN j
        j        D ]A}t          j         j
                            |          ||
          |	t          |          <   B                                 D ],\  }}t          j        |||
          |	t          |          <   -t#          j        |	          }t'          |||||          S )	z0Construct a PyDataFrame from a pandas DataFrame.)r  c              3  B   K   | ]}t          |                   V  d S rK   )r   rT   s     rP   rQ   z!pandas_to_pydf.<locals>.<genexpr>?  sA       ! !<?,T#Y77! ! ! ! ! !rR   c                `    i | ]*}t          |          |                                         +S rL   )r   to_numpyrT   s     rP   rU   z"pandas_to_pydf.<locals>.<dictcomp>D  s1    DDDSXXtCy))++DDDrR   )rD   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)rD   r>   r?   ru  )r  _pandas_has_default_indexrv   rs   rf   r6   r  r)   ImportErrorshaper  r  r@  pandas_series_to_arrowget_level_valuesr   r   patablearrow_to_pydf)rB   rD   r>   r?   ru  r@   r  convert_indexr   
arrow_dictr  idxcolcol_idxcol_dataarrow_tables   `              rP   pandas_to_pydfr  1  s    $m<<<<!I*CD*I*I&IM 
S ! ! ! !CG<! ! !   
 |DDDDt|DDD-#
 
 
 	  > 	
 #JZ]F j& 	 	F&)&@
++F33'' ' 'Js6{{## "ZZ\\ 
 
#&#=+f$
 $
 $

3w<<   (:&&K)   rR   r  c                   ddl m} | j        j        }t	          |          dk    s|dgdgfvrdS | j                             |dt	          |           d                    rdS t          | j        j                                      d	          oM| j        	                                t          j        t	          |                     k                                    S )
zFIdentify if the pandas frame only has a default (or equivalent) index.r   )
RangeIndexrd   N F)startstopstepTrX   )pandas.core.indexes.ranger  r  r  r\   equalsr   r^   
startswithsort_valuesrZ   arangerv   )r  r  
index_colss      rP   r  r  l  s    444444J
:j$">>u	!#b''BBB	C	C 	
t
 **511 E%%''29SWW+=+==BBDD	
rR   )r>   r?   ru  pa.Table | pa.RecordBatchc                  t          |p| j        j        |          \  }}	 || j        j        k    r|                     |          } n)# t          j        $ r}d}t          |          |d}~ww xY wt          | t          j                  r| g}n| 	                                }t          j        || j                  }	|r|	                                }	|t          |	|||          }	|	S )z;Construct a PyDataFrame from an Arrow Table or RecordBatch.r   z4dimensions of columns arg must match data dimensionsNru   )rx   rD   r  rename_columnsr  ArrowInvalidrw   rY   RecordBatch
to_batchesr3   from_arrow_record_batchesru  r   )
rB   rD   r>   r?   ru  r   er   batchesr   s
             rP   r  r    s    &4		$4;$8H& & &"L"%4;,,,&&|44D? % % %Doo1$%
 $'' $&//## 0$+FFD ||~~#"-	
 
 
 Ks   %A A.A))A.)r>   r   r?   r@   c                    j         t                    dk     j        j        yd\  }}t	           j        j                  }t          |          |D ]D} |         j         t           |         j                   dk    rd|d }	t          |	          E|s|}ndg }}dk    rdnt                    d	k    rd	nt                    dk    r||d	         d
}n|c|at          |          }
|
d         k    r|
d	         k    rd}d         n~ j        d         rd         d	         k    rd}|
nZd
}d	         nO|d
k    r	d	         n@|dk    r	d         n1d|}	t          |	          dk    rd}	nd }	t          |	          |Bt          |          k    r/t          |          x}
d	k    rd|
 d d}	t          |	          |
t          |          \  |r  fdt          |          D             }ndk    r	dk    rg }nt                    d	k    r?t          j
        d                              d                             j        g}nK|d
k    r# fdt                    D             }n" fdt                    D             }t          |          }t          |          S )zMConstruct a PyDataFrame from a NumPy ndarray (including structured ndarrays).rS  N)TrO   zHcannot create DataFrame from structured array with elements > 2D; shape[z] = F)r   r   rd   r  rO   F_CONTIGUOUSr  rL   z3cannot create DataFrame from zero-dimensional arrayzJcannot create DataFrame from array with more than two dimensions; shape = zdimensions of `schema` (r   r   r  c           	         g | ]<\  }}t          j        ||                             |                     j        =S )r   rk   )rN   series_namerecord_namerB   r@   r>   r?   s      rP   ro   z!numpy_to_pydf.<locals>.<listcomp>  sg     	
 	
 	
 )[ I K(&**;77'   	
 	
 	
rR   r   c           
         g | ]_}t          j        |         	rd k    rd          d k    rndd|f                             |                             j        `S )rd   Nr   rk   
rN   r   r   rB   r  r@   r>   r  r?   two_ds
     rP   ro   z!numpy_to_pydf.<locals>.<listcomp>  s         	%a !(%.!^^a1 !!!!Q$Z*..|A??! +
 
 
   rR   c           
         g | ][}t          j        |         	rd k    rd          d k    rn|                             |                             j        \S )rd   r   rk   r  s
     rP   ro   z!numpy_to_pydf.<locals>.<listcomp>"  s         	%a %V)q..U1X\\tTUw*..|A??! +     rR   r.  )r  r\   r^   r  rz   rw   flagsrx   r   rf   r7   rl   rm   r   r   r3   )rB   rD   r>   r   r?   r@   structured_arrayrecord_namesr   r   n_schema_colsr   r   r  r  r  s   ` ` ``      @@@@rP   numpy_to_pydfr    s    JEJJ!OEz##. &DJ,--%%	 	& 	&BHNE48>""Q&&racrrkprr oo% '  	"!F */,D==IIZZ1__IIZZ1__~&.!!H	F$6 !$F E!H,,%(1J1J"F %aIIZ/ )E!Ha4H4H"F -II"F %aII5!!H		5!!H		WVWW oo%{{KjchjjS//!c&kkY66 [[(MQ..f]ffZcfffCS//!!	%3!1i& & &"L"
  4	
 	
 	
 	
 	
 	
 	
 -0l,K,K	
 	
 	
 
$9>>	UqI!!_&**<?;;'   
 U??           y))  KK           y))  K &k<HHHK{###rR   c                  ||t          | j        g          S | j        g}d |D             }t          |p||d          \  }}|rZt          t	          |                                                    }|| j        k    r!|d                             ||d          |d<   t          ||          }t          |          S )	z-Construct a PyDataFrame from a Polars Series.Nc                6    g | ]}|                                 S rL   r   rq   s     rP   ro   z"series_to_pydf.<locals>.<listcomp>?  s     11116688111rR   rd   r  r   Fr,  r.  )	r3   rm   rx   nextr  r|   r^   r   r   )rB   rD   r>   r?   r   r  r   r0  s           rP   series_to_pydfr  3  s     ~*2DG9%%%7)K11[111K%3+0@Q& & &"L"  .55778899	
""(^00& 1  KN &k<HHHK{###rR   ru   r6   c                  ||| j                                         S d | D             }t          |p| j        |          \  }}|rN| j        }|                                D ]2\  }}|||         k    r!||                             ||d          ||<   3t          t          |	                                          |          }	t          |	          S )z:Construct a PyDataFrame from an existing Polars DataFrame.Nc                (    i | ]}|j         |j        S rL   )rn   rm   r   s     rP   rU   z%dataframe_to_pydf.<locals>.<dictcomp>Y  s    ...A1614...rR   r   Fr,  r.  )r  r   rx   rs   rD   r   r   r   rz   r|   r3   )
rB   rD   r>   r?   r   r   existing_schemarn   r0  series_colss
             rP   dataframe_to_pydfr  N  s     ~*2x~~.....K%3$,1A& & &"L"  +/5577 	 	OD)OD111$/$5$:$:fU %; % %D! &d;+=+=+?+?&@&@,WWWK{###rR   rK   )rB   rC   rD   rE   r>   rF   r?   rG   r@   rG   rA   rG   rH   r3   )
rD   rE   r>   rF   r   r   rV   r   rH   r   )rB   r   rs   r   rt   rG   rH   r   )NN)r   r3   rs   rE   r   r   r>   rF   r?   rG   rH   r3   )rB   rC   r>   rF   r?   rG   r   r   r@   rG   rH   r   )rB   rC   r   r;   r?   rG   rH   rC   )rB   r   rD   rE   r>   rF   r?   rG   r   r   r   r   r@   rG   rH   r3   )r   r   rB   r   rD   rE   r>   rF   r?   rG   r   r   r   r   r@   rG   rH   r3   )r   r  rB   r   rD   rE   r>   rF   r?   rG   r   r   r   r   r@   rG   rH   r3   )r   r7   rB   r   rD   rE   r>   rF   r?   rG   r)  r   rH   r3   )r   r1  rB   r   rD   rE   r>   rF   r?   rG   r   r   r   r   r@   rG   rH   r3   )r   r6  rB   r   rD   rE   r>   rF   r?   rG   r   r   r)  r   rH   r3   )r   r   rB   r   rD   rE   r>   rF   r?   rG   r)  r   rH   r3   )r   r;  r)  r   rH   r3   )r   r>  rB   r   rD   rE   r>   rF   r?   rG   r)  r   rH   r3   )r   r   rB   r   rD   rE   r>   rF   r   r   r?   rG   r)  r   rH   r3   )
r   r   rD   rE   r>   rF   rF  re  rH   rf  )rD   r;   ro  rp  rH   rq  )rB   rv  rD   rE   r>   rF   r?   rG   r   r   rt  r   r   r   ru  rG   rH   r3   )rB   r  r  rG   rH   r  )rB   r  rD   rE   r>   rF   r?   rG   ru  rG   r@   rG   r  rG   rH   r3   )r  r  rH   rG   )rB   r  rD   rE   r>   rF   r?   rG   ru  rG   rH   r3   )rB   r;  rD   rE   r>   rF   r   r   r?   rG   r@   rG   rH   r3   )
rB   r7   rD   rE   r>   rF   r?   rG   rH   r3   )
rB   r6   rD   rE   r>   rF   r?   rG   rH   r3   )x
__future__r   
contextlibcollections.abcr   r   r   r   r   r	   r
   	functoolsr   	itertoolsr   r   operatorr   typingr   r   r   polars._reexport	_reexportrf   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-   rZ   r.   r  r/   r  polars.exceptionsr0   r1   polars.metar2   suppressr  polars.polarsr3   r4   r5   r6   r7   polars._typingr8   r9   r:   r;   r<   r]   r   rx   r   r   r   r   r   r   r  rz   r  r  tupler  r   r9  r   r  r  r
  r  r  rO  r  r  r  r  r  r  r  r  r  rL   rR   rP   <module>r     s   " " " " " "     8 8 8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 $ $ $ $ $ $ ) ) ) ) ) ) ) )                      ( ( ( ( ( ( ( ( ( ! ! ! ! ! !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	           
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
              , + + + + + , , , , , , - - - - - - @ @ @ @ @ @ @ @ ( ( ( ( ( (Z%% * *))))))* * * * * * * * * * * * * * *  
'88888888((((((((            '&&&&&%) "
 '+c +/ $c c c c c cR +/!)-W' W' W' W' W' W'x %) 	     > )-*.	) ) ) ) ) ) )^ +/"&S S S S S St 	     . '+ +/!%&5     4   ?$ ?$ ?$ ?$ ?$ ?$D &&t,, R R R R R -,Rj$ $ $ $8 &&u-- " " " " " .-"J &&w//&&t,,! ! ! -, 0/!H &&s++$ $ $ ,+$0F F F F$ $ $ $H & & & & & &R> > > >B,D ,D ,D ,D^    '+Y +/!%!&5Y Y Y Y Y Yx   4 '+8 +/8 8 8 8 8 8v
 
 
 
. '+' +/' ' ' ' ' 'X '+E$ +/!%E$ E$ E$ E$ E$ E$T '+*.$
 $ $ $ $ $ $: '+$ +/$ $ $ $ $ $ $ $s   CC"C