
    Nqh5                     2   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@                  jC                  dddg      d        Z"d Z#d Z$d Z%ej@                  jC                  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@                  jC                  dd d d d d g      d        Z(d  Z)ej@                  jC                  dg d!g d"d#g d$g d"d# ejT                  g d%       ejT                  g d$       ejT                  g d"      d&g      d'        Z+d( Z,d) Z-d* Z.d+ Z/ej@                  ja                  e
d,-      d.        Z1ej@                  jC                  di d/g ig      d0        Z2dFd2Z3ej@                  jC                  d3d4d5g      ej@                  jC                  d6g d7      d8               Z4d9 Z5dFd:Z6d; Z7d< Z8d= Z9d> Z:ej@                  jC                  d?d@ ejv                  dA ejx                  dB      C      g      d?e=d1dfdD       Z>dE Z?y)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     c/srv/www/ollama/chat-ollama/venv/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?   .   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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	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 )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	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 )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	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 )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	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 )Nrf   id   r   randomdefault_rngintegersr   r   r   <lambda>rp      s"    		%%a(11$< r   c                  `    t         j                  j                  d      j                  dd      S )Nrf   r#   rk   rl   r   r   r   rp   rp      s"    		%%a(11!S9 r   c                  \    t         j                  j                  d      j                         S )Nrf   )r   rm   rn   r   r   r   rp   rp      s    		%%a(//1 r   c                  b    t         j                  j                  d      j                  ddg      S )Nrf   TF)r   rm   rn   choicer   r   r   rp   rp      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 )Nrf   il  i4  r#         )yearmonthday)r   r   rm   rn   ro   r   r   r   rp   rp      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)
   rw   r=   rf   r#   )r   rf   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_namer7   r;   r6   attrs)r   NCOLSNROWSi_r<   df2indicesnamesrS   rT   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      @        )      ?      @      @g      @r   )r   r   r   r   r   xyzrf   r   )lowhighF)sizereplacer   r   r   )r   r,   r   rN   rm   rn   columnsro   lenitemsindexrt   arangelocr-   r.   r1   )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#   rf   r   )TTFr   c                     t        j                  |       }|j                         }|j                  D ]"  }|j	                  |      j
                  dk(  r"J  y )Nr   )r   r,   r-   r   r.   r1   )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)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:/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   r1   r/   r
   STRINGr2   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.   rK   raisesNotImplementedErrorr/   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-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@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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     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 )NrA   rB   r   r   )rK   rL   pyarrow.interchanger   r   r,   r7   r;   )r   pa_from_dataframerT   arrow_dfrS   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)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	1By+67FJEHHfXUH+E	(
 C
 	))%E)BC C Cs    ,BB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,   r7   r;   r   r-   )r   r   tz_datar<   s       r   test_datetimetzdtyper   1  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 )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   <  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   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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-   rX   rY   r   r7   r;   )r<   r   rS   s      r   test_empty_string_columnr  n  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 )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  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#   rf   r  r   )name0)r   r:   to_framer-   r   )r<   r   s     r   test_non_str_namesr    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)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    so    	I)4	5B



C	$	
 
A 	))#%)@
A 
A 
As   ,A==Br/   Int8zInt8[pyarrow]rA   )marksc                    t        j                  ddgi|       }t        j                  ddgid      }t         j                  j                  j	                  |j                               }t        j                  ||       y )Nr'   r#   r   r   )r   r,   rX   rY   r   r-   r7   r;   )r/   r<   rT   rS   s       r   test_nullable_integersr!    sc    
 
sQCj	.B||S1#Jf5HVV..r/?/?/ABF&(+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-   rX   rY   r   r7   r;   )r<   r  rS   rT   s       r   test_empty_dataframer#    sg    	sBiv	.B



CVV..su.EF||S"IV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>r9     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 |45!89B : 6B,:**&,A" flfll?-"--	:RST,# ,$ ,,,r   