
    gH                     	   d dl m Z d dlZd dlmZ d dlZ	 d dlZd dl
mZ d dlmZmZmZ d dlmZ 	 d dlZej*                  j-                  dg d      ej*                  j-                  dg d	      d
               Zej*                  j-                  ddgddgdfg ddfg dd fg      d        Zd Zej*                  j&                  ej*                  j-                  d ej4                          ej6                          ej8                         g      ej*                  j-                  d ej:                          ej<                          ej>                          ej@                         g      ej*                  j-                  d ejB                         df ejD                         dfg      d                             Z#ej*                  j&                  d        Z$ej*                  j&                  d        Z%ej*                  j&                  d        Z&ej*                  j&                  d        Z'ej*                  j&                  ej*                  j-                  dg d      d               Z(ej*                  j&                  ej*                  j-                  d ddg      d!               Z)ej*                  j&                  d"        Z*ej*                  j                  ej*                  j-                  d ej4                          ej6                          ej8                         g      ej*                  j-                  d ej:                          ej<                          ej>                          ej@                         g      ej*                  j-                  d ejV                         d#f ejB                         df ejD                         dfg      ej*                  j-                  dg d      ej*                  j-                  dg d$      ej*                  j-                  d%g d&      d'                                                  Z,ej*                  j-                  d%g d(      d)        Z-ej*                  j\                  d*        Z/d+ Z0ej*                  j&                  d,        Z1ej*                  j&                  d-        Z2d. Z3y# e	$ r dZY w xY w# e	$ r Y w xY w)/    datetimeN)Version)_PyArrowColumnColumnNullType	DtypeKind)_from_dataframeunit)smsusnstz) America/New_York+07:30-04:30c           
         t        ddd      t        ddd      d g}t        j                  dt        j                  |t        j                  | |            i      }|j                         j                  d      }|j                         dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ |j                  d	   t        j                  k(  sJ |j                  t        j                  d	fk(  sJ y )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        ^/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/interchange/test_conversion.pytest_datetimer0   +   s     q"or$25FHHc288Fdr1JKLME




2
23
7C88:??::??>>Q99Q<9-----!;!;Q ????    	test_datakindfoobar   )g      ?g      @g      @   r   r7   r      c                    t        j                  |       }t        |      }|j                  |k(  sJ |j	                         t        |       k(  sJ |j                  d   |k(  sJ |j                         dk(  sJ |j                  dk(  sJ |j                         d   J t        t        |j                                     dk(  sJ |j                         D ]	  }||k(  r	J  y )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                     t        j                  g d      } | j                  dd      }t        j                  | gdg      }t        j                  |gdg      }|j	                         j                  d      }|j                  dk(  sJ t        |j	                               }|j                  |      sJ |j                  |      rJ y )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                 J   t        t        j                        t        d      k  rt        j                  d       g d}t        j                  t        j                  ||       t        j                  ||      t        j                  t        j                  |t        j                  |            |      g dd      }dd	l
m}  ||      }t        j                  |      }|j                  |      sJ |j                         }	|j                         }
|	j                         |
j                         k(  sJ |	j!                         |
j!                         k(  sJ |	j#                         |
j#                         k(  sJ |	j%                         |
j%                         k(  sJ y )
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   sO    r~~!11<=
CHH#D)#C("((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                  |   t        t        j                        t        d      k  rt        j                  d       g d} t        j                  dt        j                  |       i      }ddlm	}  ||      }t        j                  |      }|d   j                         |d   j                         k(  sJ t
        j                  j                  |d   j                        sJ t
        j                  j                  |d   j                        sJ |j!                         }|j!                         }|j#                         |j#                         k(  sJ |j%                         |j%                         k(  sJ |j'                         |j'                         k(  sJ |j)                         |j)                         k(  sJ y )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      sm    r~~/12
CHHc288C=)*E &e,Iy)F#;  "eCj&:&:&<<<<88eCjoo...88##F3K$4$4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                  ^   t        t        j                        t        d      k  rt        j                  d       g d} t        j                  dt        j                  | t        j                               i      }ddl	m
} t        t        j                        t        d      k\  rO ||      }t        j                  |      }|d   j                         |d   j                         k(  sJ t
        j                  j                  |d   j                        sJ t
        j                  j                  |d   j                        sJ |j!                         }|j!                         }|j#                         |j#                         k(  sJ |j%                         |j%                         k(  sJ |j'                         |j'                         k(  sJ |j)                         |j)                         k(  sJ y t        j*                  t,              5   ||       d d d        y # 1 sw Y   y xY w)	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   	H##H,c                  8   t        t        j                        t        d      k  rt        j                  d       g d} t        j                  t        j                  |       t        j                  | t        j                               d      }ddl	m
} t        t        j                        t        d      k\  r( ||      }t        j                  |      }|d	   j                         |d	   j                         k(  sJ t
        j                  j                  |d	   j                        sJ t
        j                  j!                  |d	   j                        sJ |d
   j                         |d
   j                         k(  sJ t
        j                  j!                  |d
   j                        sJ t
        j                  j!                  |d
   j                        sJ y t        j"                  t$              5   ||       d d d        y # 1 sw Y   y xY w)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xx''s(8(8999i **,i0@0J0J0LLLLxx''i(8(=(=>>>xx''y(9(>(>??? ]]./!%( 0//s   >	HHc                     t        t        j                        t        d      k  rt        j                  d       g d} t        j                  dt        j                  |       j                         i      }ddl	m
}  ||      }t        j                  |      }|d   j                         |d   j                         k(  sJ t
        j                  j                  |d   j                        sJ t
        j                  j                  |d   j                        sJ t
        j                  j!                  |d   j#                  d      j$                  j                        sJ t
        j                  j'                  |d   j#                  d      j$                  j                        sJ t
        j                  j)                  |d   j#                  d      j*                  j                        sJ t
        j                  j-                  |d   j#                  d      j*                  j                        sJ |j/                         }|j/                         }|j1                         |j1                         k(  sJ |j3                         |j3                         k(  sJ |j5                         |j5                         k(  sJ |j7                         |j7                         k(  sJ |j9                  d      }|j9                  d      }|j:                  d   t<        j>                  k(  sJ |j:                  d   |j:                  d   k(  sJ |jA                         |jA                         k(  sJ |jB                  |jB                  k(  sJ |jD                  }	|jD                  }
|	d   |
d   k(  sJ |	d   |
d   k(  sJ tG        |
d	   jH                  t
        jJ                        sJ y )
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      sJ   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88!!&"3"8"899988eI.44Q7BBGGHHH88##F9$5$;$;A$>$I$I$N$NOOO88U9-33A6>>CCDDD88F9-33A6>>CC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Cr1   c           	         t        t        j                        t        d      k  rt        j                  d       ddlm}  |ddd       |ddd       |ddd	      g}t        j                  d
t        j                  |t        j                  |             i      }t        t        j                        t        d      k  r@t        j                  d
t        j                  |t        j                  d            i      }n|}ddl
m}  ||      }t        j                  |      }|j                  |      sJ |j                         }|j                         }	|j                         |	j                         k(  sJ |j!                         |	j!                         k(  sJ |j#                         |	j#                         k(  sJ |j%                         |	j%                         k(  sJ y )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           	      x   t        t        j                        t        d      k  rt        j                  d       t        j                  dt
        j                  dgt        j                  |             }d t        ddd      t        ddd	      g}t        j                  |t        j                  |d
      d      }t        j                  t        j                  |d      t        j                  |t        j                  d            d      }t        j                  |      }|j!                  |      sJ y )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                     t        t        j                        t        d      k  rt        j                  d       t        j                  dt
        j                  dgt
        j                        } t        j                  d| i      }t        j                  t              5  t        j                  |       d d d        y # 1 sw Y   y xY w)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                    ddl m } g d}	 |ddd      d  |ddd      g}
t        j                  t        j                  |	|       t        j                  |	|      t        j                  t	        j                  |	t	        j
                  |      	      |d
      g dg dg dt        j                  |
t        j                  ||            d      }|j                  ||      }t        |j                               }|j                  |      sJ |j                         }|j                         }|j                         |j                         k(  sJ |j                         |j                         k(  sJ |j                         |j                         k(  sJ |j                         |j                         k(  sJ y )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  ss   ( (
Cq"otRa_5FHH#D)#C("((3bhh|.DE$$8$$!&r||DR'@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                 L   g d}t        j                  dt        j                  |      j                         i      }|j	                  | |      }t        |j                               }|j                  |      sJ |j                         }|j                         }|j                         |j                         k(  sJ |j                         |j                         k(  sJ |j                         |j                         k(  sJ |j                         |j                         k(  sJ |j                  d      }|j                  d      }|j                  d   t        j                  k(  sJ |j                  d   |j                  d   k(  sJ |j!                         |j!                         k(  sJ |j"                  |j"                  k(  sJ |j$                  }	|j$                  }
|	d   |
d   k(  sJ |	d   |
d   k(  sJ t'        |
d   j(                  t         j*                        sJ y )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Cr1   c                  6   t        j                  dgdz  d      } t        j                  | t        j                               }t        j                  |gdg      }t        |j                               }|j                         j                  d      }|j                         dk(  sJ t        j                  j                  |d   j                        sJ t        j                  j                  |d   j                        sJ |j                  |      sJ y )	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88##F1INN333<<r1   c                      t        j                  dg di      } t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY w)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            
         t        t        j                        t        d      k  rt        j                  d       t        j
                  dg di      } t        j                  t              5  t        j                  | d       d d d        t        j
                  dd t        dd	d
      t        dd	d      gi      } t        j                  t              5  t        j                  | d       d d d        y # 1 sw Y   sxY w# 1 sw Y   y xY w)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   -C7D7D Dc                     t        t        j                        t        d      k  rt        j                  d       t        j
                  dg di      } t        j                  t              5  t        j                  | d       d d d        t        j
                  dg di      } t        j                  t              5  t        j                  | d       d d d        t        j
                  dg d	i      } | j                  d
      } t        j                  t              5  t        j                  | d       d d d        t        j
                  dg di      } | j                  d
      } t        j                  t              5  t        j                  | d       d d d        y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   -F&?F3"F?G&F03F<?GGc                      t        j                  dt        j                         fg      } t        j                  g g|       }|j	                         }t        j                  |      |k(  sJ y )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 
XRXXZibiik2 	GBGGIxrxxz8288:xrxxz: 	y!	y!K K: K K8 !) !)H ) )> ,D ,D^ !89N : ND Y	*# #*   
XRXXZibiik2 	GBGGIxrxxz8288:xrxxz: 	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