L ijUddlmZddlZddlZddlZddlmZmZmZm Z m Z m Z ddl Z ddlmZddlmZmZmZmZmZmZddlmZddlmZmZmZmZmZmZddl m!Z!erdd l"m#Z#m$Z$m%Z%dd l&m'Z'dd l(m)Z*dd l+m,Z,dd l-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7m8Z8m9Z9ddl:m;Z;ddlZ>m?Z?m@Z@e de3ZAe?ZBdeCd<e?ZDdeCd<eeeEgefZFdeCd<eEZGdeCd<ejejejhZKdZLejeLejZOdZPejePejZQdZRejeRejZSdZTejeTejZUe dZVdeCd <d!d"d#ZWd$d%d&d'd(d)d*d+d,d-d. ZXd/eCd0<ejjZZ dd2Z[ dd4Z\ dd5Z] dd6Z^ejd78dd9Z` dd:Za d dd;Zb dd<Zcd=d> dd?Zdejjd@k\rddAZenddBZeddCZf ddDZgejd78ddEZhejjZjejjdFejjdGiZmdHeCdI<ejjdJdKdLdMejjdNdOdPdMejjdQdRdSdMejjdTdUdVdMejjdWdXdYdMejjdZd[d\dMejjd]d^d_dMejjd`dadbdMejjdcdddedMejjdfdgdhdMejjdidjd1dMi ZydkeCdl<ejjfZ{ ddmZ| ddnZ}ddoZ~ejdpfejdqfejefejdpfejefejdpfejefejefejefdr ZdseCdt< dduZeeedvdwZdxeCdy<ddzZ dd{Zdd|Zdd}ZGd~ded3efZddZy)) annotationsN) TYPE_CHECKINGAnyCallableLiteralTypeVarcast)EagerSeriesNamespace) MS_PER_SECONDNS_PER_MICROSECONDNS_PER_MILLISECOND NS_PER_SECONDSECONDS_PER_DAY US_PER_SECOND) issue_warning)ImplementationVersion_DeferredIterablecheck_columns_existisinstance_or_issubclassrequires) ShapeError)IterableIteratorMapping) ModuleType)DtypeBaseMaskedDtype) TypeAliasTypeIs) IntervalUnit)PandasLikeExprPandasLikeSeries)NativeDataFrameTNativeNDFrameT NativeSeriesT)DType) DTypeBackend IntoDTypeTimeUnit_1DArrayExprT)boundr UnitCurrent UnitTargetBinOpBroadcastIntoRhsa^ datetime64\[ (?Ps|ms|us|ns) # Match time unit: s, ms, us, or ns (?:, # Begin non-capturing group for optional timezone \s* # Optional whitespace after comma (?P # Start named group for timezone [a-zA-Z\/]+ # Match timezone name, e.g., UTC, America/New_York (?:[+-]\d{2}:\d{2})? # Optional offset in format +HH:MM or -HH:MM | # OR pytz\.FixedOffset\(\d+\) # Match pytz.FixedOffset with integer offset in parentheses ) # End time_zone group )? # End optional timezone group \] # Closing bracket for datetime64 $a^ timestamp\[ (?Ps|ms|us|ns) # Match time unit: s, ms, us, or ns (?:, # Begin non-capturing group for optional timezone \s?tz= # Match "tz=" prefix (?P # Start named group for timezone [a-zA-Z\/]* # Match timezone name (e.g., UTC, America/New_York) (?: # Begin optional non-capturing group for offset [+-]\d{2}:\d{2} # Match offset in format +HH:MM or -HH:MM )? # End optional offset group ) # End time_zone group )? # End optional timezone group \] # Closing bracket for timestamp \[pyarrow\] # Literal string "[pyarrow]" $z^ timedelta64\[ (?Ps|ms|us|ns) # Match time unit: s, ms, us, or ns \] # Closing bracket for timedelta64 $a^ duration\[ (?Ps|ms|us|ns) # Match time unit: s, ms, us, or ns \] # Closing bracket for duration \[pyarrow\] # Literal string "[pyarrow]" $) yearquartermonthweekdayhourminutesecond millisecond microsecond nanosecondNativeIntervalUnitDmin)dmr4r5r6r8r9r:r;r<r=r>) yqmorBhrCsmsusnsz)Mapping[IntervalUnit, NativeIntervalUnit] UNITS_DICTboolcF|tjtjhvSN)rPANDASMODINimplementations a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_pandas_like/utils.pyis_pandas_or_modinrUs n33^5I5IJ JJr%cXddlm}|jj}|jr=t ||r1|js%|jj d|jfSt ||r|jr%|j|jj dfS|jj|ur.|jt|j||jfS|j|jfSt |tr d}t||j|fS)zValidate RHS of binary operation. If the comparison isn't supported, return `NotImplemented` so that the "right-hand-side" operation (e.g. `__radd__`) can be tried. rr$rRz$Expected Series or scalar, got list.) narwhals._pandas_like.seriesr%nativeindex _broadcast isinstanceiloc set_index_implementationlist TypeError)lhsrhsr% lhs_indexmsgs rTalign_and_extract_nativerfs>   I ~~*S*:;CNNzzq!3::--#'( >>JJ  23 3 ::  9 , #**i@S@ST  CJJ''#t4n ::s?rVct||jjr.t|x}t|x}k7rd|d|}t ||t j ur|jd}||_|S|t jur0d|jcxkrdkrnn|j|ddS|j|d S) z}Wrapper around pandas' set_axis to set object index. We can set `copy` / `inplace` based on implementation/version. zExpected object of length z, got length: F)deepr)axiscopy)rn) r\to_native_namespaceIndexlenrrCUDFrorZrP_backend_versionset_axis)objrZrS expected_len actual_lenres rTr^r^s%;;=CCDE " C *J"+<.zlSo,,,hhEh"  ....113:d:||E|66 <<A< &&rVc|tjur*|jdk\r|j|i|ddi}n|j|i|ddd}t d|S)zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rlinplaceF)rorzr')rrPrtrenamer )rvrSargskwargsresults rTr{r{sg...'')T1T;V;U;TGVG%G  & ))rV)maxsizecNt|}|j}|dvr|jS|dvr|jS|dvr|j S|dvr|j S|dvr|j S|dvr|jS|dvr|jS|dvr|jS|d vr|jS|d vr|jS|d vr|jS|d vr|jS|jd r|jS|dk(r t!||St"j%|x}st&j%|x}r4|j)d}|j)d}|j+||St,j%|x}st.j%|x}r"|j)d}|j1|S|dk(r|j3S|jdr!|j5dr|j7S|jdr!|j5dr|j9S|jdr!|j5dr|j;S|j=S)N>int64[pyarrow]Int64int64Int64[pyarrow]>int32[pyarrow]Int32int32Int32[pyarrow]>int16[pyarrow]Int16int16Int16[pyarrow]> int8[pyarrow]Int8int8 Int8[pyarrow]>uint64[pyarrow]UInt64uint64UInt64[pyarrow]>uint32[pyarrow]UInt32uint32UInt32[pyarrow]>uint16[pyarrow]UInt16uint16UInt16[pyarrow]>uint8[pyarrow]UInt8uint8UInt8[pyarrow]>double[pyarrow]float64[pyarrow]Float64float64Float64[pyarrow]>float[pyarrow]float32[pyarrow]Float32float32Float32[pyarrow]>string[python]string[pyarrow]large_string[pyarrow]string[pyarrow_numpy]strstring> bool[pyarrow]rMbooleanboolean[pyarrow]z dictionary<category time_unit time_zonezdate32[day][pyarrow]decimalz [pyarrow]timebinary)rdtypesrrrrrrrrrrStringBoolean startswith Categorical$native_categorical_to_narwhals_dtypePATTERN_PD_DATETIMEmatchPATTERN_PA_DATETIMEgroupDatetimePATTERN_PD_DURATIONPATTERN_PA_DURATIONDurationDateendswithDecimalTimeBinaryUnknown) native_dtypeversiondtypermatch_ dt_time_unit dt_time_zone du_time_units rT#non_object_native_to_narwhals_dtypers  E ^^F FF||~ FF||~ FF||~ BB{{} JJ}} JJ}} JJ}} FF||~ ~~ ~~ }} HH~~  &!!## 3L'JJ%++E222%++E222!'k!: #)<< #< |\::%++E222%++E222!'k!: |,, &&{{}  "u~~k'B~~ ENN;$?{{} !enn[&A}} >> rVc|j}|tjur|jStj j j}|dn||jdd}|dk(r|jS|dk(r"|tjur|jS|dk(r|jS|jS)NemptydT)skipnar) rrrsrpdapitypes infer_dtypeheadrV1Object)seriesrrSrinferinferred_dtypes rTobject_native_to_narwhals_dtyper!s^^F,,,}} FFLL $ $E &WE&++c:JSW4XN!}} WGJJ%>}} }} ==?rVc0|j}|tjur|jS|jrM|t j ur t|n|jj}|jt|S|jSrO) rrrrorderedrrs_cudf_categorical_to_list categoriesto_listEnumr)rrrSr into_iters rTrr8s ^^F'**!!##!4!44 &l 3((00  {{,Y788    rVcdfd }|S)NcTjjjSrO)rto_arrow to_pylist)rsrTfnz%_cudf_categorical_to_list..fnNs!&&//1;;==rV)returnz list[Any])rrs` rTrrJs> IrVF) allow_objectct|}|jdr#9#9#;4 '>#6#6  H2<II,,,~~$$&&.tWnMME  rV)rjct}t|tjjj xrt |d|duS)z/Return `True` if `dtype` is `"numpy_nullable"`.baseN)rr\rr extensionsExtensionDtypegetattr)rsentinels rTis_dtype_numpy_nullabler |s@8 ubff//>> ? 9vx0D8 rVct|tjjjrddlm}t||Sy)NrrF)r\rrrrpandas.core.arrays.maskedr)rOldBaseMaskedDtypes rTr r s6 eRVV..== > e%78 8rVc^|tjuryt|ryt|rdSdS)zjGet dtype backend for pandas type. Matches pandas' `dtype_backend` argument in `convert_dtypes`. Npyarrownumpy_nullable)rrsis_dtype_pyarrowr )rrSs rTget_dtype_backendrs3 ,,,6u= G4GrVcfd|DS)ziYield a `DTypeBackend` per-dtype. Matches pandas' `dtype_backend` argument in `convert_dtypes`. c36K|]}t|ywrO)r).0rrSs rT z&iter_dtype_backends..s I e^ 4 Isr)rrSs `rTiter_dtype_backendsrs J& IIrVcZttdxrt|tjS)N ArrowDtype)rrr\rrs rTrrs 2| $ IE2==)IIrVrrzMapping[type[DType], str]NW_TO_PD_DTYPES_INVARIANTrrr)rrNrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzNrrz;Expected one of {None, 'pyarrow', 'numpy_nullable'}, got: ''rrrr)rrKz*available in 'pandas>=2.0', found version .zhttps://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html#construction-with-datetime64-or-timedelta64-dtype-with-unsupported-resolutionz`nw.Datetime(time_unit=z )` is only z Narwhals has fallen back to using `time_unit='ns'` to avoid an error. Hint: to avoid this warning, consider either: - Upgrading pandas: zA - Using a bare `nw.Datetime`, if this precision is not importantz, tz=z timestamp[z ][pyarrow]z, z datetime64[]z duration[z timedelta64[z/'pyarrow>=13.0.0' is required for `Date` dtype.zdate32[pyarrow]z9Converting to Enum is not supported in narwhals.stable.v1T)rz9Can not cast / initialize Enum without categories presentConverting to z dtype is not supported for zUnknown dtype: )+ ValueErrorr base_typergetr issubclassrrrrrrrrrUPANDAS_VERSIONr\rr_unparse_versionr UserWarningrrrModuleNotFoundErrorrrrNotImplementedErrorrpCategoricalDtyperStructArrayListrrnarwhals_to_native_arrow_dtypeUNSUPPORTED_DTYPES__name__r)r dtype_backendrSrrerr$pd_type into_pd_typepafound available changelog_urlrtztz_partrexcrKs rTnarwhals_to_native_dtyper=sh ??Mm_\]^o ^^F!I+// ::w:.229==|=M**)V]]+ I % ==- - , , v7 n -.D 3 %1eoo6M 11.AH QRS !h -eoo-@ I;W+,9/:WXc;/L ??L I %-2__'+C99C>c|jtjtjtjhvxr|j j dk(S)NrM)r_rrPrQrrYr)rHs rTis_non_nullable_booleanr\sI   ! !>#7#79L9L M N % HHNNf $rVc|tjtjhvrddl}|S|tjurddl}|Sd|}t |)zCReturns numpy or cupy module depending on the given implementation.rNz!Expected pandas/modin/cudf, got: )rrPrQnumpyrscupyr)rSnpcpres rTimport_array_modulerbsQ.//1E1EFF ,,, -n-= >C  rVc eZdZy)PandasLikeSeriesNamespaceN)r2 __module__ __qualname__rrVrTrdrdsrVrdcdd|ddS)NFT)sortas_indexdropnaobservedr)drop_null_keyss rTmake_group_by_kwargsrmst~SW XXrV)rSrrrM)rbr%rczPandasLikeSeries | objectrz.tuple[pd.Series[Any], pd.Series[Any] | object])rvr'rZrrSrrr') rvr'r|rrSrr}rrr')rrrrrr))rzPandasLikeSeries | NonerrrSrrr)rO)rzpd.CategoricalDtyperrrSz#Literal[Implementation.CUDF] | Nonerr))rrrzCallable[[], list[Any]]) rrrrrSrrrMrr))rrrzTypeIs[BaseMaskedDtype])rrrSrrr*)rz Iterable[Any]rSrrzIterator[DTypeBackend])rrrzTypeIs[pd.ArrowDtype]) rr+r3r*rSrrrrzstr | PandasDtype)rr+rSrrrrz pd.ArrowDtype)rrrr)rHr(rFr,rr,rr()rHr(rr,rr()rVr&rWzlist[str] | _1DArrayrSrrzNativeDataFrameT | Any)rHr%rrM)rSrrr)rlrMrzdict[str, bool]) __future__r functoolsoperatorretypingrrrrrr pandasrnarwhals._compliantr narwhals._constantsr r r rrrnarwhals._exceptionsrnarwhals._utilsrrrrrrnarwhals.exceptionsrcollections.abcrrrrrpandas._typingr PandasDtypepandas.core.dtypes.dtypesrtyping_extensionsr r!narwhals._durationr"narwhals._pandas_like.exprr#rXr%narwhals._pandas_like.typingr&r'r(narwhals.dtypesr)narwhals.typingr*r+r,r-r.r0__annotations__r1intr2r3rPrsrQPANDAS_LIKE_IMPLEMENTATIONPD_DATETIME_RGXcompileVERBOSErPA_DATETIME_RGXrPD_DURATION_RGXrPA_DURATION_RGXrr? ALIAS_DICTrLrtr'rUrfr^r{ lru_cacherrrrrr rrrMAINrrrrrrrrrrrrrrrrrr1r=r0rCfloordivmulrDrIrJrLrZr\rbrdrmrrVrTrs(" GG4/+;; 393/9= &KK G> 2E%K%$J $ (#sS 9NI9GY !bjj"**=!bjj"**= !bjj"**= !bjj"**= '  !I U #           9 5  &&779 K  93B' ' #'8F''. *  * # *5C *OR * *R G!GT #.5GU 4;? %  8   $ ## ###  #  #L))+v5   HJ J+9JJR J!J       MM8 84 NN%#  NN%#  LL.'QXY LL.'QXY LL.'QXY KK_fU MM$"  MM$"  MM$"  LL.'QXY NN%#?$YU$Jnn&` ``#` `  `F# #&4#?F##&$$e,$$i0<