
    <>iH                     	   S SK J r  S SKrS SKJr  S SKr S SKrS SK
Jr  S SKJrJrJr  S SKJr   S SKr\R*                  R-                  S/ SQ5      \R*                  R-                  S/ S	Q5      S
 5       5       r\R*                  R-                  SS/SS/S4/ SQS4/ SQS 4/5      S 5       rS r\R*                  R&                  \R*                  R-                  S\R4                  " 5       \R6                  " 5       \R8                  " 5       /5      \R*                  R-                  S\R:                  " 5       \R<                  " 5       \R>                  " 5       \R@                  " 5       /5      \R*                  R-                  S\RB                  " 5       S4\RD                  " 5       S4/5      S 5       5       5       5       r#\R*                  R&                  S 5       r$\R*                  R&                  S 5       r%\R*                  R&                  S 5       r&\R*                  R&                  S 5       r'\R*                  R&                  \R*                  R-                  S/ SQ5      S 5       5       r(\R*                  R&                  \R*                  R-                  S SS/5      S! 5       5       r)\R*                  R&                  S" 5       r*\R*                  R                  \R*                  R-                  S\R4                  " 5       \R6                  " 5       \R8                  " 5       /5      \R*                  R-                  S\R:                  " 5       \R<                  " 5       \R>                  " 5       \R@                  " 5       /5      \R*                  R-                  S\RV                  " 5       S#4\RB                  " 5       S4\RD                  " 5       S4/5      \R*                  R-                  S/ SQ5      \R*                  R-                  S/ S$Q5      \R*                  R-                  S%/ S&Q5      S' 5       5       5       5       5       5       5       r,\R*                  R-                  S%/ S(Q5      S) 5       r-\R*                  R\                  S* 5       r/S+ r0\R*                  R&                  S, 5       r1\R*                  R&                  S- 5       r2S. r3g! \	 a    Sr GNf = f! \	 a     GNf = f)/    datetimeN)Version)_PyArrowColumnColumnNullType	DtypeKind)_from_dataframeunit)smsusnstz) America/New_York+07:30-04:30c                    [        SSS5      [        SSS5      S /n[        R                  " S[        R                  " U[        R                  " XS9S905      nUR                  5       R                  S5      nUR                  5       S:X  d   eUR                  S	:X  d   eUR                  S
:X  d   eUR                  S	   [        R                  :X  d   eUR                  [        R                  S	4:X  d   eg )N           Ar   type   r      )dtpatablearray	timestamp__dataframe__get_column_by_namesizeoffset
null_countdtyper   DATETIMEdescribe_nullr   USE_BITMASK)r
   r   dt_arrr!   cols        h/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/interchange/test_conversion.pytest_datetimer0   +   s     q"or$25FHHc288Fd1JKLME




2
23
7C88:??::??>>Q99Q<9-----!;!;Q ????    	test_datakindfoobar   )g      ?g      @g      @   r   r7   r      c                    [         R                  " U 5      n[        U5      nUR                  U:X  d   eUR	                  5       [        U 5      :X  d   eUR                  S   U:X  d   eUR                  5       S:X  d   eUR                  S:X  d   eUR                  5       S   b   e[        [        UR                  5       5      5      S:X  d   eUR                  5        H
  nXC:X  a  M
   e   g )Nr   r   validity)r    r"   r   _colr&   lenr)   
num_chunksr(   get_bufferslist
get_chunks)r2   r3   arr
arr_columnchunks        r/   test_array_to_pyarrowcolumnrE   9   s     ((9
C$J??c!!!??I...A$&&&  "a'''  A%%%!!#J/777tJ))+,-222&&(""" )r1   c                     [         R                  " / SQ5      n U R                  SS5      n[         R                  " U /S/S9n[         R                  " U/S/S9nUR	                  5       R                  S5      nUR                  S:X  d   e[        UR	                  5       5      nUR                  U5      (       d   eUR                  U5      (       a   eg )Nr8   r7   rB   names
arr_slicedr   )	r    r"   slicer!   r$   
get_columnr'   r	   equals)rB   rI   r!   table_slicedr.   results         r/   test_offset_of_sliced_arrayrO   Q   s    
((<
 C1aJHHcU5'*E88ZL?L

$
$
&
1
1!
4C::??\779:Fv&&&&||F#####r1   uintintzfloat, np_float_strfloat32float64c                 R   [        [        R                  5      [        S5      :  a  [        R                  " S5        / SQn[
        R                  " [
        R                  " X@S9[
        R                  " XAS9[
        R                  " [        R                  " U[        R                  " U5      S9US9/ SQS.5      nSS	K
Jn  U" U5      n[        R                  " U5      nUR                  U5      (       d   eUR                  5       n	UR                  5       n
U	R                  5       U
R                  5       :X  d   eU	R!                  5       U
R!                  5       :X  d   eU	R#                  5       U
R#                  5       :X  d   eU	R%                  5       U
R%                  5       :X  d   eg )
N1.5.0&__dataframe__ added to pandas in 1.5.0)r   r7   r   r   r)   TFT)abcdr   from_dataframe)r   pd__version__pytestskipr    r!   r"   npr)   pandas.api.interchanger^   pirL   r$   num_columnsnum_rowsr>   column_names)rP   rQ   floatnp_float_strrB   r!   pandas_from_dataframe	pandas_dfrN   table_protocolresult_protocols              r/   test_pandas_roundtripro   j   sN    r~~!11<=
CHH#)#("((3bhh|.DEER$		
E &e,Iy)F<<((*N**,O%%'?+F+F+HHHH""$(@(@(BBBB$$&/*D*D*FFFF&&(O,H,H,JJJJr1   c                     [        [        R                  5      [        S5      :  a  [        R                  " S5        / SQn [
        R                  " S[
        R                  " U 5      05      nSSKJ	n  U" U5      n[        R                  " U5      nUS   R                  5       US   R                  5       :X  d   e[
        R                  R                  US   R                  5      (       d   e[
        R                  R                  US   R                  5      (       d   eUR!                  5       nUR!                  5       nUR#                  5       UR#                  5       :X  d   eUR%                  5       UR%                  5       :X  d   eUR'                  5       UR'                  5       :X  d   eUR)                  5       UR)                  5       :X  d   eg )N1.6Column.size() bug in pandasrY   r   r[   rY   r   r]   )r   r_   r`   ra   rb   r    r!   r"   rd   r^   re   	to_pylisttypes	is_stringr   is_large_stringr$   rf   rg   r>   rh   rB   r!   rk   rl   rN   rm   rn   s          r/   test_pandas_roundtrip_stringry      ss    r~~/12
CHHc288C=)*E &e,Iy)F#;  "eCj&:&:&<<<<88eCjoo....88##F3K$4$45555((*N**,O%%'?+F+F+HHHH""$(@(@(BBBB$$&/*D*D*FFFF&&(O,H,H,JJJJr1   c                     [        [        R                  5      [        S5      :  a  [        R                  " S5        / SQn [
        R                  " S[
        R                  " U [
        R                  " 5       S905      nSSK	J
n  [        [        R                  5      [        S5      :  Ga_  U" U5      n[        R                  " U5      nUS   R                  5       US   R                  5       :X  d   e[
        R                  R                  US   R                  5      (       d   e[
        R                  R                  US   R                  5      (       d   eUR!                  5       nUR!                  5       nUR#                  5       UR#                  5       :X  d   eUR%                  5       UR%                  5       :X  d   eUR'                  5       UR'                  5       :X  d   eUR)                  5       UR)                  5       :X  d   eg [        R*                  " [,        5         U" U5        S S S 5        g ! , (       d  f       g = f)	Nrq   rr   rs   a_larger   r   r]   z2.0.1)r   r_   r`   ra   rb   r    r!   r"   large_stringrd   r^   re   rt   ru   rw   r   r$   rf   rg   r>   rh   raisesAssertionErrorrx   s          r/   "test_pandas_roundtrip_large_stringr      s    r~~/12
CHHi#BOO4E!FGHE r~~''"22)%0	""9-i **,i0@0J0J0LLLLxx''i(8(=(=>>>>xx''y(9(>(>????,,. ..0))+/J/J/LLLL&&(O,D,D,FFFF((*o.H.H.JJJJ**,0L0L0NNNN ]]>*!%( +**s   %	H77
Ic                  z   [        [        R                  5      [        S5      :  a  [        R                  " S5        / SQn [
        R                  " [
        R                  " U 5      [
        R                  " U [
        R                  " 5       S9S.5      nSSK	J
n  [        [        R                  5      [        S5      :  Ga?  U" U5      n[        R                  " U5      nUS	   R                  5       US	   R                  5       :X  d   e[
        R                  R                  US	   R                  5      (       d   e[
        R                  R!                  US	   R                  5      (       d   eUS
   R                  5       US
   R                  5       :X  d   e[
        R                  R!                  US
   R                  5      (       d   e[
        R                  R!                  US
   R                  5      (       d   eg [        R"                  " [$        5         U" U5        S S S 5        g ! , (       d  f       g = f)Nrq   rr   )rY   r   r[   Nr   )rY   r{   r   r]   2.0.2rY   r{   )r   r_   r`   ra   rb   r    r!   r"   r|   rd   r^   re   rt   ru   rv   r   rw   r}   NotImplementedError)rB   r!   rk   rl   rN   s        r/   )test_pandas_roundtrip_string_with_missingr      s    r~~/12
CHH288C=!##BOO4E!FH IE r~~''"22)%0	""9-c{$$&%**>*>*@@@@xx!!%*//2222xx''s(8(89999i **,i0@0J0J0LLLLxx''i(8(=(=>>>>xx''y(9(>(>???? ]]./!%( 0//s   	H,,
H:c                  2   [        [        R                  5      [        S5      :  a  [        R                  " S5        / SQn [
        R                  " S[
        R                  " U 5      R                  5       05      nSSK	J
n  U" U5      n[        R                  " U5      nUS   R                  5       US   R                  5       :X  d   e[
        R                  R                  US   R                  5      (       d   e[
        R                  R                  US   R                  5      (       d   e[
        R                  R!                  US   R#                  S5      R$                  R                  5      (       d   e[
        R                  R'                  US   R#                  S5      R$                  R                  5      (       d   e[
        R                  R)                  US   R#                  S5      R*                  R                  5      (       d   e[
        R                  R-                  US   R#                  S5      R*                  R                  5      (       d   eUR/                  5       nUR/                  5       nUR1                  5       UR1                  5       :X  d   eUR3                  5       UR3                  5       :X  d   eUR5                  5       UR5                  5       :X  d   eUR7                  5       UR7                  5       :X  d   eUR9                  S5      nUR9                  S5      nUR:                  S   [<        R>                  :X  d   eUR:                  S   UR:                  S   :X  d   eURA                  5       URA                  5       :X  d   eURB                  URB                  :X  d   eURD                  n	URD                  n
U	S   U
S   :X  d   eU	S   U
S   :X  d   e[G        U
S	   RH                  [
        RJ                  5      (       d   eg )
Nr   z;Bitmasks not supported in pandas interchange implementation)	MonTuer   Wedr   ThuFriSatNweekdayr   r]   
is_orderedis_dictionary
categories)&r   r_   r`   ra   rb   r    r!   r"   dictionary_encoderd   r^   re   rt   ru   r   r   rv   rD   
dictionaryrw   is_int32indicesis_int8r$   rf   rg   r>   rh   rK   r)   r   CATEGORICALr&   r'   describe_categorical
isinstancer<   Array)rB   r!   rk   rl   rN   rm   rn   	col_table
col_resultdesc_cat_tabledesc_cat_results              r/   !test_pandas_roundtrip_categoricalr      s_   r~~!11QR
HCHH	BHHSM3356E &e,Iy)F)&&(E),<,F,F,HHHH88!!%	"2"7"7888888!!&"3"8"8999988eI.44Q7BBGGHHHH88##F9$5$;$;A$>$I$I$N$NOOOO88U9-33A6>>CCDDDD88F9-33A6>>CCDDDD((*N**,O%%'?+F+F+HHHH""$(@(@(BBBB$$&/*D*D*FFFF&&(O,H,H,JJJJ))!,I ++A.JA)"7"7777A)//!"4444??	 0000	 0 000044N 55O,'?<+HHHH/*oo.NNNNol388"((CCCCr1   c           	         [        [        R                  5      [        S5      :  a  [        R                  " S5        SSKJn  U" SSS5      U" SSS5      U" SSS	5      /n[        R                  " S
[        R                  " U[        R                  " U 5      S905      n[        [        R                  5      [        S5      :  a@  [        R                  " S
[        R                  " U[        R                  " S5      S905      nOUnSSK
Jn  U" U5      n[        R                  " U5      nUR                  U5      (       d   eUR                  5       nUR                  5       n	UR                  5       U	R                  5       :X  d   eUR!                  5       U	R!                  5       :X  d   eUR#                  5       U	R#                  5       :X  d   eUR%                  5       U	R%                  5       :X  d   eg )NrU   rV   r   r   r   r   r   r      rY   r   rq   r   r]   )r   r_   r`   ra   rb   r   r    r!   r"   r#   rd   r^   re   rL   r$   rf   rg   r>   rh   )
r
   r   r-   r!   expectedrk   rl   rN   expected_protocolrn   s
             r/   test_pandas_roundtrip_datetimer   '  s    r~~!11<=' q"or$24B@FHHc288Fd1CDEFEr~~/ 88S"((6T8J"KLM &e,Iy)F??6"""" ..0**,O((*o.I.I.KKKK%%'?+C+C+EEEE'')_-G-G-IIII))+/K/K/MMMMr1   rj   c           	         [        [        R                  5      [        S5      :  a  [        R                  " S5        [
        R                  " S[
        R                  S/[
        R                  " U 5      S9nS [        SSS5      [        SSS	5      /n[        R                  " U[
        R                  " US
S9S.5      n[        R                  " [        R                  " USS9[        R                  " U[        R                  " S5      S9S.5      n[        R                  " U5      nUR!                  U5      (       d   eg )NrU   rV   r   r7   rW   r   r   r   r   zdatetime64[ns])rY   r   T)from_pandasr   r   )r   r_   r`   ra   rb   rc   r"   nanr)   r   	DataFramer    r!   r#   re   r^   rL   )rj   np_arraydatetime_arraydfr   rN   s         r/   #test_pandas_to_pyarrow_with_missingr   K  s    
 r~~!11<=xxBFFAbhh|.DEHBtQORa_=N	hh~-=>	 
B xxXXhD1hh~BLL,>? H r"F==""""r1   c                     [        [        R                  5      [        S5      :  a  [        R                  " S5        [
        R                  " S[
        R                  S/[
        R                  S9n [        R                  " SU 05      n[        R                  " [        5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)NrU   rV   r   r7   rW   rY   )r   r_   r`   ra   rb   rc   r"   r   float16r   r}   r   re   r^   )r   r   s     r/   +test_pandas_to_pyarrow_float16_with_missingr   d  s~    r~~!11<=
 xxBFFAbjj9H	sHo	&B	*	+
" 
,	+	+s   #C
Cr   )r   r   r   zoffset, length))r   r   r   r7   )r   r7   r7   r   c                 v   SSK J n  / SQn	U" SSS5      S U" SSS5      /n
[        R                  " [        R                  " XS9[        R                  " XS9[        R                  " [        R                  " U	[        R
                  " U5      S	9US
S9/ SQ/ SQ/ SQ[        R                  " U
[        R                  " XES9S9S.5      nUR                  Xg5      n[        UR                  5       5      nUR                  U5      (       d   eUR                  5       nUR                  5       nUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eg )Nr   r   )r   r7   Nr   r   r   r   r   rW   T)r   r   rX   )TFN)rY   Nr[   r   )rY   rZ   r[   r\   efg)r   r    r!   r"   rc   r)   r#   rJ   r	   r$   rL   rf   rg   r>   rh   )rP   rQ   ri   rj   r
   r   r'   lengthr   rB   r-   r!   rN   rm   rn   s                  r/   test_pyarrow_roundtripr   s  sn   ( (
Cq"otRa_5FHH#)#("((3bhh|.DE$$8$$!&r||D'@A		
E KK'EU0023F<<((*N**,O%%'?+F+F+HHHH""$(@(@(BBBB$$&/*D*D*FFFF&&(O,H,H,JJJJr1   ))r   
   r   )r   r   r   c                 v   / SQn[         R                  " S[         R                  " U5      R                  5       05      nUR	                  X5      n[        UR                  5       5      nUR                  U5      (       d   eUR                  5       nUR                  5       nUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eUR                  5       UR                  5       :X  d   eUR                  S5      nUR                  S5      nUR                  S   [        R                  :X  d   eUR                  S   UR                  S   :X  d   eUR!                  5       UR!                  5       :X  d   eUR"                  UR"                  :X  d   eUR$                  n	UR$                  n
U	S   U
S   :X  d   eU	S   U
S   :X  d   e['        U
S   R(                  [         R*                  5      (       d   eg )N)	r   r   r   r   r   r   r   NSunr   r   r   r   r   )r    r!   r"   r   rJ   r	   r$   rL   rf   rg   r>   rh   rK   r)   r   r   r&   r'   r   r   r<   r   )r'   r   rB   r!   rN   rm   rn   r   r   r   r   s              r/   "test_pyarrow_roundtrip_categoricalr     s   
HCHH	BHHSM3356E KK'EU0023F<<((*N**,O%%'?+F+F+HHHH""$(@(@(BBBB$$&/*D*D*FFFF&&(O,H,H,JJJJ))!,I ++A.JA)"7"7777A)//!"4444??	 0000	 0 000033N 55O,'?<+HHHH/*oo.NNNNol388"((CCCCr1   c                  L   [         R                  " S/S-  SS9n [        R                  " U [        R                  " 5       S9n[        R                  " U/S/S9n[        UR                  5       5      nUR                  5       R                  S5      nUR                  5       S:X  d   e[        R                  R                  US   R                  5      (       d   e[        R                  R                  US   R                  5      (       d   eUR                  U5      (       d   eg )	Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi  0 objectrW   r   r|   rG   r   )rc   r"   r    r|   r!   r	   r$   rK   r&   ru   rw   r   rL   )datarB   r!   rN   r.   s        r/   #test_pyarrow_roundtrip_large_stringr     s     88YK+8<D
((4boo/
0CHHcU>"23EU0023F



 
+
+A
.C88:"""88##E!HMM222288##F1INN3333<<r1   c                      [         R                  " S/ SQ05      n [        R                  " [        5         U R                  SS9  S S S 5        g ! , (       d  f       g = f)NrY   r8   T)nan_as_null)r    r!   ra   r}   RuntimeErrorr$   )r!   s    r/   test_nan_as_nullr     s>    HHc<()E	|	$- 
%	$	$s   A
Ac            
      6   [        [        R                  5      [        S5      :  a  [        R                  " S5        [        R
                  " S/ SQ05      n [        R                  " [        5         [        R                  " U SS9  S S S 5        [        R
                  " SS [        SS	S
5      [        SS	S5      /05      n [        R                  " [        5         [        R                  " U SS9  S S S 5        g ! , (       d  f       Nx= f! , (       d  f       g = f)NrU   rV   rY   )r   g      ?g       @F
allow_copyr   r   r   r   r   )r   r_   r`   ra   rb   r   r}   r   re   r^   r   r   s    r/   test_allow_copy_falser     s    r~~!11<=
 
sM*	+B	|	$
"/ 
% 
tRa_bq"o6 
B 
|	$
"/ 
%	$ 
%	$ 
%	$s   1C9D
9
D

Dc                     [        [        R                  5      [        S5      :  a  [        R                  " S5        [        R
                  " S/ SQ05      n [        R                  " [        5         [        R                  " U SS9  S S S 5        [        R
                  " S/ SQ05      n [        R                  " [        5         [        R                  " U SS9  S S S 5        [        R
                  " S/ S	Q05      n U R                  S
5      n [        R                  " [        5         [        R                  " U SS9  S S S 5        [        R
                  " S/ SQ05      n U R                  S
5      n [        R                  " [        5         [        R                  " U SS9  S S S 5        g ! , (       d  f       GN(= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NrU   rV   rY   )NFTFr   rX   r   )rY   rZ   Ncategory)rY   rZ   r[   )r   r_   r`   ra   rb   r   r}   r   re   r^   astyper   s    r/   &test_allow_copy_false_bool_categoricalr     sC   r~~!11<=
 
s/0	1B	|	$
"/ 
% 
s/0	1B	|	$
"/ 
% 
y"23	4B	:	B	|	$
"/ 
% 
y/2	3B	:	B	|	$
"/ 
%	$ 
%	$ 
%	$
 
%	$
 
%	$s0   1F(F:&G	G(
F7:
G
G
G*c                      [         R                  " S[         R                  " 5       4/5      n [         R                  " / /U S9nUR	                  5       n[
        R                  " U5      U:X  d   eg )Ncol1)schema)r    r   int8r!   r$   re   r^   )r   r   dfis      r/   test_empty_dataframer     sW    YY+,-F	2$v	&B



CS!R'''r1   )4r   r   pyarrowr    pyarrow.vendored.versionr   ra   numpyrc   ImportErrorpyarrow.interchangeinterchangere   pyarrow.interchange.columnr   r   r   "pyarrow.interchange.from_dataframer	   pandasr_   markparametrizer0   rE   rO   uint8uint16uint32r   int16int32int64rR   rS   ro   ry   r   r   r   r   r   r   r   r   r   large_memoryr   r   r   r   r    r1   r/   <module>r      s  $ $  ,  ! 
 ?	 !89KL	@ M :	@ &
	!	q## $2 
RXXZbiik2 	BGGIrxxz288:rxxz: 	y!	y!K K: K K8 !) !)H ) )> ,D ,D^ !89N : ND Y	*# #*   
RXXZbiik2 	BGGIrxxz288:rxxz: 	y!	y!	y! !89GH)+KLK M I : "KB )+LMD NDD     . 0 0$ 0 04(i  	B  		s"   S S SSSS