
    h)                       S SK Jr  S SKJr  S SKJr  S SKJr	  S SK
Jr  S SKJrJrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJrJrJr  \(       a   S S
KJ r J!r!  S SK"J#r#  S SKJ$r$J%r%J&r&J'r'  S SKJ r(  SS.SS jjr)SS jr*      SS jr+        SS jr,SS jr-SS jr. S           S S jjr/          S!S jr0 S             S"S jjr1 S           S#S jjr2        S$S jr3g)%    )annotations)TYPE_CHECKINGN)qualified_type_name)BooleanEnumInt64StringUInt8UInt32)InvalidOperationError)PolarsDataFrame)ColumnNullTypeCopyNotAllowedError	DtypeKind)dtype_to_polars_dtypeget_buffer_length_in_elements!polars_dtype_to_data_buffer_dtype)	DataFrameSeries)PolarsDataType)BufferColumnDtypeSupportsInterchange)r   T
allow_copyc                  [        U [        R                  5      (       a  U $ [        U [        5      (       a  U R                  $ [        U S5      (       d  S[        U 5      < S3n[        U5      e[        U R                  US9US9$ )am  
Build a Polars DataFrame from any dataframe supporting the interchange protocol.

Parameters
----------
df
    Object supporting the dataframe interchange protocol, i.e. must have implemented
    the `__dataframe__` method.
allow_copy
    Allow memory to be copied to perform the conversion. If set to False, causes
    conversions that are not zero-copy to fail.
__dataframe__z`df` of type z4 does not support the dataframe interchange protocolr   )

isinstanceplr   r   _dfhasattrr   	TypeError_from_dataframer   )dfr   msgs      [/home/james-whalen/.local/lib/python3.13/site-packages/polars/interchange/from_dataframe.pyfrom_dataframer(      s~     "bll##		B	(	(vv2''1"588lmn
J/     c                   / nU R                  5        H  n[        X1S9nUR                  U5        M     U(       d  [        XS9nUR                  U5        [        R                  " USS9$ )Nr   F)rechunk)
get_chunks_protocol_df_chunk_to_polarsappendFconcat)r%   r   chunkschunkpolars_chunks        r'   r$   r$   5   sY    F3EQl# !
 3BNl#88FE**r)   c               b   / n[        U R                  5       U R                  5       5       Hl  u  p4[        UR                  5      nU[
        :X  a
  [        X1S9nOU[        :X  a
  [        X1S9nO
[        X5US9nUR                  UR                  U5      5        Mn     [        R                  " U5      $ )Nr   )zipget_columnscolumn_namesr   dtyper	   _string_column_to_seriesr   _categorical_column_to_series_column_to_seriesr.   aliasr    r   )r%   r   columnscolumnnamer8   ss          r'   r-   r-   C   s     GBNN,boo.?@%fll3F?(GAd]-fLA!&JGAqwwt}% A <<  r)   c          	         U R                  5       nU R                  n[        / US   QU R                  5       PUP7SU06n[	        US   XXTUS9n[
        R                  R                  XUS9$ )Ndatar   validityr   rB   rC   )get_buffersoffset_construct_data_buffersize_construct_validity_bufferr    r   _from_buffers)r>   r8   r   buffersrF   data_buffervalidity_buffers          r'   r;   r;   T   s       "G]]F( 	 ++-)/<FK 1
VKJO 99""5_"UUr)   c          	         U R                  5       S:X  a  [        R                  " [        S9$ U(       d  Sn[	        U5      eU R                  5       nU R                  nUS   nUc  Sn[        U5      e[        / UQUP7SU06nUS   u  px[        XxUR                  SUS9n	X/n
[        R                  R                  [        U
S S	9n[        US
   U [        XUS9nUb"  [        R                  R                  [        XS	9nU$ )Nr   r8   z string buffers must be convertedoffsetsz5cannot create String column without an offsets bufferr   rB   )rF   r   rD   rC   r   )rH   r    r   r	   r   rE   rF   RuntimeError_construct_offsets_bufferrG   bufsizerJ   rI   )r>   r   r&   rK   rF   offsets_buffer_infooffsets_bufferbufferr8   rL   data_buffersrB   rM   s                r'   r9   r9   c   s   {{}yyv&&0!#&&  "G]]F!),"E3. 	$1;N FOMF(v~~aJK  0L99""6t"LD 1
VVTjO "yy&& ' 
 Kr)   c          	        U R                   nUS   (       d  Sn[        U5      eUS   nUR                  5       S:X  a  [        / 5      nOBUR                  S   [
        R                  :w  a  Sn[        U5      e[        XAS9n[        U5      nU R                  5       nU R                  n[        / US   QU R                  5       PUP7SU06n	[        US	   XXUS9n
U	R                  n[        R                  R                  XU
S
9nU[        :w  aA  U(       d%  U R                  5       S:  a  SU S3n[!        U5      eUR#                  [        5      nUR#                  U5      $ )Nis_dictionaryz1non-dictionary categoricals are not yet supported
categoriesr   z'non-string categories are not supportedr   rB   r   rC   rD   zdata buffer must be cast from z
 to UInt32)describe_categoricalNotImplementedErrorrH   r   r8   r   STRINGr9   rE   rF   rG   rI   r    r   rJ   r   r   cast)r>   r   categoricalr&   categories_colr8   rZ   rK   rF   rL   rM   
data_dtypeouts                r'   r:   r:      sg   --K'A!#&& .N!R			a	 I$4$4	47!#&&-nT
Z   "G]]F( 	 ++-)/<FK 1
VKJO ""J
))
!
! " C
 Vfkkma/2:,jIC%c** hhv88E?r)   c               z   [        U5      n[        U5      nU R                  X24nU[        :X  ap  US   S:X  ag  US:X  a  [        R
                  " [        S9$ U(       d  Sn[        U5      e[        R
                  R                  [        X`S9R                  [        5      $ [        R
                  R                  XVU S9$ )N      r   rO   zBbyte-packed boolean buffer must be converted to bit-packed booleanowner)
r   r   ptrr   r    r   r   _from_bufferr
   r^   )rV   r8   lengthrF   r   polars_dtypebuffer_infor&   s           r'   rG   rG      s     )/L
 5\BL::v.K w58q=Q;997++VC%c**yy%%e[%GLLWUU99!!,6!JJr)   c                  [        U5      n[        U R                  U5      U-
  nU R                  X%4n[        R
                  R                  XFU S9nU[        :w  a-  U(       d  SU S3n[        U5      eUR                  [        5      nU$ )Nrf   z!offsets buffer must be cast from z	 to Int64)
r   r   rS   rh   r    r   ri   r   r   r^   )	rV   r8   rF   r   rk   rj   rl   r@   r&   s	            r'   rR   rR      s     )/L*6>>5AFJF::v.K
		|GA u5l^9MC%c**FF5MHr)   c                  UR                   u  pgU[        R                  :X  d  UR                  S:X  a  g U[        R                  :X  a"  U c  g U S   n[        XUR                  5       XES9$ U[        R                  :X  a  U c  g U S   n[        XUS9$ U[        R                  :X  a$  U(       d  Sn	[        U	5      eUR                  5       $ U[        R                  :X  aV  U(       d  Sn	[        U	5      e[        R                  " U/5      n
 UR                  5       (       a  U
R!                  U5      n
X::g  $ SU< 3n	['        U	5      e! ["         a  nSU SU< 3n	[%        U	5      UeS nAff = f)Nr   r   zbitmask must be constructedz*invalid sentinel value for column of type z: zunsupported null type: )describe_nullr   NON_NULLABLE
null_countUSE_BITMASK'_construct_validity_buffer_from_bitmaskrH   USE_BYTEMASK(_construct_validity_buffer_from_bytemaskUSE_NANr   
is_not_nanUSE_SENTINELr    r   is_temporalr^   r   r#   r\   )validity_buffer_infor>   column_dtyperB   rF   r   	null_type
null_valuerV   r&   sentineles               r'   rI   rI      su    #00IN///63D3D3I	n00	0'%a(6v
 	
 
n11	1'%a(7:
 	
 
n,,	,/C%c**  	n11	1/C%c**99j\*	(''))#==6## (	}5!#&& % 	(>|nBzn]CC.a'	(s   	)E 
E(E##E(c                   U R                   X24n[        R                  R                  [        XP5      nUS:w  a  U(       d  Sn[        U5      eU) nU$ )Nr   zbitmask must be inverted)rh   r    r   ri   r   r   )rV   r}   rj   rF   r   rl   r@   r&   s           r'   rs   rs   #  sN     ::v.K
		w<AQ,C%c**BHr)   c                   U(       d  Sn[        U5      eU R                  SU R                  4n[        R                  R                  [        X@S9nUR                  [        5      nUS:w  a  U) nU$ )Nz)bytemask must be converted into a bitmaskr   rf   )	r   rh   rS   r    r   ri   r
   r^   r   )rV   r}   r   r&   rl   r@   s         r'   ru   ru   7  sd     9!#&&::q&..1K
		uk@A	wAQBHr)   )r%   r   r   boolreturnr   )r%   InterchangeDataFramer   r   r   r   )r>   r   r8   r   r   r   r   r   )r>   r   r   r   r   r   )r   )rV   r   r8   r   rj   intrF   r   r   r   r   r   )
rV   r   r8   r   rF   r   r   r   r   r   )rz   ztuple[Buffer, Dtype] | Noner>   r   r{   r   rB   r   rF   r   r   r   r   zSeries | None)rV   r   r}   r   rj   r   rF   r   r   r   r   r   )rV   r   r}   r   r   r   r   r   )4
__future__r   typingr   polars._reexport	_reexportr    polars.functions	functionsr/   polars._utils.variousr   polars.datatypesr   r   r   r	   r
   r   polars.exceptionsr   polars.interchange.dataframer   polars.interchange.protocolr   r   r   polars.interchange.utilsr   r   r   polarsr   r   polars._typingr   r   r   r   r   r   r(   r$   r-   r;   r9   r:   rG   rR   rI   rs   ru    r)   r'   <module>r      s   "     5 H H 3 8 V V  (-VVM CG 8+!!-1!!"VV)V:>VV%P+d 	KKK K 	K K K: 
  8 3'53'3' !3' 	3'
 3' 3' 3't 	  	  ( 	
 r)   