
    z-PhH                     	   d dl m Z d dlZd dlmZ d dlZ	 d dlZn# e	$ r dZY nw xY wd dl
mZ d dlmZmZmZ d dlmZ 	 d dlZn# e	$ r Y nw xY wej                            dg d          ej                            dg d	          d
                         Ze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                            d ej                     ej                     ej                    g          ej                            d ej                     ej                     ej                     ej                     g          ej                            d ej!                    df ej"                    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                            dg d          d                         Z(ej        j        ej                            d ddg          d!                         Z)ej        j        d"             Z*ej        j        ej                            d ej                     ej                     ej                    g          ej                            d ej                     ej                     ej                     ej                     g          ej                            d ej+                    d#f ej!                    df ej"                    dfg          ej                            dg d          ej                            dg d$          ej                            d%g d&          d'                                                                                     Z,ej                            d%g d(          d)             Z-ej        j.        d*             Z/d+ Z0ej        j        d,             Z1ej        j        d-             Z2d. Z3dS )/    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          }|                                                    d          }|                                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 d S )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        i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/interchange/test_conversion.pytest_datetimer0   +   s     q"oor$25FHc28Fdr1J1J1JKKKLMME





2
23
7
7C88::????:????>Q9Q<9-----!;Q ???????    	test_datakindfoobar   )g      ?g      @g      @   r   r7   r      c                    t          j        |           }t          |          }|j        |k    sJ |                                t          |           k    sJ |j        d         |k    sJ |                                dk    sJ |j        dk    sJ |	                                d         J t          t          |                                                    dk    sJ |                                D ]
}||k    sJ d S )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2&&(( # #
"""""# #r1   c                     t          j        g d          } |                     dd          }t          j        | gdg          }t          j        |gdg          }|                                                    d          }|j        dk    sJ t          |                                          }|                    |          sJ |                    |          rJ d S )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HcU5'***E8ZL???L

$
$
&
&
1
1!
4
4C:????\7799::Fv&&&&&||F#######r1   uintintzfloat, np_float_strfloat32float64c                    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        |          }|                    |          sJ |                                }	|                                }
|	                                |
                                k    sJ |	                                |
                                k    sJ |	                                |
                                k    sJ |	                                |
                                k    sJ d S )
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   s    r~!1!111<===
))CH#D)))#C((("(3bh|.D.DEEEERRR$$$		
 	
 E      &%e,,Iy))F<<((**N**,,O%%''?+F+F+H+HHHHH""$$(@(@(B(BBBBB$$&&/*D*D*F*FFFFF&&((O,H,H,J,JJJ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                                         |d                                         k    sJ t
          j                            |d         j                  sJ t
          j                            |d         j                  sJ |                                }|                                }|                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ d S )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      s    r~//1222
..CHc28C==)**E      &%e,,Iy))F#;  ""eCj&:&:&<&<<<<<8eCjo.....8##F3K$455555((**N**,,O%%''?+F+F+H+HHHHH""$$(@(@(B(BBBBB$$&&/*D*D*F*FFFFF&&((O,H,H,J,JJJ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    r ||          }t          j
        |          }|d                                         |d                                         k    sJ t
          j                            |d         j                  sJ t
          j                            |d         j                  sJ |                                }|                                }|                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ d S t          j        t,                    5   ||           d d d            d S # 1 swxY w Y   d S )	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22
..CHi#BO4E4E!F!F!FGHHE      r~''"2"222))%00	"9--i **,,i0@0J0J0L0LLLLLx''i(8(=>>>>>x''y(9(>?????,,.. ..00))++/J/J/L/LLLLL&&((O,D,D,F,FFFFF((**o.H.H.J.JJJJJ**,,0L0L0N0NNNNNNN ]>** 	) 	)!!%(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   I**I.1I.c                     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    rA ||          }t          j
        |          }|d	                                         |d	                                         k    sJ t
          j                            |d	         j                  sJ t
          j                            |d	         j                  sJ |d
                                         |d
                                         k    sJ t
          j                            |d
         j                  sJ t
          j                            |d
         j                  sJ d S t          j        t$                    5   ||           d d d            d S # 1 swxY w Y   d S )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      sZ    r~//1222


CH28C==!##BO4E4E!F!F!FH H I IE      r~''"2"222))%00	"9--c{$$&&%**>*>*@*@@@@@x!!%*/22222x''s(899999i **,,i0@0J0J0L0LLLLLx''i(8(=>>>>>x''y(9(>??????? ].// 	) 	)!!%(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   H55H9<H9c                  8   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                                         |d                                         k    sJ t
          j                            |d         j                  sJ t
          j                            |d         j                  sJ t
          j                            |d                             d          j        j                  sJ t
          j                            |d                             d          j        j                  sJ t
          j                            |d                             d          j        j                  sJ t
          j                            |d                             d          j        j                  sJ |                                }|                                }|                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ |                    d          }|                    d          }|j        d         t<          j        k    sJ |j        d         |j        d         k    sJ |                                 |                                 k    sJ |j!        |j!        k    sJ |j"        }	|j"        }
|	d         |
d         k    sJ |	d         |
d         k    sJ tG          |
d	         j$        t
          j%                  sJ d S )
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11QRRR
H
H
HCH	BHSMM33556 E      &%e,,Iy))F)&&((E),<,F,F,H,HHHHH8!!%	"2"7888888!!&"3"8999998eI.44Q77BGHHHHH8##F9$5$;$;A$>$>$I$NOOOOO8U9-33A66>CDDDDD8F9-33A66>CDDDDD((**N**,,O%%''?+F+F+H+HHHHH""$$(@(@(B(BBBBB$$&&/*D*D*F*FFFFF&&((O,H,H,J,JJJJJ))!,,I ++A..JA)"77777A)/!"44444??	 0 00000	 000004N 5O,'?<+HHHHH/*oo.NNNNNol38"(CCCCCCCr1   c           	      L   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        |          }|                    |          sJ |                                }|                                }	|                                |	                                k    sJ |                                |	                                k    sJ |                                |	                                k    sJ |                                |	                                k    sJ d S )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11<==='''''' bq"oorr$24B@FHc28Fd1C1CDDDEFFEr~// 8S"(6T8J8J"K"K"KLMM      &%e,,Iy))F??6""""" ..00**,,O((**o.I.I.K.KKKKK%%''?+C+C+E+EEEEE''))_-G-G-I-IIIII))++/K/K/M/MMMMMMMr1   rj   c           	         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        |          }|                    |          sJ d S )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11<===xBFAbh|.D.DEEEHBtQOORa__=N	h~-=>>>	  
 
B xXhD111h~BL,>,>???   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            d S # 1 swxY w Y   d S )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11<===
 xBFAbj999H	sHo	&	&B	*	+	+  
"                 s   B==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          }|                    ||          }t          |	                                          }|
                    |          sJ |	                                }|	                                }|                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ |                                |                                k    sJ d S )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  s   ( ('''''
,,Cbq"ootRRa__5FH#D)))#C((("(3bh|.D.DEEE$$8 8 8$$$$$$!!!&r|DR'@'@'@AAA		
 		
 E KK''EU002233F<<((**N**,,O%%''?+F+F+H+HHHHH""$$(@(@(B(BBBBB$$&&/*D*D*F*FFFFF&&((O,H,H,J,JJJJJJJr1   ))r   
   r   )r   r   r   c                    g d}t          j        dt          j        |                                          i          }|                    | |          }t          |                                          }|                    |          sJ |                                }|                                }|                                |                                k    sJ |	                                |	                                k    sJ |
                                |
                                k    sJ |                                |                                k    sJ |                    d          }|                    d          }|j        d         t          j        k    sJ |j        d         |j        d         k    s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 d S )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     sP   
H
H
HCH	BHSMM33556 E KK''EU002233F<<((**N**,,O%%''?+F+F+H+HHHHH""$$(@(@(B(BBBBB$$&&/*D*D*F*FFFFF&&((O,H,H,J,JJJJJ))!,,I ++A..JA)"77777A)/!"44444??	 0 00000	 000003N 5O,'?<+HHHHH/*oo.NNNNNol38"(CCCCCCCr1   c                  Z   t          j        dgdz  d          } t          j        | t          j                              }t          j        |gdg          }t          |                                          }|                                                    d          }|                                dk    sJ t          j	        
                    |d         j                  sJ t          j	        
                    |d         j                  sJ |                    |          sJ d S )	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    8YK+8<<<D
(4bo//
0
0
0CHcU>"2333EU002233F



 
 
+
+A
.
.C88::""""8##E!HM222228##F1IN33333<<r1   c                      t          j        dg di          } t          j        t                    5  |                     d           d d d            d S # 1 swxY w Y   d S )NrY   r8   T)nan_as_null)r    r!   ra   r}   RuntimeErrorr$   )r!   s    r/   test_nan_as_nullr     s    Hc<<<())E	|	$	$ . .---. . . . . . . . . . . . . . . . . .s   A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            n# 1 swxY w Y   t          j        dd t          dd	d
          t          dd	d          gi          } t          j        t                    5  t          j	        | d           d d d            d S # 1 swxY w Y   d S )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11<===
 
sMMM*	+	+B	|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
tRa__bq"oo6 
 
B 
|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s$   0BBB.D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            n# 1 swxY w Y   t          j        dg di          } t          j        t                    5  t          j	        | d           d d d            n# 1 swxY w Y   t          j        dg d	i          } | 
                    d
          } t          j        t                    5  t          j	        | d           d d d            n# 1 swxY w Y   t          j        dg di          } | 
                    d
          } t          j        t                    5  t          j	        | d           d d d            d S # 1 swxY w Y   d S )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     s   r~!1!111<===
 
s///0	1	1B	|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
s///0	1	1B	|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
y"2"2"23	4	4B	:		B	|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
y///2	3	3B	:		B	|	$	$ 0 0
"////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0sH   0BBBC22C69C6E&&E*-E*7GG"Gc                      t          j        dt          j                    fg          } t          j        g g|           }|                                }t          j        |          |k    sJ d S )Ncol1)schema)r    r   int8r!   r$   re   r^   )r   r   dfis      r/   test_empty_dataframer     sh    Y+,--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      sY  $ $ # # # # #     , , , , , ,    	BBB !                   
 ? > > > > >	 	 	 	D	 !8!8!899KKKLL	@ 	@ ML :9	@ &
	!	q # # # $ $ $2 
XRXZZibikk2  	GBGIIxrxzz828::xrxzz:  	y!	y! K K    K: K K K8 !) !) !)H ) ) )> ,D ,D ,D^ !8!8!899N N :9 ND Y	* # #  #*    
XRXZZibikk2  	GBGIIxrxzz828::xrxzz:  	y!	y!	y!  !8!8!899GGGHH)+K+K+KLLK K ML IH :9    "KB )+L+L+LMMD D NMDD       . . . 0 0 0$ 0 0 04( ( ( ( (s    %%A AA