
    ˀh)                       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ddZ)ddZ*	 	 	 	 	 	 ddZ+	 	 	 	 	 	 	 	 ddZ,ddZ-ddZ.	 d	 	 	 	 	 	 	 	 	 	 	 d dZ/	 	 	 	 	 	 	 	 	 	 d!dZ0	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d"dZ1	 d	 	 	 	 	 	 	 	 	 	 	 d#dZ2	 	 	 	 	 	 	 	 d$dZ3y)%    )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                   t        | t        j                        r| S t        | t              r| j                  S t        | d      sdt        |       d}t        |      t        | j                  |      |      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   )dfr   msgs      }/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/polars/interchange/from_dataframe.pyfrom_dataframer(      su     "bll#		B	(vv2'1"588lmn
J/     c                   g }| j                         D ]   }t        ||      }|j                  |       " |st        | |      }|j                  |       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   sb    F $3EjQl#$
 3B:Nl#88FE**r)   c               r   g }t        | j                         | j                               D ]v  \  }}t        |j                        }|t
        k(  rt        ||      }n%|t        k(  rt        ||      }nt        |||      }|j                  |j                  |             x t        j                  |      S )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?(JGAd]-fLA!&%JGAqwwt}%& <<  r)   c                   | j                         }| j                  }t        g |d   | j                         |d|i}t	        |d   | ||||      }t
        j                  j                  |||      S )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
VUKJO 99""5{_"UUr)   c                  | j                         dk(  rt        j                  t              S |sd}t	        |      | j                         }| j                  }|d   }|d}t        |      t        g ||d|i}|d   \  }}t        |||j                  d|      }	|	|g}
t        j                  j                  t        |
d 	      }t        |d
   | t        |||      }|&t        j                  j                  t        |
|	      }|S )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 FOMFE(v~~aJK  0L99""6t"LD 1
VVT6jO "yy&& ' 
 Kr)   c                  | j                   }|d   sd}t        |      |d   }|j                         dk(  rt        g       }nE|j                  d   t
        j                  k7  rd}t        |      t        ||      }t        |      }| j                         }| j                  }t        g |d   | j                         |d|i}	t        |d	   | ||	||      }
|	j                  }t        j                  j                  ||	|

      }|t        k7  r;|s$| j                         dkD  rd| d}t!        |      |j#                  t              }|j#                  |      S )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:      so   --K'A!#&& .N!R			a	 I$4$4	47!#&&-nT
Z   "G]]F( 	 ++-)/<FK 1
VUKJO ""J
))
!
! " C
 Vfkkma/2:,jIC%c** hhv88E?r)   c                  t        |      }t        |      }| j                  ||f}|t        k(  ro|d   dk(  rg|dk(  rt	        j
                  t              S |sd}t        |      t        j
                  j                  t        ||       j                  t              S t        j
                  j                  |||       S )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::vv.K w58q=Q;997++VC%c**yy%%e[%GLLWUU99!!,6!JJr)   c                  t        |      }t        | j                  |      |z
  }| j                  ||f}t        j
                  j                  |||       }|t        k7  r(|sd| d}t        |      |j                  t              }|S )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::vv.K
		|[GA u5l^9MC%c**FF5MHr)   c                  |j                   \  }}|t        j                  k(  s|j                  dk(  ry |t        j                  k(  r&| y | d   }t        |||j                         ||      S |t        j                  k(  r| y | d   }t        |||      S |t        j                  k(  r|sd}	t        |	      |j                         S |t        j                  k(  rL|sd}	t        |	      t        j                  |g      }
	 |j                         r|
j!                  |      }
||
k7  S d|}	t'        |	      # t"        $ r}d| d|}	t%        |	      |d }~ww xY w)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      s|    #00IzN///63D3D3I	n00	0'%a(6Jv*
 	
 
n11	1'%a(7J:
 	
 
n,,	,/C%c**  	n11	1/C%c**99j\*	('')#==68## (	}5!#&& % 	(>|nBzn]CC.a'	(s    %D6 6	E?EEc                   | j                   ||f}t        j                  j                  t        ||       }|dk7  r|sd}t        |      | }|S )Nr   zbitmask must be inverted)rh   r    r   ri   r   r   )rV   r}   rj   rF   r   rl   r@   r&   s           r'   rs   rs   #  sR     ::vv.K
		wV<AQ,C%c**BHr)   c                   |sd}t        |      | j                  d| j                  f}t        j                  j                  t        ||       }|j                  t              }|dk7  r| }|S )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  sf     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)   