+
    ÏÜ³jÑ  ã                  ó$  € ^ RI Ht ^ RIt^ RIt^ RIHtHtHt ^ RIt^ RI	t
^ RIHt ^ RIHtHtHtHt ^ RIHtHtHtHtHtHtHtHtHt ^ RIHt ^ RIHtH t H!t!H"t"H#t#H$t$H%t%H&t& ^ R	I'H(t(H)t)H*t* ]'       d   ^ R
I+H,t, ]! RRR7      t-]-RJt.Rs/RqR R llt0]0! ]! R4      4        ! R R4      t1 ! R R4      t2R R lt3R R lt4RrR R llt5R R lt6RsR R  llt7R! R" lt8R# R$ lt9RtR% R& llt:R' R( lt;R) R* lt<R+ R, lt=R-RR.RR/R/R0 R1 llt>R-RR.RR/R/R2 R3 llt?]1! R44      ];]=R-RR.RR5^ R/R/R6 R7 ll4       4       4       t@R8 R9 ltA]2! 4       ];R-RR.RR/R/R: R; ll4       4       tB]2! 4       R-RR.RR/R/R< R= ll4       tCR> R? ltD]
PŠ                  ! ]
PŒ                  4      3R@ RA lltG]2! ^RB7      R-RR.RRC^R/R/RD RE ll4       tH]1! R4RF4      ]2! ^RB7      R-RR.RRC^R/R/RG RH ll4       4       tI]1! R4RF4      R-RR.RRC^R/R/RI RJ ll4       tJRK tK]K! RLRMRN7      tL]K! RORPRN7      tMR-RR.RR/R/RQ RR lltNR-RR.RR/R/RS RT lltO]1! R4RF4      ]=R-RR.RR/R/RU RV ll4       4       tP]1! R4RF4      ]=R-RR.RR/R/RW RX ll4       4       tQ]1! R4RF4      ]=R-RR.RR5^ R/R/RY RZ ll4       4       tRR[ R\ ltS]
PŠ                  ! ]
PŒ                  4      3R] R^ lltTRuR_ R` lltURa Rb ltVRc Rd ltW]1! R4RF4      ReRfRgR/Rh Ri ll4       tXRj Rk ltY]1! R4RF4      RgRRC^/Rl Rm ll4       tZRn t[Ro Rp lt\R# )vé    )Ú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               ó    € V ^8„  d   QhRRRR/# )é   ÚvÚboolÚreturnÚNone© )Úformats   "ÚS/home/luca/screen-checking/.venv/lib/python3.14/site-packages/pandas/core/nanops.pyÚ__annotate__r.   ;   s   € ÷ ñ ˜$ð ¨$ñ ó    c                ó&   € \         '       d   V sR # R # ©N)Ú_BOTTLENECK_INSTALLEDÚ_USE_BOTTLENECK)r'   s   &r-   Úset_use_bottleneckr4   ;   s   € ÷ ÓØŠñ r/   zcompute.use_bottleneckc                  óF   a € ] tR t^EtR V 3R lltR R ltR R ltRtV ;t# )Údisallowc               ó    € V ^8„  d   QhRRRR/# )r&   Údtypesr   r)   r*   r+   )r,   s   "r-   r.   Údisallow.__annotate__F   s   € ÷ Jñ J ð J¨$ñ Jr/   c                	ó”   <€ \         SV `  4        \        ;QJ d    . R  V 4       F  NK  	  5V n        R# ! R  V 4       4      V n        R# )c              3  óL   "  € T F  p\        V4      P                  x € K  	  R # 5ir1   )r   Útype)Ú.0Údtypes   & r-   Ú	<genexpr>Ú$disallow.__init__.<locals>.<genexpr>H   s   é € ÐIÁ&¸œL¨Ó/×4Ö4Ã&ùs   ‚"$N)ÚsuperÚ__init__Útupler8   )Úselfr8   Ú	__class__s   &*€r-   rB   Údisallow.__init__F   s2   ø€ Ü‰ÑÔß”eÑIÁ&ÓI—eˆŽ�eÑIÁ&ÓIÓIˆŽr/   c               ó   € V ^8„  d   QhRR/# ©r&   r)   r(   r+   )r,   s   "r-   r.   r9   J   s   € ÷ Qñ Q˜Dñ Qr/   c                	ó~   € \        VR 4      ;'       d+    \        VP                  P                  V P                  4      # ©r>   )ÚhasattrÚ
issubclassr>   r<   r8   )rD   Úobjs   &&r-   ÚcheckÚdisallow.checkJ   s*   € Ü�s˜GÓ$×PÐP¬°C·I±I·N±NÀDÇKÁKÓ)PÐPr/   c               ó    € V ^8„  d   QhRRRR/# )r&   Úfr   r)   r+   )r,   s   "r-   r.   r9   M   s   € ÷ ñ ˜!ð  ñ r/   c                	óf   a a€ \         P                  ! S4      VV 3R  l4       p\        \        V4      # )c                 ó¤  <€ \         P                  ! WP                  4       4      p\        ;QJ d    V3R  lV 4       F  '       g   K   RM	  RM! V3R  lV 4       4      '       d,   SP                  P                  RR4      p\        RV R24      h S! V / VB #   \         d+   p\        T ^ ,          4      '       d   \        T4      Thh Rp?ii ; i)c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir1   )rN   )r=   rM   rD   s   & €r-   r?   Ú0disallow.__call__.<locals>._f.<locals>.<genexpr>Q   s   øé € Ð7©h s�4—:‘:˜c—?�?«hùs   ƒ!TFÚnanÚ zreduction operation 'z' not allowed for this dtypeN)	Ú	itertoolsÚchainÚvaluesÚanyÚ__name__ÚreplaceÚ	TypeErrorÚ
ValueErrorr   )ÚargsÚkwargsÚobj_iterÚf_nameÚerQ   rD   s   *,   €€r-   Ú_fÚdisallow.__call__.<locals>._fN   s­   ø€ ä —’ t¯]©]«_Ó=ˆHß‹sÔ7©hÓ7�s�sŠsÔ7©hÓ7×7Ò7ØŸ™×+Ñ+¨E°2Ó6�ÜØ+¨F¨8Ð3OÐPóð ð	Ù˜$Ð) &Ñ)Ð)øÜô ô
 # 4¨¥7×+Ò+Ü# A›,¨AÐ-Øûðús   ÂB ÂCÂ%%C
Ã
C©Ú	functoolsÚwrapsr   r   )rD   rQ   re   s   ff r-   Ú__call__Údisallow.__call__M   s,   ù€ Ü	�Š˜Ó	õ	ó 
ð	ô$ ”A�r‹{Ðr/   )r8   )	r\   Ú
__module__Ú__qualname__Ú__firstlineno__rB   rN   rj   Ú__static_attributes__Ú__classcell__)rE   s   @r-   r6   r6   E   s   ø† ÷Jð JõQ÷ó r/   r6   c                  ó2   € ] tR t^dtRR R lltR R ltRtR# )Úbottleneck_switchNc               ó   € V ^8„  d   QhRR/# )r&   r)   r*   r+   )r,   s   "r-   r.   Úbottleneck_switch.__annotate__e   s   € ÷ ñ ¨tñ r/   c                	ó   € Wn         W n        R # r1   )Únamera   )rD   rv   ra   s   &&,r-   rB   Úbottleneck_switch.__init__e   s   € ØŒ	ØŽr/   c               ó    € V ^8„  d   QhRRRR/# )r&   Úaltr   r)   r+   )r,   s   "r-   r.   rt   i   s   € ÷ 0ñ 0˜Að 0 !ñ 0r/   c                	ó  a aaa€ S P                   ;'       g    SP                  o \        \        S4      o\        P                  ! S4      RR RR/R VVVV 3R lll4       p\        \        V4      #   \        \
        3 d    R o LPi ; i)NÚaxisÚskipnaTc               ó$   € V ^8„  d   QhRRRRRR/# )r&   rZ   ú
np.ndarrayr{   úAxisInt | Noner|   r(   r+   )r,   s   "r-   r.   Ú0bottleneck_switch.__call__.<locals>.__annotate__r   s(   € ÷ %	ñ %	Øð%	ð !ð%	ð ñ	%	r/   c               ó4  <€ \        S
P                  4      ^ 8”  d0   S
P                  P                  4        F  w  rEWC9  g   K  WSV&   K  	  V P                  ^ 8X  d   VP	                  R4      f   \        W4      # \        '       d†   V'       d~   \        V P                  S	4      '       db   VP	                  RR4      f>   VP                  RR4       S! V 3RV/VB p\        V4      '       d   S! V 3RVRV/VB pV# S! V 3RVRV/VB p V# S! V 3RVRV/VB pV# )r   Ú	min_countNÚmaskr{   r|   )Úlenra   ÚitemsÚsizeÚgetÚ_na_for_min_countr3   Ú_bn_ok_dtyper>   ÚpopÚ	_has_infs)rZ   r{   r|   ÚkwdsÚkr'   Úresultry   Úbn_funcÚbn_namerD   s   &$$,   €€€€r-   rQ   Ú%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¸vÐ!NÈÑ!N˜ð ˆMñ	 ! ÑJ¨dÐJ¸6ÐJÀTÑJ‘Fð ˆMñ ˜VÑF¨$ÐF°vÐFÀÑF�àˆMr/   )
rv   r\   ÚgetattrÚbnÚAttributeErrorÚ	NameErrorrh   ri   r   r   )rD   ry   rQ   r�   r�   s   ff @@r-   rj   Úbottleneck_switch.__call__i   sŠ   û€ Ø—)‘)×+Ð+˜sŸ|™|ˆð	Üœb 'Ó*ˆGô 
�Š˜Ó	ð%	ð $(ð%	ð  ÷	%	ô %	ó 
ð%	ôN ”A�q‹zÐøôW ¤	Ð*ô 	ØŠGð	ús   ¦A1 Á1BÂB)ra   rv   r1   )r\   rl   rm   rn   rB   rj   ro   r+   r/   r-   rr   rr   d   s   † ÷÷0ñ 0r/   rr   c               ó$   € V ^8„  d   QhRRRRRR/# )r&   r>   r   rv   Ústrr)   r(   r+   )r,   s   "r-   r.   r.   œ   s!   € ÷ ñ ˜ð ¨ð °ñ r/   c                óH   € V \         8w  d   \        V 4      '       g   VR9  # R# )ÚnansumF)rš   ÚnanprodÚnanmean)Úobjectr   )r>   rv   s   &&r-   r‰   r‰   œ   s%   € à”„Ô2°5×9Ò9ð Ð;Ñ;Ð;Ùr/   c               ó   € V ^8„  d   QhRR/# rH   r+   )r,   s   "r-   r.   r.   °   s   € ÷ 
ñ 
˜ñ 
r/   c                ó(  € \        V \        P                  4      '       d7   V P                  R9   d&   \        P
                  ! V P                  R4      4      #  \        P                  ! V 4      P                  4       #   \        \        3 d     R# i ; i)Úf8ÚKF)r    Úf4)Ú
isinstanceÚnpÚndarrayr>   r   Úhas_infsÚravelÚisinfr[   r^   ÚNotImplementedError)rŽ   s   &r-   r‹   r‹   °   sn   € Ü�&œ"Ÿ*™*×%Ò%Ø�<‰<˜<Ô'ô —<’< §¡¨SÓ 1Ó2Ð2ðÜ�xŠx˜Ó×#Ñ#Ó%Ð%øÜÔ*Ð+ô âðús   Á#A< Á<BÂBc               ó    € V ^8„  d   QhRRRR/# )r&   r>   r   Ú
fill_valuezScalar | Noner+   )r,   s   "r-   r.   r.   ½   s   € ÷ ñ ØðØ!.ñr/   c                ó2  € Ve   V# \        V 4      '       d=   Vf   \        P                  # VR8X  d   \        P                  # \        P                  ) # VR8X  d%   \        P                  ! \
        P                  4      # \        P                  ! \        4      # )z9return the correct fill value for the dtype of the valuesú+inf)Ú_na_ok_dtyper¤   rV   ÚinfÚint64r   Úi8maxr
   )r>   r«   Ú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               ó(   € V ^8„  d   QhRRRRRRRR/# )r&   rZ   r~   r|   r(   rƒ   únpt.NDArray[np.bool_] | Noner)   r+   )r,   s   "r-   r.   r.   Ô   s,   € ÷ )ñ )Øð)Ø $ð)Ø,Hð)à!ñ)r/   c                ó¤   € VfL   V P                   P                  R9   d   R# V'       g   V P                   P                  R9   d   \        V 4      pV# )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)r>   Úkindr   )rZ   r|   rƒ   s   &&&r-   Ú_maybe_get_maskrº   Ô   sA   € ðB ‚|Ø�<‰<×Ñ Ô%áç�V—\‘\×&Ñ&¨$Ô.Ü˜“<ˆDà€Kr/   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r&   rZ   r~   r|   r(   r«   r   r²   z
str | Nonerƒ   rµ   r)   z/tuple[np.ndarray, npt.NDArray[np.bool_] | None]r+   )r,   s   "r-   r.   r.      sL   € ÷ Dñ DØðDàðDð ðDð ð	Dð
 'ðDð 5ñDr/   c                óÜ  € \        WV4      pV P                  pRpV P                  P                  R9   d(   \        P                  ! V P                  R4      4      p RpV'       d‡   Veƒ   \        WRVR7      pVer   VP                  4       '       d\   V'       g   \        V4      '       d+   V P                  4       p \        P                  ! WV4       W3# \        P                  ! V( W4      p W3# )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º   r>   r¹   r¤   ÚasarrayÚviewr³   r[   r®   ÚcopyÚputmaskÚwhere)rZ   r|   r«   r²   rƒ   r>   Ú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               ó    € V ^8„  d   QhRRRR/# )r&   r>   únp.dtyper)   r+   )r,   s   "r-   r.   r.   G  s   € ÷ 	ñ 	˜(ð 	 xñ 	r/   c                óP  € T pV P                   R 9   d'   \        P                  ! \        P                  4      pV# V P                   R8X  d'   \        P                  ! \        P                  4      pV# V P                   R8X  d%   \        P                  ! \        P
                  4      pV# )ÚbiÚurQ   )r¹   r¤   r>   r°   Úuint64Úfloat64)r>   Ú	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 ^8„  d   QhRRRR/# )r&   r>   r   r)   r(   r+   )r,   s   "r-   r.   r.   S  s   € ÷ 2ñ 2˜ð 2 Tñ 2r/   c                óz   € \        V 4      '       d   R # \        V P                  \        P                  4      '       * # )F)r   rL   r<   r¤   ÚintegerrJ   s   &r-   r®   r®   S  s(   € Ü˜5×!Ò!ÙÜ˜%Ÿ*™*¤b§j¡jÓ1Ô1Ð1r/   c               ó   € V ^8„  d   QhRR/# )r&   r>   rÆ   r+   )r,   s   "r-   r.   r.   Y  s   € ÷ 'ñ ' ñ 'r/   c                ó  € V \         J d    V # VP                  R8X  dß   Vf   \        p\        V \        P
                  4      '       g¡   \        V4      '       d   Q R4       hW8X  d   \        P                  p \        V 4      '       d(   \        P                  ! RR4      P                  V4      p M%\        P                  ! V 4      P                  V4      p V P                  VRR7      p V # V P                  V4      p  V # VP                  R8X  d÷   \        V \        P
                  4      '       g·   W8X  g   \        P                  ! V 4      '       d7   \        P                  ! V4      ^ ,          p\        P                  ! RV4      p V # \        P                  ! V 4      \         P"                  8”  d   \%        R4      h\        P                  ! V 4      P                  VRR7      p  V # V P                  R	4      P                  V4      p V # )
zwrap our results if neededÚMzExpected non-null fill_valuer   ÚnsF©rÀ   Úmzoverflow in timedelta operationzm8[ns])r   r¹   r
   r£   r¤   r¥   r   rV   Ú
datetime64Úastyper°   r¿   ÚisnanÚdatetime_dataÚtimedelta64Úfabsr   r±   r_   )rŽ   r>   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               ó    € V ^8„  d   QhRRRR/# ©r&   Úfuncr   r)   r+   )r,   s   "r-   r.   r.   ƒ  s   € ÷ ñ ˜qð  Qñ r/   c                óx   a € \         P                  ! S 4      RRRRRR/R V 3R lll4       p\        \        V4      # )zŒ
If we have datetime64 or timedelta64 values, ensure we have a correct
mask before calling the wrapped function, then cast back afterwards.
r{   Nr|   Trƒ   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r&   rZ   r~   r{   r   r|   r(   rƒ   rµ   r+   )r,   s   "r-   r.   Ú*_datetimelike_compat.<locals>.__annotate__Š  s2   € ÷ ñ Øðð ðð ð	ð
 +ñr/   c          	     ó  <€ T pV P                   P                  R 9   pV'       d   Vf   \        V 4      pS! V 3RVRVRV/VB pV'       d6   \        WuP                   \        R7      pV'       g   Vf   Q h\        WqW54      pV# )r¸   r{   r|   rƒ   )r«   )r>   r¹   r   rÞ   r
   Ú_mask_datetimelike_result)	rZ   r{   r|   rƒ   ra   Úorig_valuesrÃ   rŽ   rá   s	   &$$$,   €r-   Únew_funcÚ&_datetimelike_compat.<locals>.new_func‰  s�   ø€ ð ˆà—|‘|×(Ñ(¨DÑ0ˆß˜DšLÜ˜“<ˆDá�fÑL 4ÐL°ÐL¸TÐLÀVÑLˆçÜ" 6×+<Ñ+<ÌÔNˆFßØÒ'Ð'Ð'Ü2°6ÀÓS�àˆr/   rg   )rá   ré   s   f r-   Ú_datetimelike_compatrë   ƒ  sR   ø€ ô ‡_‚_�TÓðð  $ðð ð	ð
 .2÷ñ ó ðô0 ”�8ÓÐr/   c               ó$   € V ^8„  d   QhRRRRRR/# )r&   rZ   r~   r{   r   r)   zScalar | np.ndarrayr+   )r,   s   "r-   r.   r.   ¥  s'   € ÷ Eñ E˜jð E°ð EÐCVñ Er/   c                óN  € V P                   P                  R9   d   V P                  R4      p \        V P                   4      pV P                  ^8X  d   V# Vf   V# V P
                  RV V P
                  V^,           R ,           p\        P                  ! W2V P                   R7      # )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Ë   NrJ   )r>   r¹   rØ   r   ÚndimÚshaper¤   Úfull)rZ   r{   r«   Úresult_shapes   &&  r-   rˆ   rˆ   ¥  sˆ   € ð" ‡|�|×Ñ˜GÔ#Ø—‘˜yÓ)ˆÜ# F§L¡LÓ1€Jà‡{�{�aÔØÐØ	ŠØÐà—|‘| E TÐ*¨V¯\©\¸$À½(¸*Ð-EÕEˆä�wŠw�|°v·|±|ÔDÐDr/   c               ó    € V ^8„  d   QhRRRR/# rà   r+   )r,   s   "r-   r.   r.   Ä  s   € ÷ ñ  ð  añ r/   c                óp   a € \         P                  ! S 4      RR/R V 3R lll4       p\        \        V4      # )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.
r{   Nc               ó    € V ^8„  d   QhRRRR/# )r&   rZ   r~   r{   r   r+   )r,   s   "r-   r.   Ú+maybe_operate_rowwise.<locals>.__annotate__Ì  s   € ÷ 1ñ 1˜
ð 1¨^ñ 1r/   c          	     óT  <€ V^8X  Ed   V P                   ^8X  dû   V P                  R,          '       dâ   V P                  ^,          R,          V P                  ^ ,          8”  d²   V P                  \        \
        39  d—   \        V 4      pVP                  R4      eK   VP                  R4      p\        \        V4      4       Uu. uF  pS! W5,          3RWE,          /VB NK  	  ppMV Uu. uF  pS! V3/ VB NK  	  pp\        P                  ! V4      # S! V 3RV/VB # u upi u upi )é   ÚC_CONTIGUOUSéè  rƒ   r{   )rï   Úflagsrð   r>   r�   r(   Úlistr‡   rŠ   Úranger„   r¤   Úarray)	rZ   r{   ra   Úarrsrƒ   Ú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%rg   )rá   r  s   f r-   Úmaybe_operate_rowwiser  Ä  s;   ø€ ô ‡_‚_�TÓð1¸d÷ 1ñ 1ó ð1ô, ”�7ÓÐr/   r{   r|   rƒ   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# ©
r&   rZ   r~   r{   r   r|   r(   rƒ   rµ   r)   r+   )r,   s   "r-   r.   r.   å  ó<   € ÷ 5ñ 5Øð5ð ð5ð ð	5ð
 'ð5ð 
ñ5r/   c               óD  € V P                   P                  R9   d   Vf   V P                  V4      # V P                   P                  R8X  d   \        R4      h\	        WRVR7      w  rV P                   \
        8X  d   V P                  \        4      p V P                  V4      # )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«   rƒ   )r>   r¹   r[   r^   rÄ   r�   rØ   r(   ©rZ   r{   r|   rƒ   Ú_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          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# r  r+   )r,   s   "r-   r.   r.     r  r/   c               óD  € V P                   P                  R9   d   Vf   V P                  V4      # V P                   P                  R8X  d   \        R4      h\	        WRVR7      w  rV P                   \
        8X  d   V P                  \        4      p V P                  V4      # )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  )r>   r¹   Úallr^   rÄ   r�   rØ   r(   r  s   &$$$ r-   Únanallr    s‡   € ðD ‡|�|×Ñ˜EÔ! d¢lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÔäÐJÓKÐKä˜F°tÀ$ÔG�I€Fð ‡|�|”vÔØ—‘œtÓ$ˆð �:‰:�dÓÐr/   ÚM8r‚   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r&   rZ   r~   r{   r   r|   r(   r‚   Úintrƒ   rµ   r)   z*npt.NDArray[np.floating] | float | NaTTyper+   )r,   s   "r-   r.   r.   X  sF   € ÷ *ñ *Øð*ð ð*ð ð	*ð
 ð*ð 'ð*ð 0ñ*r/   c               ó:  € V P                   p\        W^ VR7      w  r\        V4      pVP                  R8X  d   TpM5VP                  R8X  d%   \        P                   ! \        P
                  4      pV P                  WR7      p\        WqW@P                  VR7      pV# )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  rQ   rÖ   rJ   ©r‚   )	r>   rÄ   rÍ   r¹   r¤   rË   ÚsumÚ_maybe_null_outrð   )rZ   r{   r|   r‚   rƒ   r>   Ú	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          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r&   rŽ   z+np.ndarray | np.datetime64 | np.timedelta64r{   r   rƒ   znpt.NDArray[np.bool_]rè   r~   r)   z5np.ndarray | np.datetime64 | np.timedelta64 | NaTTyper+   )r,   s   "r-   r.   r.   …  s:   € ÷ ñ Ø7ðà
ðð  ðð ð	ð
 ;ñr/   c                ód  € \        V \        P                  4      '       dG   V P                  R 4      P	                  VP
                  4      p VP                  VR7      p\        W&   V # VP                  4       '       d4   \        P                  ! \        4      P	                  VP
                  4      # V # )r½   ©r{   )	r£   r¤   r¥   rØ   r¿   r>   r[   r
   r°   )rŽ   r{   rƒ   rè   Ú	axis_masks   &&&& r-   rç   rç   …  s„   € ô �&œ"Ÿ*™*×%Ò%à—‘˜tÓ$×)Ñ)¨+×*;Ñ*;Ó<ˆØ—H‘H $�HÓ'ˆ	Ü ˆÑð €Mð 
�‰�ŠÜ�xŠxœ‹~×"Ñ" ;×#4Ñ#4Ó5Ð5Ø€Mr/   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# ©r&   rZ   r~   r{   r   r|   r(   rƒ   rµ   r)   Úfloatr+   )r,   s   "r-   r.   r.   —  sC   € ÷ @ñ @Øð@ð ð@ð ð	@ð
 'ð@ð ñ@r/   c               ó  € V P                   \        8X  d)   \        V 4      R8”  d   Vf   \        V R,          WR7       V P                   p\	        W^ VR7      w  r\        V4      p\        P                   ! \        P                  4      pVP                  R9   d&   \        P                   ! \        P                  4      pMKVP                  R9   d&   \        P                   ! \        P                  4      pMVP                  R8X  d   TpTp\        V P                  W1VR	7      pV P                  WR	7      p\        V4      pVeŽ   \        VR
R4      '       d{   \        \        P                  V4      p\        P                   ! RR7      ;_uu_ 4        W‡,          p	RRR4       V^ 8H  p
V
P#                  4       '       d   \        P$                  X	V
&   X	# V^ 8”  d	   W‡,          M\        P$                  p	V	#   + '       g   i     La; i)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ú   N:Niè  N)r{   r|   r  r¸   ÚiurQ   rJ   rï   FÚignore)r  )r>   r�   r„   rœ   rÄ   rÍ   r¤   rË   r¹   Ú_get_countsrð   r  Ú_ensure_numericr’   r   r¥   Úerrstater[   rV   )rZ   r{   r|   rƒ   r>   r  Údtype_countÚcountr  Úthe_meanÚct_masks   &$$$       r-   rœ   rœ   •  sp  € ð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   Æ	G1Ç1H	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r&   rZ   r~   r{   r   r|   r(   r)   úfloat | np.ndarrayr+   )r,   s   "r-   r.   r.   Û  s2   € ÷ h%ñ h%Øðh%Ø!/ðh%Ø@Dðh%àñh%r/   c               ó*  a€ V P                   P                  R8H  ;'       d    VRJ pRR V3R lllpV P                   p\        V SVRR7      w  rV P                   P                  R8w  dT   V P                   \        8X  d-   \        P
                  ! V 4      pVR9   d   \        RV  R24      h V P                  R4      p V'       gC   Ve?   V P                  P                  '       g   V P                  4       p \        P                  W&   V P                  p	V P                   ^8”  Ed
   VEe   V	'       dæ   S'       g   \        P"                  ! WQV 4      p
Mü\$        P&                  ! 4       ;_uu_ 4        \$        P(                  ! R	R
\*        4       V P,                  ^,          ^8X  d   V^ 8X  g    V P,                  ^ ,          ^8X  d5   V^8X  d.   \        P.                  ! \        P0                  ! V 4      RR7      p
M\        P.                  ! WR7      p
RRR4       M7\3        V P,                  V4      p
M V	'       d	   V! W4      M\        P                  p
\5        X
V4      #   \         d   p\        \        T4      4      ThRp?ii ; i  + '       g   i     LD; i)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
rQ   Nc               ó   € V ^8„  d   QhRR/# )r&   r  r~   r+   )r,   s   "r-   r.   Únanmedian.<locals>.__annotate__ý  s   € ÷ ñ �jñ r/   c                ó¦  <€ Vf   \        V 4      pMV( pS'       g'   VP                  4       '       g   \        P                  # \        P
                  ! 4       ;_uu_ 4        \        P                  ! RR\        4       \        P                  ! RR\        4       \        P                  ! W,          4      pR R R 4       V#   + '       g   i     X# ; i)Nr%  úAll-NaN slice encounteredzMean of empty slice)	r    r  r¤   rV   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningÚ	nanmedian)r  Ú_maskÚresr|   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B?Â?C	)rƒ   r«   zCannot convert ú to numericr    r%  r3  T)Úkeepdimsr  r1   ©ÚstringÚmixed)r>   r¹   rÄ   r�   r   Úinfer_dtyper^   rØ   r_   r˜   rû   Ú	writeablerÀ   r¤   rV   r†   rï   Úapply_along_axisr4  r5  r6  r7  rð   r8  ÚsqueezeÚ_get_empty_reduction_resultrÞ   )rZ   r{   r|   rƒ   Úusing_nan_sentinelr;  r>   ÚinferredÚerrÚnotemptyr:  s   &$d$       r-   r8  r8  Ú  só  ø€ ðB  Ÿ™×*Ñ*¨cÑ1×BÐ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%   Â,I Å/BJÉI?É%I:É:I?ÊJ	c               ó$   € V ^8„  d   QhRRRRRR/# )r&   rð   r   r{   r   r)   r~   r+   )r,   s   "r-   r.   r.   F  s&   € ÷ ñ Øðà
ðð ñr/   c                ó  € \         P                  ! V 4      p\         P                  ! \        V 4      4      p\         P                  ! W#V8g  ,          \         P
                  R7      pVP                  \         P                  4       V# )zˆ
The result from a reduction on an empty ndarray.

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

Returns
-------
np.ndarray
rJ   )r¤   rþ   Úaranger„   ÚemptyrË   ÚfillrV   )rð   r{   ÚshpÚdimsÚrets   &&   r-   rF  rF  F  sS   € ô  �(Š(�5‹/€CÜ�9Š9”S˜“ZÓ €DÜ
�(Š(�3˜t‘|Õ$¬B¯J©JÔ
7€CØ‡H�HŒR�V‰VÔØ€Jr/   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r&   Úvalues_shaper   rƒ   rµ   r{   r   Úddofr  r>   rÆ   r)   z-tuple[float | np.ndarray, float | np.ndarray]r+   )r,   s   "r-   r.   r.   ]  sD   € ÷ /ñ /Øð/à
&ð/ð ð/ð ð	/ð
 ð/ð 3ñ/r/   c                óÀ  € \        WW$R7      pWTP                  V4      ,
          p\        V4      '       d*   WS8:  d!   \        P                  p\        P                  pWV3# \        \        P                  V4      pWS8*  pVP                  4       '       dK   \        P                  ! Wa\        P                  4       \        P                  ! WQ\        P                  4       WV3# )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
rJ   )	r&  r<   r   r¤   rV   r   r¥   r[   rÁ   )rT  rƒ   r{   rU  r>   r*  Úds   &&&&&  r-   Ú_get_counts_nanvarrX  ]  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/   ©rU  rU  c               ó$   € V ^8„  d   QhRRRRRR/# )r&   r{   r   r|   r(   rU  r  r+   )r,   s   "r-   r.   r.   �  s*   € ÷ +-ñ +-ð ð+-ð ð	+-ð
 ñ+-r/   c          
     ó@  € V P                   P                  R8X  d=   \        P                  ! V P                   4      ^ ,          pV P	                  RV R24      p V P                   p\        WVR7      w  r\        P                  ! \        WW#VR7      4      p\        Wv4      # )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Ó   zm8[Ú])rƒ   ©r{   r|   rU  rƒ   )	r>   r¹   r¤   rÚ   r¿   rÄ   ÚsqrtÚnanvarrÞ   )rZ   r{   r|   rU  rƒ   rÝ   Ú
orig_dtyperŽ   s   &$$$$   r-   Únanstdra  �  s   € ðH ‡|�|×Ñ˜CÔÜ×Ò §¡Ó-¨aÕ0ˆØ—‘˜s 4 &¨˜]Ó+ˆà—‘€JÜ˜v°DÔ9�L€Fä�WŠW”V˜F°fÈdÔSÓT€FÜ˜Ó,Ð,r/   Úm8c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r&   rZ   r~   r{   r   r|   r(   rU  r  r+   )r,   s   "r-   r.   r.   À  s8   € ÷ Nñ NØðNð ðNð ð	Nð
 ñNr/   c          	     óÞ  € V P                   p\        WV4      pVP                  R9   d)   V P                  R4      p Ve   \        P
                  W&   MFVP                  R8X  d6   \        V P                  WW4R7      \        V P                  WW4R7      ,           # V P                   P                  R8X  d%   \        V P                  WAW0P                   4      w  rgM\        V P                  WAV4      w  rgV'       d,   Ve(   V P                  4       p \        P                  ! W^ 4       \        V P                  V\        P                  R7      4      V,          pVe   \        P                   ! W�4      p\        W€,
          ^,          4      p	Ve   \        P                  ! W”^ 4       V	P                  V\        P                  R7      V,          p
VP                  R8X  d   V
P                  VRR7      p
V
# )	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    Úcr]  rQ   )r{   r>   FrÕ   )r>   rº   r¹   rØ   r¤   rV   r_  ÚrealÚimagrX  rð   rÀ   rÁ   r'  r  rË   Úexpand_dims)rZ   r{   r|   rU  rƒ   r>   r*  rW  ÚavgÚsqrrŽ   s   &$$$$      r-   r_  r_  ¾  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               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r&   rZ   r~   r{   r   r|   r(   rU  r  rƒ   rµ   r)   r"  r+   )r,   s   "r-   r.   r.     sF   € ÷ 5)ñ 5)Øð5)ð ð5)ð ð	5)ð
 ð5)ð 'ð5)ð ñ5)r/   c               ó8  € \        WW#VR7       \        WV4      pV P                  P                  R9  d   V P	                  R4      p V'       g+   Ve'   VP                  4       '       d   \        P                  # \        P                  ! \        P                  4      pV P                  P                  R8X  d   V P                  p\        V P                  WAW54      w  rg\        WW#VR7      p\        P                  ! V4      \        P                  ! V4      ,          # )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)
r]  Úfcr    rQ   )r_  rº   r>   r¹   rØ   r[   r¤   rV   rË   rX  rð   r^  )	rZ   r{   r|   rU  rƒ   r)  r*  r  Úvars	   &$$$$    r-   Únansemro    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                ód   a a€ \        R S  2R7      \        RRRRRR/R VV 3R lll4       4       pV# )	rV   )rv   r{   Nr|   Trƒ   c               ó(   € V ^8„  d   QhRRRRRRRR/# rä   r+   )r,   s   "r-   r.   Ú _nanminmax.<locals>.__annotate__M  s2   € ÷ ñ Øðð ðð ð	ð
 +ñr/   c               óæ   <€ V P                   ^ 8X  d   \        W4      # V P                  p\        WSVR7      w  r\	        V S4      ! V4      p\        WQW0P                  VP                  R9   R7      pV# )r   ©r²   rƒ   r¸   )rÃ   )r†   rˆ   r>   rÄ   r’   r  rð   r¹   )rZ   r{   r|   rƒ   r>   rŽ   r²   Úmeths   &$$$  €€r-   Ú	reductionÚ_nanminmax.<locals>.reductionK  sp   ø€ ð �;‰;˜!ÔÜ$ VÓ2Ð2à—‘ˆÜ"Ø¨>Àô
‰ˆô ˜ Ô& tÓ,ˆÜ Ø˜$§¡¸5¿:¹:ÈÑ;Mô
ˆð ˆr/   )rr   rë   )ru  r²   rv  s   ff r-   Ú
_nanminmaxrx  J  sS   ù€ Ü˜c $ ˜LÔ)Üðð  $ðð ð	ð
 .2÷ò ó ó *ðð( Ðr/   Úminr­   )r²   Úmaxú-infc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# ©r&   rZ   r~   r{   r   r|   r(   rƒ   rµ   r)   zint | np.ndarrayr+   )r,   s   "r-   r.   r.   h  ó<   € ÷ +ñ +Øð+ð ð+ð ð	+ð
 'ð+ð ñ+r/   c               ób   € \        V RRVR7      w  rV P                  V4      p\        WAW24      pV# )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])
Tr{  rt  )rÄ   ÚargmaxÚ_maybe_arg_null_out©rZ   r{   r|   rƒ   rŽ   s   &$$$ r-   Ú	nanargmaxrƒ  h  ó8   € ôL ˜v t¸FÈÔN�L€FØ�]‰]˜4Ó €Fô ! ¨tÓ<€FØ€Mr/   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# r}  r+   )r,   s   "r-   r.   r.   –  r~  r/   c               ób   € \        V RRVR7      w  rV P                  V4      p\        WAW24      pV# )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­   rt  )rÄ   Úargminr�  r‚  s   &$$$ r-   Ú	nanargminrˆ  –  r„  r/   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# r!  r+   )r,   s   "r-   r.   r.   Æ  sC   € ÷ Tñ TØðTð ðTð ð	Tð
 'ðTð ñTr/   c               ó&  € \        WV4      pV P                  P                  R8w  d)   V P                  R4      p \	        V P
                  W14      pM"\	        V P
                  W1V P                  R7      pV'       d-   Ve)   V P                  4       p \        P                  ! W^ 4       M2V'       g+   Ve'   VP                  4       '       d   \        P                  # \        P                  ! RRR7      ;_uu_ 4        V P                  V\        P                  R7      V,          pRRR4       Ve   \        P                  ! XV4      pV X,
          pV'       d   Ve   \        P                  ! Wc^ 4       V^,          pWv,          pVP                  V\        P                  R7      p	VP                  V\        P                  R7      p
\        P                  ! V 4      P!                  VRR7      p\        P"                  ! V	P                  4      P$                  pWË,          ^,          V,          pWË,          ^,          V,          p\'        W�4      p	\'        W®4      p
\        P                  ! RRR7      ;_uu_ 4        WD^,
          R	,          ,          V^,
          ,          W©R
,          ,          ,          pRRR4       V P                  pVP                  R8X  d   XP                  VRR7      p\)        X\        P*                  4      '       d3   \        P,                  ! V	^ 8H  ^ V4      p\        P                  Wô^8  &   V# V	^ 8X  d   VP/                  ^ 4      MTpV^8  d   \        P                  # V#   + '       g   i     ELT; i  + '       g   i     LÙ; i)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)
rQ   r    rJ   Nr%  ©ÚinvalidÚdivideç        ©Úinitialg      à?g      ø?FrÕ   )rº   r>   r¹   rØ   r&  rð   rÀ   r¤   rÁ   r[   rV   r(  r  rË   rh  Úabsrz  ÚfinfoÚepsÚ_zero_out_fperrr£   r¥   rÂ   r<   )rZ   r{   r|   rƒ   r*  ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3Úmax_absr“  Úconstant_tolerance2Úconstant_tolerance3rŽ   r>   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Ö	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Ö	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Ð	7ú÷* 
8×	7ús   Ã8)M,É69N Í,M=	Î N	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# r!  r+   )r,   s   "r-   r.   r.     sC   € ÷ rñ rØðrð ðrð ð	rð
 'ðrð ñrr/   c               ó˜  € \        WV4      pV P                  P                  R8w  d)   V P                  R4      p \	        V P
                  W14      pM"\	        V P
                  W1V P                  R7      pV'       d-   Ve)   V P                  4       p \        P                  ! W^ 4       M2V'       g+   Ve'   VP                  4       '       d   \        P                  # \        P                  ! RRR7      ;_uu_ 4        V P                  V\        P                  R7      V,          pRRR4       Ve   \        P                  ! XV4      pV X,
          pV'       d   Ve   \        P                  ! Wc^ 4       V^,          pV^,          pVP                  V\        P                  R7      p	VP                  V\        P                  R7      p
\        P                  ! V 4      P!                  VRR7      p\        P"                  ! V	P                  4      P$                  pWË,          ^,          V,          pWË,          ^,          V,          p\'        W�4      p	\'        W®4      p
\        P                  ! RRR7      ;_uu_ 4        ^V^,
          ^,          ,          V^,
          V^,
          ,          ,          pWD^,           ,          V^,
          ,          V
,          pV^,
          V^,
          ,          V	^,          ,          pRRR4       \)        X\        P*                  4      '       g:   V^8  d   \        P                  # V^ 8X  d   V P                  P-                  ^ 4      # \        P                  ! RRR7      ;_uu_ 4        XV,          X,
          pRRR4       V P                  pVP                  R8X  d   XP                  VR	R
7      p\)        X\        P*                  4      '       d2   \        P.                  ! V^ 8H  ^ V4      p\        P                  VV^8  &   V#   + '       g   i     ELù; i  + '       g   i     EL:; i  + '       g   i     L»; i)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)
rQ   r    rJ   Nr%  r‹  rŽ  r�  FrÕ   )rº   r>   r¹   rØ   r&  rð   rÀ   r¤   rÁ   r[   rV   r(  r  rË   rh  r‘  rz  r’  r“  r”  r£   r¥   r<   rÂ   )rZ   r{   r|   rƒ   r*  r•  r–  r—  Ú	adjusted4r™  Úm4r›  r“  rœ  Úconstant_tolerance4ÚadjÚ	numeratorÚdenominatorrŽ   r>   s   &$$$                r-   Únankurtr§    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Ö	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Ö	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Ö	7Ø˜[Õ(¨3Õ.ˆ÷ 
8ð �L‰L€EØ‡z�z�SÔØ—‘˜u¨5�Ó1ˆä�&œ"Ÿ*™*×%Ò%Ü—’˜+¨Ñ*¨A¨vÓ6ˆÜŸF™Fˆˆu�q‰yÑà€M÷E 
8×	7Ð	7ú÷T 
8×	7Ð	7ú÷ 
8×	7ús%   Ã8)PÉ7A=P%Í5P9ÐP"	Ð%P6	Ð9Q		c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r&   rZ   r~   r{   r   r|   r(   r‚   r  rƒ   rµ   r)   r"  r+   )r,   s   "r-   r.   r.   –  sF   € ÷ (ñ (Øð(ð ð(ð ð	(ð
 ð(ð 'ð(ð ñ(r/   c               ó¬   € \        WV4      pV'       d   Ve   V P                  4       p ^W&   V P                  V4      p\        WQW@P                  VR7      # )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À   Úprodr  rð   )rZ   r{   r|   r‚   rƒ   rŽ   s   &$$$$ r-   r›   r›   ”  sS   € ô@ ˜6¨4Ó0€Dç�$Ò"Ø—‘“ˆØˆ‰Ø�[‰[˜Ó€Fô Ø�dŸL™L°Iôð r/   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r&   rŽ   r~   r{   r   rƒ   rµ   r|   r(   r)   znp.ndarray | intr+   )r,   s   "r-   r.   r.   Á  s:   € ÷ ñ Øðà
ðð 'ðð ð	ð
 ñr/   c                óÈ  € Vf   V # Ve   \        V RR4      '       gU   V'       d"   VP                  4       '       d   \        R4      hV'       g"   VP                  4       '       d   \        R4      hV # V'       d1   VP                  V4      P                  4       '       d   \        R4      hV'       g1   VP                  V4      P                  4       '       d   \        R4      hV # )Nrï   FzEncountered all NA valuesz)Encountered an NA value with skipna=False)r’   r  r_   r[   )rŽ   r{   rƒ   r|   s   &&&&r-   r�  r�  Á  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          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r&   rT  r   rƒ   rµ   r{   r   r>   znp.dtype[np.floating]r)   z&np.floating | npt.NDArray[np.floating]r+   )r,   s   "r-   r.   r.   ×  s:   € ÷ &+ñ &+Øð&+à
&ð&+ð ð&+ð !ð	&+ð
 ,ñ&+r/   c                óz  € VfN   Ve#   VP                   VP                  4       ,
          pM\        P                  ! V 4      pVP	                  V4      # Ve+   VP
                  V,          VP                  V4      ,
          pMW,          p\        V4      '       d   VP	                  V4      # VP                  VRR7      # )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Õ   )r†   r  r¤   rª  r<   rð   r   rØ   )rT  rƒ   r{   r>   Ú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               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r&   rŽ   znp.ndarray | float | NaTTyper{   r   rƒ   rµ   rð   útuple[int, ...]r‚   r  rÃ   r(   r)   r+   )r,   s   "r-   r.   r.      sN   € ÷ 1ñ 1Ø(ð1à
ð1ð 'ð1ð ð	1ð
 ð1ð ð1ð "ñ1r/   c                óf  € Vf
   V^ 8X  d   V # VEeB   \        V \        P                  4      '       Ed!   Ve5   VP                  V,          VP	                  V4      ,
          V,
          ^ 8  pM=W1,          V,
          ^ 8  pVRV W1^,           R ,           p\        P
                  ! Wx4      p\        P                  ! V4      '       dŽ   V'       d   \        W&   V # \        V 4      '       dg   \        P                  ! V 4      '       d   V P                  R4      p M$\        V 4      '       g   V P                  RRR7      p \        P                  W&   V # RW&   V # V \        JdT   \        W2V4      '       dB   \        V RR4      p	\        V	4      '       d   V	P!                  R4      p V # \        P                  p V # )za
Returns
-------
Dtype
    The product of all elements on a given axis. ( NaNs are treated as 1)
NÚc16r    FrÕ   r>   rV   )r£   r¤   r¥   rð   r  Úbroadcast_tor[   r
   r   ÚiscomplexobjrØ   r   rV   r   Úcheck_below_min_countr’   r<   )
rŽ   r{   rƒ   rð   r‚   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               ó(   € V ^8„  d   QhRRRRRRRR/# )	r&   rð   r±  rƒ   rµ   r‚   r  r)   r(   r+   )r,   s   "r-   r.   r.   4  s,   € ÷ ñ ØðØ">ðØKNðà	ñr/   c                óœ   € V^ 8”  dE   Vf   \         P                  ! V 4      pM!VP                  VP                  4       ,
          pW28  d   R# R# )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
TF)r¤   rª  r†   r  )rð   rƒ   r‚   Ú	non_nullss   &&& r-   r¶  r¶  4  s=   € ð( �1„}ØŠ<äŸš ›‰IàŸ	™	 D§H¡H£JÕ.ˆIØÔ ÙÙr/   c               ó   € V ^8„  d   QhRR/# )r&   Útolr.  r+   )r,   s   "r-   r.   r.   S  s   € ÷ ?ñ ?Ð0ñ ?r/   c                ó  € \        V \        P                  4      '       d0   \        P                  ! \        P                  ! V 4      V8  ^ V 4      # \        P                  ! V 4      V8  d   V P
                  P                  ^ 4      # T # ©r   )r£   r¤   r¥   rÂ   r‘  r>   r<   )Úargr¿  s   &&r-   r”  r”  S  sZ   € ä�#”r—z‘z×"Ò"Ü�xŠxœŸš˜s› cÑ)¨1¨cÓ2Ð2ä$&§F¢F¨3£K°#Ô$5ˆs�y‰y�~‰~˜aÓ Ð>¸3Ð>r/   ÚmethodÚpearsonÚmin_periodsc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r&   Úar~   ÚbrÃ  r   rÅ  ú
int | Noner)   r"  r+   )r,   s   "r-   r.   r.   \  s:   € ÷ ñ Øðàðð ð	ð
 ðð ñr/   c               ój  € \        V 4      \        V4      8w  d   \        R4      hVf   ^p\        V 4      \        V4      ,          pVP                  4       '       g   W,          p W,          p\        V 4      V8  d   \        P
                  # \        V 4      p \        V4      p\        V4      pV! W4      # )z
a, b: ndarrays
z'Operands to nancorr must have same size)r„   ÚAssertionErrorr    r  r¤   rV   r'  Úget_corr_func)rÇ  rÈ  rÃ  rÅ  ÚvalidrQ   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               ó    € V ^8„  d   QhRRRR/# )r&   rÃ  r   r)   z)Callable[[np.ndarray, np.ndarray], float]r+   )r,   s   "r-   r.   r.   {  s   € ÷ ñ Øðà.ñr/   c                ó¶   aa€ V R 8X  d   ^ RI Ho V3R lpV# V R8X  d   ^ RI Ho V3R lpV# V R8X  d   R pV# \        V 4      '       d   V # \	        RV  R	24      h)
Úkendall)Ú
kendalltauc                ó"   <€ S! W4      ^ ,          # rÁ  r+   )rÇ  rÈ  rÒ  s   &&€r-   rá   Úget_corr_func.<locals>.func�  s   ø€ Ù˜aÓ# AÕ&Ð&r/   Úspearman)Ú	spearmanrc                ó"   <€ S! W4      ^ ,          # rÁ  r+   )rÇ  rÈ  rÖ  s   &&€r-   rá   rÔ  ˆ  s   ø€ Ù˜Q“? 1Õ%Ð%r/   rÄ  c                ó<   € \         P                  ! W4      R,          # )r   ©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Ö  Úcallabler_   )rÃ  rá   rÒ  rÖ  s   & @@r-   rÌ  rÌ  {  su   ù€ ð �ÔÝ*õ	'ð ˆØ	�:Ô	Ý)õ	&ð ˆØ	�9Ô	ò	+ð ˆÜ	�&×	Ò	Øˆä
Ø
˜6˜(ð #8ð 	8óð r/   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r&   rÇ  r~   rÈ  rÅ  rÉ  rU  r)   r"  r+   )r,   s   "r-   r.   r.   œ  s:   € ÷ )ñ )Øð)àð)ð ð	)ð
 ð)ð ñ)r/   c               ó‚  € \        V 4      \        V4      8w  d   \        R 4      hVf   ^p\        V 4      \        V4      ,          pVP                  4       '       g   W,          p W,          p\        V 4      V8  d   \        P
                  # \        V 4      p \        V4      p\        P                  ! WVR7      R,          # )z&Operands to nancov must have same sizerY  rÙ  )r„   rË  r    r  r¤   rV   r'  Úcov)rÇ  rÈ  rÅ  rU  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                ó  € \        V \        P                  4      '       dß   V P                  P                  R 9   d"   V P                  \        P                  4      p V # V P                  \        8X  d‹   \        P                  ! V 4      pVR9   d   \        RV  R24      h V P                  \        P                  4      p \        P                  ! \        P                  ! V 4      4      '       g   V P                  p V #  V # \!        V 4      '       gV   \#        V 4      '       gE   \%        V 4      '       g4   \        V \&        4      '       d   \        RV  R24      h \)        V 4      p V # V #   \        \        3 dH     T P                  \        P                  4      p  T #   \         d   p\        RT  R24      ThRp?ii ; ii ; i  \        \        3 d4     \+        T 4      p  T #   \         d   p\        RT  R24      ThRp?ii ; ii ; i)r·   zCould not convert r=  NzCould not convert string 'z' to numericr?  )r£   r¤   r¥   r>   r¹   rØ   rË   r�   r   rB  r^   Ú
complex128r[   rg  rf  r_   r   r   r   r˜   r"  Úcomplex)r  rH  rI  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' ÅG Å'F?Å9FÆF;Æ&F6Æ6F;Æ;F?ÇHÇG"Ç"HÇ-G=Ç=HÈHc               ó$   € V ^8„  d   QhRRRRRR/# )r&   rZ   r   r|   r(   r)   r+   )r,   s   "r-   r.   r.   Û  s!   € ÷ "ñ "˜)ð "¸Dð "ÀYñ "r/   c          	     óÂ  € \         P                  R\         P                  3\         P                  P                  \         P
                  ) \         P                  3\         P                  R\         P                  3\         P                  P                  \         P
                  \         P                  3/V,          w  r4V P                  P                  R9  g   Q hV'       dt   \        V P                  P                  \         P                  \         P                  34      '       g0   V P                  4       p\        V4      pW5V&   V! V^ R7      pWGV&   V# V! V ^ R7      pV# )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¤   ÚcumprodrV   ÚmaximumÚ
accumulater¯   ÚcumsumÚminimumr>   r¹   rL   r<   rÐ   Úbool_rÀ   r   )rZ   Ú
accum_funcr|   Úmask_aÚmask_bÚvalsrƒ   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)NN)NNNr1   )rø   F)]Ú
__future__r   rh   rX   Útypingr   r   r   r4  Ú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“   r2   r3   r4   r6   rr   r‰   r‹   r³   rº   rÄ   rÍ   r®   rÞ   rë   rˆ   r  r  r  rš   rç   rœ   r8  rF  r>   rË   rX  ra  r_  ro  rx  ÚnanminÚnanmaxrƒ  rˆ  rž  r§  r›   r�  r&  r  r¶  r”  rÎ  rÌ  rà  r'  rð  r+   r/   r-   Ú<module>rý     sÒ  ðÝ "ã Û ÷ñ ó
 ã å %÷ó ÷
÷ 
õ 
õ ?÷	÷ 	ó 	÷ñ ÷ Ý(á °VÔ<€Ø $˜Ð Ø€÷ñ ‘:Ð6Ó7Ô 8÷ñ ÷>5ñ 5õpõ(
÷õ.)÷XDõN	õ2÷'õTõDEõ>ðB5ð  ð5ð ð	5ð
 *.÷5ðp5ð  ð5ð ð	5ð
 *.÷5ñp 
ˆ$ƒØØð*ð  ð*ð ð	*ð
 ð*ð *.ö*ó ó ó ð*õZñ  ÓØð@ð  ð@ð ð	@ð
 *.ö@ó ó ð@ñF Óðh%Ø26ðh%ØGKðh%ØRVöh%ó ðh%õVð8 —h’h˜rŸz™zÓ*÷/ñd ˜Ôð+-ð  ð+-ð ð	+-ð
 ð+-ð 
ö+-ó ð+-ñ\ 
ˆ$�ÓÙ˜ÔðNð  ðNð ð	Nð
 ðNð 
öNó ó ðNñb 
ˆ$�Óð5)ð  ð5)ð ð	5)ð
 ð5)ð *.ö5)ó ð5)òpñ4 
�E¨&Ô	1€Ù	�E¨&Ô	1€ð+ð  ð+ð ð	+ð
 *.÷+ð\+ð  ð+ð ð	+ð
 *.÷+ñ\ 
ˆ$�ÓØðTð  ðTð ð	Tð
 *.öTó ó ðTñn 
ˆ$�ÓØðrð  ðrð ð	rð
 *.öró ó ðrñj 
ˆ$�ÓØð(ð  ð(ð ð	(ð
 ð(ð *.ö(ó ó ð(õVð4 $&§8¢8¨B¯J©JÓ#7÷	&+÷R1õhõ>?ñ 
ˆ$�Óðð !*ð	ð
 #öó ðõ>ñ@ 
ˆ$�Óð)ð #ð	)ð
 ö)ó ð)ò6!÷H"r/   