
    OwgM                     4   d dl m Z 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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j4                  d
        Zej4                  d        Zej:                  j=                  dddg      d        Zd Z d Z!d Z"ej:                  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:                  j=                  dd d d d d g      d        Z%d  Z&ej:                  j=                  dg d!g d"d#g d$g d"d# ejN                  g d%       ejN                  g d$       ejN                  g d"      d&g      d'        Z(d( Z)d) Z*d* Z+d+ Z,ej:                  j[                  ed,-      d.        Z.ej:                  j=                  di d/g ig      d0        Z/dld2Z0dld3Z1d4 Z2ej:                  j=                  d5d6d7g      ej:                  j=                  d8g d9      d:               Z3d; Z4dld<Z5d= Z6d> Z7d? Z8d@ Z9ej:                  j=                  dAg dBdCdDfg dBdEdDfg dBdFdGfg dBdHdGfg dBdIdJfg dBdKdJfg dLdMdNfg dLdOdNfg dPdQdRfg dPdSdRfg dTdUdVfg dTdWdVf e dXdd       e dXdd      dgdYdZf e dXdd       e dXdd      dgd[d\f e dXddejt                  ]       e dXddejt                  ]      dgd^d_fg      de;d`e<dae<d1dfdb       Z=ej:                  j=                  dAg dcdCdDfg dcdEdDfg dcdFdGfg dcdHdGfg dcdIdJfg dcdKdJfg dddMdNfg dddOdNfg dedQdRfg dedSdRfg dfdUdVfg dfdWdVf e dXdd       e dXdd       e dXddg      gdYdZf e dXdd       e dXdd       e dXddg      gd[d\f e dXddejt                  ]       e dXddejt                  ]       e dXddgejt                  ]      gd^d_fg      de;d`e<dae<d1dfdh       Z>dldiZ?dldjZ@dk ZAy)m    )datetimetimezoneN)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     Y/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/interchange/test_impl.pydata_categoricalr      s>     >>$z"2R"7F^^D$4r$95I r   c                  0    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)     	FF
 r   data)r   T)r   Fc                    t        j                  d|| d      i      }|j                         j                  d      }|j                  d   t
        j                  k(  sJ |j                  dk(  sJ |j                  t        j                  dfk(  sJ |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)        |j                                      y )
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@   0   s,   	s-d1g68	9B




/
/
4C99Q<900000>>Q!<!<b AAAA>>q   ''HL!T!W,,,O$,,,h|,l;;;##RYY/H%I "nR-=-=-?@Ar   c                  Z   t        j                  dd      } g d}| j                  d| j                  |      j	                         i      }|j                         }t        |      }t        j                  |g d      }t        j                  d|i      }t        j                  ||       y )Npyarrow11.0.0)	MonTuerD   WedrD   ThuFriSatSunweekday)rD   rE   rF   rG   rH   rI   rJ   )r'   )pytestimportorskiptablearraydictionary_encoder.   r   r   r   r-   r8   r<   )paarrrN   exchange_dfresultrK   expecteds          r   test_categorical_pyarrowrV   D   s    			Y	1B
ICHHi#!@!@!BCDE%%'KK(FnnIG ||Y01H&(+r   c                     t        j                  dd      } d g}| j                  d| j                  |d      j	                         i      }|j                         }t        j                  j                  j                  |      }t        j                  dt        j                  t        j                  g      i      }t        j                  ||       y )NrB   rC   rR   float64)rL   rM   rN   rO   rP   r.   r   apiinterchanger   r-   r   r   r   r8   r<   rQ   rR   rN   rS   rT   rU   s         r   test_empty_categorical_pyarrowr\   S   s    			Y	1B&CHHeRXXc95GGIJKE%%'KVV..{;F||UBNNBFF8$<=>H&(+r   c                     t        j                  dd      } ddg}| j                  d| j                  |d      i      }|j	                         }t        |      }t        j                  dddgi      }t        j                  ||       | j                  j                  | j                  j                  |      |      sJ y )NrB   rC   rD   rE   rK   large_string)rL   rM   rN   rO   r.   r   r   r-   r8   r<   TableequalsrZ   r[   s         r   test_large_string_pyarrowra   _   s    			Y	1B%.CHHi#~!>?@E%%'KK(F||Y78H&(+ 88??2>>88@%HHHr   )offsetlengthexpected_valuesffffff
@r    @r$      c                 |   t        j                  dd      }g d}|j                  d|i      j                  | |      }|j	                         }t        |      }t        j                  d|i      }t        j                  ||       |j                  j                  |j                  j                  |      |      sJ y )NrB   rC   )re   Nrf   rR   )rL   rM   rN   slicer.   r   r   r-   r8   r<   r_   r`   rZ   )	rb   rc   rd   rQ   rR   rN   rS   rT   rU   s	            r   test_bitmasks_pyarrowrj   n   s     
		Y	1B
CHHeS\"((8E%%'KK(F||UO45H&(+ 88??2>>88@%HHHr   c                  `    t         j                  j                  d      j                  dd      S )Nrg   id   r   randomdefault_rngintegersr   r   r   <lambda>rq      s"    		%%a(11$< r   c                  `    t         j                  j                  d      j                  dd      S )Nrg   r$   rl   rm   r   r   r   rq   rq      s"    		%%a(11!S9 r   c                  \    t         j                  j                  d      j                         S )Nrg   )r   rn   ro   r   r   r   rq   rq      s    		%%a(//1 r   c                  b    t         j                  j                  d      j                  ddg      S )Nrg   TF)r   rn   ro   choicer   r   r   rq   rq      s$    		%%a(//u> r   c                  ,   t        t        j                  j                  d      j	                  dd      t        j                  j                  d      j	                  dd      t        j                  j                  d      j	                  dd            S )Nrg   il  i4  r$         )yearmonthday)r   r   rn   ro   rp   r   r   r   rq   rq      sh    &&q)224>))''*33Ar:		%%a(11!R8
 r   c           
      
    d\  }}t        |      D ci c]9  }dt        ||dz  z
  |z  dz          t        |      D cg c]	  }          c}; c}} t        j                         }|j	                         }|j                         |k(  sJ |j                         |k(  sJ t        |j                               t         j                               k(  sJ d}t         fd|D              }t        |j                  |            }	t        |j                  |            }
t        j                  |	|
       t!        |	j"                  d   t              sJ t!        |
j"                  d   t              sJ y c c}w c c}}w )N)
   rx   r>   rg   r$   )r   rg   c              3   V   K   | ]   }t        j                               |    " y wN)r   keys).0idxr    s     r   	<genexpr>z!test_dataframe.<locals>.<genexpr>   s!     <S$tyy{#C(<s   &)_INTERCHANGE_PROTOCOL_BUFFERS)rangeintr   r-   r.   num_columnsnum_rowsr   column_namesr   tupler   select_columnsselect_columns_by_namer8   r<   r7   attrs)r    NCOLSNROWSi_r=   df2indicesnamesrT   rU   s   `          r   test_dataframer      s]    LE5 u c1uqy=E)A-./05<2Pa462PPD 
d	B



C??%%%<<>U"""  "#tDIIK'8888G<G<<EC..w78Fc88?@H&(+fll#BCTJJJhnn%DEtLLL) 3Qs   +E? E:E?:E?c            
      "   t        j                  t        j                  g d      t        j                  g d      t        j                  g d      d      } t        j                  j                  d      }| j                  D ci c]  }||j                  dt        |             ! }}|j                         D ]S  \  }}| j                  |j                  t        j                  t        |             |d	         }d | j                  ||f<   U | j                         }|j                  d
      j                   |d
   k(  sJ |j                  d      j                   |d   k(  sJ |j                  d      j                   |d   k(  sJ y c c}w )N)      ?       @g      @g      @        )      ?      @      @g      @r   )r   r   r   r   r   xyzrg   r   )lowhighF)sizereplacer   r   r   )r   r-   r   rO   rn   ro   columnsrp   lenitemsindexru   arangelocr.   r/   r2   )r=   rngr>   	dict_null	num_nullsnull_idxr   s          r   test_missing_from_maskedr      sY   	341234	

B ))


"CCE::NCcllqs2wl77NIN#//+ %Y88JJryyR)	5JI
 !%x}	% 


C!!#&11Ys^CCC!!#&11Ys^CCC!!#&11Ys^CCC Os   $F)r   r   r   )ffffff"@      %@皙'@)r   r   )r$   rg   r   )TTFr   c                     t        j                  |       }|j                         }|j                  D ]"  }|j	                  |      j
                  dk(  r"J  y )Nr   )r   r-   r.   r   r/   r2   )r    r=   r   col_names       r   test_mixed_datar      sT     
d	B



CJJ @%%h/::a???@r   c                  6   t        j                  t        j                  g d      t        j                  g d      t        j                  g d      d      } | j	                         }| j
                  D ]"  }|j                  |      j                  dk(  r"J  y )N)TNFNT)Nrg   Nr$   rg   )r   r   Nr   Nr   rg   )r   r-   r   rO   r.   r   r/   r2   )r=   r   r   s      r   test_mixed_missingr      s    	9:/078	

B 


CJJ @%%h/::a???@r   c                 n   | d   dgz   }t        j                  d|i      }|j                         j                  d      }|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d  }|j                         j                  d      }|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 )Nr    r"      r$   r      )r   r-   r.   r/   r   r2   r0   r   STRINGr3   r
   USE_BYTEMASK)r   test_str_datar=   r>   	df_sliceds        r   test_stringr      s"    01RD8M	sM*	+B




/
/
4C88:??>>Q99Q<9+++++!<!<a @@@@12I

!
!
#
6
6s
;C88:??>>Q99Q<9+++++!<!<a @@@@r   c                      t        j                  dg di      } | j                         j                  d      }t	        j
                  t        d      5  |j                   d d d        y # 1 sw Y   y xY w)Nr"   )r(   r}   r   r   znot supported yetmatch)r   r-   r.   r/   rL   raisesNotImplementedErrorr0   r=   r>   s     r   test_nonstring_objectr      s[    	s./	0B




/
/
4C	*2E	F 		  s   A**A3c                     t        j                  dt        j                  d      t         j                  gi      } | j	                         j                  d      }|j                         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#        | j	                                      y )Nr"   z
2022-01-01rg   r$   r   )r   r-   	TimestampNaTr.   r/   r   r2   r0   r   DATETIMEr3   r
   r4   r   r8   r<   r   r   s     r   test_datetimer     s    	sR\\,7@A	BB




/
/
4C88:??>>Q99Q<9-----!<!<d CCCC"nR-=-=-?@Ar   zNumpy > 1.23 required)reasonc                  J   t        j                  dt        j                  g d      i      } | j                         j	                  d      }t        j                  |j                         d   d         }t        j                  g dd      }t        j                  ||       y )Nr"   )r(   br(   r    r   )r   r$   r   int8r0   )r   r-   r   r.   r/   r   from_dlpackget_buffersrO   r8   assert_numpy_array_equal)r=   r>   rT   rU   s       r    test_categorical_to_numpy_dlpackr     sx     
sBNN?;<	=B




/
/
4C^^COO-f5a89Fxx	0H1r   r(   c                     t        j                  dd       ddlm} t	        j
                  |       } ||      }t        |      }t        j                  ||       y )NrB   rC   r   r   )rL   rM   pyarrow.interchanger   r   r-   r8   r<   )r    pa_from_dataframerU   arrow_dfrT   s        r   test_empty_pyarrowr     sI     	8,G||D!H *HH%F&(+r   returnc                  B   t        j                  dd      } | j                  g dg dg      }dg}| j                  |g|      }t        j                  t
        d      5  t        j                  j                  j                  |d	
       d d d        y # 1 sw Y   y xY w)NrB   rC   )rg   rg      )r   r   rl   n_legs)r   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   F
allow_copy)
rL   rM   chunked_arrayrN   r   RuntimeErrorr   rY   rZ   r   )rQ   r   r   rN   s       r   test_multi_chunk_pyarrowr   &  s    			Y	1By+67FJEHHfXUH+E	(
 C
 	))%E)BC C Cs    ,BBc                  h   t        j                  dd       t        j                  g dd      } t        j                  | | gd      j                  d      }|j                         }t        j                  t        d	
      5  t        j                  j                  j                  |j                  d             d d d        t        j                  j                  j                  |j                  d            }t        j                  dg did      }t        j                  ||       t        j                  ||       t!        |d   j"                  j$                  j&                        dk(  sJ t!        |d   j"                  j$                  j&                        dk(  sJ y # 1 sw Y   xY w)NrB   rC   r$   rg   NInt64[pyarrow]r   T)ignore_indexr(   z:Found multi-chunk pyarrow array, but `allow_copy` is Falser   Fr   )r   r   Nr   r   NrX   rg   )rL   rM   r   r;   concatto_framecopyr   r   rY   rZ   r   r.   r-   r8   r<   r   rO   	_pa_arraychunks)serr=   df_origrT   rU   s        r   test_multi_chunk_columnr   3  sT   
	8,
))L(8
9C	C:D	1	:	:3	?BggiG	X
 N 	))"*:*:e*:*LMN VV..r/?/?4/?/PQF ||S"BC9UH&(+ "g&r#w}}&&--.!333ws|!!++223q888N Ns   :F((F1c                  n   t        j                  dd       ddddddd} t        j                  t	        d	i | gdd      j                         }|j                         }t        j                  j                  j                  |      d   j                         }t        j                  d	i | }||k(  sJ y )
NrB   rC   i  r$   )ry   rz   r{   hourminutesecondtimestamp[ns][pyarrow]col0)r0   namer   )rL   rM   r   r;   r   r   r.   rY   rZ   r   itemr   )timestamp_argsr=   dfirT   rU   s        r   test_timestamp_ns_pyarrowr   H  s    
	8,N 
		#N	#$&
 hj	  


CVV..s3F;@@BF||-n-HXr   tzUTCz
US/Pacificunit)r+   msusnsc                     t        j                  ddd      j                  |       j                  |      }t        j                  d|i      }t        j                  |t        |j                                      y )Nz
2018-01-01r   D)periodsfreqts_tz)	r   
date_rangetz_localizeas_unitr-   r8   r<   r   r.   )r   r   tz_datar=   s       r   test_datetimetzdtyper
  `  sc    
 	lAC8DDRHPPQUV  
w(	)B"nR-=-=-?@Ar   c           	         t        j                  dd      }dd lm} t	               rFt               r<t         j                  j                  |j                  d      }| j                  |       |j                  t        ddd      d t        ddd      g      }|j                  |d	      }|j                  d
|i      }|j                         }t        |      }t!        j"                  g dd
gd      }t%        j&                  ||       y )NrB   rC   r   z_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.)r   r     r$   rg   Asia/KathmandurR   )z2020-01-01 00:00:00+05:45r   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r   r0   )rL   rM   pyarrow.computecomputer   r   markxfailArrowInvalidapplymarkerrO   r   assume_timezonerN   r.   r   r   r-   r8   r<   )	requestrQ   pcr  rR   rN   rS   rT   rU   s	            r   )test_interchange_from_non_pandas_tz_awarer  k  s    			Y	1B !2!4{{  ??; ! 
 	D!
((HT1a($q!0DE
FC


S"2
3CHHeS\"E%%'KK(F||I.H
 (F+r   c                    t        j                  dddgi      j                         }|j                         j                  d      j	                         d   }|d   }t
        j                  dt        j                  |d   f}|d   |fd<   fd	_        fd
_        | j                  |dfd       t         j                  j                  j                  |       y )Nr(   foobarr    r$         r   c                       S r   r   )bufferss   r   rq   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>  s     r   c                     S r   r   )r   columns    r   rq   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>  s    v r   r.   c                     S r   r   )r   rZ   s    r   rq   z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>  s     r   )r   r-   r.   r/   r   r   UINTr   UINT8setattrrY   rZ   r   )monkeypatchr=   buffers_databuffer_dtyper  r   rZ   s       @@@r   -test_interchange_from_corrected_buffer_dtypesr(    s    	sUEN+	,	:	:	<B""$K++C0F  "G6?L?L	Q	L $A5GFO(F%5K"O-KLFF%%b)r   c                      t        j                  dg it              } | j                         }t         j                  j
                  j                  |      }t        j                  | |       y )Nr(   r   )	r   r-   strr.   rY   rZ   r   r8   r<   )r=   r   rT   s      r   test_empty_string_columnr+    sN    	sBis	+B



CVV..s3F"f%r   c                  0   t        j                  d       t        j                  ddgid      } t        j                  j
                  j                  | j                               }t        j                  ddgid      }t        j                  ||       y )NrB   r(   r   large_string[pyarrow]r   object)
rL   rM   r   r-   rY   rZ   r   r.   r8   r<   )r=   rT   rU   s      r   test_large_stringr/    sp    
	"	sSEl*A	BBVV..r/?/?/ABF||S3%L9H&(+r   c                      t        j                  g dd      j                         } | j                         j	                         }|dgk(  sJ y )Nr$   rg   r  r   )r   0)r   r;   r   r.   r   )r=   r   s     r   test_non_str_namesr3    s@    	91	%	.	.	0B++-ESE>>r   c                     t        j                  g dg dd      } | j                         }t        j                  t
        d      5  t         j                  j                  j                  |d       d d d        y # 1 sw Y   y xY w)Nr1  )r   r   r   )r2  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.   rL   r   	TypeErrorrY   rZ   r   )r=   r   s     r   test_non_str_names_w_duplicatesr6    so    	I)4	5B



C	$	
 
A 	))#%)@
A 
A 
As   ,A==B)r    r0   expected_dtyper   Int64int64r   Int8r   zInt8[pyarrow]UInt64uint64zUInt64[pyarrow])r         @NFloat32float32zFloat32[pyarrow])TFNbooleanboolzboolean[pyarrow])much adoaboutNzstring[pyarrow_numpy]r^   zstring[pyarrow]r  r   ztimestamp[ns]ztimestamp[us][pyarrow]ztimestamp[us])tzinfoz&timestamp[us, Asia/Kathmandu][pyarrow] timestamp[us, tz=Asia/Kathmandu]r0   r7  c                    t        j                  dd      }dd lm} |dk(  r|j	                  dd      }t        j                  d| i|      }|j                  |j                               d   }|j                  |k(  sJ |d   j                         | d   k(  sJ |d	   j                         | d	   k(  sJ |d
   j                         J y NrB   rC   r   rE  r   r  r(   r   r$   rg   rL   rM   r   rZ   	timestampr   r-   r   r.   typeas_pyr    r0   r7  rQ   pair=   rT   s          r   (test_pandas_nullable_with_missing_valuesrN    s    b 
		Y	1B%;;d,<=	sDk	/B 0 0 23C8F;;.(((!9??Q'''!9??Q'''!9??$$$r   r1  )r   r=  g      @)TFF)rB  rC  nothingr  c                    t        j                  dd      }dd lm} |dk(  r|j	                  dd      }t        j                  d| i|      }|j                  |j                               d   }|j                  |k(  sJ |d   j                         | d   k(  sJ |d	   j                         | d	   k(  sJ |d
   j                         | d
   k(  sJ y rG  rH  rL  s          r   +test_pandas_nullable_without_missing_valuesrQ    s    ` 
		Y	1B%;;d,<=	sDk	/B 0 0 23C8F;;.(((!9??Q'''!9??Q'''!9??Q'''r   c                      t        j                  dd       t        j                  ddgid      } | j	                         j                  d      j                         d   }|J y )NrB   rC   r(   r   r-  r   validity)rL   rM   r   r-   r.   r/   r   )r=   rT   s     r   test_string_validity_bufferrT  C  sZ    
	8,	sSEl*A	BB2237CCEjQF>>r   c                  *   t        j                  dd       t        j                  ddd gid      } | j	                         j                  d      j                         d   }|J |d   }t        j                  dt        j                  d	f}||k(  sJ y )
NrB   rC   r(   r   r-  r   rS  r$   =)
rL   rM   r   r-   r.   r/   r   r   BOOLr   )r=   rS  rT   rU   s       r   &test_string_validity_buffer_no_missingrX  K  s    
	8,	sS$K(0G	HB!44S9EEG
SHa[F;#3#3S9HXr   c                  
   t        j                  dg id      } | j                         }t         j                  j                  j                  |d      }t        j                  dg id      }t        j                  ||       y )Nr(   r   r   Fr   )r   r-   r.   rY   rZ   r   r8   r<   )r=   r   rT   rU   s       r   test_empty_dataframerZ  V  sg    	sBiv	.B



CVV..su.EF||S"IV4H&(+r   )r   N)Br   r   numpyr   rL   pandas._libs.tslibsr   pandas.compatr   r   pandas.compat.numpyr   pandasr   pandas._testing_testingr8   pandas.core.interchange.columnr	   *pandas.core.interchange.dataframe_protocolr
   r   &pandas.core.interchange.from_dataframer   pandas.core.interchange.utilsr   fixturer   r   r  parametrizer@   rV   r\   ra   floatrj   r   r   rO   r   r   r   r   r   skipifr   r   r   r   r   r
  r  r(  r+  r/  r3  r6  utcr   r*  rN  rQ  rT  rX  rZ  r   r   r   <module>rk     s  
   $ 2   7 B 5   	 	 "35I!JKB LB&,	,I +	
D3ec*+	
D5<%&	
D3%	
AU5\"#	
Au	
Ae~
I
I 
<91>	

MM4D0 
$56/0-.)$+,	
@@@A$	B %.EF2 G2 "sBi1, 2,
C9*0 |45!89B : 6B,:**&,A" '	w(	'1	vv&	/	
 	

 
Iy1	.	:	i0	0&9	$&=~N	$&7HdAq!8D!Q#7>$	
 dAq!8D!Q#7>$	
 q!HLL9q!HLL9
 5.	
?(+X%
%%,/%	%Y+X%& '	GW%	$g.	FF#	OV,	
 	

 
9i0	-y9	y&1	16:	)+BNS	)+<nMdAq!8D!Q#7$19MN$	
 dAq!8D!Q#7$19MN$	
 q!HLL9q!HLL9q!HLL9
 5.	
?(+X(
((,/(	(Y+X($,r   