ó
    ¬œ‘h(Ç  ã                  ó   • 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  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,  \" 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%.           S[S= jj5       5       rR          SeS> jrS\
RŠ                  " \
RŒ                  5      4         SfS? jjrT Sg           ShS@ jjrU        SiSA jrVSB rW\1" S$S05      SCSSD.         SjSE jj5       rX    SkSF jrY\1" S$S05      SS,SG.         SlSH jj5       rZSI r[SmSJ jr\g)né    )ÚannotationsN)ÚAnyÚCallableÚcast)Ú
get_option)ÚNaTÚNaTTypeÚiNaTÚlib)	Ú	ArrayLikeÚAxisIntÚCorrelationMethodÚDtypeÚDtypeObjÚFÚScalarÚShapeÚnpt)Úimport_optional_dependency)Úfind_stack_level)Ú
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Ú
bottleneckÚwarn)ÚerrorsFTc                ó    • [         (       a  U qg g ©N)Ú_BOTTLENECK_INSTALLEDÚ_USE_BOTTLENECK)Úvs    ÚVC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\pandas/core/nanops.pyÚset_use_bottleneckr+   9   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éC   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>F   s   é € ÐIÂ&¸œL¨Ó/×4Ö4Â&ùs   ‚"$)ÚsuperÚ__init__ÚtupleÚdtypes)Úselfr:   Ú	__class__s     €r*   r8   Údisallow.__init__D   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.checkH   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>O   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>._fL   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__K   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.   C   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éb   Nc                ó   • Xl         X l        g r&   )ÚnamerS   )r;   rl   rS   s      r*   r8   Úbottleneck_switch.__init__c   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>.fo   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__g   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   b   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
                  $ [        $ )z9return the correct fill value for the dtype of the valuesú+inf)Ú_na_ok_dtyper–   rH   Úinfr   Úi8maxr
   )r4   Ú
fill_valueÚfill_value_typs      r*   Ú_get_fill_valuer£   »   s]   € ð ÑØÐÜ�E×ÑØÑ!Ü—6‘6ˆMà Ó'Ü—v‘v�äŸ™�w�à˜VÓ#ä—9‘9ÐäˆKr,   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   Úint64Úuint64Úfloat64)r4   Ú	dtype_maxs     r*   Ú_get_dtype_maxr¹   D  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ž   P  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      (       a'  [        R                  " S5      R                  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­   Úmzoverflow in timedelta operationúm8[ns])r   r§   r
   r•   r–   r—   r   rH   Ú
datetime64Úastyperµ   r¬   ÚisnanÚtimedelta64Úfabsr   r    rQ   )r   r4   r¡   s      r*   Ú_wrap_resultsrÈ   V  sŽ  € à”‚}ØðF €MðC 
�‰�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ÜŸš¨Ó.×5Ñ5°eÓ<�ð €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          	     ó6  >• US:X  aþ  U R                   S:X  aî  U R                  S   (       aÚ  U R                  S   S-  U R                  S   :”  a·  U R                  [        :w  a£  U R                  [
        :w  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_CONTIGUOUSiè  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¯<©<¸©?Ó:Ø—‘¤Ó&Ø—‘¤Ó$ä˜“<ˆ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               ód  • U R                   R                  S;   a  Uc  U R                  U5      $ U R                   R                  S:X  a"  [        R                  " S[
        [        5       S9  [        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)
True

>>> from pandas.core import nanops
>>> s = pd.Series([np.nan])
>>> nanops.nanany(s.values)
False
Úiubr¾   zz'any' with datetime64 dtypes is deprecated and will raise in a future version. Use (obj != pd.Timestamp(0)).any() instead.©Ú
stacklevelF©r¡   rt   )r4   r§   rM   Úwarningsr#   ÚFutureWarningr   r±   r�   rÄ   rb   ©rL   rp   rq   rt   Ú_s        r*   Únananyrô   â  s˜   € ðD ‡|�|×Ñ˜EÓ! d¡lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÓä�ŠðJäÜ'Ó)ò		
ô ˜F°uÀ4ÑH�I€Fð ‡|�|”vÓØ—‘œtÓ$ˆð �:‰:�dÓÐr,   c               ód  • U R                   R                  S;   a  Uc  U R                  U5      $ U R                   R                  S:X  a"  [        R                  " S[
        [        5       S9  [        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)
True

>>> from pandas.core import nanops
>>> s = pd.Series([1, 0])
>>> nanops.nanall(s.values)
False
rì   r¾   zz'all' with datetime64 dtypes is deprecated and will raise in a future version. Use (obj != pd.Timestamp(0)).all() instead.rí   Trï   )r4   r§   Úallrð   r#   rñ   r   r±   r�   rÄ   rb   rò   s        r*   Únanallr÷     s˜   € ðD ‡|�|×Ñ˜EÓ! d¡lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÓä�ŠðJäÜ'Ó)ò		
ô ˜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$ )au  
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)
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�   \  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ð �8‰8�:‰:Ü—8’8œD“>×&Ñ& {×'8Ñ'8Ó9Ð9Ø€Mr,   c               óD  • 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)
1.5
r   rï   r¦   ÚiurW   r¼   Nr×   FÚignore)rö   )r4   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�   Ÿ  sD  € ðB �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   Ä9FÆ
Fc               óÈ  ^• U R                   R                  S:H  =(       a    USL nSU4S 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
    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
rW   Nc                óL  >• Uc  [        U 5      nOU) nT(       d%  UR                  5       (       d  [        R                  $ [        R
                  " 5          [        R                  " SS[        5        [        R                  " X   5      nS S S 5        U$ ! , (       d  f       W$ = f)Nr  úAll-NaN slice encountered)	r!   rö   r–   rH   rð   Ú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´~ôô —,’,˜q™xÓ(ˆC÷ 'ð ˆ
÷ 'Ô&ð ˆ
ús   Á5BÂ
B#)rt   r¡   ©ÚstringÚmixedzCannot convert ú to numericr’   rÖ   r  r  r   T)ÚkeepdimsrÜ   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ä  ø€ ð6  Ÿ™×*Ñ*¨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Ó$Ð$øôU ó 	/äœC ›HÓ%¨3Ð.ûð	/ú÷& /Õ.ús%   Â"H, ÅBIÈ,
IÈ6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   C  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_nanvarr0  Z  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                   S:X  a  U R                  S5      n U R                   n[        XUS9u  p[        R                  " [        XX#US95      n[        Xe5      $ )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
zM8[ns]rÂ   )rt   r2  )r4   r¬   r±   r–   ÚsqrtÚnanvarrÈ   )rL   rp   rq   r.  rt   Ú
orig_dtyper   s          r*   Únanstdr7  Œ  sX   € ðH ‡|�|�xÓØ—‘˜XÓ&ˆà—‘€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'   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’   rW   r   )rp   r4   rÞ   FrÀ   )r4   r¨   r§   rÄ   r–   rH   r0  rØ   r­   r®   r  rû   r·   Úexpand_dims)rL   rp   rq   r.  rt   r4   r  r/  ÚavgÚsqrr   s              r*   r5  r5  º  sA  € ðJ �L‰L€EÜ˜6¨4Ó0€DØ‡z�z�TÓØ—‘˜tÓ$ˆØÑÜŸ6™6ˆF‰Là‡|�|×Ñ˜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:w  a  U R	                  S5      n U(       d(  Ub%  UR                  5       (       a  [        R                  $ [        U R                  XAX0R                  5      u  pV[        XX#US9n[        R                  " U5      [        R                  " U5      -  $ )ay  
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)
 0.5773502691896258
r2  rW   r’   )r5  r¨   r4   r§   rÄ   rM   r–   rH   r0  rØ   r4  )rL   rp   rq   r.  rt   r  ró   Úvars           r*   Únansemr?    s™   € ôL ˆ6 V¸TÒBä˜6¨4Ó0€DØ‡|�|×Ñ˜CÓØ—‘˜tÓ$ˆæ�dÑ&¨4¯8©8¯:©:Ü�v‰vˆä! &§,¡,°¸DÇ,Á,ÓO�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      $ [        XTUS9u  p[        U T5      " U5      n[	        XAX0R
                  5      nU$ )Nr   ©r¢   rt   )rw   ry   r±   r†   rü   rØ   )rL   rp   rq   rt   r   r¢   Úmeths        €€r*   Ú	reductionÚ_nanminmax.<locals>.reduction;  sW   ø€ ð �;‰;˜!ÓÜ$ VÓ2Ð2ä"Ø¨>Àñ
‰ˆô ˜ Ô& tÓ,ˆÜ  ¨t·\±\ÓBˆØˆr,   rÑ   )ri   rÓ   )rC  r¢   rD  s   `` r*   Ú
_nanminmaxrF  :  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$ )ax  
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)
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])
TrI  rB  )r±   ÚargmaxÚ_maybe_arg_null_out©rL   rp   rq   rt   r   s        r*   Ú	nanargmaxrN  U  ó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$ )aw  
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)
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�   rB  )r±   ÚargminrL  rM  s        r*   Ú	nanargminrR  ƒ  rO  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
[        U	5      n	[        U
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)at  
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)
1.7320508075688787
rW   r’   r¼   Nr   r  ©ÚinvalidÚdividerÞ   rÖ   g      à?g      ø?FrÀ   é   )r¨   r4   r§   rÄ   r  rØ   r­   r–   r®   rM   rH   r  rû   r·   r:  Ú_zero_out_fperrr•   r—   r¯   r2   )rL   rp   rq   rt   r  ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3r   r4   s                r*   Únanskewr_  ±  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ô 
˜Ó	€BÜ	˜Ó	€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÷G 
8Ö	7ú÷( 
8Õ	7ús   Ã$"JÆ>JÊ
JÊ
J-c               óZ  • [        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                  " 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5      n[        W5      n[!        U[        R"                  5      (       d7  US:  a  [        R                  $ US:X  a  U R                  R%                  S5      $ [        R                  " SSS9   XÍ-  W-
  nSSS5        U R                  nUR                  S:X  a  WR                  USS9n[!        W[        R"                  5      (       a0  [        R&                  " US:H  SU5      n[        R                  XäS:  '   U$ ! , (       d  f       GNù= f! , (       d  f       GN/= f! , (       d  f       N¯= f)a`  
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)
-1.2892561983471076
rW   r’   r¼   Nr   r  rT  rÞ   rW  rÖ   é   FrÀ   )r¨   r4   r§   rÄ   r  rØ   r­   r–   r®   rM   rH   r  rû   r·   r:  rX  r•   r—   r2   r¯   )rL   rp   rq   rt   r  rY  rZ  r[  Ú	adjusted4r]  Úm4ÚadjÚ	numeratorÚdenominatorr   r4   s                   r*   Únankurtrg  	  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ä	�Š˜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ô   	Ó*€IÜ! +Ó.€Kä�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ˆ�q‰yÑà€M÷Y 
8Ö	7ú÷ 
8Ö	7ú÷( 
8Õ	7ús$   Ã$"K8Æ)9L
É+LË8
LÌ

LÌ
L*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)
6.0
rÖ   rú   )r¨   r­   Úprodrü   rØ   )rL   rp   rq   rs   rt   r   s         r*   rŽ   rŽ   j  sS   € ô@ ˜6¨4Ó0€Dæ�$Ñ"Ø—‘“ˆØˆ‰Ø�[‰[˜Ó€Fô Ø�dŸL™L°Iñð r,   c                ó2  • Uc  U $ Ub  [        U SS5      (       d9  U(       a  UR                  5       (       a  g U $ UR                  5       (       a  g U $ U(       a  UR                  U5      nOUR                  U5      nUR                  5       (       a  SX'   U $ )Nr×   Féÿÿÿÿ)r†   rö   rM   )r   rp   rt   rq   Úna_masks        r*   rL  rL  —  s�   € ð �|Øˆà�|œ7 6¨6°5×9Ñ9ÞØ�x‰x�z‰zØð ð €Mð �x‰x�z‰zØð ð €Mö Ø—h‘h˜t“n‰Gà—h‘h˜t“nˆGØ�;‰;�=‰=Ø ˆF‰OØ€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–   ri  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
                  " Xg5      n[        R                  " U5      (       au  [        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   ÚiscomplexobjrÄ   r   rH   r   Úcheck_below_min_countr†   r2   )	r   rp   rt   rØ   rs   Ú	null_maskÚbelow_countÚ	new_shapeÚresult_dtypes	            r*   rü   rü   Û  s^  € ð �|˜	 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�)×ÑÜ ×'Ñ'Ü—?’? 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–   ri  rw   rû   )rØ   rt   rs   Ú	non_nullss       r*   rs  rs    s=   € ð( �1ƒ}Ø‰<äŸš ›‰IàŸ	™	 D§H¡H£JÑ.ˆIØÓ ØØr,   c                ó  • [        U [        R                  5      (       a/  [        R                  " [        R                  " U 5      S:  SU 5      $ [        R                  " U 5      S:  a  U R
                  R                  S5      $ U $ )Ng›+¡†›„=r   )r•   r–   r—   r¯   Úabsr4   r2   )Úargs    r*   rX  rX  *  sZ   € ä�#”r—z‘z×"Ñ"Ü�xŠxœŸš˜s› eÑ+¨Q°Ó4Ð4ä$&§F¢F¨3£K°%Ó$7ˆs�y‰y�~‰~˜aÓ Ð@¸SÐ@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†  2  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   $ ©Nr   r‹   )rƒ  r„  r‰  s     €r*   rÎ   Úget_corr_func.<locals>.funcX  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Œ  e  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‚  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Ö   r1  r‘  )ru   r�  r!   rö   r–   rH   r  Úcov)rƒ  r„  r  r.  r…  s        r*   Únancovr—  r  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   ÚimagÚrealrQ   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      ð?g        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_   rœ  )
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œ  )rp   r…   rq   rb   )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)
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Ö   )r   únp.ndarray | float | NaTTyperp   r…   rt   rÒ   rØ   útuple[int, ...]rs   r«  r_   r¬  )rØ   r­  rt   rÒ   rs   r«  r_   rb   )
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.util._exceptionsr   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   r   Úpandas.core.dtypes.missingr   r    r!   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·   r0  r7  r5  r?  rF  ÚnanminÚnanmaxrN  rR  r_  rg  rŽ   rL  r  rü   rs  rX  r†  r‚  r—  r  r©  r‹   r,   r*   Ú<module>r»     s  ðÝ "ã Û ÷ñ ó
 ã å %÷ó ÷
÷ 
õ 
õ ?Ý 4÷	÷ 	ó 	÷ñ ñ   °VÑ<€Ø $˜Ð Ø€öñ ‘:Ð6Ó7Ô 8÷ñ ÷>5ñ 5ôpô(
ð GKðØðØ!.õð,)Øð)Ø $ð)Ø,Hð)à!ô)ð^ Ø!%Ø)-ðDØðDàðDð ðDð ð	Dð
 'ðDð 5õDôN	ô2ö&ôRôDEô>ðJ  ØØ)-ñ:Øð:ð ð:ð ð	:ð
 'ð:ð 
õ:ð@  ØØ)-ñ:Øð:ð ð:ð ð	:ð
 'ð:ð 
õ:ñz 
ˆ$ƒØØð  ØØØ)-ñ*Øð*ð ð*ð ð	*ð
 ð*ð 'ð*ð ô*ó ó ó ð*ðZØ7ðà
ðð  ðð ð	ð
 ;ôñ& ÓØð  ØØ)-ñ<Øð<ð ð<ð ð	<ð
 'ð<ð ô<ó ó ð<ñ~ ÓØ04ÀTÐPTö _%ó ð_%ðDØðà
ðð ôð8 —h’h˜rŸz™zÓ*ð/Øð/à
&ð/ð ð/ð ð	/ð
 ð/ð 3õ/ñd ˜Ñð  ØØØ	ñ*-ð ð*-ð ð	*-ð
 ô*-ó ð*-ñZ 
ˆ$�ÓÙ˜Ñð  ØØØ	ñFØðFð ðFð ð	Fð
 ôFó ó ðFñR 
ˆ$�Óð  ØØØ)-ñ1)Øð1)ð ð1)ð ð	1)ð
 ð1)ð 'ð1)ð ô1)ó ð1)òhñ. 
�E¨&Ñ	1€Ù	�E¨&Ñ	1€ð  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð õ+ðb  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð õ+ñ\ 
ˆ$�ÓØð  ØØ)-ñSØðSð ðSð ð	Sð
 'ðSð ôSó ó ðSñl 
ˆ$�ÓØð  ØØ)-ñ\Øð\ð ð\ð ð	\ð
 'ð\ð ô\ó ó ð\ñ~ 
ˆ$�ÓØð  ØØØ)-ñ(Øð(ð ð(ð ð	(ð
 ð(ð 'ð(ð ô(ó ó ð(ðVØðà
ðð 'ðð ð	ð
 ôð> $&§8¢8¨B¯J©JÓ#7ð	&+Øð&+à
&ð&+ð ð&+ð !ð	&+ð
 ,õ&+ð\ ð-Ø(ð-à
ð-ð 'ð-ð ð	-ð
 ð-ð "õ-ð`ØðØ">ðØKNðà	ôò>Añ 
ˆ$�Óð
 !*Ø"ñØðàðð ð	ð
 ðð ôó ðð>Øðà.ôñ@ 
ˆ$�Óð
 #Øñ)Øð)àð)ð ð	)ð
 ð)ð ô)ó ð)ò6!õH"r,   