gL i<dZddlZddlZddlmZddlZddlm Z ddl m Z ddl mZddlmZe j"Zddedefd Zej*d d g d Zej*dZej*dZej*dZej*dZej*dZej*dZej*dZej*dZej*dZej@jCdZ"GddejFZ$GddejJZ&y)a This file contains a minimal set of tests for compliance with the extension array interface test suite, and should contain no other tests. The test suite for the full functionality of the array is located in `pandas/tests/arrays/`. The tests in this file are inherited from the BaseExtensionTests, and only minimal tweaks should be applied to get the tests passing (by overwriting a parent method). Additional tests should either be added to one of the BaseExtensionTests classes (if they are relevant for the extension interface for all dtypes), or be added to the array-specific tests in `pandas/tests/arrays/`. Note: we do not bother with base.BaseIndexTests because NumpyExtensionArray will never be held in an Index. N) NumpyEADtype)is_object_dtype)NumpyExtensionArray)baseattrobjcL|dk(rt|dd}t|dd}t|tr,t|ts|j|j}n;t|tr+t|ts|j|j}t ||||y)zi patch tm.assert_attr_equal so NumpyEADtype("object") is closed enough to np.dtype("object") dtypeN)getattr isinstancerastype numpy_dtypeorig_assert_attr_equal)rleftrightrlattrrattrs g/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/tests/extension/test_numpy.py_assert_attr_equalr s  wgt,w- e\ *:e\3R;;u001D | ,Z|5TLL!2!23E4uc2floatobject)paramscRttj|jSN)rnpr param)requests rr r 0s / 00rc#K|j5}|jtdd|jtjdt ddddy#1swYyxYww)a A monkeypatch to tells pandas to let us in. By default, passing a NumpyExtensionArray to an index / series / frame constructor will unbox that NumpyExtensionArray to an ndarray, and treat it as a non-EA column. We don't want people using EAs without reason. The mechanism for this is a check against ABCNumpyExtensionArray in each constructor. But, for testing, we need to allow them in pandas. So we patch the _typ of NumpyExtensionArray, so that we evade the ABCNumpyExtensionArray check. _typ extensionassert_attr_equalN)contextsetattrrtm assertersr) monkeypatchms rallow_in_pandasr)5sT"    ! %v{; ",, 35GH sA)AA A)A&"A)c|jdk(r7tjtdDcgc]}|fc}jSt t jdd|jScc}w)Nrder ) rpdSeriesrangearrayrrarange_dtype)r)r is rdatar6LsW H$yyc 311$34::: ryyCu||D EE4s A2c|jdk(r4ttjtjdgt SttjtjdgS)Nrr,r.g?rrrr2nanrr)r s r data_missingr<SsJ H$"288RVVTN&#IJJ rxx 6 77rc d}|S)NcZtj|xrtj|Sr)risnan)abs rcmpzna_cmp..cmp\sxx{*rxx{*r)rBs rna_cmprDZs+ Jrc|jdk(r)ttjgdtddSttjgdS)ziLength-3 array with a known sort order. This should be three items [B, C, A] with A < B < C r)rCr8r.r,N)r,rGr)rrrr2rr;s rdata_for_sortingrJbsH H$#288,B&#QRSRT#UVV rxx 2 33rc|jdk(r5ttjdtjdgt SttjdtjdgS)zvLength-3 array with a known sort order. This should be three items [B, NA, A] with A < B and NA missing. rr8)rr.r,rr9r;s rdata_missing_for_sortingrLpsQ H$"288T2664,@#OPP rxxBFFA7 88rc |jdk(rd\}}}ntjd\}}}ttj||tj tj ||||g|jS)zData for factorization, grouping, and unique tests. Expected to be like [B, B, NA, NA, A, A, B, C] Where A < B < C and NA is missing r)r8rFrHrIr.)rrr3rr2r:)r)r r@rAcs rdata_for_groupingrO|sj H$"1a))A,1a  !Q1a35;L;LM rc|jdk(rtj|dtjddz}t j ||S)NOz is not a numeric dtyper+rGr.)kindpytestskipronesr_from_sequence)r arrs r data_for_twosrXsG zzS ug456 ''#, C  - -c ??rcr|dk(r2tjjd}|j|yy)a Tests for NumpyExtensionArray with nested data. Users typically won't create these objects via `pd.array`, but they can show up through `.array` on a Series with nested data. Many of the base tests fail, as they aren't appropriate for nested data. This fixture allows these tests to be skipped when used as a usefixtures marker to either an individual test or a test class. rzFails for object dtypereasonN)rSmarkxfail applymarker)r rr\s rskip_numpy_objectr_s7 {{  (@ AD!rr_c eZdZejj ddZefdZfdZ fdZ efdZ efdZ efd Z efd Zefd Zejj!d fd ZfdZefdZdZdZdZdZfdZdZfdZfdZfdZdej<dede fdZ!dej<dede fdZ"ejj dejjGdddgdZ$efd Z%efd!Z&efd"Z'efd#Z(eejjGd$d%dgfd&Z)efd'Z*eejjGd(e+jXgd)ejXgd)d*+gd,d-g.fd/Z-eejjGd0gd1ejXgd1d2+e+jXgd1ggd3.fd4Z.ejjGd5d6d7d8ej^gdfej`d6d7d8ej^gdejj 9ejXd6d7d8ej^gd2+dfejXd6d7d8ej^gd2+dfggd:.fd;Z1efd<Z2efd=Z3d>Z4ejj!d?fd@Z5eejjGdAdBdCgfdDZ6xZ7S)ETestNumpyExtensionArrayzWe don't register our dtyperZcyrrC)selfr6s rtest_from_dtypez'TestNumpyExtensionArray.test_from_dtype rc&t|||yr)super)test_series_constructor_scalar_with_index)rcr6r __class__s rrhzATestNumpyExtensionArray.test_series_constructor_scalar_with_indexs 9$Frc|jjdk(rF|jtjj d|jjt ||y)Nrz:NumpyExtensionArray expectedly clashes with a NumPy name: rZ)r rr^rSr\r]rgtest_check_dtype)rcr6rusing_infer_stringris rrkz(TestNumpyExtensionArray.test_check_dtypesc :: ! !X -    !!##'::#9#9":<"   &rc^|jdk(rt|sJyt| |y)Nr)rrrgtest_is_not_object_type)rcr rris rrnz/TestNumpyExtensionArray.test_is_not_object_types.    (#5) )) G +E 2rc$t||yr)rgtest_getitem_scalarrcr6ris rrpz+TestNumpyExtensionArray.test_getitem_scalars #D)rc$t||yr)rgtest_shift_fill_valuerqs rrsz-TestNumpyExtensionArray.test_shift_fill_values %d+rc$t||yr)rgtest_fillna_copy_framercr<ris rruz.TestNumpyExtensionArray.test_fillna_copy_frames &|4rc$t||yr)rgtest_fillna_copy_seriesrvs rrxz/TestNumpyExtensionArray.test_fillna_copy_seriess ' 5rc&t|||yr)rgtest_searchsorted)rcrJ as_seriesris rrzz)TestNumpyExtensionArray.test_searchsorteds !"2I>rz*NumpyExtensionArray.diff may fail on dtypec$t|||Sr)rg test_diff)rcr6periodsris rr}z!TestNumpyExtensionArray.test_diffsw w//rc|jjtk(r1tjj d}|j |t|!|y)Nz$Dimension mismatch in np.concatenaterZ) r rrrSr\r]r^rg test_insert)rcr6rr\ris rrz#TestNumpyExtensionArray.test_insertsH :: ! !V +;;$$,R$SD    % D!rc&t|||yr)rgtest_insert_invalidrcr6invalid_scalarris rrz+TestNumpyExtensionArray.test_insert_invalids #D.9rNctd}|jjdk(rt}||_t||yNrQ)r rR TypeError divmod_excrg test_divmod)rcr6rris rrz#TestNumpyExtensionArray.test_divmods1 ::??c !"J$ D!rctj|}d}|jjdk(r t}||_|j |t|yr)r/r0r rRrr_check_divmod_opdivmod)rcr6serexcs rtest_divmod_series_arrayz0TestNumpyExtensionArray.test_divmod_series_arraysBiio ::??c !C!DO c640rc|}d}|jjtk(rE|dvr;tjj d}|j j|t}||_ t|-||yN)__mul____rmul__z9the Series.combine step raises but not the Series method.rZ) r rrrSr\r]node add_markerrseries_scalar_excrgtest_arith_series_with_scalar)rcr6all_arithmetic_operatorsropnamerr\ris rrz5TestNumpyExtensionArray.test_arith_series_with_scalarsw)  :: ! !V +00{{((V) ''- ) !2 -d4LMrc|}d}|jjtk(r |dvrt}||_t |||y)N)__add____radd__)r rrrseries_array_excrgtest_arith_series_with_array)rcr6rrrris rrz4TestNumpyExtensionArray.test_arith_series_with_arraysF) :: ! !V +>U0U(  0 ,T3KLrc|}d}|jjtk(rE|dvr;tjj d}|j j|t}||_ t|-||yr) r rrrSr\r]rrrframe_scalar_excrgtest_arith_frame_with_scalar)rcr6rrrrr\ris rrz4TestNumpyExtensionArray.test_arith_frame_with_scalarsw) :: ! !V +00{{((V) ''-(  0 ,T3KLrrop_namereturnc>|jjdk(r|dvSy)NrQ)summinmaxanyallT)r rR)rcrrs r_supports_reductionz+TestNumpyExtensionArray._supports_reduction&s! 99>>S AA Arskipnact||}|jj}|j|}t||}|dk(r|}|} n||}||} t j || y)Ncount)r)r r rr r%assert_almost_equal) rcrrrres_op cmp_dtypealtexp_opresultexpecteds r check_reducez$TestNumpyExtensionArray.check_reduce+ssg&II)) jj#g& g XFxH6*FV,H vx0rzTODO: tests not written yetTFcyrrC)rcr6all_numeric_reductionsrs rtest_reduce_framez)TestNumpyExtensionArray.test_reduce_frame;rerc$t||yr)rgtest_fillna_seriesrvs rrz*TestNumpyExtensionArray.test_fillna_series@s "<0rc$t||yr)rgtest_fillna_framervs rrz)TestNumpyExtensionArray.test_fillna_frameEs !,/rc&t|||yr)rgtest_setitem_invalidrs rrz,TestNumpyExtensionArray.test_setitem_invalidJs $T>:rc&t|||yr)rg test_setitem_sequence_broadcastsrcr6 box_in_seriesris rrz8TestNumpyExtensionArray.test_setitem_sequence_broadcastsOs 0}Ersetterlocc&t|||yr)rgtest_setitem_mask_broadcast)rcr6rris rrz3TestNumpyExtensionArray.test_setitem_mask_broadcastUs +D&9rc$t||yr)rg&test_setitem_scalar_key_sequence_raiserqs rrz>TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raise\s 6t??XBHH-2"$V* 3; :: ! !V +c5)SE$K-?<<(AB fh%HrzNumpyEADtype is unpackedc$t||yr)rg#test_index_from_listlike_with_dtyperqs rrz;TestNumpyExtensionArray.test_index_from_listlike_with_dtypes 3D9renginerNpythonc(t||||yr)rg test_EA_types)rcrr6rris rrz%TestNumpyExtensionArray.test_EA_typess fdG4r)8__name__ __module__ __qualname__rSr\rTrd skip_nestedrhrkrnrprsrurxrzr]r}rrrrrrrrrrrr/r0strboolrr parametrizerrrrrrrrr2rrNArrrrrrr __classcell__)ris@rraras2 [[:; < GG'3**,,5566??  [[JK0L0"::J"1 NM Mryy34 1 1C11  [[34 [[Xe}5 65 1100;;FF  [[Xt}5:6: == [[ BHH5 6 BHH5Y G O , == [[ HBHHYg68KL 4 E  E [[Aruu u % FLL!Q255)4v{{7H7H I RXXq!Q&g 6 > RXXq!Q&g 6 >  U S S8822I" [[89::: [[XX7585rrac eZdZy) Test2DCompatN)rrrrCrrrrsrr) Attributes)'__doc__numpyrrSpandas.core.dtypes.dtypesrpandasr/pandas._testing_testingr%pandas.api.typesrpandas.core.arrays.numpy_rpandas.tests.extensionrr"rrrfixturer r)r6r<rDrJrLrOrXr_r\ usefixturesrExtensionTestsraNDArrayBacked2DTestsrrCrrrs" 2,9'-- 3S 3C 3 *+1,1,FF 88  4 499   @@ " "kk%%&9: ~5d11~5B 4,, r