gL iNddlmZmZddlZddlZddlmZddlmZm Z ddl m Z ddl Z ddlmZddlmZddlmZmZddlmZdd lmZej4d Zej4d Zej:j=d d dgdZdZ dZ!dZ"ej:j=dddde#ddgfdde#ddgfdddgfddde#dgfdddgfdde#dgfgdZ$ej:j=d dddddgdZ%d Z&ej:j=d gd!gd"d#gd$gd"d#ejNgd%ejNgd$ejNgd"d&gd'Z(d(Z)d)Z*d*Z+d+Z,ej:j[e d,-d.Z.ej:j=d id/gigd0Z/dmd2Z0dmd3Z1d4Z2ej:j=d5d6d7gej:j=d8gd9d:Z3d;Z4dmd<Z5d=Z6d>Z7d?Z8d@Z9ej:j=dAgdBdCdDfgdBdEdDfgdBdFdGfgdBdHdGfgdBdIdJfgdBdKdJfgdLdMdNfgdLdOdNfgdPdQdRfgdPdSdRfgdTe jtejvUdVfgdTdWdVfedXddedXdddgdYdZfedXddedXdddgd[d\fedXddejx]edXddejx]dgd^d_fgd e=d`e>dae>d1dfdbZ?ej:j=dAgdcdCdDfgdcdEdDfgdcdFdGfgdcdHdGfgdcdIdJfgdcdKdJfgdddMdNfgdddOdNfgdedQdRfgdedSdRfgdfe jtejvUdVfgdfdWdVfedXddedXddedXddggdYdZfedXddedXddedXddggd[d\fedXddejx]edXddejx]edXddgejx]gd^d_fgd e=d`e>dae>d1dfdhZ@dmdiZAdmdjZBdkZCdlZDy)n)datetimetimezoneN)iNaT)is_ci_environmentis_platform_windows)np_version_lt1p23) PandasColumn)ColumnNullType DtypeKindfrom_dataframe) ArrowCTypesctjtddzdtjtddzddS)NtestdataT)orderedF)r unordered)pd Categoricallisth/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/tests/interchange/test_impl.pydata_categoricalrs>>>$z"2R"7F^^D$4r$95I rc0dddddtjgiS)Nseparator dataz abC|DeF,Hikz 234,3245.67z gSaf,qWer|Grez asd3,4sad|)npnanrrr string_datar#s)      FF   rdata)rT)rFctjd||di}|jjd}|jdt j k(sJ|jdk(sJ|jtjdfk(sJ|jdk(sJ|j}|d|dk(sJ|ddusJt|dtsJtj |dj"tj$gd tj&|t)|jy) NAr is_ordered is_dictionaryT categories)adest)r DataFrame __dataframe__get_column_by_namedtyper CATEGORICAL null_count describe_nullr USE_SENTINEL num_chunksdescribe_categorical isinstancer tmassert_series_equal_colSeriesassert_frame_equalr )r rdfcoldesc_cats rtest_categorical_dtyper@0s, s-d1g68 9B    / / 4C 99Q<900 00 0 >>Q     !> q  ''H L !T!W ,, , O $ ,, , h|,l ;; ;##RYY/H%I"nR-=-=-?@ArcZtjdd}gd}|jd|j|j i}|j }t |}tj|gd}tjd|i}tj||y)Npyarrow11.0.0) MonTuerDWedrDThuFriSatSunweekday)rDrErFrGrHrIrJ)r') pytest importorskiptablearraydictionary_encoder.r rrr-r8r<)paarrrN exchange_dfresultrKexpecteds rtest_categorical_pyarrowrVDs   Y 1B IC HHi#!@!@!BC DE%%'K K (Fnn IG||Y01H&(+rctjdd}dg}|jd|j|dj i}|j }t jjj|}t jdt jtjgi}tj||y)NrBrCrRfloat64)rLrMrNrOrPr.rapi interchanger r-rrrr8r<rQrRrNrSrTrUs rtest_empty_categorical_pyarrowr\Ss   Y 1B &C HHeRXXc95GGIJ KE%%'K VV   . .{ ;F||UBNNBFF8$<=>H&(+rctjdd}ddg}|jd|j|di}|j }t |}t jdddgi}tj|||jj|jj ||sJy)NrBrCrDrErK large_string) rLrMrNrOr.r rr-r8r<TableequalsrZr[s rtest_large_string_pyarrowra_s   Y 1B %.C HHi#~!>? @E%%'K K (F||Y78H&(+ 88??2>>88@% HH Hr)offsetlengthexpected_valuesffffff @r@r$c|tjdd}gd}|jd|ij||}|j }t |}t jd|i}tj|||jj|jj ||sJy)NrBrC)reNrfrR) rLrMrNslicer.r rr-r8r<r_r`rZ) rbrcrdrQrRrNrSrTrUs rtest_bitmasks_pyarrowrjns   Y 1B C HHeS\ " ( ( 8E%%'K K (F||UO45H&(+ 88??2>>88@% HH Hrc`tjjdjddS)Nrgidrrandom default_rngintegersrrrrqs" %%a(11$<rc`tjjdjddS)Nrgr$rlrmrrrrqrqs" %%a(11!S9rc\tjjdjS)Nrg)rrnrorrrrqrqs %%a(//1rcbtjjdjddgS)NrgTF)rrnrochoicerrrrqrqs$ %%a(//u >rc,ttjjdj ddtjjdj ddtjjdj ddS)Nrgili4r$ )yearmonthday)rrrnrorprrrrqrqsh&&q)224>))''*33Ar: %%a(11!R8 rc  d\}}t|Dcic]9}dt||dz z |zdzt|Dcgc] } c};c}}tj}|j }|j |k(sJ|j |k(sJt|jtjk(sJd}tfd|D}t|j|} t|j|} tj| | t!| j"dtsJt!| j"dtsJycc}wcc}}w)N) rxr>rgr$)rrgc3VK|] }tj|"ywN)rkeys).0idxr s r z!test_dataframe..s!U "" "   " #tDIIK'8 88 8G  dict_null num_nullsnull_idxrs rtest_missing_from_maskedrsY 341234  B ))   "CCE::NCcllqs2wl77NIN#//+%Y88 JJryyR) 5J I !%x} %   C  ! !# & 1 1Ys^ CC C  ! !# & 1 1Ys^ CC C  ! !# & 1 1Ys^ CC COs$F )rrr)ffffff"@%@皙'@)rr)r$rgr)TTFrctj|}|j}|jD]"}|j |j dk(r"Jy)Nr)rr-r.rr/r2)r r=rcol_names rtest_mixed_datarsT d B   CJJ@%%h/::a???@rc6tjtjgdtjgdtjgdd}|j }|j D]"}|j |jdk(r"Jy)N)TNFNT)NrgNr$rg)rrNrNrrg)rr-rrOr.rr/r2)r=rrs rtest_mixed_missingrs 9:/078  B   CJJ@%%h/::a???@rcn|ddgz}tjd|i}|jjd}|j dk(sJ|j dk(sJ|j dtjk(sJ|jtjdfk(sJ|dd}|jjd}|j dk(sJ|j dk(sJ|j dtjk(sJ|jtjdfk(sJy)Nrr"r$r) rr-r.r/rr2r0r STRINGr3r USE_BYTEMASK)r test_str_datar=r> df_sliceds r test_stringrs" 01RD8M sM* +B    / / 4C 88:?? >>Q   99Q<9++ ++ +   !>Q   99Q<9++ ++ +   !s rtest_nonstring_objectrs[ s./ 0B    / / 4C *2E F s  A**A3ctjdtjdtjgi}|j j d}|j dk(sJ|jdk(sJ|jdtjk(sJ|jtjtfk(sJtj |t#|j y)Nr"z 2022-01-01rgr$r)rr- TimestampNaTr.r/rr2r0r DATETIMEr3r r4rr8r<r rs r test_datetimers sR\\,7@A BB    / / 4C 88:?? >>Q   99Q<9-- -- -   ! 1.23 required)reasoncJtjdtjgdi}|jj d}t j |jdd}t jgdd}tj||y)Nr")r(br(r r)rr$rint8r0) rr-rr.r/r from_dlpack get_buffersrOr8assert_numpy_array_equal)r=r>rTrUs r test_categorical_to_numpy_dlpackrsx sBNN?;< =B    / / 4C ^^COO-f5a8 9Fxx 0H1rr(ctjddddlm}t j |}||}t|}t j||dy)NrBrCrr F)check_column_type)rLrMpyarrow.interchanger rr-r8r<)r pa_from_dataframerUarrow_dfrTs rtest_empty_pyarrowrsK  8,G||D!H *H H %F&(eDrreturncBtjdd}|jgdgdg}dg}|j|g|}tjt d5t jjj|d dddy#1swYyxYw) NrBrC)rgrg)rrrln_legs)rz@Cannot do zero copy conversion into multi-column DataFrame blockrF allow_copy) rLrM chunked_arrayrNr RuntimeErrorrrYrZr )rQrrrNs rtest_multi_chunk_pyarrowr&s   Y 1B   y+6 7F JE HHfXUH +E P C ))%E)B CCCs ,BBchtjddtjgdd}tj||gdj d}|j }tjtd 5tjjj|jd dddtjjj|jd }tjdgd id}tj||tj||t!|dj"j$j&dk(sJt!|dj"j$j&dk(sJy#1swYxYw)NrBrCr$rgNInt64[pyarrow]rT) ignore_indexr(z:Found multi-chunk pyarrow array, but `allow_copy` is FalserFr)rrNrrNrXrg)rLrMrr;concatto_framecopyrrrYrZr r.r-r8r<rrO _pa_arraychunks)serr=df_origrTrUs rtest_multi_chunk_columnr2sT  8, ))L(8 9C C:D 1 : :3 ?BggiG X N ))"*:*:e*:*LMNVV   . .r/?/?4/?/P QF||S"BC9UH&(+"g& r#w}}&&-- .! 33 3 ws|!!++22 3q 88 8NNs :F((F1cntjddddddddd}tjt d i|gddj }|j }tjjj|dj}tjd i|}||k(sJy) NrBrCir$)ryrzr{hourminutesecondtimestamp[ns][pyarrow]col0)r0namer) rLrMrr;rrr.rYrZr itemr)timestamp_argsr=dfirTrUs rtest_timestamp_ns_pyarrowrGs  8, N   #N #$&  hj    C VV   . .s 3F ; @ @ BF||-n-H X  rtzUTCz US/Pacificunit)r+msusnsctjdddj|j|}tjd|i}t j |t|jy)Nz 2018-01-01rD)periodsfreqts_tz) r date_range tz_localizeas_unitr-r8r<r r.)rrtz_datar=s rtest_datetimetzdtyper _sc lAC8DDRHPPQUV  w( )B"nR-=-=-?@Arc tjdd}ddlm}t rFt r.srcSrr)rcolumns rrqz?test_interchange_from_corrected_buffer_dtypes..svrr.cSrr)rrZs rrqz?test_interchange_from_corrected_buffer_dtypes..s r) rr-r.r/rr UINTrUINT8setattrrYrZr ) monkeypatchr= buffers_data buffer_dtyperr!rZs @@@r-test_interchange_from_corrected_buffer_dtypesr)s sUEN+ , : : >rctjgdgdd}|j}tjt d5tj jj|ddddy#1swYyxYw)Nr1rrr)r2ra&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='(str|object)'\). Please rename these columns before using the interchange protocol.rFr) rr-r.rLr TypeErrorrYrZr )r=rs rtest_non_str_names_w_duplicatesr7so I)4 5B   C  $  A ))#%)@ A A As ,A==B)r r0expected_dtyperInt64int64rInt8rz Int8[pyarrow]UInt64uint64zUInt64[pyarrow])r@NFloat32float32zFloat32[pyarrow])TFNbooleanboolzboolean[pyarrow])much adoaboutN)na_valuer^zstring[pyarrow]r rz timestamp[ns]ztimestamp[us][pyarrow]z timestamp[us])tzinfoz×tamp[us, Asia/Kathmandu][pyarrow] timestamp[us, tz=Asia/Kathmandu]r0r8ctjdd}ddlm}|dk(r|j dd}t j d|i|}|j|jd}|j|k(sJ|dj|dk(sJ|d j|d k(sJ|d jJy NrBrCrrGrrr(rr$rg rLrMrrZ timestamprr-r r.typeas_pyr r0r8rQpair=rTs r(test_pandas_nullable_with_missing_valuesrPsb   Y 1B%;;d,<= sDk /B    0 0 2 3C 8F ;;. (( ( !9?? Q '' ' !9?? Q '' ' !9??  $$ $rr1)rr>g@)TFF)rCrDnothingrctjdd}ddlm}|dk(r|j dd}t j d|i|}|j|jd}|j|k(sJ|dj|dk(sJ|d j|d k(sJ|d j|d k(sJyrIrJrNs r+test_pandas_nullable_without_missing_valuesrSsh   Y 1B%;;d,<= sDk /B    0 0 2 3C 8F ;;. (( ( !9?? Q '' ' !9?? Q '' ' !9?? Q '' 'rctjddtjddgid}|j j dj d}|Jy)NrBrCr(rr.rvalidity)rLrMrr-r.r/r)r=rTs rtest_string_validity_bufferrVFsZ  8, sSEl*A BB     2 23 7 C C Ej QF >>rc*tjddtjdddgid}|j j dj d}|J|d}tjdtjd f}||k(sJy) NrBrCr(rr.rrUr$=) rLrMrr-r.r/rr BOOLr)r=rUrTrUs r&test_string_validity_buffer_no_missingrZNs  8, sS$K(0G HB!44S9EEG SH    a[F;#3#3S9H X  rc tjdgid}|j}tjjj |d}tjdgid}t j||y)Nr(rrFr)rr-r.rYrZr r8r<)r=rrTrUs rtest_empty_dataframer\Ysg sBiv .B   C VV   . .su . EF||S"IV4H&(+rctjdd}dddggdgi}|j|}t|}t j |}t j||y)NrBz14.0.0r(r$rgr5)rLrMrNr rr-r8r<)rQr tblrTrUs rtest_from_dataframe_list_dtyper_bs\   Y 1B 1a&)$ %D ((4.C C F||D!H&(+r)rN)ErrnumpyrrLpandas._libs.tslibsr pandas.compatrrpandas.compat.numpyrpandasrpandas._testing_testingr8pandas.core.interchange.columnr *pandas.core.interchange.dataframe_protocolr r &pandas.core.interchange.from_dataframer pandas.core.interchange.utilsrfixturerrr parametrizer@rVr\rafloatrjrrrOrrrrrskipifrrrrrr rr)r,r/r3r7 StringDtyperutcrr+rPrSrVrZr\r_rrrrqs  $27B5  "35I!JKBLB& , , I+ D3e c*+ D5<%& D3% AU5\"# Au Ae ~   I  I <91>  M M4D0 $56/0-.)$+,  @ @ @A$ B%.EF2G2"sBi1E2E C9*0|45!89B:6B,:**&,A"' w( '1 vv& /       Iy1 . : i0 0&9 $nbnnbff&E~V $&7H dAq !8D!Q#7 > $  dAq !8D!Q#7 > $  q!HLL9q!HLL9  5 . ?(+X% %%,/% %Y+X%&' GW% $g. FF# OV,       9i0 -y9 y&1 16: , BNNBFF +  *+