ó
    Ñ]jÑ  ã                  óF  • S SK Jr  S SKrS SKrS SKJrJrJr  S SKrS SK	r
S SKJr  S SKJrJrJrJr  S SKJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S S	K'J(r(J)r)J*r*  \(       a  S S
K+J,r,  \" SSS9r-\-SLr.Sq/SKSLS jjr0\0" \" S5      5         " S S5      r1 " S S5      r2SMS jr3SNS jr4 SO   SPS jjr5        SQS jr6   SR           SSS jjr7STS jr8SUS jr9SVSWS jjr:SXS jr;SYS jr<SXS  jr=SSSS!.         SZS" jjr>SSSS!.         SZS# jjr?\1" S$5      \;\=SSS SS%.           S[S& jj5       5       5       r@          S\S' jrA\2" 5       \;SSSS!.         S]S( jj5       5       rB\2" 5       SSSS!.       S^S) jj5       rC      S_S* jrD\
RŠ                  " \
RŒ                  5      4           S`S+ jjrG\2" S,S-9SSS,SS..     SaS/ jj5       rH\1" S$S05      \2" S,S-9SSS,SS..       SbS1 jj5       5       rI\1" S$S05      SSS,SS..           ScS2 jj5       rJS3 rK\K" S4S5S69rL\K" S7S8S69rMSSSS!.         SdS9 jjrNSSSS!.         SdS: jjrO\1" S$S05      \=SSSS!.         S]S; jj5       5       rP\1" S$S05      \=SSSS!.         S]S< jj5       5       rQ\1" S$S05      \=SSS SS%.           SeS= jj5       5       rR          SfS> jrS\
RŠ                  " \
RŒ                  5      4         SgS? jjrT  Sh             SiS@ jjrU        SjSA jrVSkSB jrW\1" S$S05      SCSSD.         SlSE jj5       rX    SmSF jrY\1" S$S05      SS,SG.         SnSH jj5       rZSI r[SoSJ jr\g)pé    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚcast)Ú
get_option)ÚNaTÚNaTTypeÚiNaTÚlib)	Ú	ArrayLikeÚAxisIntÚCorrelationMethodÚDtypeÚDtypeObjÚFÚScalarÚShapeÚnpt)Úimport_optional_dependency)Ú
is_complexÚis_floatÚis_float_dtypeÚ
is_integerÚis_numeric_dtypeÚis_object_dtypeÚneeds_i8_conversionÚpandas_dtype)ÚisnaÚna_value_for_dtypeÚnotna)ÚCallableÚ
bottleneckÚwarn)ÚerrorsFTc                ó    • [         (       a  U qg g ©N)Ú_BOTTLENECK_INSTALLEDÚ_USE_BOTTLENECK)Úvs    ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pandas/core/nanops.pyÚset_use_bottleneckr+   ;   s   € ÷ ÒØ‰ð ó    zcompute.use_bottleneckc                  ó@   ^ • \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	ÚdisallowéE   c                óP   >• [         TU ]  5         [        S U 5       5      U l        g )Nc              3  óL   #   • U  H  n[        U5      R                  v •  M     g 7fr&   )r   Útype)Ú.0Údtypes     r*   Ú	<genexpr>Ú$disallow.__init__.<locals>.<genexpr>H   s   é € ÐIÂ&¸œL¨Ó/×4Ö4Â&ùs   ‚"$)ÚsuperÚ__init__ÚtupleÚdtypes)Úselfr:   Ú	__class__s     €r*   r8   Údisallow.__init__F   s    ø€ Ü‰ÑÔÜÑIÁ&ÓIÓIˆ�r,   c                ó|   • [        US5      =(       a*    [        UR                  R                  U R                  5      $ )Nr4   )ÚhasattrÚ
issubclassr4   r2   r:   )r;   Úobjs     r*   ÚcheckÚdisallow.checkJ   s'   € Ü�s˜GÓ$×P¬°C·I±I·N±NÀDÇKÁKÓ)PÐPr,   c                óf   ^ ^• [         R                  " T5      UU 4S j5       n[        [        U5      $ )Nc                 óL  >• [         R                  " XR                  5       5      n[        U4S jU 5       5      (       a+  TR                  R                  SS5      n[        SU S35      e T" U 0 UD6$ ! [         a%  n[        U S   5      (       a  [        U5      Uee S nAff = f)Nc              3  óF   >#   • U  H  nTR                  U5      v •  M     g 7fr&   )rB   )r3   rA   r;   s     €r*   r5   Ú0disallow.__call__.<locals>._f.<locals>.<genexpr>Q   s   øé € Ð7ªh s�4—:‘:˜c—?�?ªhùs   ƒ!ÚnanÚ zreduction operation 'z' not allowed for this dtyper   )	Ú	itertoolsÚchainÚvaluesÚanyÚ__name__ÚreplaceÚ	TypeErrorÚ
ValueErrorr   )ÚargsÚkwargsÚobj_iterÚf_nameÚeÚfr;   s        €€r*   Ú_fÚdisallow.__call__.<locals>._fN   s�   ø€ ä —’ t¯]©]«_Ó=ˆHÜÔ7©hÓ7×7Ñ7ØŸ™×+Ñ+¨E°2Ó6�ÜØ+¨F¨8Ð3OÐPóð ð	Ù˜$Ð) &Ñ)Ð)øÜó ô
 # 4¨¡7×+Ñ+Ü# A›,¨AÐ-Øûðús   Á,A4 Á4
B#Á> BÂB#©Ú	functoolsÚwrapsr   r   )r;   rW   rX   s   `` r*   Ú__call__Údisallow.__call__M   s,   ù€ Ü	�Š˜Ó	õ	ó 
ð	ô$ ”A�r‹{Ðr,   )r:   )r:   r   ÚreturnÚNone©r_   Úbool)rW   r   r_   r   )	rN   Ú
__module__Ú__qualname__Ú__firstlineno__r8   rB   r]   Ú__static_attributes__Ú__classcell__)r<   s   @r*   r.   r.   E   s   ø† ÷JôQ÷ò r,   r.   c                  ó,   • \ rS rSrSSS jjrSS jrSrg)	Úbottleneck_switchéd   Nc                ó   • Xl         X l        g r&   )ÚnamerS   )r;   rl   rS   s      r*   r8   Úbottleneck_switch.__init__e   s   € ØŒ	Ø�r,   c                ó  ^ ^^^• T R                   =(       d    TR                  m [        [        T5      m[        R                  " T5      S SS.     SUUUU 4S jjj5       n[        [        U5      $ ! [        [
        4 a    S m NRf = f)NT©ÚaxisÚskipnac               ó  >• [        T
R                  5      S:”  a.  T
R                  R                  5        H  u  pEXC;  d  M  XSU'   M     U R                  S:X  a  UR	                  S5      c  [        X5      $ [        (       a}  U(       av  [        U R                  T	5      (       a[  UR	                  SS 5      c:  UR                  SS 5        T" U 4SU0UD6n[        U5      (       a  T" U 4XS.UD6nU$ T" U 4XS.UD6n U$ T" U 4XS.UD6nU$ )Nr   Ú	min_countÚmaskrp   ro   )ÚlenrS   ÚitemsÚsizeÚgetÚ_na_for_min_countr(   Ú_bn_ok_dtyper4   ÚpopÚ	_has_infs)rL   rp   rq   ÚkwdsÚkr)   ÚresultÚaltÚbn_funcÚbn_namer;   s          €€€€r*   rW   Ú%bottleneck_switch.__call__.<locals>.fq   s  ø€ ô �4—;‘;Ó !Ó#Ø ŸK™K×-Ñ-Ö/‘D�AØ•}Ø"#˜Q›ñ 0ð �{‰{˜aÓ D§H¡H¨[Ó$9Ñ$Aô )¨Ó6Ð6çŠ¦6¬l¸6¿<¹<È×.QÑ.QØ—8‘8˜F DÓ)Ñ1ð —H‘H˜V TÔ*Ù$ VÑ?°$Ð?¸$Ñ?�Fô ! ×(Ñ(Ù!$ VÐ!N°$Ñ!NÈÑ!N˜ð ˆMñ	 ! ÐJ¨dÑJÀTÑJ‘Fð ˆMñ ˜VÐF¨$ÑFÀÑF�àˆMr,   )rL   ú
np.ndarrayrp   úAxisInt | Nonerq   rb   )
rl   rN   ÚgetattrÚbnÚAttributeErrorÚ	NameErrorr[   r\   r   r   )r;   r€   rW   r�   r‚   s   `` @@r*   r]   Úbottleneck_switch.__call__i   s—   û€ Ø—)‘)×+˜sŸ|™|ˆð	Üœb 'Ó*ˆGô 
�Š˜Ó	ð $(Øñ	%	Øð%	ð !ð%	ð ÷	%	ò %	ó 
ð%	ôN ”A�q‹zÐøôW ¤	Ð*ó 	ØŠGð	ús   ¥A3 Á3BÂB)rS   rl   r&   )r_   r`   )r€   r   r_   r   )rN   rc   rd   re   r8   r]   rf   © r,   r*   ri   ri   d   s   † ö÷0r,   ri   c                óB   • U [         :w  a  [        U 5      (       d  US;  $ g)N)ÚnansumÚnanprodÚnanmeanF)Úobjectr   )r4   rl   s     r*   rz   rz   œ   s%   € à”ƒÔ2°5×9Ñ9ð Ð;Ñ;Ð;Ør,   c                ó   • [        U [        R                  5      (       a5  U R                  S;   a%  [        R
                  " U R                  S5      5      $  [        R                  " U 5      R                  5       $ ! [        [        4 a     gf = f)N)Úf8Úf4ÚKF)Ú
isinstanceÚnpÚndarrayr4   r   Úhas_infsÚravelÚisinfrM   rP   ÚNotImplementedError)r   s    r*   r|   r|   °   sn   € Ü�&œ"Ÿ*™*×%Ñ%Ø�<‰<˜<Ó'ô —<’< §¡¨SÓ 1Ó2Ð2ðÜ�xŠx˜Ó×#Ñ#Ó%Ð%øÜÔ*Ð+ó áðús   Á#A: Á:BÂBc                ó(  • Ub  U$ [        U 5      (       a:  Uc  [        R                  $ US:X  a  [        R                  $ [        R                  * $ US:X  a$  [        R                  " [
        R                  5      $ [        R                  " [        5      $ )z9return the correct fill value for the dtype of the valuesú+inf)Ú_na_ok_dtyper–   rH   ÚinfÚint64r   Úi8maxr
   )r4   Ú
fill_valueÚfill_value_typs      r*   Ú_get_fill_valuer¤   ½   sq   € ð ÑØÐÜ�E×ÑØÑ!Ü—6‘6ˆMØ˜vÓ%Ü—6‘6ˆMä—F‘F�7ˆNØ	˜6Ó	!ô
 �xŠxœŸ	™	Ó"Ð"ä�xŠxœ‹~Ðr,   c                óš   • UcG  U R                   R                  S;   a  gU(       d  U R                   R                  S;   a  [        U 5      nU$ )a^  
Compute a mask if and only if necessary.

This function will compute a mask iff it is necessary. Otherwise,
return the provided mask (potentially None) when a mask does not need to be
computed.

A mask is never necessary if the values array is of boolean or integer
dtypes, as these are incapable of storing NaNs. If passing a NaN-capable
dtype that is interpretable as either boolean or integer data (eg,
timedelta64), a mask must be provided.

If the skipna parameter is False, a new mask will not be computed.

The mask is computed using isna() by default. Setting invert=True selects
notna() as the masking function.

Parameters
----------
values : ndarray
    input array to potentially compute mask for
skipna : bool
    boolean for whether NaNs should be skipped
mask : Optional[ndarray]
    nan-mask if known

Returns
-------
Optional[np.ndarray[bool]]
NÚbiuÚmM)r4   Úkindr   )rL   rq   rt   s      r*   Ú_maybe_get_maskr©   Ô   sA   € ðB �|Ø�<‰<×Ñ Ó%àæ�V—\‘\×&Ñ&¨$Ó.Ü˜“<ˆDà€Kr,   c                óÈ  • [        XU5      nU R                  nSnU R                  R                  S;   a'  [        R                  " U R                  S5      5      n SnU(       a~  Ub{  [        XRUS9nUbn  UR                  5       (       aY  U(       d  [        U5      (       a*  U R                  5       n [        R                  " XU5        X4$ [        R                  " U) X5      n X4$ )a<  
Utility to get the values view, mask, dtype, dtype_max, and fill_value.

If both mask and fill_value/fill_value_typ are not None and skipna is True,
the values array will be copied.

For input arrays of boolean or integer dtypes, copies will only occur if a
precomputed mask, a fill_value/fill_value_typ, and skipna=True are
provided.

Parameters
----------
values : ndarray
    input array to potentially compute mask for
skipna : bool
    boolean for whether NaNs should be skipped
fill_value : Any
    value to fill NaNs with
fill_value_typ : str
    Set to '+inf' or '-inf' to handle dtype-specific infinities
mask : Optional[np.ndarray[bool]]
    nan-mask if known

Returns
-------
values : ndarray
    Potential copy of input value array
mask : Optional[ndarray[bool]]
    Mask for values, if deemed necessary to compute
Fr§   Úi8T)r¢   r£   )r©   r4   r¨   r–   ÚasarrayÚviewr¤   rM   rž   ÚcopyÚputmaskÚwhere)rL   rq   r¢   r£   rt   r4   Údatetimelikes          r*   Ú_get_valuesr²      sÇ   € ôR ˜6¨4Ó0€Dà�L‰L€Eà€LØ‡|�|×Ñ˜DÓ ô —’˜FŸK™K¨Ó-Ó.ˆØˆæ�4Ñ#ô %Ø¸ñ
ˆ
ð Ñ!Ø�x‰x�z‰zÞ¤<°×#6Ñ#6Ø#Ÿ[™[›]�FÜ—J’J˜v¨ZÔ8ð
 ˆ<Ðô  ŸXšX t e¨VÓ@�Fàˆ<Ðr,   c                óJ  • U nU R                   S;   a&  [        R                  " [        R                  5      nU$ U R                   S:X  a&  [        R                  " [        R                  5      nU$ U R                   S:X  a$  [        R                  " [        R
                  5      nU$ )NÚbiÚurW   )r¨   r–   r4   r    Úuint64Úfloat64)r4   Ú	dtype_maxs     r*   Ú_get_dtype_maxr¹   G  s{   € à€IØ‡z�z�TÓÜ—H’HœRŸX™XÓ&ˆ	ð
 Ðð	 
�‰�sÓ	Ü—H’HœRŸY™YÓ'ˆ	ð Ðð 
�‰�sÓ	Ü—H’HœRŸZ™ZÓ(ˆ	ØÐr,   c                óv   • [        U 5      (       a  g[        U R                  [        R                  5      (       + $ )NF)r   r@   r2   r–   Úinteger©r4   s    r*   rž   rž   S  s(   € Ü˜5×!Ñ!ØÜ˜%Ÿ*™*¤b§j¡jÓ1Ô1Ð1r,   c                óà  • U [         L a   U $ UR                  S:X  aÖ  Uc  [        n[        U [        R
                  5      (       dš  [        U5      (       a   S5       eX:X  a  [        R                  n [        U 5      (       a'  [        R                  " SS5      R                  U5      n O%[        R                  " U 5      R                  U5      n U R                  USS9n U $ U R                  U5      n  U $ UR                  S:X  aë  [        U [        R
                  5      (       d¬  X:X  d  [        R                  " U 5      (       a2  [        R                  " U5      S   n[        R                  " SU5      n U $ [        R                  " U 5      [         R"                  :”  a  [%        S	5      e[        R                  " U 5      R                  USS9n  U $ U R                  S
5      R                  U5      n U $ )zwrap our results if neededÚMzExpected non-null fill_valuer   ÚnsF©r®   Úmr   zoverflow in timedelta operationzm8[ns])r   r¨   r
   r•   r–   r—   r   rH   Ú
datetime64Úastyper    r­   ÚisnanÚdatetime_dataÚtimedelta64Úfabsr   r¡   rQ   )r   r4   r¢   Úunits       r*   Ú_wrap_resultsrÉ   Y  sš  € à”‚}ØðH €MðE 
�‰�sÓ	ØÑäˆJÜ˜&¤"§*¡*×-Ñ-Ü˜J×'Ñ'ÐGÐ)GÓGÐ'ØÓ#ÜŸ™�ä�F�|‰|ÜŸš u¨dÓ3×:Ñ:¸5ÓA‘äŸš &Ó)×.Ñ.¨uÓ5�à—]‘] 5¨u�]Ð5ˆFð( €Mð# —]‘] 5Ó)‰Fð" €Mð! 
�‰�sÓ	Ü˜&¤"§*¡*×-Ñ-ØÓ#¤r§x¢x°×'7Ñ'7Ü×'Ò'¨Ó.¨qÑ1�ÜŸš¨¨tÓ4�ð €Mô —’˜“¤3§9¡9Ó,ä Ð!BÓCÐCô Ÿš &Ó)×0Ñ0°¸UÐ0ÐC‘ð
 €Mð —]‘] 8Ó,×1Ñ1°%Ó8ˆFà€Mr,   c                ó€   ^ • [         R                  " T 5      SSSS.       SU 4S jjj5       n[        [        U5      $ )zŒ
If we have datetime64 or timedelta64 values, ensure we have a correct
mask before calling the wrapped function, then cast back afterwards.
NT©rp   rq   rt   c               óî   >• U nU R                   R                  S;   nU(       a  Uc  [        U 5      nT" U 4XUS.UD6nU(       a0  [        XuR                   [        S9nU(       d  Uc   e[        XqX55      nU$ )Nr§   rË   )r¢   )r4   r¨   r   rÉ   r
   Ú_mask_datetimelike_result)	rL   rp   rq   rt   rS   Úorig_valuesr±   r   Úfuncs	           €r*   Únew_funcÚ&_datetimelike_compat.<locals>.new_func‰  sy   ø€ ð ˆà—|‘|×(Ñ(¨DÑ0ˆÞ˜D™LÜ˜“<ˆDá�fÐL 4¸TÑLÀVÑLˆæÜ" 6×+<Ñ+<ÌÑNˆFÞØÑ'Ð'Ð'Ü2°6ÀÓS�àˆr,   ©rL   r„   rp   r…   rq   rb   rt   únpt.NDArray[np.bool_] | NonerZ   )rÏ   rÐ   s   ` r*   Ú_datetimelike_compatrÔ   ƒ  s`   ø€ ô ‡_‚_�TÓð  $ØØ-1ñØðð ðð ð	ð
 +÷ó ðô0 ”�8ÓÐr,   c                ó2  • U R                   R                  S;   a  U R                  S5      n [        U R                   5      nU R                  S:X  a  U$ Uc  U$ U R
                  SU U R
                  US-   S -   n[        R                  " X2U R                   S9$ )aQ  
Return the missing value for `values`.

Parameters
----------
values : ndarray
axis : int or None
    axis for the reduction, required if values.ndim > 1.

Returns
-------
result : scalar or ndarray
    For 1-D values, returns a scalar of the correct missing type.
    For 2-D values, returns a 1-D array where each element is missing.
Úiufcbr·   é   Nr¼   )r4   r¨   rÃ   r   ÚndimÚshaper–   Úfull)rL   rp   r¢   Úresult_shapes       r*   ry   ry   ¥  sˆ   € ð" ‡|�|×Ñ˜GÓ#Ø—‘˜yÓ)ˆÜ# F§L¡LÓ1€Jà‡{�{�aÓØÐØ	‰ØÐà—|‘| E TÐ*¨V¯\©\¸$À¹(¸*Ð-EÑEˆä�wŠw�|°v·|±|ÑDÐDr,   c                ón   ^ • [         R                  " T 5      SS.SU 4S jjj5       n[        [        U5      $ )z�
NumPy operations on C-contiguous ndarrays with axis=1 can be
very slow if axis 1 >> axis 0.
Operate row-by-row and concatenate the results.
N©rp   c          	     ó  >• US:X  að  U R                   S:X  aà  U R                  S   (       aÌ  U R                  S   S-  U R                  S   :”  a©  U R                  [        [
        4;  a�  [        U 5      nUR                  S5      bC  UR                  S5      n[        [        U5      5       Vs/ s H  nT" X5   4SXE   0UD6PM     nnOU Vs/ s H  nT" U40 UD6PM     nn[        R                  " U5      $ T" U 4SU0UD6$ s  snf s  snf )Nr×   é   ÚC_CONTIGUOUSéè  r   rt   rp   )rØ   ÚflagsrÙ   r4   r�   rb   Úlistrx   r{   Úrangeru   r–   Úarray)	rL   rp   rS   Úarrsrt   ÚiÚresultsÚxrÏ   s	           €r*   ÚnewfuncÚ&maybe_operate_rowwise.<locals>.newfuncË  s  ø€ ð �A‹IØ—‘˜qÓ Ø—‘˜^×,ð —‘˜a‘ 4Ñ'¨6¯<©<¸©?Ó:Ø—‘¤V¬T NÓ2ä˜“<ˆDØ�z‰z˜&Ó!Ñ-Ø—z‘z &Ó)�äCHÌÈTËÔCSóÚCS¸a‘D˜™Ñ9 t¡wÐ9°&Ô9ÑCSð ð �ñ 7;Ó;²d°™4 Ñ, VÔ,±d�Ð;Ü—8’8˜GÓ$Ð$á�FÑ0 Ð0¨Ñ0Ð0ùòùò <s   Â-DÃD)rL   r„   rp   r…   rZ   )rÏ   rê   s   ` r*   Úmaybe_operate_rowwiserì   Ä  s7   ø€ ô ‡_‚_�TÓØ>B÷ 1ñ 1ó ð1ô, ”�7ÓÐr,   rË   c               ó6  • U R                   R                  S;   a  Uc  U R                  U5      $ U R                   R                  S:X  a  [        S5      e[	        XSUS9u  pU R                   [
        :X  a  U R                  [        5      n U R                  U5      $ )a¿  
Check if any elements along an axis evaluate to True.

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : bool

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, 2])
>>> nanops.nanany(s.values)
np.True_

>>> from pandas.core import nanops
>>> s = pd.Series([np.nan])
>>> nanops.nanany(s.values)
np.False_
Úiubr¾   z0datetime64 type does not support operation 'any'F©r¢   rt   )r4   r¨   rM   rP   r²   r�   rÃ   rb   ©rL   rp   rq   rt   Ú_s        r*   Únananyrò   å  s‡   € ðD ‡|�|×Ñ˜EÓ! d¡lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÓäÐJÓKÐKä˜F°uÀ4ÑH�I€Fð ‡|�|”vÓØ—‘œtÓ$ˆð �:‰:�dÓÐr,   c               ó6  • U R                   R                  S;   a  Uc  U R                  U5      $ U R                   R                  S:X  a  [        S5      e[	        XSUS9u  pU R                   [
        :X  a  U R                  [        5      n U R                  U5      $ )aÅ  
Check if all elements along an axis evaluate to True.

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : bool

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, 2, np.nan])
>>> nanops.nanall(s.values)
np.True_

>>> from pandas.core import nanops
>>> s = pd.Series([1, 0])
>>> nanops.nanall(s.values)
np.False_
rî   r¾   z0datetime64 type does not support operation 'all'Trï   )r4   r¨   ÚallrP   r²   r�   rÃ   rb   rð   s        r*   Únanallrõ     s‡   € ðD ‡|�|×Ñ˜EÓ! d¡lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÓäÐJÓKÐKä˜F°tÀ$ÑG�I€Fð ‡|�|”vÓØ—‘œtÓ$ˆð �:‰:�dÓÐr,   ÚM8)rp   rq   rs   rt   c               ó$  • U R                   n[        XSUS9u  p[        U5      nUR                  S:X  a  UnO4UR                  S:X  a$  [        R                   " [        R
                  5      nU R                  XS9n[        XqX@R                  US9nU$ )a�  
Sum the elements along an axis ignoring NaNs

Parameters
----------
values : ndarray[dtype]
axis : int, optional
skipna : bool, default True
min_count: int, default 0
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : dtype

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, 2, np.nan])
>>> nanops.nansum(s.values)
np.float64(3.0)
r   rï   rW   rÁ   r¼   ©rs   )	r4   r²   r¹   r¨   r–   r·   ÚsumÚ_maybe_null_outrÙ   )rL   rp   rq   rs   rt   r4   Ú	dtype_sumÚthe_sums           r*   r�   r�   U  s~   € ðD �L‰L€EÜ˜v¸!À$ÑG�L€FÜ˜uÓ%€IØ‡z�z�SÓØ‰	Ø	�‰�sÓ	Ü—H’HœRŸZ™ZÓ(ˆ	à�j‰j˜ˆjÐ/€GÜ˜g¨T·<±<È9ÑU€Gà€Nr,   c                óZ  • [        U [        R                  5      (       aC  U R                  S5      R	                  UR
                  5      n UR                  US9n[        X'   U $ UR                  5       (       a3  [        R                  " [        5      R	                  UR
                  5      $ U $ )Nr«   rÝ   )	r•   r–   r—   rÃ   r­   r4   rM   r
   r    )r   rp   rt   rÎ   Ú	axis_masks        r*   rÍ   rÍ   …  s„   € ô �&œ"Ÿ*™*×%Ñ%à—‘˜tÓ$×)Ñ)¨+×*;Ñ*;Ó<ˆØ—H‘H $�HÐ'ˆ	Ü ˆÑð €Mð 
�‰�‰Ü�xŠxœ‹~×"Ñ" ;×#4Ñ#4Ó5Ð5Ø€Mr,   c               óª  • U R                   [        :X  a  [        U 5      S:”  a  Uc  [        U SS XS9  U R                   n[	        XSUS9u  p[        U5      n[        R                   " [        R                  5      nUR                  S;   a%  [        R                   " [        R                  5      nOIUR                  S;   a%  [        R                   " [        R                  5      nOUR                  S:X  a  UnUn[        U R                  X1US	9nU R                  XS	9n[        U5      nUb|  [        US
S5      (       aj  [        [        R                  U5      n[        R                   " SS9   X‡-  n	SSS5        US:H  n
U
R#                  5       (       a  [        R$                  W	U
'   W	$ US:”  a  X‡-  O[        R$                  n	U	$ ! , (       d  f       NY= f)aÇ  
Compute the mean of the element along an axis ignoring NaNs

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
float
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, 2, np.nan])
>>> nanops.nanmean(s.values)
np.float64(1.5)
rá   Nro   r   rï   r§   ÚiurW   r¼   rØ   FÚignore)rô   )r4   r�   ru   r�   r²   r¹   r–   r·   r¨   Ú_get_countsrÙ   rù   Ú_ensure_numericr†   r   r—   ÚerrstaterM   rH   )rL   rp   rq   rt   r4   rû   Údtype_countÚcountrü   Úthe_meanÚct_masks              r*   r�   r�   •  so  € ðB ‡|�|”vÓ¤# f£+°Ó"5¸$¹,ä��u˜� DÒ8à�L‰L€EÜ˜v¸!À$ÑG�L€FÜ˜uÓ%€IÜ—(’(œ2Ÿ:™:Ó&€Kð ‡z�z�TÓÜ—H’HœRŸZ™ZÓ(‰	Ø	�‰�tÓ	Ü—H’HœRŸZ™ZÓ(‰	Ø	�‰�sÓ	Øˆ	Øˆä˜Ÿ™ d¸ÑD€EØ�j‰j˜ˆjÐ/€GÜ˜gÓ&€GàÑœG G¨V°U×;Ñ;Ü”R—Z‘Z Ó'ˆÜ�[Š[˜XÓ&à‘ˆH÷ 'ð ˜1‘*ˆØ�;‰;�=‰=Ü "§¡ˆH�WÑð €Oð ',¨a£i�7’?´R·V±Vˆà€O÷ 'Õ&ús   Å,GÇ
Gc               óÌ  ^• U R                   R                  S:H  =(       a    USL nSSU4S jjjnU R                   n[        U TUSS9u  pU R                   R                  S:w  aQ  U R                   [        :X  a+  [        R
                  " U 5      nUS;   a  [        SU  S35      e U R                  S5      n U(       d@  Ub=  U R                  R                  (       d  U R                  5       n [        R                  X'   U R                  n	U R                   S	:”  aë  Ubè  U	(       aÊ  T(       d  [        R"                  " XQU 5      n
Oá[$        R&                  " 5          [$        R(                  " S
S[*        5        U R,                  S	   S	:X  a  US:X  d  U R,                  S   S	:X  a0  US	:X  a*  [        R.                  " [        R0                  " U 5      SS9n
O[        R.                  " XS9n
SSS5        O6[3        U R,                  U5      n
OU	(       a  U" X5      O[        R                  n
[5        W
U5      $ ! [         a  n[        [        U5      5      UeSnAff = f! , (       d  f       NA= f)aæ  
Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float | ndarray
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 2, 2])
>>> nanops.nanmedian(s.values)
2.0

>>> s = pd.Series([np.nan, np.nan, np.nan])
>>> nanops.nanmedian(s.values)
nan
rW   Nc                ó„  >• Uc  [        U 5      nOU) nT(       d%  UR                  5       (       d  [        R                  $ [        R
                  " 5          [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " X   5      nS S S 5        U$ ! , (       d  f       W$ = f)Nr  úAll-NaN slice encounteredzMean of empty slice)	r    rô   r–   rH   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningÚ	nanmedian)ré   Ú_maskÚresrq   s      €r*   Ú
get_medianÚnanmedian.<locals>.get_medianý  s‘   ø€ Ø‰=Ü˜!“H‰Eà�FˆEÞ˜eŸi™iŸk™kÜ—6‘6ˆMÜ×$Ò$Õ&ä×#Ò#ØÐ5´~ôô ×#Ò# HÐ.CÄ^ÔTÜ—,’,˜q™xÓ(ˆC÷ 'ð ˆ
÷ 'Ô&ð ˆ
ús   ÁAB0Â0
B?)rt   r¢   ©ÚstringÚmixedzCannot convert ú to numericr’   r×   r  r  r   T)ÚkeepdimsrÝ   r&   )ré   r„   )r4   r¨   r²   r�   r   Úinfer_dtyperP   rÃ   rQ   Ústrrâ   Ú	writeabler®   r–   rH   rw   rØ   Úapply_along_axisr  r  r  r  rÙ   r  ÚsqueezeÚ_get_empty_reduction_resultrÉ   )rL   rp   rq   rt   Úusing_nan_sentinelr  r4   ÚinferredÚerrÚnotemptyr  s     `        r*   r  r  Ú  sê  ø€ ðB  Ÿ™×*Ñ*¨cÑ1×B°d¸d°lÐ÷ñ ð  �L‰L€EÜ˜v v°DÀTÑJ�L€FØ‡|�|×Ñ˜CÓØ�<‰<œ6Ó!ä—’ vÓ.ˆHØÐ.Ó.Ü /°&°¸Ð EÓFÐFð	/Ø—]‘] 4Ó(ˆFö  $Ñ"2Ø�|‰|×%×%Ø—[‘[“]ˆFÜ—v‘vˆ‰à�{‰{€Hð
 ‡{�{�Qƒ˜4Ñ+æÞÜ×)Ò)¨*¸FÓC‘ô ×,Ò,Õ.ä×+Ò+Ø Ð"=¼~ôð Ÿ™ Q™¨1Ó,°¸³ØŸ™ Q™¨1Ó,°¸³ô !Ÿlšl¬2¯:ª:°fÓ+=ÈÑM™ä Ÿlšl¨6Ñ=˜÷ /Ð.ô$ .¨f¯l©l¸DÓA‰Cö +3‰j˜Ô&¼¿¹ˆÜ˜˜eÓ$Ð$øôY ó 	/äœC ›HÓ%¨3Ð.ûð	/ú÷* /Õ.ús%   Â$H. ÅBIÈ.
IÈ8IÉIÉ
I#c                óþ   • [         R                  " U 5      n[         R                  " [        U 5      5      n[         R                  " X#U:g     [         R
                  S9nUR                  [         R                  5        U$ )zˆ
The result from a reduction on an empty ndarray.

Parameters
----------
shape : Tuple[int, ...]
axis : int

Returns
-------
np.ndarray
r¼   )r–   rå   Úarangeru   Úemptyr·   ÚfillrH   )rÙ   rp   ÚshpÚdimsÚrets        r*   r  r  F  sS   € ô  �(Š(�5‹/€CÜ�9Š9”S˜“ZÓ €DÜ
�(Š(�3˜t‘|Ñ$¬B¯J©JÑ
7€CØ‡H�HŒR�V‰VÔØ€Jr,   c                ó¬  • [        XX$S9nXTR                  U5      -
  n[        U5      (       a(  XS::  a   [        R                  n[        R                  nXV4$ [        [        R                  U5      nXS:*  nUR                  5       (       aJ  [        R                  " Xa[        R                  5        [        R                  " XQ[        R                  5        XV4$ )aî  
Get the count of non-null values along an axis, accounting
for degrees of freedom.

Parameters
----------
values_shape : Tuple[int, ...]
    shape tuple from values ndarray, used if mask is None
mask : Optional[ndarray[bool]]
    locations in values that should be considered missing
axis : Optional[int]
    axis to count along
ddof : int
    degrees of freedom
dtype : type, optional
    type to use for count

Returns
-------
count : int, np.nan or np.ndarray
d : int, np.nan or np.ndarray
r¼   )	r  r2   r   r–   rH   r   r—   rM   r¯   )Úvalues_shapert   rp   Úddofr4   r  Úds          r*   Ú_get_counts_nanvarr/  ]  s�   € ô: ˜¨DÑ>€EØ—
‘
˜4Ó Ñ €Aô �‡�Ø‹=ô —F‘FˆEÜ—‘ˆAð ˆ8€Oô ”R—Z‘Z Ó'ˆØ‰}ˆØ�8‰8�:‰:Ü�JŠJ�q¤§¡Ô'Ü�JŠJ�u¤B§F¡FÔ+Øˆ8€Or,   r×   ©r-  ©rp   rq   r-  rt   c          
     ó*  • U R                   R                  S:X  a8  [        R                  " U R                   5      S   nU R	                  SU S35      n U R                   n[        XUS9u  p[        R                  " [        XX#US95      n[        Xv5      $ )a_  
Compute the standard deviation along given axis while ignoring NaNs

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
ddof : int, default 1
    Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
    where N represents the number of elements.
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 2, 3])
>>> nanops.nanstd(s.values)
1.0
r¾   r   zm8[Ú])rt   r1  )	r4   r¨   r–   rÅ   r­   r²   ÚsqrtÚnanvarrÉ   )rL   rp   rq   r-  rt   rÈ   Ú
orig_dtyper   s           r*   Únanstdr7  �  s   € ðH ‡|�|×Ñ˜CÓÜ×Ò §¡Ó-¨aÑ0ˆØ—‘˜s 4 &¨˜]Ó+ˆà—‘€JÜ˜v°DÑ9�L€Fä�WŠW”V˜F°fÈdÑSÓT€FÜ˜Ó,Ð,r,   Úm8c          	     ó†  • U R                   n[        XU5      nUR                  S;   a'  U R                  S5      n Ub  [        R
                  X'   O;UR                  S:X  a+  [        U R                  XX4S9[        U R                  XX4S9-   $ U R                   R                  S:X  a$  [        U R                  XAX0R                   5      u  pgO[        U R                  XAU5      u  pgU(       a*  Ub'  U R                  5       n [        R                  " XS5        [        U R                  U[        R                  S95      U-  nUb  [        R                   " X�5      n[        X€-
  S-  5      n	Ub  [        R                  " X”S5        U	R                  U[        R                  S9U-  n
UR                  S:X  a  U
R                  US	S
9n
U
$ )aU  
Compute the variance along given axis while ignoring NaNs

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
ddof : int, default 1
    Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
    where N represents the number of elements.
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 2, 3])
>>> nanops.nanvar(s.values)
1.0
r   r’   Úcr1  rW   r   )rp   r4   rß   FrÀ   )r4   r©   r¨   rÃ   r–   rH   r5  ÚrealÚimagr/  rÙ   r®   r¯   r  rù   r·   Úexpand_dims)rL   rp   rq   r-  rt   r4   r  r.  ÚavgÚsqrr   s              r*   r5  r5  ¾  s�  € ðJ �L‰L€EÜ˜6¨4Ó0€DØ‡z�z�TÓØ—‘˜tÓ$ˆØÑÜŸ6™6ˆF‰LøØ	�‰�sÓ	ô Ø�K‰K˜d¸ñ
ä�6—;‘; T¸tÑOñPð 	Pð ‡|�|×Ñ˜CÓÜ% f§l¡l°DÀÇlÁlÓS‰ˆˆqä% f§l¡l°DÀÓE‰ˆæ�$Ñ"Ø—‘“ˆÜ
�
Š
�6 Ô#ô ˜&Ÿ*™*¨$´b·j±j˜*ÐAÓ
BÀUÑ
J€CØÑÜ�nŠn˜SÓ'ˆä
˜3™<¨AÑ-Ó
.€CØÑÜ
�
Š
�3˜aÔ Ø�W‰W˜$¤b§j¡jˆWÐ1°AÑ5€Fð
 ‡z�z�SÓØ—‘˜u¨5�Ð1ˆØ€Mr,   c               ó  • [        XX#US9  [        XU5      nU R                  R                  S;  a  U R	                  S5      n U(       d(  Ub%  UR                  5       (       a  [        R                  $ [        R                  " [        R                  5      nU R                  R                  S:X  a  U R                  n[        U R                  XAX55      u  pg[        XX#US9n[        R                  " U5      [        R                  " U5      -  $ )a…  
Compute the standard error in the mean along given axis while ignoring NaNs

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
ddof : int, default 1
    Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
    where N represents the number of elements.
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float64
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 2, 3])
>>> nanops.nansem(s.values)
 np.float64(0.5773502691896258)
r1  Úfcr’   rW   )r5  r©   r4   r¨   rÃ   rM   r–   rH   r·   r/  rÙ   r4  )	rL   rp   rq   r-  rt   r  r  rñ   Úvars	            r*   ÚnansemrC    sÂ   € ôL ˆ6 V¸TÒBä˜6¨4Ó0€Dà‡|�|×Ñ Ó$Ø—‘˜tÓ$ˆæ�dÑ&¨4¯8©8¯:©:Ü�v‰vˆä—(’(œ2Ÿ:™:Ó&€KØ‡|�|×Ñ˜CÓØ—l‘lˆÜ! &§,¡,°¸DÓN�H€EÜ
�¨6À4Ñ
H€Cä�7Š7�3‹<œ"Ÿ'š' %›.Ñ(Ð(r,   c                óf   ^ ^• [        ST  3S9[        S SS S.       SUU 4S jjj5       5       nU$ )NrH   )rl   TrË   c               óØ   >• U R                   S:X  a  [        X5      $ U R                  n[        XTUS9u  p[	        U T5      " U5      n[        XQX0R                  UR                  S;   S9nU$ )Nr   ©r£   rt   r§   )r±   )rw   ry   r4   r²   r†   rú   rÙ   r¨   )rL   rp   rq   rt   r4   r   r£   Úmeths         €€r*   Ú	reductionÚ_nanminmax.<locals>.reductionK  sp   ø€ ð �;‰;˜!ÓÜ$ VÓ2Ð2à—‘ˆÜ"Ø¨>Àñ
‰ˆô ˜ Ô& tÓ,ˆÜ Ø˜$§¡¸5¿:¹:ÈÑ;Mñ
ˆð ˆr,   rÒ   )ri   rÔ   )rG  r£   rH  s   `` r*   Ú
_nanminmaxrJ  J  sf   ù€ Ü˜c $ ˜LÑ)Üð  $ØØ-1ñØðð ðð ð	ð
 +÷ð ó ó *ðð( Ðr,   Úminr�   )r£   Úmaxú-infc               ó\   • [        U SSUS9u  pU R                  U5      n[        XAX25      nU$ )a‚  
Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : int or ndarray[int]
    The index/indices  of max value in specified axis or -1 in the NA case

Examples
--------
>>> from pandas.core import nanops
>>> arr = np.array([1, 2, 3, np.nan, 4])
>>> nanops.nanargmax(arr)
np.int64(4)

>>> arr = np.array(range(12), dtype=np.float64).reshape(4, 3)
>>> arr[2:, 2] = np.nan
>>> arr
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.],
       [ 6.,  7., nan],
       [ 9., 10., nan]])
>>> nanops.nanargmax(arr, axis=1)
array([2, 2, 1, 1])
TrM  rF  )r²   ÚargmaxÚ_maybe_arg_null_out©rL   rp   rq   rt   r   s        r*   Ú	nanargmaxrR  h  ó8   € ôL ˜v t¸FÈÑN�L€FØ�]‰]˜4Ó €Fô ! ¨tÓ<€FØ€Mr,   c               ó\   • [        U SSUS9u  pU R                  U5      n[        XAX25      nU$ )a�  
Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : int or ndarray[int]
    The index/indices of min value in specified axis or -1 in the NA case

Examples
--------
>>> from pandas.core import nanops
>>> arr = np.array([1, 2, 3, np.nan, 4])
>>> nanops.nanargmin(arr)
np.int64(0)

>>> arr = np.array(range(12), dtype=np.float64).reshape(4, 3)
>>> arr[2:, 0] = np.nan
>>> arr
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.],
       [nan,  7.,  8.],
       [nan, 10., 11.]])
>>> nanops.nanargmin(arr, axis=1)
array([0, 0, 1, 1])
Tr�   rF  )r²   ÚargminrP  rQ  s        r*   Ú	nanargminrV  –  rS  r,   c               ó$  • [        XU5      nU R                  R                  S:w  a(  U R                  S5      n [	        U R
                  X15      nO[	        U R
                  X1U R                  S9nU(       a+  Ub(  U R                  5       n [        R                  " XS5        O/U(       d(  Ub%  UR                  5       (       a  [        R                  $ [        R                  " SSS9   U R                  U[        R                  S9U-  nSSS5        Ub  [        R                  " WU5      nU W-
  nU(       a  Ub  [        R                  " XcS5        US-  nXv-  nUR                  U[        R                  S9n	UR                  U[        R                  S9n
[        R                  " U 5      R!                  US	S
9n[        R"                  " U	R                  5      R$                  nXË-  S-  U-  nXË-  S-  U-  n['        X�5      n	['        X®5      n
[        R                  " SSS9   XDS-
  S-  -  US-
  -  X©S-  -  -  nSSS5        U R                  nUR                  S:X  a  WR                  USS9n[)        W[        R*                  5      (       a2  [        R,                  " U	S:H  SU5      n[        R                  XôS:  '   U$ U	S:X  a  UR/                  S5      OUnUS:  a  [        R                  $ U$ ! , (       d  f       GNð= f! , (       d  f       NÎ= f)a€  
Compute the sample skewness.

The statistic computed here is the adjusted Fisher-Pearson standardized
moment coefficient G1. The algorithm computes this coefficient directly
from the second and third central moment.

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float64
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 1, 2])
>>> nanops.nanskew(s.values)
np.float64(1.7320508075688787)
rW   r’   r¼   Nr   r  ©ÚinvalidÚdividerß   ç        ©Úinitialé   r×   g      à?g      ø?FrÀ   )r©   r4   r¨   rÃ   r  rÙ   r®   r–   r¯   rM   rH   r  rù   r·   r=  ÚabsrL  ÚfinfoÚepsÚ_zero_out_fperrr•   r—   r°   r2   )rL   rp   rq   rt   r  ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3Úmax_absra  Úconstant_tolerance2Úconstant_tolerance3r   r4   s                    r*   Únanskewrl  Ä  s€  € ôJ ˜6¨4Ó0€DØ‡|�|×Ñ˜CÓØ—‘˜tÓ$ˆÜ˜FŸL™L¨$Ó5‰ä˜FŸL™L¨$¸F¿L¹LÑIˆæ�$Ñ"Ø—‘“ˆÜ
�
Š
�6 Õ#Þ˜Ñ(¨T¯X©X¯Z©ZÜ�v‰vˆä	�Š˜X¨hÓ	7Ø�z‰z˜$¤b§j¡jˆzÐ1°EÑ9ˆ÷ 
8àÑÜ�~Š~˜d DÓ)ˆà˜‰}€HÞ�$Ñ"Ü
�
Š
�8 1Ô%Ø˜!‘€IØÑ$€IØ	�‰�t¤2§:¡:ˆÐ	.€BØ	�‰�t¤2§:¡:ˆÐ	.€Bô �fŠf�V‹n× Ñ  ¨sÐ Ð3€GÜ
�(Š(�2—8‘8Ó
×
 Ñ
 €CØ™M¨aÑ/°5Ñ8ÐØ™M¨aÑ/°5Ñ8ÐÜ	˜Ó	1€BÜ	˜Ó	1€Bä	�Š˜X¨hÓ	7Ø 1™9¨Ñ,Ñ,°¸±	Ñ:¸rÈÁG¹|ÑLˆ÷ 
8ð �L‰L€EØ‡z�z�SÓØ—‘˜u¨5�Ð1ˆä�&œ"Ÿ*™*×%Ñ%Ü—’˜" ™' 1 fÓ-ˆÜŸF™Fˆ�q‰yÑð €Mð	 #%¨£'�—‘˜A”¨vˆØ�1‹9Ü—6‘6ˆMà€M÷I 
8Ö	7ú÷* 
8Õ	7ús   Ã$"K/È LË/
K>Ì
Lc               ó"  • [        XU5      nU R                  R                  S:w  a(  U R                  S5      n [	        U R
                  X15      nO[	        U R
                  X1U R                  S9nU(       a+  Ub(  U R                  5       n [        R                  " XS5        O/U(       d(  Ub%  UR                  5       (       a  [        R                  $ [        R                  " SSS9   U R                  U[        R                  S9U-  nSSS5        Ub  [        R                  " WU5      nU W-
  nU(       a  Ub  [        R                  " XcS5        US-  nUS-  nUR                  U[        R                  S9n	UR                  U[        R                  S9n
[        R                  " U 5      R!                  US	S
9n[        R"                  " U	R                  5      R$                  nXË-  S-  U-  nXË-  S-  U-  n['        X�5      n	['        X®5      n
[        R                  " SSS9   SUS-
  S-  -  US-
  US-
  -  -  nXDS-   -  US-
  -  U
-  nUS-
  US-
  -  U	S-  -  nSSS5        [)        W[        R*                  5      (       d7  US:  a  [        R                  $ US:X  a  U R                  R-                  S5      $ [        R                  " SSS9   WU-  W-
  nSSS5        U R                  nUR                  S:X  a  WR                  USS9n[)        W[        R*                  5      (       a1  [        R.                  " US:H  SU5      n[        R                  UUS:  '   U$ ! , (       d  f       GN]= f! , (       d  f       GN= f! , (       d  f       N°= f)al  
Compute the sample excess kurtosis

The statistic computed here is the adjusted Fisher-Pearson standardized
moment coefficient G2, computed directly from the second and fourth
central moment.

Parameters
----------
values : ndarray
axis : int, optional
skipna : bool, default True
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
result : float64
    Unless input is a float array, in which case use the same
    precision as the input array.

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, np.nan, 1, 3, 2])
>>> nanops.nankurt(s.values)
np.float64(-1.2892561983471076)
rW   r’   r¼   Nr   r  rX  rß   r[  r\  é   r^  r×   FrÀ   )r©   r4   r¨   rÃ   r  rÙ   r®   r–   r¯   rM   rH   r  rù   r·   r=  r_  rL  r`  ra  rb  r•   r—   r2   r°   )rL   rp   rq   rt   r  rc  rd  re  Ú	adjusted4rg  Úm4ri  ra  rj  Úconstant_tolerance4ÚadjÚ	numeratorÚdenominatorr   r4   s                       r*   Únankurtru    sù  € ôJ ˜6¨4Ó0€DØ‡|�|×Ñ˜CÓØ—‘˜tÓ$ˆÜ˜FŸL™L¨$Ó5‰ä˜FŸL™L¨$¸F¿L¹LÑIˆæ�$Ñ"Ø—‘“ˆÜ
�
Š
�6 Õ#Þ˜Ñ(¨T¯X©X¯Z©ZÜ�v‰vˆä	�Š˜X¨hÓ	7Ø�z‰z˜$¤b§j¡jˆzÐ1°EÑ9ˆ÷ 
8àÑÜ�~Š~˜d DÓ)ˆà˜‰}€HÞ�$Ñ"Ü
�
Š
�8 1Ô%Ø˜!‘€IØ˜1‘€IØ	�‰�t¤2§:¡:ˆÐ	.€BØ	�‰�t¤2§:¡:ˆÐ	.€Bô0 �fŠf�V‹n× Ñ  ¨sÐ Ð3€GÜ
�(Š(�2—8‘8Ó
×
 Ñ
 €CØ™M¨aÑ/°5Ñ8ÐØ™M¨aÑ/°5Ñ8ÐÜ	˜Ó	1€BÜ	˜Ó	1€Bä	�Š˜X¨hÓ	7Ø�5˜1‘9 Ñ"Ñ" u¨q¡y°U¸Q±YÑ&?Ñ@ˆØ Q™YÑ'¨5°1©9Ñ5¸Ñ:ˆ	Ø˜q‘y U¨Q¡YÑ/°"°a±%Ñ7ˆ÷ 
8ô
 �k¤2§:¡:×.Ñ.ð �1‹9Ü—6‘6ˆMØ˜!ÓØ—<‘<×$Ñ$ QÓ'Ð'ä	�Š˜X¨hÓ	7Ø˜[Ñ(¨3Ñ.ˆ÷ 
8ð �L‰L€EØ‡z�z�SÓØ—‘˜u¨5�Ð1ˆä�&œ"Ÿ*™*×%Ñ%Ü—’˜+¨Ñ*¨A¨vÓ6ˆÜŸF™Fˆˆu�q‰yÑà€M÷E 
8Ö	7ú÷T 
8Ö	7ú÷ 
8Õ	7ús$   Ã$"MÈ!9M.Ë	N Í
M+Í.
M=Î 
Nc               ó¢   • [        XU5      nU(       a  Ub  U R                  5       n SX'   U R                  U5      n[        XQX@R                  US9$ )a˜  
Parameters
----------
values : ndarray[dtype]
axis : int, optional
skipna : bool, default True
min_count: int, default 0
mask : ndarray[bool], optional
    nan-mask if known

Returns
-------
Dtype
    The product of all elements on a given axis. ( NaNs are treated as 1)

Examples
--------
>>> from pandas.core import nanops
>>> s = pd.Series([1, 2, 3, np.nan])
>>> nanops.nanprod(s.values)
np.float64(6.0)
r×   rø   )r©   r®   Úprodrú   rÙ   )rL   rp   rq   rs   rt   r   s         r*   rŽ   rŽ   ”  sS   € ô@ ˜6¨4Ó0€Dæ�$Ñ"Ø—‘“ˆØˆ‰Ø�[‰[˜Ó€Fô Ø�dŸL™L°Iñð r,   c                ó²  • Uc  U $ Ub  [        U SS5      (       dP  U(       a   UR                  5       (       a  [        S5      eU(       d   UR                  5       (       a  [        S5      eU $ U(       a/  UR                  U5      R                  5       (       a  [        S5      eU(       d/  UR                  U5      R                  5       (       a  [        S5      eU $ )NrØ   FzEncountered all NA valuesz)Encountered an NA value with skipna=False)r†   rô   rQ   rM   )r   rp   rt   rq   s       r*   rP  rP  Á  s«   € ð �|Øˆà�|œ7 6¨6°5×9Ñ9Þ�d—h‘h—j‘jÜÐ8Ó9Ð9Þ˜DŸH™HŸJ™JÜÐHÓIÐIð
 €Mö	 
�D—H‘H˜T“N×&Ñ&×(Ñ(ÜÐ4Ó5Ð5Þ˜Ÿ™ ›×*Ñ*×,Ñ,ÜÐDÓEÐEØ€Mr,   c                óL  • UcH  Ub  UR                   UR                  5       -
  nO[        R                  " U 5      nUR	                  U5      $ Ub"  UR
                  U   UR                  U5      -
  nOX   n[        U5      (       a  UR	                  U5      $ UR                  USS9$ )a}  
Get the count of non-null values along an axis

Parameters
----------
values_shape : tuple of int
    shape tuple from values ndarray, used if mask is None
mask : Optional[ndarray[bool]]
    locations in values that should be considered missing
axis : Optional[int]
    axis to count along
dtype : type, optional
    type to use for count

Returns
-------
count : scalar or array
FrÀ   )rw   rù   r–   rw  r2   rÙ   r   rÃ   )r,  rt   rp   r4   Únr  s         r*   r  r  ×  s•   € ð0 �|ØÑØ—	‘	˜DŸH™H›JÑ&‰Aä—’˜Ó%ˆAØ�z‰z˜!‹}ÐàÑØ—
‘
˜4Ñ  4§8¡8¨D£>Ñ1‰àÑ"ˆä�%×ÑØ�z‰z˜%Ó Ð Ø�<‰<˜ Eˆ<Ð*Ð*r,   c                ó  • Uc  US:X  a  U $ UGb  [        U [        R                  5      (       aû  Ub(  UR                  U   UR	                  U5      -
  U-
  S:  nO-X1   U-
  S:  nUSU X1S-   S -   n[        R
                  " Xx5      n[        R                  " U5      (       a†  U(       a
  [        X'   U $ [        U 5      (       aa  [        R                  " U 5      (       a  U R                  S5      n O [        U 5      (       d  U R                  SSS9n [        R                  X'   U $ SX'   U $ U [        LaQ  [        X2U5      (       a@  [        U SS5      n	[        U	5      (       a  U	R!                  S	5      n U $ [        R                  n U $ )
za
Returns
-------
Dtype
    The product of all elements on a given axis. ( NaNs are treated as 1)
Nr   r×   Úc16r’   FrÀ   r4   rH   )r•   r–   r—   rÙ   rù   Úbroadcast_torM   r
   r   ÚiscomplexobjrÃ   r   rH   r   Úcheck_below_min_countr†   r2   )
r   rp   rt   rÙ   rs   r±   Ú	null_maskÚbelow_countÚ	new_shapeÚresult_dtypes
             r*   rú   rú      sr  € ð �|˜	 Q›àˆàÒœJ v¬r¯z©z×:Ñ:ØÑØŸ™ DÑ)¨D¯H©H°T«NÑ:¸YÑFÈ!ÑK‰Ið  ™+¨	Ñ1°AÑ5ˆKØ˜e˜t˜ u°A©X¨ZÐ'8Ñ8ˆIÜŸš¨Ó?ˆIä�6Š6�)×ÑÞä$(�Ñ!ð& €Mô% " &×)Ñ)Ü—?’? 6×*Ñ*Ø#Ÿ]™]¨5Ó1‘FÜ'¨×/Ñ/Ø#Ÿ]™]¨4°e˜]Ð<�FÜ$&§F¡F�Ñ!ð €Mð %)�Ñ!ð €Mð 
”sÒ	Ü  ¨i×8Ñ8Ü" 6¨7°DÓ9ˆLÜ˜l×+Ñ+à%×*Ñ*¨5Ó1�ð €Mô Ÿ™�à€Mr,   c                óŠ   • US:”  a=  Uc  [         R                  " U 5      nOUR                  UR                  5       -
  nX2:  a  gg)a�  
Check for the `min_count` keyword. Returns True if below `min_count` (when
missing value should be returned from the reduction).

Parameters
----------
shape : tuple
    The shape of the values (`values.shape`).
mask : ndarray[bool] or None
    Boolean numpy array (typically of same shape as `shape`) or None.
min_count : int
    Keyword passed through from sum/prod call.

Returns
-------
bool
r   TF)r–   rw  rw   rù   )rÙ   rt   rs   Ú	non_nullss       r*   r  r  4  s=   € ð( �1ƒ}Ø‰<äŸš ›‰IàŸ	™	 D§H¡H£JÑ.ˆIØÓ ØØr,   c                ó  • [        U [        R                  5      (       a/  [        R                  " [        R                  " U 5      U:  SU 5      $ [        R                  " U 5      U:  a  U R
                  R                  S5      $ U $ ©Nr   )r•   r–   r—   r°   r_  r4   r2   )ÚargÚtols     r*   rb  rb  S  sZ   € ä�#”r—z‘z×"Ñ"Ü�xŠxœŸš˜s› cÑ)¨1¨cÓ2Ð2ä$&§F¢F¨3£K°#Ó$5ˆs�y‰y�~‰~˜aÓ Ð>¸3Ð>r,   Úpearson)ÚmethodÚmin_periodsc               óJ  • [        U 5      [        U5      :w  a  [        S5      eUc  Sn[        U 5      [        U5      -  nUR                  5       (       d  X   n X   n[        U 5      U:  a  [        R
                  $ [        U 5      n [        U5      n[        U5      nU" X5      $ )z
a, b: ndarrays
z'Operands to nancorr must have same sizer×   )ru   ÚAssertionErrorr    rô   r–   rH   r  Úget_corr_func)ÚaÚbr‹  rŒ  ÚvalidrW   s         r*   Únancorrr“  [  s’   € ô ˆ1ƒv”�Q“ÓÜÐFÓGÐGàÑØˆä�!‹H”u˜Q“xÑ€EØ�9‰9�;‰;Ø‰HˆØ‰Hˆä
ˆ1ƒv�ÓÜ�v‰vˆä˜Ó€AÜ˜Ó€Aä�fÓ€AÙˆQ‹7€Nr,   c                ó®   ^^• U S:X  a  SSK Jm  U4S jnU$ U S:X  a  SSK Jm  U4S jnU$ U S:X  a  S	 nU$ [        U 5      (       a  U $ [	        S
U  S35      e)NÚkendallr   )Ú
kendalltauc                ó   >• T" X5      S   $ r‡  r‹   )r�  r‘  r–  s     €r*   rÏ   Úget_corr_func.<locals>.func�  s   ø€ Ù˜aÓ# AÑ&Ð&r,   Úspearman)Ú	spearmanrc                ó   >• T" X5      S   $ r‡  r‹   )r�  r‘  rš  s     €r*   rÏ   r˜  ˆ  s   ø€ Ù˜Q“? 1Ñ%Ð%r,   rŠ  c                ó4   • [         R                  " X5      S   $ )N©r   r×   )r–   Úcorrcoef)r�  r‘  s     r*   rÏ   r˜  Ž  s   € Ü—;’;˜qÓ$ TÑ*Ð*r,   zUnknown method 'z@', expected one of 'kendall', 'spearman', 'pearson', or callable)Úscipy.statsr–  rš  ÚcallablerQ   )r‹  rÏ   r–  rš  s     @@r*   r�  r�  {  su   ù€ ð �ÓÝ*õ	'ð ˆØ	�:Ó	Ý)õ	&ð ˆØ	�9Ó	ò	+ð ˆÜ	�&×	Ñ	Øˆä
Ø
˜6˜(ð #8ð 	8óð r,   )rŒ  r-  c               óT  • [        U 5      [        U5      :w  a  [        S5      eUc  Sn[        U 5      [        U5      -  nUR                  5       (       d  X   n X   n[        U 5      U:  a  [        R
                  $ [        U 5      n [        U5      n[        R                  " XUS9S   $ )Nz&Operands to nancov must have same sizer×   r0  r�  )ru   rŽ  r    rô   r–   rH   r  Úcov)r�  r‘  rŒ  r-  r’  s        r*   Únancovr£  ›  s•   € ô ˆ1ƒv”�Q“ÓÜÐEÓFÐFàÑØˆä�!‹H”u˜Q“xÑ€EØ�9‰9�;‰;Ø‰HˆØ‰Hˆä
ˆ1ƒv�ÓÜ�v‰vˆä˜Ó€AÜ˜Ó€Aä�6Š6�!˜TÑ" 4Ñ(Ð(r,   c                óø  • [        U [        R                  5      (       aÚ  U R                  R                  S;   a!  U R                  [        R                  5      n U $ U R                  [        :X  aˆ  [        R                  " U 5      nUS;   a  [        SU  S35      e U R                  [        R                  5      n [        R                  " [        R                  " U 5      5      (       d  U R                  n U $  U $ [!        U 5      (       dR  [#        U 5      (       dB  [%        U 5      (       d2  [        U [&        5      (       a  [        SU  S35      e [)        U 5      n U $ U $ ! [        [        4 aF     U R                  [        R                  5      n  U $ ! [         a  n[        SU  S35      UeS nAff = ff = f! [        [        4 a2     [+        U 5      n  U $ ! [         a  n[        SU  S35      UeS nAff = ff = f)Nr¦   r  zCould not convert r  zCould not convert string 'z' to numeric)r•   r–   r—   r4   r¨   rÃ   r·   r�   r   r  rP   Ú
complex128rM   r<  r;  rQ   r   r   r   r  ÚfloatÚcomplex)ré   r!  r"  s      r*   r  r  ·  sÓ  € Ü�!”R—Z‘Z× Ñ Ø�7‰7�<‰<˜5Ó Ø—‘œŸ™Ó$ˆAð< €Hð; �W‰WœÓÜ—’ qÓ)ˆHØÐ.Ó.äÐ"4°Q°C°{Ð CÓDÐDð
Ø—H‘HœRŸ]™]Ó+�ô —v’vœbŸgšg a›j×)Ñ)ØŸ™�Að €Hð; ð: €Hô �q�k‰kœZ¨Ÿ]™]¬j¸¯m©mÜ�aœ×ÑäÐ8¸¸¸<ÐHÓIÐIð	NÜ�a“ˆAð €Hˆ1€Høô- œzÐ*ó RðRØŸ™¤§¡Ó,‘Að( €Høô' "ó Rä#Ð&8¸¸¸;Ð$GÓHÈcÐQûðRúðRûô œ:Ð&ó 	NðNÜ˜A“J‘ð €Høô ó NäÐ"4°Q°C°{Ð CÓDÈ#ÐMûðNúð		NúsT   ÂE ÅF7 ÅF4Å/FÆ
F0ÆF+Æ+F0Æ0F4Æ7G9ÇGÇ
G5Ç G0Ç0G5Ç5G9c          	     ó¨  • [         R                  S[         R                  4[         R                  R                  [         R
                  * [         R                  4[         R                  S[         R                  4[         R                  R                  [         R
                  [         R                  40U   u  p4U R                  R                  S;  d   eU(       ao  [        U R                  R                  [         R                  [         R                  45      (       d,  U R                  5       n[        U5      nX5U'   U" USS9nXGU'   U$ U" U SS9nU$ )zö
Cumulative function with skipna support.

Parameters
----------
values : np.ndarray or ExtensionArray
accum_func : {np.cumprod, np.maximum.accumulate, np.cumsum, np.minimum.accumulate}
skipna : bool

Returns
-------
np.ndarray or ExtensionArray
g      ð?r[  r§   r   rÝ   )r–   ÚcumprodrH   ÚmaximumÚ
accumulaterŸ   ÚcumsumÚminimumr4   r¨   r@   r2   r»   Úbool_r®   r   )rL   Ú
accum_funcrq   Úmask_aÚmask_bÚvalsrt   r   s           r*   Úna_accum_funcr³  Û  sý   € ô 	�
‰
�Sœ"Ÿ&™&�MÜ
�
‰
×Ñ¤§¡ ¬¯©Ð0Ü
�	‰	�CœŸ™�=Ü
�
‰
×Ñ¤§¡¬¯©Ð/ð	ð
 ñ�N€Fð �<‰<×Ñ DÓ(Ð(Ð(ö ”j §¡×!2Ñ!2´R·Z±ZÄÇÁÐ4J×KÑKØ�{‰{‹}ˆÜ�D‹zˆØˆT‰
Ù˜D qÑ)ˆØˆt‰ð €Mñ ˜F¨Ñ+ˆà€Mr,   )T)r)   rb   r_   r`   )r4   r   rl   r  r_   rb   ra   )NN)r4   r   r¢   zScalar | None)rL   r„   rq   rb   rt   rÓ   r_   rÓ   )NNN)rL   r„   rq   rb   r¢   r   r£   z
str | Nonert   rÓ   r_   z/tuple[np.ndarray, npt.NDArray[np.bool_] | None])r4   únp.dtyper_   r´  )r4   r   r_   rb   r&   )r4   r´  )rÏ   r   r_   r   )rL   r„   rp   r…   r_   zScalar | np.ndarray)
rL   r„   rp   r…   rq   rb   rt   rÓ   r_   rb   )rL   r„   rp   r…   rq   rb   rs   Úintrt   rÓ   r_   z*npt.NDArray[np.floating] | float | NaTType)
r   z+np.ndarray | np.datetime64 | np.timedelta64rp   r…   rt   znpt.NDArray[np.bool_]rÎ   r„   r_   z5np.ndarray | np.datetime64 | np.timedelta64 | NaTType)
rL   r„   rp   r…   rq   rb   rt   rÓ   r_   r¦  )rL   r„   rp   r…   rq   rb   r_   úfloat | np.ndarray)rÙ   r   rp   r   r_   r„   )r,  r   rt   rÓ   rp   r…   r-  rµ  r4   r´  r_   z-tuple[float | np.ndarray, float | np.ndarray])rp   r…   rq   rb   r-  rµ  )rL   r„   rp   r…   rq   rb   r-  rµ  )rL   r„   rp   r…   rq   rb   r-  rµ  rt   rÓ   r_   r¦  )
rL   r„   rp   r…   rq   rb   rt   rÓ   r_   zint | np.ndarray)rL   r„   rp   r…   rq   rb   rs   rµ  rt   rÓ   r_   r¦  )
r   r„   rp   r…   rt   rÓ   rq   rb   r_   znp.ndarray | int)
r,  r   rt   rÓ   rp   r…   r4   znp.dtype[np.floating]r_   z&np.floating | npt.NDArray[np.floating])r×   F)r   únp.ndarray | float | NaTTyperp   r…   rt   rÓ   rÙ   útuple[int, ...]rs   rµ  r±   rb   r_   r·  )rÙ   r¸  rt   rÓ   rs   rµ  r_   rb   )r‰  r¶  )
r�  r„   r‘  r„   r‹  r   rŒ  ú
int | Noner_   r¦  )r‹  r   r_   z)Callable[[np.ndarray, np.ndarray], float])
r�  r„   r‘  r„   rŒ  r¹  r-  r¹  r_   r¦  )rL   r   rq   rb   r_   r   )]Ú
__future__r   r[   rJ   Útypingr   r   r   r  Únumpyr–   Úpandas._configr   Úpandas._libsr   r	   r
   r   Úpandas._typingr   r   r   r   r   r   r   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   r   Úpandas.core.dtypes.missingr   r   r    Úcollections.abcr!   r‡   r'   r(   r+   r.   ri   rz   r|   r¤   r©   r²   r¹   rž   rÉ   rÔ   ry   rì   rò   rõ   r�   rÍ   r�   r  r  r4   r·   r/  r7  r5  rC  rJ  ÚnanminÚnanmaxrR  rV  rl  ru  rŽ   rP  r  rú   r  rb  r“  r�  r£  r  r³  r‹   r,   r*   Ú<module>rÆ     s>  ðÝ "ã Û ÷ñ ó
 ã å %÷ó ÷
÷ 
õ 
õ ?÷	÷ 	ó 	÷ñ ö Ý(á °VÑ<€Ø $˜Ð Ø€öñ ‘:Ð6Ó7Ô 8÷ñ ÷>5ñ 5ôpô(
ð GKðØðØ!.õð.)Øð)Ø $ð)Ø,Hð)à!ô)ð^ Ø!%Ø)-ðDØðDàðDð ðDð ð	Dð
 'ðDð 5õDôN	ô2ö'ôTôDEô>ðH  ØØ)-ñ5Øð5ð ð5ð ð	5ð
 'ð5ð 
õ5ðv  ØØ)-ñ5Øð5ð ð5ð ð	5ð
 'ð5ð 
õ5ñp 
ˆ$ƒØØð  ØØØ)-ñ*Øð*ð ð*ð ð	*ð
 ð*ð 'ð*ð 0ô*ó ó ó ð*ðZØ7ðà
ðð  ðð ð	ð
 ;ôñ  ÓØð  ØØ)-ñ@Øð@ð ð@ð ð	@ð
 'ð@ð ô@ó ó ð@ñF Óà26ÀtÐRVñh%Øðh%Ø!/ðh%Ø@Dðh%àôh%ó ðh%ðVØðà
ðð ôð8 —h’h˜rŸz™zÓ*ð/Øð/à
&ð/ð ð/ð ð	/ð
 ð/ð 3õ/ñd ˜Ñð  ØØØ	ñ+-ð ð+-ð ð	+-ð
 ô+-ó ð+-ñ\ 
ˆ$�ÓÙ˜Ñð  ØØØ	ñNØðNð ðNð ð	Nð
 ôNó ó ðNñb 
ˆ$�Óð  ØØØ)-ñ5)Øð5)ð ð5)ð ð	5)ð
 ð5)ð 'ð5)ð ô5)ó ð5)òpñ4 
�E¨&Ñ	1€Ù	�E¨&Ñ	1€ð  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð õ+ðb  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð õ+ñ\ 
ˆ$�ÓØð  ØØ)-ñTØðTð ðTð ð	Tð
 'ðTð ôTó ó ðTñn 
ˆ$�ÓØð  ØØ)-ñrØðrð ðrð ð	rð
 'ðrð ôró ó ðrñj 
ˆ$�ÓØð  ØØØ)-ñ(Øð(ð ð(ð ð	(ð
 ð(ð 'ð(ð ô(ó ó ð(ðVØðà
ðð 'ðð ð	ð
 ôð4 $&§8¢8¨B¯J©JÓ#7ð	&+Øð&+à
&ð&+ð ð&+ð !ð	&+ð
 ,õ&+ð\ Øð1Ø(ð1à
ð1ð 'ð1ð ð	1ð
 ð1ð ð1ð "õ1ðhØðØ">ðØKNðà	ôô>?ñ 
ˆ$�Óð
 !*Ø"ñØðàðð ð	ð
 ðð ôó ðð>Øðà.ôñ@ 
ˆ$�Óð
 #Øñ)Øð)àð)ð ð	)ð
 ð)ð ô)ó ð)ò6!õH"r,   