
    o[we,                        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 d dl	m
c mZ d dlZd dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ ej        d	             Zej        d
             Zej                            dddg          d             Z d Z!d Z"d Z#ej                            dd dd e$d          dgfdd e$d          dgfdddgfd dd e$d          gfd ddgfdd e$d          gfg          d             Z%ej                            dd d d d d g          d             Z&d Z'ej                            dg d g d!d"g d#g d!d" ej(        g d$           ej(        g d#           ej(        g d!          d%g          d&             Z)d' Z*d( Z+d) Z,d* Z- ej.        d+          d,             Z/ej                            di d-g ig          d.             Z0d9d0Z1ej                            d1d2d3g          ej                            d4g d5          d6                         Z2d7 Z3d9d8Z4dS ):    )datetimeN)iNaT)is_ci_environmentis_platform_windows)PandasColumn)ColumnNullType	DtypeKindfrom_dataframe)ArrowCTypesc                      t          j        t          d          dz  d          t          j        t          d          dz  d          dS )Ntestdata   T)orderedF)r   	unordered)pdCategoricallist     Blib/python3.11/site-packages/pandas/tests/interchange/test_impl.pydata_categoricalr      sQ     >$z"2"2R"7FFF^D$4$4r$95III  r   c                  (    dddddt           j        giS )Nseparator datazabC|DeF,Hikz234,3245.67zgSaf,qWer|Grez
asd3,4sad|)npnanr   r   r   string_datar       s'     	F
 r   data)r   T)r   Fc                    t          j        d|| d                  i          }|                                                    d          }|j        d         t
          j        k    sJ |j        dk    sJ |j        t          j
        dfk    sJ |                                dk    sJ |j        }|d         | d         k    sJ |d         du sJ t          |d         t                    sJ t          j        |d         j        t          j        g d	                     t          j        |t)          |                                                     d S )
NAr      
is_orderedis_dictionaryT
categories)adest)r   	DataFrame__dataframe__get_column_by_namedtyper	   CATEGORICAL
null_countdescribe_nullr   USE_SENTINEL
num_chunksdescribe_categorical
isinstancer   tmassert_series_equal_colSeriesassert_frame_equalr   )r   r   dfcoldesc_cats        r   test_categorical_dtyper>   -   sX   	s-d1g68	9	9B





/
/
4
4C9Q<900000>Q!<b AAAAA>>q    'HL!T!W,,,,O$,,,,h|,l;;;;;#RY/H/H/H%I%I   "nR-=-=-?-?@@AAAAAr   c                  |   t          j        dd          } g d}|                     d|                     |                                          i          }|                                }t          |          }t          j        |g d          }t          j	        d|i          }t          j        ||           d S )Npyarrow11.0.0)	MonTuerB   WedrB   ThuFriSatSunweekday)rB   rC   rD   rE   rF   rG   rH   )r%   )pytestimportorskiptablearraydictionary_encoder,   r   r   r   r+   r6   r:   )paarrrL   exchange_dfresultrI   expecteds          r   test_categorical_pyarrowrT   A   s    		Y	1	1B
I
I
ICHHi#!@!@!B!BCDDE%%''KK((FnIII  G |Y011H&(+++++r   c                     t          j        dd          } d g}|                     d|                     |d                                          i          }|                                }t          j        j        	                    |          }t          j
        dt          j        t          j        g          i          }t          j        ||           d S )Nr@   rA   rP   float64)rJ   rK   rL   rM   rN   r,   r   apiinterchanger   r+   r   r   r   r6   r:   rO   rP   rL   rQ   rR   rS   s         r   test_empty_categorical_pyarrowrZ   P   s    		Y	1	1B&CHHeRXXc955GGIIJKKE%%''KV..{;;F|UBNBF8$<$<=>>H&(+++++r   c                     t          j        dd          } ddg}|                     d|                     |d          i          }|                                }t          |          }t          j        dddgi          }t          j	        ||           | j
                            | j                            |          |          sJ d S )Nr@   rA   rB   rC   rI   large_string)rJ   rK   rL   rM   r,   r   r   r+   r6   r:   TableequalsrX   rY   s         r   test_large_string_pyarrowr_   \   s    		Y	1	1B%.CHHi#~!>!>?@@E%%''KK((F|Y788H&(+++ 8??2>88@@%HHHHHHHr   )offsetlengthexpected_valuesffffff
@r    @r"      c                    t          j        dd          }g d}|                    d|i                              | |          }|                                }t          |          }t          j        d|i          }t          j	        ||           |j
                            |j                            |          |          sJ d S )Nr@   rA   )rc   Nrd   rP   )rJ   rK   rL   slicer,   r   r   r+   r6   r:   r]   r^   rX   )	r`   ra   rb   rO   rP   rL   rQ   rR   rS   s	            r   test_bitmasks_pyarrowrh   k   s     
	Y	1	1B


CHHeS\""((88E%%''KK((F|UO455H&(+++ 8??2>88@@%HHHHHHHr   c                  h    t           j                            d                              dd          S )Nre   id   r   randomdefault_rngintegersr   r   r   <lambda>ro      s&    	%%a((11$<< r   c                  h    t           j                            d                              dd          S )Nre   r"   rj   rk   r   r   r   ro   ro      s&    	%%a((11!S99 r   c                  d    t           j                            d                                          S )Nre   )r   rl   rm   r   r   r   ro   ro      s"    	%%a((//11 r   c                  j    t           j                            d                              ddg          S )Nre   TF)r   rl   rm   choicer   r   r   ro   ro      s(    	%%a((//u>> r   c                  L   t          t          j                            d                              dd          t          j                            d                              dd          t          j                            d                              dd                    S )Nre   il  i4  r"         )yearmonthday)r   r   rl   rm   rn   r   r   r   ro   ro      s~    &&q))224>>)''**33Ar::	%%a((11!R88
 
 
 r   c                     d\   fdt                    D              t          j                   }|                                }|                                k    sJ |                                k    sJ t          |                                          t                                                     k    sJ d}t           fd|D                       }t          |                    |                    }t          |                    |                    }t          j        ||           t          |j        d         t                    sJ t          |j        d         t                    sJ d S )N)
   rv   c                     i | ]:}d t          |dz  z
  z  dz              fdt                    D             ;S )r<   re   r"   c                 $    g | ]}             S r   r   ).0_r   s     r   
<listcomp>z-test_dataframe.<locals>.<dictcomp>.<listcomp>   s    2P2P2Pa44662P2P2Pr   )intrange)r~   iNCOLSNROWSr   s     r   
<dictcomp>z"test_dataframe.<locals>.<dictcomp>   sh        	1c1uqy=E)A-..002P2P2P2P5<<2P2P2P  r   )r   re   c              3   f   K   | ]+}t                                                    |         V  ,d S N)r   keys)r~   idxr   s     r   	<genexpr>z!test_dataframe.<locals>.<genexpr>   s8      <<S$tyy{{##C(<<<<<<r   _INTERCHANGE_PROTOCOL_BUFFERS)r   r   r+   r,   num_columnsnum_rowsr   column_namesr   tupler   select_columnsselect_columns_by_namer6   r:   r5   attrs)	r   r;   df2indicesnamesrR   rS   r   r   s	   `      @@r   test_dataframer      s    LE5     u  D 
d		B




C??%%%%<<>>U""""  ""##tDIIKK'8'88888G<<<<G<<<<<EC..w7788Fc88??@@H&(+++fl#BCTJJJJJhn%DEtLLLLLLLr   c            	         t          j        t          j        g d          t          j        g d          t          j        g d          d                                          } t          j                            d          fdj        D             }|                                D ]S\  }}j	        
                    t          j        t                              |d                   }d j        ||f<   T                                } |                     d	          j        |d	         k    sJ |                     d
          j        |d
         k    sJ |                     d          j        |d         k    sJ d S )N)      ?g       @g      @g      @        )      ?      @      @g      @r   )r   r   r   r   r   xyzre   c           	      Z    i | ]'}|                     d t                              (S )r   )lowhigh)rn   len)r~   r<   r;   rngs     r   r   z,test_missing_from_masked.<locals>.<dictcomp>   s1    NNNCcllqs2wwl77NNNr   F)sizereplacer   r   r   )r   r+   r   rM   r,   rl   rm   columnsitemsindexrs   aranger   locr-   r0   )r   	dict_nullr<   	num_nullsnull_idxr;   r   s        @@r   test_missing_from_maskedr      s   	333441112233344	
 	

 
B 



C
)


"
"CNNNNN2:NNNI#//++ % %Y8JJryR))	5JII
 !%x}




C!!#&&1Ys^CCCC!!#&&1Ys^CCCC!!#&&1Ys^CCCCCCr   )r   r   r   )ffffff"@      %@皙'@)r   r   )r"   re   r   )TTFr   c                     t          j        |           }|                                }|j        D ]"}|                    |          j        dk    sJ #d S )Nr   )r   r+   r,   r   r-   r0   )r   r;   r   col_names       r   test_mixed_datar      sh     
d		B




CJ @ @%%h//:a?????@ @r   c                  *   t          j        t          j        g d          t          j        g d          t          j        g d          d          } |                                 }| j        D ]"}|                    |          j        dk    sJ #d S )N)TNFNT)Nre   Nr"   re   )r   r   Nr   Nr   re   )r   r+   r   rM   r,   r   r-   r0   )r;   r   r   s      r   test_mixed_missingr      s    	999::///0077788	
 	

 
B 



CJ @ @%%h//:a?????@ @r   c                 n   | d         dgz   }t          j        d|i          }|                                                    d          }|                                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d          }|                                                    d          }|                                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 )Nr    r       r"   r      )r   r+   r,   r-   r   r0   r.   r	   STRINGr1   r   USE_BYTEMASK)r   test_str_datar;   r<   	df_sliceds        r   test_stringr      s5    01RD8M	sM*	+	+B





/
/
4
4C88::????>Q9Q<9+++++!<a @@@@@122I

!
!
#
#
6
6s
;
;C88::????>Q9Q<9+++++!<a @@@@@@@r   c                      t          j        dg di          } |                                                     d          }t	          j        t          d          5  |j         d d d            d S # 1 swxY w Y   d S )Nr    )r&   r{   r   r   znot supported yetmatch)r   r+   r,   r-   rJ   raisesNotImplementedErrorr.   r;   r<   s     r   test_nonstring_objectr      s    	s.../	0	0B





/
/
4
4C	*2E	F	F	F  		                 s   A00A47A4c                     t          j        dt          j        d          t           j        gi          } |                                                     d          }|                                dk    sJ |j        dk    sJ |j        d         t          j
        k    sJ |j        t          j        t          fk    sJ t          j        | t#          |                                                      d S )Nr    z
2022-01-01re   r"   r   )r   r+   	TimestampNaTr,   r-   r   r0   r.   r	   DATETIMEr1   r   r2   r   r6   r:   r   r   s     r   test_datetimer     s    	sR\,77@A	B	BB





/
/
4
4C88::????>Q9Q<9-----!<d CCCCC"nR-=-=-?-?@@AAAAAr   z1.23c                  f   t          j        dt          j        g d          i          } |                                                     d          }t          j        |                                d         d                   }t          j        g dd          }t          j
        ||           d S )Nr    )r&   br&   r   r   )r   r"   r   int8)r.   )r   r+   r   r,   r-   r   from_dlpackget_buffersrM   r6   assert_numpy_array_equal)r;   r<   rR   rS   s       r    test_categorical_to_numpy_dlpackr     s     
sBN???;;<	=	=B





/
/
4
4C^COO--f5a899Fx			000H11111r   r&   c                     t          j        dd           ddlm} t	          j        |           } ||          }t          |          }t          j        ||           d S )Nr@   rA   r   r
   )rJ   rK   pyarrow.interchanger   r   r+   r6   r:   )r   pa_from_dataframerS   arrow_dfrR   s        r   test_empty_pyarrowr     sn     	8,,,GGGGGG|D!!H  **HH%%F&(+++++r   returnc                  P   t          j        dd          } |                     g dg dg          }dg}|                     |g|          }t          j        t
          d          5  t          j        j        	                    |d	
           d d d            d S # 1 swxY w Y   d S )Nr@   rA   )re   re      )r   r   rj   n_legs)r   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   F)
allow_copy)
rJ   rK   chunked_arrayrL   r   RuntimeErrorr   rW   rX   r   )rO   r   r   rL   s       r   test_multi_chunk_pyarrowr   %  s	   		Y	1	1Byyy+++677FJEHHfXUH++E	(
 
 
 C C
 	))%E)BBBC C C C C C C C C C C C C C C C C Cs   ''BB"BtzUTCz
US/Pacificunit)r)   msusnsc                    t          j        ddd                              |                               |          }t          j        d|i          }t          j        |t          |                                                     d S )Nz
2018-01-01r   D)periodsfreqts_tz)	r   
date_rangetz_localizeas_unitr+   r6   r:   r   r,   )r   r   tz_datar;   s       r   test_datetimetzdtyper   2  s}    
 	lAC888DDRHHPPQUVV  
w(	)	)B"nR-=-=-?-?@@AAAAAr   c           	      ^   t          j        dd          }dd lm} t	                      rNt                      r@t           j                            |j        d          }| j	        
                    |           |                    t          ddd          d t          ddd          g          }|                    |d	          }|                    d
|i          }|                                }t!          |          }t#          j        g dd
gd          }t'          j        ||           d S )Nr@   rA   r   z_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.)r   reasoni  r"   re   zAsia/KathmandurP   )z2020-01-01 00:00:00+05:45r   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r   r.   )rJ   rK   pyarrow.computecomputer   r   markxfailArrowInvalidnode
add_markerrM   r   assume_timezonerL   r,   r   r   r+   r6   r:   )	requestrO   pcr   rP   rL   rQ   rR   rS   s	            r   )test_interchange_from_non_pandas_tz_awarer   =  s;   		Y	1	1B       &!2!4!4 &{  ?; ! 
 
 	%%%
((HT1a(($q!0D0DE
F
FC


S"2
3
3CHHeS\""E%%''KK((F|III.  H
 (F+++++r   c                    t          j        dddgi                                          }|                                                    d                                          d         }|d         }t
          j        dt          j        |d         f}|d         |fd<   fd	_        fd
_        | 	                    |dfd           t           j
        j                            |           d S )Nr&   foobarr   r"         r   c                       S r   r   )bufferss   r   ro   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>i  s     r   c                     S r   r   )r   columns    r   ro   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>j  s    v r   r,   c                     S r   r   )r   rX   s    r   ro   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>k  s     r   )r   r+   r,   r-   r   r	   UINTr   UINT8setattrrW   rX   r   )monkeypatchr;   buffers_databuffer_dtyper  r  rX   s       @@@r   -test_interchange_from_corrected_buffer_dtypesr  Z  s    	sUEN+	,	,	:	:	<	<B""$$K++C00F  ""G6?L?L	Q	L $A5GFO(F%5%5%5%5K"O-K-K-K-KLLLF%%b)))))r   )r   N)5r   numpyr   rJ   pandas._libs.tslibsr   pandas.compatr   r   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   pandas._testing_testingr6   pandas.core.interchange.columnr   *pandas.core.interchange.dataframe_protocolr   r	   &pandas.core.interchange.from_dataframer   pandas.core.interchange.utilsr   fixturer   r   r   parametrizer>   rT   rZ   r_   floatrh   r   r   rM   r   r   r   r   r   skip_if_np_ltr   r   r   r   r   r  r   r   r   <module>r#     s              $ $ $ $ $ $        * ) ) ) ) ) ) ) )           7 7 7 7 7 7        B A A A A A 5 5 5 5 5 5    	 	 	 "35I!JKKB B LKB&, , ,	, 	, 	,I I I +	
D3ec*+	
D55<<%&	
D3%	
AUU5\\"#	
Au	
Ae~
 
I I
 
I 
<<9911>>	
 	

 M M M4D D D4 
oo$5$5$566ii///00---..)))$$+++,,	
 	
 @ @ @@ @ @A A A$  	B 	B 	B &2 2 2 "sBi11, , 21,
C 
C 
C 
C |455!8!8!899B B :9 65B, , ,:* * * * * *r   