
    q-Ph)                    P   d dl mZ d dlmZ d dlmZ d dlmZ	 d dl
mZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ er d d
lm Z m!Z! d dl"m#Z# d dlm$Z$m%Z%m&Z&m'Z' d dlm Z( ddd3dZ)d4dZ*d4dZ+d5dZ,d6d Z-d6d!Z.	 d7d8d(Z/d9d)Z0	 d7d:d/Z1	 d7d;d1Z2d<d2Z3dS )=    )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_copydfr   r   boolreturnr   c                   t          | t          j                  r| S t          | t                    r| j        S t          | d          s"dt          |           d}t          |          t          | 	                    |          |          S )a  
    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!   )r   r   msgs      a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/interchange/from_dataframe.pyfrom_dataframer*      s     "bl## 		B	(	( v2'' m1"55mmmnn
J//       InterchangeDataFramec                   g }|                                  D ](}t          ||          }|                    |           )|s&t          | |          }|                    |           t          j        |d          S )Nr   F)rechunk)
get_chunks_protocol_df_chunk_to_polarsappendFconcat)r   r   chunkschunkpolars_chunks        r)   r'   r'   5   s    F $ $3EjQQQl####  $3B:NNNl###8FE****r+   c                  g }t          |                                 |                                           D ]\  }}t          |j                  }|t
          k    rt          ||          }n/|t          k    rt          ||          }nt          |||          }|
                    |                    |                     t          j        |          S )Nr   )zipget_columnscolumn_namesr   dtyper	   _string_column_to_seriesr   _categorical_column_to_series_column_to_seriesr1   aliasr#   r   )r   r   columnscolumnnamer;   ss          r)   r0   r0   C   s     GBNN,,boo.?.?@@ & &%fl33F??(JGGGAAd]]-fLLLAA!&%JGGGAqwwt}}%%%%<   r+   rA   r   r;   r   r   c                  |                                  }| j        }t          g |d         |                                 |R d|i}t	          |d         | ||||          }t
          j                            |||          S )Ndatar   validityr   rE   rF   )get_buffersoffset_construct_data_buffersize_construct_validity_bufferr#   r   _from_buffers)rA   r;   r   buffersrI   data_buffervalidity_buffers          r)   r>   r>   T   s       ""G]F( 	 ++--)/  <F K 1
VUKJ  O 9""5{_"UUUr+   c               N   |                                  dk    rt          j        t                    S |sd}t	          |          |                                 }| j        }|d         }|d}t          |          t          g ||R d|i}|d         \  }}t          |||j
        d|          }	|	|g}
t          j                            t          |
d 	          }t          |d
         | t          |||          }|'t          j                            t          |
|	          }|S )Nr   r;   z string buffers must be convertedoffsetsz5cannot create String column without an offsets bufferr   rE   )rI   r   rG   rF   r   )rK   r#   r   r	   r   rH   rI   RuntimeError_construct_offsets_bufferrJ   bufsizerM   rL   )rA   r   r(   rN   rI   offsets_buffer_infooffsets_bufferbufferr;   rO   data_buffersrE   rP   s                r)   r<   r<   c   sb   {{}}yv&&&& '0!#&&&  ""G]F!),"E3. 	$  1; N FOMFE(v~aJ  K  0L9""6t"LLD 1
VVT6j  O "y&& ' 
 
 Kr+   c                   | j         }|d         sd}t          |          |d         }|                                dk    rt          g           }nL|j        d         t
          j        k    rd}t          |          t          ||          }t          |          }|                                 }| j	        }t          g |d         |                                 |R d|i}	t          |d	         | ||	||          }
|	j        }t          j                            ||	|

          }|t          k    rI|s-|                                 dk    rd| d}t!          |          |                    t                    }|                    |          S )Nis_dictionaryz1non-dictionary categoricals are not yet supported
categoriesr   z'non-string categories are not supportedr   rE   r   rF   rG   zdata buffer must be cast from z
 to UInt32)describe_categoricalNotImplementedErrorrK   r   r;   r   STRINGr<   rH   rI   rJ   rL   r#   r   rM   r   r   cast)rA   r   categoricalr(   categories_colr;   r]   rN   rI   rO   rP   
data_dtypeouts                r)   r=   r=      s   -K' 'A!#&&& .N!!R		a	 I$4	4	47!#&&&-nTTT
Z    ""G]F( 	 ++--)/  <F K 1
VUKJ  O "J
)
!
! "  C
 V 	+fkkmma//I:IIIC%c*** hhv88E??r+   rY   r   r   lengthintrI   c                  t          |          }t          |          }| j        ||f}|t          k    r~|d         dk    rr|dk    rt	          j        t                    S |sd}t          |          t          j                            t          ||           	                    t                    S t          j                            |||           S )N      r   rR   zBbyte-packed boolean buffer must be converted to bit-packed booleanowner)
r   r   ptrr   r#   r   r   _from_bufferr
   ra   )rY   r;   rf   rI   r   polars_dtypebuffer_infor(   s           r)   rJ   rJ      s     )//L
 5\BBL:vv.K w58q==Q;;97++++ 	+VC%c***y%%e[%GGLLWUUU9!!,6!JJJr+   c               $   t          |          }t          | j        |          |z
  }| j        ||f}t          j                            |||           }|t          k    r1|sd| d}t          |          |	                    t                    }|S )Nrk   z!offsets buffer must be cast from z	 to Int64)
r   r   rV   rm   r#   r   rn   r   r   ra   )	rY   r;   rI   r   ro   rf   rp   rC   r(   s	            r)   rU   rU      s     )//L*6>5AAFJF:vv.K
	|[GGA u 	+MlMMMC%c***FF5MMHr+   validity_buffer_infotuple[Buffer, Dtype] | Nonecolumn_dtyperE   Series | Nonec                  |j         \  }}|t          j        k    s|j        dk    rd S |t          j        k    r2| d S | d         }t          |||                                ||          S |t          j        k    r| d S | d         }t          |||          S |t          j	        k    r'|sd}	t          |	          |                                S |t          j        k    r|sd}	t          |	          t          j        |g          }
	 |                                r|
                    |          }
||
k    S # t"          $ r}d| d|}	t%          |	          |d }~ww xY wd|}	t'          |	          )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_bitmaskrK   USE_BYTEMASK(_construct_validity_buffer_from_bytemaskUSE_NANr   
is_not_nanUSE_SENTINELr#   r   is_temporalra   r   r&   r_   )rr   rA   rt   rE   rI   r   	null_type
null_valuerY   r(   sentineles               r)   rL   rL      s    #0IzN///63D3I3It	n0	0	0'4%a(6Jv*
 
 
 	
 
n1	1	1'4%a(7J:
 
 
 	
 
n,	,	, 	+/C%c***   	n1	1	1 	+/C%c***9j\**	('')) 7#==668##$ 	( 	( 	(]|]]z]]CC..a'	(
 6	55!#&&&s   .D7 7
EEEr   c                   | j         ||f}t          j                            t          ||           }|dk    r|sd}t          |          | }|S )Nr   zbitmask must be inverted)rm   r#   r   rn   r   r   )rY   r   rf   rI   r   rp   rC   r(   s           r)   r{   r{   #  s[     :vv.K
	wV<<AQ 	+,C%c***BHr+   c                   |sd}t          |          | j        d| j        f}t          j                            t          ||           }|                    t                    }|dk    r| }|S )Nz)bytemask must be converted into a bitmaskr   rk   )	r   rm   rV   r#   r   rn   r
   ra   r   )rY   r   r   r(   rp   rC   s         r)   r}   r}   7  so      '9!#&&&:q&.1K
	uk@@A	wAQBHr+   )r   r   r   r   r   r   )r   r,   r   r   r   r   )rA   r   r;   r   r   r   r   r   )rA   r   r   r   r   r   )r   )rY   r   r;   r   rf   rg   rI   rg   r   r   r   r   )
rY   r   r;   r   rI   rg   r   r   r   r   )rr   rs   rA   r   rt   r   rE   r   rI   rg   r   r   r   ru   )rY   r   r   rg   rf   rg   rI   rg   r   r   r   r   )rY   r   r   rg   r   r   r   r   )4
__future__r   typingr   polars._reexport	_reexportr#   polars.functions	functionsr2   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'   r0   r>   r<   r=   rJ   rU   rL   r{   r}    r+   r)   <module>r      s   " " " " " "                         5 5 5 5 5 5 H H H H H H H H H H H H H H H H 3 3 3 3 3 3 8 8 8 8 8 8 V V V V V V V V V V           N((((((((------VVVVVVVVVVVVMMMMMM CG      8+ + + +! ! ! !"V V V V% % % %P+ + + +d 	K K K K K:   8 3' 3' 3' 3' 3't 	    (     r+   