
    Eg5                     T   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
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         0                    e
d,-          d.             Z1ej         !                    di d/g ig          d0             Z2dFd2Z3ej         !                    d3d4d5g          ej         !                    d6g d7          d8                         Z4d9 Z5dFd:Z6d; Z7d< Z8d= Z9d> Z:ej         !                    d?d@ ej;        dA ej<        dB          C          g          d?e=d1dfdD            Z>dE Z?dS )G    )datetimeN)iNaT)is_ci_environmentis_platform_windows)np_version_lt1p23)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     W/var/www/sysmax/venv/lib/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TuerC   WedrC   ThuFriSatSunweekday)rC   rD   rE   rF   rG   rH   rI   )r&   )pytestimportorskiptablearraydictionary_encoder-   r   r   r   r,   r7   r;   )paarrrM   exchange_dfresultrJ   expecteds          r   test_categorical_pyarrowrU   B   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 )NrA   rB   rQ   float64)rK   rL   rM   rN   rO   r-   r   apiinterchanger   r,   r   r   r   r7   r;   rP   rQ   rM   rR   rS   rT   s         r   test_empty_categorical_pyarrowr[   Q   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 )NrA   rB   rC   rD   rJ   large_string)rK   rL   rM   rN   r-   r   r   r,   r7   r;   TableequalsrY   rZ   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 )NrA   rB   )rd   Nre   rQ   )rK   rL   rM   slicer-   r   r   r,   r7   r;   r^   r_   rY   )	ra   rb   rc   rP   rQ   rM   rR   rS   rT   s	            r   test_bitmasks_pyarrowri   l   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 )Nrf   id   r   randomdefault_rngintegersr   r   r   <lambda>rp      s&    	%%a((11$<< r   c                  h    t           j                            d                              dd          S )Nrf   r#   rk   rl   r   r   r   rp   rp      s&    	%%a((11!S99 r   c                  d    t           j                            d                                          S )Nrf   )r   rm   rn   r   r   r   rp   rp      s"    	%%a((//11 r   c                  j    t           j                            d                              ddg          S )Nrf   TF)r   rm   rn   choicer   r   r   rp   rp      s(    	%%a((//u>> r   c                  L   t          t          j                            d                              dd          t          j                            d                              dd          t          j                            d                              dd                    S )Nrf   il  i4  r#         )yearmonthday)r   r   rm   rn   ro   r   r   r   rp   rp      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)
   rw   c                     i | ]:}d t          |dz  z
  z  dz              fdt                    D             ;S )r=   rf   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   rf   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_namer7   r;   r6   attrs)	r   r<   df2indicesnamesrS   rT   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zrf   c           	      Z    i | ]'}|                     d t                              (S )r   )lowhigh)ro   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   rN   rm   rn   columnsitemsindexrt   aranger   locr-   r.   r1   )	dict_nullr=   	num_nullsnull_idxr   r<   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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#   rf   r   )TTFr   c                     t          j        |           }|                                }|j        D ]"}|                    |          j        dk    sJ #d S )Nr   )r   r,   r-   r   r.   r1   )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)Nrf   Nr#   rf   )r   r   Nr   Nr   rf   )r   r,   r   rN   r-   r   r.   r1   )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   r1   r/   r
   STRINGr2   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.   rK   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-01rf   r#   r   )r   r,   	TimestampNaTr-   r.   r   r1   r/   r
   DATETIMEr2   r	   r3   r   r7   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Numpy > 1.23 required)reasonc                  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_buffersrN   r7   assert_numpy_array_equal)r<   r=   rS   rT   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 )NrA   rB   r   r   )rK   rL   pyarrow.interchanger   r   r,   r7   r;   )r   pa_from_dataframerT   arrow_dfrS   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 )NrA   rB   )rf   rf      )r   r   rk   n_legs)r   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   F
allow_copy)
rK   rL   chunked_arrayrM   r   RuntimeErrorr   rX   rY   r   )rP   r   r   rM   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,   r7   r;   r   r-   )r   r   tz_datar<   s       r   test_datetimetzdtyper   1  s}    
 	lAC888DDRHHPPQUVV  
w(	)	)B"nR-=-=-?-?@@AAAAAr   c           	      T   t          j        dd          }dd lm} t	                      rIt                      r;t           j                            |j        d          }| 	                    |           |
                    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 )NrA   rB   r   z_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.)r   r   i  r#   rf   zAsia/KathmandurQ   )z2020-01-01 00:00:00+05:45r   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r   r/   )rK   rL   pyarrow.computecomputer   r   markxfailArrowInvalidapplymarkerrN   r   assume_timezonerM   r-   r   r   r,   r7   r;   )	requestrP   pcr   rQ   rM   rR   rS   rT   s	            r   )test_interchange_from_non_pandas_tz_awarer  <  s9   		Y	1	1B       "!2!4!4 "{  ?; ! 
 
 	D!!!
((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   rp   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>h  s     r   c                     S r   r   )r   columns    r   rp   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>i  s    v r   r-   c                     S r   r   )r   rY   s    r   rp   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>j  s     r   )r   r,   r-   r.   r   r
   UINTr   UINT8setattrrX   rY   r   )monkeypatchr<   buffers_databuffer_dtyper  r
  rY   s       @@@r   -test_interchange_from_corrected_buffer_dtypesr  Y  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   c                      t          j        dg it                    } |                                 }t           j        j                            |          }t          j        | |           d S )Nr'   r   )	r   r,   strr-   rX   rY   r   r7   r;   )r<   r   rS   s      r   test_empty_string_columnr  n  s\    	sBis	+	+	+B




CV..s33F"f%%%%%r   c                  (   t          j        d           t          j        ddgid          } t          j        j                            |                                           }t          j        ddgid          }t          j	        ||           d S )NrA   r'   r   zlarge_string[pyarrow]r   object)
rK   rL   r   r,   rX   rY   r   r-   r7   r;   )r<   rS   rT   s      r   test_large_stringr  v  s    
	"""	sSEl*A	B	B	BBV..r/?/?/A/ABBF|S3%L999H&(+++++r   c                      t          j        g dd                                          } |                                                                 }|dgk    sJ d S )Nr#   rf   r  r   )name0)r   r:   to_framer-   r   )r<   r   s     r   test_non_str_namesr    sV    	9991	%	%	%	.	.	0	0B++--ESE>>>>>>r   c                     t          j        g dg dd          } |                                 }t          j        t
          d          5  t           j        j                            |d           d d d            d S # 1 swxY w Y   d S )Nr  )r   r   r   )r  r   a   Expected a Series, got a DataFrame. This likely happened because you called __dataframe__ on a DataFrame which, after converting column names to string, resulted in duplicated names: Index\(\['0', '0'\], dtype='object'\). Please rename these columns before using the interchange protocol.r   Fr   )	r   r,   r-   rK   r   	TypeErrorrX   rY   r   )r<   dfis     r   test_non_str_names_w_duplicatesr"    s    	III)))44	5	5B




C	$	
 	
 	
 
A 
A 	))#%)@@@
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
A 
As   'A??BBr/   Int8zInt8[pyarrow]rA   )marksc                     t          j        ddgi|           }t          j        ddgid          }t           j        j                            |                                          }t          j        ||           d S )Nr'   r#   r   r   )r   r,   rX   rY   r   r-   r7   r;   )r/   r<   rT   rS   s       r   test_nullable_integersr&    su    
 
sQCj	.	.	.B|S1#Jf555HV..r/?/?/A/ABBF&(+++++r   c                     t          j        dg id          } |                                 }t           j        j                            |d          }t          j        dg id          }t          j        ||           d S )Nr'   r   r   Fr   )r   r,   r-   rX   rY   r   r7   r;   )r<   r!  rS   rT   s       r   test_empty_dataframer(    sy    	sBiv	.	.	.B




CV..su.EEF|S"IV444H&(+++++r   )r   N)@r   numpyr   rK   pandas._libs.tslibsr   pandas.compatr   r   pandas.compat.numpyr   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   pandas._testing_testingr7   pandas.core.interchange.columnr   *pandas.core.interchange.dataframe_protocolr	   r
   &pandas.core.interchange.from_dataframer   pandas.core.interchange.utilsr   fixturer   r   r   parametrizer?   rU   r[   r`   floatri   r   r   rN   r   r   r   r   r   skipifr   r   r   r   r  r  r  r  r  r"  param
skip_if_nor  r&  r(  r   r   r   <module>r>     s              $ $ $ $ $ $        2 1 1 1 1 1 ) ) ) ) ) ) ) ) )           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0 
oo$5$5$566ii///00---..)))$$+++,,	
 	
 @ @ @@ @ @A A A$  	B 	B 	B %.EFF2 2 GF2 "sBi11, , 21,
C 
C 
C 
C |455!8!8!899B B :9 65B, , ,:* * * **& & &, , ,  A A A" flfl?-"-	:R:RSSST ,# ,$ , , , ,, , , , ,r   