§
    tŠtjÑ  ã                  óä  — d dl mZ d dlZd dlZd dlmZmZmZ d dlZd dl	Z
d dlmZ d dlmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d	l'm(Z(m)Z)m*Z* erd d
l+m,Z,  edd¬¦  «        Z-e-duZ.da/d„d…d„Z0 e0 ed¦  «        ¦  «          G d„ d¦  «        Z1 G d„ d¦  «        Z2d†d„Z3d‡d„Z4	 dˆd‰d"„Z5dŠd(„Z6	 	 	 d‹dŒd-„Z7d�d/„Z8dŽd0„Z9d�d�d1„Z:d‘d4„Z;d’d8„Z<d‘d9„Z=dddd:œd“d;„Z>dddd:œd“d<„Z? e1d=¦  «        e;e=ddd dd>œd”dB„¦   «         ¦   «         ¦   «         Z@d•dH„ZA e2¦   «         e;dddd:œd–dJ„¦   «         ¦   «         ZB e2¦   «         dddd:œd—dL„¦   «         ZCd˜dP„ZD e
jE        e
jF        ¦  «        fd™dT„ZG e2dU¬V¦  «        dddUddWœdšdX„¦   «         ZH e1d=dY¦  «         e2dU¬V¦  «        dddUddWœd›dZ„¦   «         ¦   «         ZI e1d=dY¦  «        dddUddWœdœd[„¦   «         ZJd\„ ZK eKd]d^¬_¦  «        ZL eKd`da¬_¦  «        ZMdddd:œd�dc„ZNdddd:œd�dd„ZO e1d=dY¦  «        e=dddd:œd–de„¦   «         ¦   «         ZP e1d=dY¦  «        e=dddd:œd–df„¦   «         ¦   «         ZQ e1d=dY¦  «        e=ddd dd>œdždg„¦   «         ¦   «         ZRdŸdi„ZS e
jE        e
jF        ¦  «        fd dl„ZT	 	 d¡d¢dp„ZUd£dq„ZVd¤ds„ZW e1d=dY¦  «        dtdduœd¥d|„¦   «         ZXd¦d~„ZY e1d=dY¦  «        ddUdœd§d€„¦   «         ZZd�„ Z[d¨dƒ„Z\dS )©é    )Ú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)ÚerrorsFTÚvÚboolÚreturnÚNonec                ó   — t           r| ad S d S ©N)Ú_BOTTLENECK_INSTALLEDÚ_USE_BOTTLENECK)r%   s    úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pandas/core/nanops.pyÚset_use_bottleneckr.   ;   s   € õ ð Øˆˆˆðð ó    zcompute.use_bottleneckc                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd
„Zˆ xZS )ÚdisallowÚdtypesr   r'   r(   c                ó„   •— t          ¦   «                              ¦   «          t          d„ |D ¦   «         ¦  «        | _        d S )Nc              3  ó>   K  — | ]}t          |¦  «        j        V — Œd S r*   )r   Útype)Ú.0Údtypes     r-   ú	<genexpr>z$disallow.__init__.<locals>.<genexpr>H   s-   è è € ÐIÐI¸�L¨Ñ/Ô/Ô4ÐIÐIÐIÐIÐIÐIr/   )ÚsuperÚ__init__Útupler2   )Úselfr2   Ú	__class__s     €r-   r:   zdisallow.__init__F   s;   ø€ Ý‰Œ×ÒÑÔÐÝÐIÐIÀ&ÐIÑIÔIÑIÔIˆŒˆˆr/   r&   c                ó`   — t          |d¦  «        ot          |j        j        | j        ¦  «        S )Nr7   )ÚhasattrÚ
issubclassr7   r5   r2   )r<   Úobjs     r-   Úcheckzdisallow.checkJ   s'   € Ý�s˜GÑ$Ô$ÐP­°C´I´NÀDÄKÑ)PÔ)PÐPr/   Úfr   c                óp   ‡ ‡— t          j        ‰¦  «        ˆˆ fd„¦   «         }t          t          |¦  «        S )Nc                 óf  •— t          j        | |                     ¦   «         ¦  «        }t          ˆfd„|D ¦   «         ¦  «        r.‰j                             dd¦  «        }t          d|› d�¦  «        ‚	  ‰| i |¤ŽS # t          $ r+}t          | d         ¦  «        rt          |¦  «        |‚‚ d }~ww xY w)Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r*   )rB   )r6   rA   r<   s     €r-   r8   z0disallow.__call__.<locals>._f.<locals>.<genexpr>Q   s-   øè è € Ð7Ð7 s�4—:’:˜c‘?”?Ð7Ð7Ð7Ð7Ð7Ð7r/   ÚnanÚ zreduction operation 'z' not allowed for this dtyper   )	Ú	itertoolsÚchainÚvaluesÚanyÚ__name__ÚreplaceÚ	TypeErrorÚ
ValueErrorr   )ÚargsÚkwargsÚobj_iterÚf_nameÚerC   r<   s        €€r-   Ú_fzdisallow.__call__.<locals>._fN   sØ   ø€ å ” t¨V¯]ª]©_¬_Ñ=Ô=ˆHÝÐ7Ð7Ð7Ð7¨hÐ7Ñ7Ô7Ñ7Ô7ð Øœ×+Ò+¨E°2Ñ6Ô6�ÝØP¨FÐPÐPÐPñô ð ð	Ø�q˜$Ð) &Ð)Ð)Ð)øÝð ð ð õ
 # 4¨¤7Ñ+Ô+ð .Ý# A™,œ,¨AÐ-Øøøøøðøøøs   Á3A; Á;
B0Â&B+Â+B0©Ú	functoolsÚwrapsr   r   )r<   rC   rV   s   `` r-   Ú__call__zdisallow.__call__M   sG   øø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ñ 
Ô	ð	õ$ •A�r‰{Œ{Ðr/   )r2   r   r'   r(   ©r'   r&   )rC   r   r'   r   )rM   Ú
__module__Ú__qualname__r:   rB   rZ   Ú__classcell__)r=   s   @r-   r1   r1   E   so   ø€ € € € € ðJð Jð Jð Jð Jð JðQð Qð Qð Qðð ð ð ð ð ð ð r/   r1   c                  ó    — e Zd Zdd	d„Zd
d„ZdS )Úbottleneck_switchNr'   r(   c                ó"   — || _         || _        d S r*   )ÚnamerR   )r<   rb   rR   s      r-   r:   zbottleneck_switch.__init__e   s   € ØˆŒ	ØˆŒˆˆr/   Úaltr   c                óþ   ‡ ‡‡‡— ‰ j         p‰j        Š	 t          t          ‰¦  «        Šn# t          t
          f$ r d ŠY nw xY wt          j        ‰¦  «        d ddœd
ˆˆˆˆ fd	„¦   «         }t          t          |¦  «        S )NT©ÚaxisÚskipnarK   ú
np.ndarrayrf   úAxisInt | Nonerg   r&   c               óü  •— t          ‰
j        ¦  «        dk    r(‰
j                             ¦   «         D ]\  }}||vr|||<   Œ| j        dk    r%|                     d¦  «        €t          | |¦  «        S t          rw|rut          | j        ‰	¦  «        r`|                     dd ¦  «        €=| 	                    dd ¦  «          ‰| fd|i|¤Ž}t          |¦  «        r ‰| f||dœ|¤Ž}n ‰| f||dœ|¤Ž}n ‰| f||dœ|¤Ž}|S )Nr   Ú	min_countÚmaskrf   re   )ÚlenrR   ÚitemsÚsizeÚgetÚ_na_for_min_countr,   Ú_bn_ok_dtyper7   ÚpopÚ	_has_infs)rK   rf   rg   ÚkwdsÚkr%   Úresultrc   Úbn_funcÚbn_namer<   s          €€€€r-   rC   z%bottleneck_switch.__call__.<locals>.fq   s^  ø€ õ �4”;ÑÔ !Ò#Ð#Ø œK×-Ò-Ñ/Ô/ð $ð $‘D�A�qØ �}�}Ø"#˜˜Q™øàŒ{˜aÒÐ D§H¢H¨[Ñ$9Ô$9Ð$Aõ )¨°Ñ6Ô6Ð6åð G 6ð G­l¸6¼<ÈÑ.QÔ.Qð GØ—8’8˜F DÑ)Ô)Ð1ð —H’H˜V TÑ*Ô*Ð*Ø$˜W VÐ?Ð?°$Ð?¸$Ð?Ð?�Fõ ! Ñ(Ô(ð OØ!$  VÐ!N°$¸vÐ!NÐ!NÈÐ!NÐ!N˜øà ˜S ÐJ¨d¸6ÐJÐJÀTÐJÐJ�F�Fà˜˜VÐF¨$°vÐFÐFÀÐFÐF�àˆMr/   )rK   rh   rf   ri   rg   r&   )
rb   rM   ÚgetattrÚbnÚAttributeErrorÚ	NameErrorrX   rY   r   r   )r<   rc   rC   rx   ry   s   `` @@r-   rZ   zbottleneck_switch.__call__i   sº   øøøø€ Ø”)Ð+˜sœ|ˆð	Ý�b 'Ñ*Ô*ˆGˆGøÝ¥	Ð*ð 	ð 	ð 	ØˆGˆGˆGð	øøøõ 
Œ˜Ñ	Ô	ð $(Øð	%	ð %	ð %	ð %	ð %	ð %	ð %	ð %	ð %	ð %	ñ 
Ô	ð%	õN •A�q‰zŒzÐs   ”* ªA ¿A r*   )r'   r(   )rc   r   r'   r   )rM   r\   r]   r:   rZ   © r/   r-   r`   r`   d   sA   € € € € € ðð ð ð ð ð0ð 0ð 0ð 0ð 0ð 0r/   r`   r7   r   rb   Ústrc                óB   — | t           k    rt          | ¦  «        s|dvS dS )N)ÚnansumÚnanprodÚnanmeanF)Úobjectr   )r7   rb   s     r-   rr   rr   œ   s+   € à•‚€Õ2°5Ñ9Ô9€ð Ð;Ð;Ð;Øˆ5r/   c                ó  — t          | t          j        ¦  «        r0| j        dv r't	          j        |                      d¦  «        ¦  «        S 	 t          j        | ¦  «                             ¦   «         S # t          t          f$ r Y dS w xY w)N)Úf8Úf4ÚKF)Ú
isinstanceÚnpÚndarrayr7   r   Úhas_infsÚravelÚisinfrL   rO   ÚNotImplementedError)rw   s    r-   rt   rt   °   sŠ   € Ý�&�"œ*Ñ%Ô%ð 3ØŒ<˜<Ð'Ð'õ ”< §¢¨SÑ 1Ô 1Ñ2Ô2Ð2ðÝŒx˜ÑÔ×#Ò#Ñ%Ô%Ð%øÝÕ*Ð+ð ð ð àˆuˆuðøøøs   Á%A2 Á2BÂBÚ
fill_valueúScalar | Nonec                óü   — |�|S t          | ¦  «        r-|€t          j        S |dk    rt          j        S t          j         S |dk    rt          j        t
          j        ¦  «        S t          j        t          ¦  «        S )z9return the correct fill value for the dtype of the valuesNú+inf)Ú_na_ok_dtyperŠ   rG   ÚinfÚint64r   Úi8maxr
   )r7   r�   Úfill_value_typs      r-   Ú_get_fill_valuer™   ½   su   € ð ÐØÐÝ�EÑÔð ØÐ!Ý”6ˆMØ˜vÒ%Ð%Ý”6ˆMå”F�7ˆNØ	˜6Ò	!Ð	!õ
 Œx�œ	Ñ"Ô"Ð"åŒx�‰~Œ~Ðr/   rK   rh   rg   rl   únpt.NDArray[np.bool_] | Nonec                óh   — |€/| j         j        dv rdS |s| j         j        dv rt          | ¦  «        }|S )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)r7   Úkindr   )rK   rg   rl   s      r-   Ú_maybe_get_maskrŸ   Ô   sF   € ðB €|ØŒ<Ô Ð%Ð%à�4àð 	 �V”\Ô&¨$Ð.Ð.Ý˜‘<”<ˆDà€Kr/   r   r˜   ú
str | Noneú/tuple[np.ndarray, npt.NDArray[np.bool_] | None]c                óª  — t          | ||¦  «        }| j        }d}| j        j        dv r)t          j        |                      d¦  «        ¦  «        } d}|r}|�{t          |||¬¦  «        }|�g|                     ¦   «         rS|st          |¦  «        r+|  	                    ¦   «         } t          j
        | ||¦  «         nt          j        | | |¦  «        } | |fS )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�   Úi8TN)r�   r˜   )rŸ   r7   rž   rŠ   ÚasarrayÚviewr™   rL   r”   ÚcopyÚputmaskÚwhere)rK   rg   r�   r˜   rl   r7   Údatetimelikes          r-   Ú_get_valuesrª      sö   € õR ˜6 6¨4Ñ0Ô0€DàŒL€Eà€LØ„|Ô˜DÐ Ð õ ”˜FŸKšK¨Ñ-Ô-Ñ.Ô.ˆØˆàð A�4Ð#õ %Ø˜j¸ð
ñ 
ô 
ˆ
ð Ð!Ø�xŠx‰zŒzð AØð A¥<°Ñ#6Ô#6ð AØ#Ÿ[š[™]œ]�FÝ”J˜v t¨ZÑ8Ô8Ð8Ð8õ  œX t e¨V°ZÑ@Ô@�Fà�4ˆ<Ðr/   únp.dtypec                ó   — | }| j         dv rt          j        t          j        ¦  «        }nS| j         dk    rt          j        t          j        ¦  «        }n)| j         dk    rt          j        t          j        ¦  «        }|S )NÚbiÚurC   )rž   rŠ   r7   r–   Úuint64Úfloat64)r7   Ú	dtype_maxs     r-   Ú_get_dtype_maxr²   G  sk   € à€IØ„z�TÐÐÝ”H�RœXÑ&Ô&ˆ	ˆ	Ø	Œ�sÒ	Ð	Ý”H�RœYÑ'Ô'ˆ	ˆ	Ø	Œ�sÒ	Ð	Ý”H�RœZÑ(Ô(ˆ	ØÐr/   c                ód   — t          | ¦  «        rdS t          | j        t          j        ¦  «         S )NF)r   r@   r5   rŠ   Úinteger©r7   s    r-   r”   r”   S  s.   € Ý˜5Ñ!Ô!ð ØˆuÝ˜%œ*¥b¤jÑ1Ô1Ð1Ð1r/   c                óÎ  — | t           u r�nÙ|j        dk    rÜ|€t          }t          | t          j        ¦  «        s£t          |¦  «        r
J d¦   «         ‚| |k    rt          j        } t          | ¦  «        r)t	          j        dd¦  «         	                    |¦  «        } n't	          j
        | ¦  «                             |¦  «        } |  	                    |d¬¦  «        } �n|  	                    |¦  «        } nò|j        dk    rçt          | t          j        ¦  «        s¥| |k    st	          j        | ¦  «        r0t	          j        |¦  «        d	         }t	          j        d|¦  «        } nƒt	          j        | ¦  «        t           j        k    rt%          d
¦  «        ‚t	          j
        | ¦  «         	                    |d¬¦  «        } n(|  	                    d¦  «                             |¦  «        } | S )zwrap our results if neededÚMNzExpected non-null fill_valuer   ÚnsF©r¦   Úmr   zoverflow in timedelta operationzm8[ns])r   rž   r
   r‰   rŠ   r‹   r   rG   Ú
datetime64Úastyper–   r¥   ÚisnanÚdatetime_dataÚtimedelta64Úfabsr   r—   rP   )rw   r7   r�   Úunits       r-   Ú_wrap_resultsrÂ   Y  s´  € à•€}€}Ùà	Œ�sÒ	Ð	ØÐåˆJÝ˜&¥"¤*Ñ-Ô-ð 	*Ý˜JÑ'Ô'ÐGÐGÐ)GÑGÔGÐ'Ø˜Ò#Ð#Ýœ�å�F‰|Œ|ð 6Ýœ u¨dÑ3Ô3×:Ò:¸5ÑAÔA��åœ &Ñ)Ô)×.Ò.¨uÑ5Ô5�à—]’] 5¨u�]Ñ5Ô5ˆF‰Fð —]’] 5Ñ)Ô)ˆFˆFØ	Œ�sÒ	Ð	Ý˜&¥"¤*Ñ-Ô-ð 	9Ø˜Ò#Ð#¥r¤x°Ñ'7Ô'7Ð#ÝÔ'¨Ñ.Ô.¨qÔ1�Ýœ¨¨tÑ4Ô4��å”˜‘”¥3¤9Ò,Ð,å Ð!BÑCÔCÐCõ œ &Ñ)Ô)×0Ò0°¸UÐ0ÑCÔC��ð —]’] 8Ñ,Ô,×1Ò1°%Ñ8Ô8ˆFà€Mr/   Úfuncr   c                óx   ‡ — t          j        ‰ ¦  «        ddddœdˆ fd„¦   «         }t          t          |¦  «        S )z˜
    If we have datetime64 or timedelta64 values, ensure we have a correct
    mask before calling the wrapped function, then cast back afterwards.
    NT©rf   rg   rl   rK   rh   rf   ri   rg   r&   rl   rš   c               óÔ   •— | }| j         j        dv }|r|€t          | ¦  «        } ‰| f|||dœ|¤Ž}|r4t          ||j         t          ¬¦  «        }|s|€J ‚t          ||||¦  «        }|S )Nr�   rÅ   )r�   )r7   rž   r   rÂ   r
   Ú_mask_datetimelike_result)	rK   rf   rg   rl   rR   Úorig_valuesr©   rw   rÃ   s	           €r-   Únew_funcz&_datetimelike_compat.<locals>.new_func‰  s�   ø€ ð ˆà”|Ô(¨DÐ0ˆØð 	 ˜D˜LÝ˜‘<”<ˆDà��fÐL 4°¸TÐLÐLÀVÐLÐLˆàð 	TÝ" 6¨;Ô+<ÍÐNÑNÔNˆFØð TØÐ'Ð'Ð'Ý2°6¸4ÀÀ{ÑSÔS�àˆr/   ©rK   rh   rf   ri   rg   r&   rl   rš   rW   )rÃ   rÉ   s   ` r-   Ú_datetimelike_compatrË   ƒ  s_   ø€ õ „_�TÑÔð  $ØØ-1ðð ð ð ð ð ð ñ Ôðõ0 •�8ÑÔÐr/   rf   ri   úScalar | np.ndarrayc                ó  — | j         j        dv r|                      d¦  «        } t          | j         ¦  «        }| j        dk    r|S |€|S | j        d|…         | j        |dz   d…         z   }t          j        ||| j         ¬¦  «        S )a�  
    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µ   )r7   rž   r¼   r   ÚndimÚshaperŠ   Úfull)rK   rf   r�   Úresult_shapes       r-   rq   rq   ¥  s�   € ð" „|Ô˜GÐ#Ð#Ø—’˜yÑ)Ô)ˆÝ# F¤LÑ1Ô1€Jà„{�aÒÐØÐØ	ˆØÐà”| E T EÔ*¨V¬\¸$À¹(¸*¸*Ô-EÑEˆåŒw�| Z°v´|ÐDÑDÔDÐDr/   c                ót   ‡ — t          j        ‰ ¦  «        ddœdˆ fd„¦   «         }t          t          |¦  «        S )	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©rf   rK   rh   rf   ri   c               óÔ  •‡‡‡— |dk    rÔ| j         dk    rÉ| j        d         r¼| j        d         dz  | j        d         k    r�| j        t          t
          fvrˆt          | ¦  «        Š‰                     d¦  «        �A‰                     d¦  «        Šˆˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }nˆˆfd„‰D ¦   «         }t          j        |¦  «        S  ‰| fd	|i‰¤ŽS )
NrÏ   é   ÚC_CONTIGUOUSéè  r   rl   c                ó>   •— g | ]} ‰‰|         fd ‰|         i‰¤Ž‘ŒS ©rl   r~   )r6   ÚiÚarrsrÃ   rR   rl   s     €€€€r-   ú
<listcomp>z:maybe_operate_rowwise.<locals>.newfunc.<locals>.<listcomp>Ù  sE   ø€ ð ð ð Ø>?�D�D˜˜aœÐ9Ð9 t¨A¤wÐ9°&Ð9Ð9ðð ð r/   c                ó"   •— g | ]} ‰|fi ‰¤Ž‘ŒS r~   r~   )r6   ÚxrÃ   rR   s     €€r-   rÞ   z:maybe_operate_rowwise.<locals>.newfunc.<locals>.<listcomp>Ý  s+   ø€ Ð;Ð;Ð;°˜4˜4 Ð,Ð, VÐ,Ð,Ð;Ð;Ð;r/   rf   )rÐ   ÚflagsrÑ   r7   r„   r&   Úlistrp   rs   Úrangerm   rŠ   Úarray)rK   rf   rR   ÚresultsrÝ   rl   rÃ   s     ` @@€r-   Únewfuncz&maybe_operate_rowwise.<locals>.newfuncË  s  øøøø€ ð �AŠIˆIØ”˜qÒ Ð Ø”˜^Ô,ð !ð ”˜a” 4Ñ'¨6¬<¸¬?Ò:Ð:Ø”¥V­T NÐ2Ð2å˜‘<”<ˆDØ�zŠz˜&Ñ!Ô!Ð-Ø—z’z &Ñ)Ô)�ðð ð ð ð ð ð ÝCHÍÈTÉÌÑCSÔCSðñ ô ��ð <Ð;Ð;Ð;Ð;°dÐ;Ñ;Ô;�Ý”8˜GÑ$Ô$Ð$àˆt�FÐ0Ð0 Ð0¨Ð0Ð0Ð0r/   )rK   rh   rf   ri   rW   )rÃ   ræ   s   ` r-   Úmaybe_operate_rowwiserç   Ä  sW   ø€ õ „_�TÑÔØ>Bð 1ð 1ð 1ð 1ð 1ð 1ð 1ñ Ôð1õ, •�7ÑÔÐr/   rÅ   c               ó4  — | j         j        dv r|€|                      |¦  «        S | j         j        dk    rt          d¦  «        ‚t	          | |d|¬¦  «        \  } }| j         t
          k    r|                      t          ¦  «        } |                      |¦  «        S )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_
    ÚiubNr·   z0datetime64 type does not support operation 'any'F©r�   rl   )r7   rž   rL   rO   rª   r„   r¼   r&   ©rK   rf   rg   rl   Ú_s        r-   Únananyrí   å  sš   € ðD „|Ô˜EÐ!Ð! d lð �zŠz˜$ÑÔÐà„|Ô˜CÒÐåÐJÑKÔKÐKå˜F F°uÀ4ÐHÑHÔH�I€FˆAð „|•vÒÐØ—’�tÑ$Ô$ˆð �:Š:�dÑÔÐr/   c               ó4  — | j         j        dv r|€|                      |¦  «        S | j         j        dk    rt          d¦  «        ‚t	          | |d|¬¦  «        \  } }| j         t
          k    r|                      t          ¦  «        } |                      |¦  «        S )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é   Nr·   z0datetime64 type does not support operation 'all'Trê   )r7   rž   ÚallrO   rª   r„   r¼   r&   rë   s        r-   Únanallrð     sš   € ðD „|Ô˜EÐ!Ð! d lð �zŠz˜$ÑÔÐà„|Ô˜CÒÐåÐJÑKÔKÐKå˜F F°tÀ$ÐGÑGÔG�I€FˆAð „|•vÒÐØ—’�tÑ$Ô$ˆð �:Š:�dÑÔÐr/   ÚM8)rf   rg   rk   rl   rk   Úintú*npt.NDArray[np.floating] | float | NaTTypec               ó,  — | j         }t          | |d|¬¦  «        \  } }t          |¦  «        }|j        dk    r|}n)|j        dk    rt	          j         t          j        ¦  «        }|                      ||¬¦  «        }t          |||| j        |¬¦  «        }|S )aÍ  
    Sum the elements along an axis ignoring NaNs

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

    Returns
    -------
    result : dtype

    Examples
    --------
    >>> from pandas.core import nanops
    >>> s = pd.Series([1, 2, np.nan])
    >>> nanops.nansum(s.values)
    np.float64(3.0)
    r   rê   rC   rº   rµ   ©rk   )	r7   rª   r²   rž   rŠ   r°   ÚsumÚ_maybe_null_outrÑ   )rK   rf   rg   rk   rl   r7   Ú	dtype_sumÚthe_sums           r-   r�   r�   U  s™   € ðD ŒL€EÝ˜v v¸!À$ÐGÑGÔG�L€FˆDÝ˜uÑ%Ô%€IØ„z�SÒÐØˆ	ˆ	Ø	Œ�sÒ	Ð	Ý”H�RœZÑ(Ô(ˆ	à�jŠj˜ YˆjÑ/Ô/€GÝ˜g t¨T°6´<È9ÐUÑUÔU€Gà€Nr/   rw   ú+np.ndarray | np.datetime64 | np.timedelta64únpt.NDArray[np.bool_]rÈ   ú5np.ndarray | np.datetime64 | np.timedelta64 | NaTTypec                ó`  — t          | t          j        ¦  «        rN|                      d¦  «                             |j        ¦  «        } |                     |¬¦  «        }t          | |<   nE|                     ¦   «         r1t          j        t          ¦  «                             |j        ¦  «        S | S )Nr£   rÕ   )	r‰   rŠ   r‹   r¼   r¥   r7   rL   r
   r–   )rw   rf   rl   rÈ   Ú	axis_masks        r-   rÇ   rÇ   …  sŽ   € õ �&�"œ*Ñ%Ô%ð 6à—’˜tÑ$Ô$×)Ò)¨+Ô*;Ñ<Ô<ˆØ—H’H $�HÑ'Ô'ˆ	Ý ˆˆyÑÐØ	�Š‰Œð 6ÝŒx�‰~Œ~×"Ò" ;Ô#4Ñ5Ô5Ð5Ø€Mr/   Úfloatc               ó’  — | j         t          k    r/t          | ¦  «        dk    r|€t          | dd…         ||¬¦  «         | j         }t	          | |d|¬¦  «        \  } }t          |¦  «        }t          j         t          j        ¦  «        }|j        dv rt          j         t          j        ¦  «        }n7|j        dv rt          j         t          j        ¦  «        }n|j        dk    r|}|}t          | j
        |||¬	¦  «        }|                      ||¬	¦  «        }t          |¦  «        }|�‡t          |d
d¦  «        rvt          t          j        |¦  «        }t          j        d¬¦  «        5  ||z  }	ddd¦  «         n# 1 swxY w Y   |dk    }
|
                     ¦   «         rt          j        |	|
<   n|dk    r||z  nt          j        }	|	S )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Ù   Nre   r   rê   r�   ÚiurC   rµ   rÐ   FÚignore)rï   )r7   r„   rm   rƒ   rª   r²   rŠ   r°   rž   Ú_get_countsrÑ   rö   Ú_ensure_numericrz   r   r‹   ÚerrstaterL   rG   )rK   rf   rg   rl   r7   rø   Údtype_countÚcountrù   Úthe_meanÚct_masks              r-   rƒ   rƒ   •  sò  € ðB „|•vÒÐ¥# f¡+¤+°Ò"5Ð"5¸$¸,å��u˜�u” D°Ð8Ñ8Ô8Ð8àŒL€EÝ˜v v¸!À$ÐGÑGÔG�L€FˆDÝ˜uÑ%Ô%€IÝ”(�2œ:Ñ&Ô&€Kð „z�TÐÐÝ”H�RœZÑ(Ô(ˆ	ˆ	Ø	Œ�tÐ	Ð	Ý”H�RœZÑ(Ô(ˆ	ˆ	Ø	Œ�sÒ	Ð	Øˆ	Øˆå˜œ d¨D¸ÐDÑDÔD€EØ�jŠj˜ YˆjÑ/Ô/€GÝ˜gÑ&Ô&€GàÐ�G G¨V°UÑ;Ô;ÐÝ•R”Z Ñ'Ô'ˆÝŒ[˜XÐ&Ñ&Ô&ð 	'ð 	'à ‘ˆHð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð ˜1’*ˆØ�;Š;‰=Œ=ð 	'Ý "¤ˆH�WÑøà&+¨a¢i i�7˜U‘?�?µR´Vˆà€Os   Å)E;Å;E?ÆE?úfloat | np.ndarrayc               óB  ‡— | j         j        dk    o|du }ddˆfd„}| j         }t          | ‰|d¬¦  «        \  } }| j         j        dk    r�| j         t          k    r+t	          j        | ¦  «        }|dv rt          d| › d	�¦  «        ‚	 |                      d
¦  «        } n/# t          $ r"}t          t          |¦  «        ¦  «        |‚d}~ww xY w|s1|�/| j
        j        s|                      ¦   «         } t          j        | |<   | j        }	| j        dk    rç|�å|	rÍ‰st          j        ||| ¦  «        }
nät%          j        ¦   «         5  t%          j        ddt*          ¦  «         | j        d         dk    r|dk    s| j        d         dk    r/|dk    r)t          j        t          j        | ¦  «        d¬¦  «        }
nt          j        | |¬¦  «        }
ddd¦  «         n# 1 swxY w Y   n0t3          | j        |¦  «        }
n|	r || |¦  «        nt          j        }
t5          |
|¦  «        S )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
    rC   Nrà   rh   c                ól  •— |€t          | ¦  «        }n| }‰s |                     ¦   «         st          j        S t	          j        ¦   «         5  t	          j        ddt          ¦  «         t	          j        ddt          ¦  «         t          j        | |         ¦  «        }d d d ¦  «         n# 1 swxY w Y   |S )Nr  úAll-NaN slice encounteredzMean of empty slice)	r    rï   rŠ   rG   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningÚ	nanmedian)rà   Ú_maskÚresrg   s      €r-   Ú
get_medianznanmedian.<locals>.get_medianý  sí   ø€ Øˆ=Ý˜!‘H”HˆEˆEà�FˆEØð 	˜eŸiši™kœkð 	Ý”6ˆMÝÔ$Ñ&Ô&ð 	)ð 	)åÔ#ØÐ5µ~ñô ð õ Ô# HÐ.CÅ^ÑTÔTÐTÝ”,˜q œxÑ(Ô(ˆCð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð ˆ
s   ÁAB)Â)B-Â0B-)rl   r�   ©ÚstringÚmixedzCannot convert ú to numericr†   rÏ   r  r  r   T)ÚkeepdimsrÕ   r*   )rà   rh   )r7   rž   rª   r„   r   Úinfer_dtyperO   r¼   rP   r   rá   Ú	writeabler¦   rŠ   rG   ro   rÐ   Úapply_along_axisr  r  r  r  rÑ   r  ÚsqueezeÚ_get_empty_reduction_resultrÂ   )rK   rf   rg   rl   Úusing_nan_sentinelr  r7   ÚinferredÚerrÚnotemptyr  s     `        r-   r  r  Ú  sª  ø€ ðB  œÔ*¨cÒ1ÐB°d¸d°lÐðð ð ð ð ð ð ð  ŒL€EÝ˜v v°DÀTÐJÑJÔJ�L€FˆDØ„|Ô˜CÒÐØŒ<�6Ò!Ð!å” vÑ.Ô.ˆHØÐ.Ð.Ð.ÝÐ E°&Ð EÐ EÐ EÑFÔFÐFð	/Ø—]’] 4Ñ(Ô(ˆFˆFøÝð 	/ð 	/ð 	/å�C ™HœHÑ%Ô%¨3Ð.øøøøð	/øøøð ð  $Ð"2ØŒ|Ô%ð 	#Ø—[’[‘]”]ˆFÝ”vˆˆt‰àŒ{€Hð
 „{�Q‚€˜4Ð+àð 	BØð >ÝÔ)¨*°d¸FÑCÔC��õ Ô,Ñ.Ô.ð >ð >åÔ+Ø Ð"=½~ñô ð ð œ Qœ¨1Ò,Ð,°¸²°Øœ Qœ¨1Ò,Ð,°¸²°õ !œl­2¬:°fÑ+=Ô+=ÈÐMÑMÔM˜˜å œl¨6¸Ð=Ñ=Ô=˜ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >øõ$ .¨f¬l¸DÑAÔAˆCˆCð +3Ð>ˆjˆj˜ Ñ&Ô&Ð&½¼ˆÝ˜˜eÑ$Ô$Ð$s+   ÂB Â
CÂ&CÃCÅ B	GÇGÇGrÑ   r   r   c                ó  — t          j        | ¦  «        }t          j        t          | ¦  «        ¦  «        }t          j        |||k             t           j        ¬¦  «        }|                     t           j        ¦  «         |S )z¬
    The result from a reduction on an empty ndarray.

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

    Returns
    -------
    np.ndarray
    rµ   )rŠ   rä   Úarangerm   Úemptyr°   ÚfillrG   )rÑ   rf   ÚshpÚdimsÚrets        r-   r  r  F  s^   € õ  Œ(�5‰/Œ/€CÝŒ9•S˜‘Z”ZÑ Ô €DÝ
Œ(�3�t˜t’|Ô$­B¬JÐ
7Ñ
7Ô
7€CØ‡H‚H�RŒVÑÔÐØ€Jr/   Úvalues_shapeÚddofú-tuple[float | np.ndarray, float | np.ndarray]c                ó¤  — t          | |||¬¦  «        }||                     |¦  «        z
  }t          |¦  «        r||k    rt          j        }t          j        }ntt          t          j        |¦  «        }||k    }|                     ¦   «         r@t          j        ||t          j        ¦  «         t          j        ||t          j        ¦  «         ||fS )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  r5   r   rŠ   rG   r   r‹   rL   r§   )r+  rl   rf   r,  r7   r  Úds          r-   Ú_get_counts_nanvarr0  ]  s»   € õ: ˜ d¨D¸Ð>Ñ>Ô>€EØ�—
’
˜4Ñ Ô Ñ €Aõ ��„ð ,Ø�DŠ=ˆ=õ ”FˆEÝ”ˆAøõ •R”Z Ñ'Ô'ˆØ˜Š}ˆØ�8Š8‰:Œ:ð 	,ÝŒJ�q˜$¥¤Ñ'Ô'Ð'ÝŒJ�u˜d¥B¤FÑ+Ô+Ð+Ø�!ˆ8€Or/   rÏ   ©r,  ©rf   rg   r,  rl   c          	     ó6  — | j         j        dk    r8t          j        | j         ¦  «        d         }|                      d|› d�¦  «        } | j         }t          | ||¬¦  «        \  } }t          j        t          | ||||¬¦  «        ¦  «        }t          ||¦  «        S )a»  
    Compute the standard deviation along given axis while ignoring NaNs

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

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

    Examples
    --------
    >>> from pandas.core import nanops
    >>> s = pd.Series([1, np.nan, 2, 3])
    >>> nanops.nanstd(s.values)
    1.0
    r·   r   zm8[ú]rÛ   r2  )	r7   rž   rŠ   r¾   r¥   rª   ÚsqrtÚnanvarrÂ   )rK   rf   rg   r,  rl   rÁ   Ú
orig_dtyperw   s           r-   Únanstdr8  �  s–   € ðH „|Ô˜CÒÐÝÔ ¤Ñ-Ô-¨aÔ0ˆØ—’˜] 4˜]˜]˜]Ñ+Ô+ˆà”€JÝ˜v v°DÐ9Ñ9Ô9�L€FˆDåŒW•V˜F¨°fÀ4ÈdÐSÑSÔSÑTÔT€FÝ˜ Ñ,Ô,Ð,r/   Úm8c               óz  — | j         }t          | ||¦  «        }|j        dv r'|                      d¦  «        } |�t          j        | |<   n>|j        dk    r3t          | j        ||||¬¦  «        t          | j        ||||¬¦  «        z   S | j         j        dk    r!t          | j
        |||| j         ¦  «        \  }}nt          | j
        |||¦  «        \  }}|r,|�*|                      ¦   «         } t	          j        | |d¦  «         t          |                      |t          j        ¬¦  «        ¦  «        |z  }|�t	          j        ||¦  «        }t          || z
  d	z  ¦  «        }	|�t	          j        |	|d¦  «         |	                     |t          j        ¬¦  «        |z  }
|j        dk    r|
                     |d
¬¦  «        }
|
S )a±  
    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†   NÚcr2  rC   r   )rf   r7   r×   Fr¹   )r7   rŸ   rž   r¼   rŠ   rG   r6  ÚrealÚimagr0  rÑ   r¦   r§   r  rö   r°   Úexpand_dims)rK   rf   rg   r,  rl   r7   r  r/  ÚavgÚsqrrw   s              r-   r6  r6  ¾  sÉ  € ðJ ŒL€EÝ˜6 6¨4Ñ0Ô0€DØ„z�TÐÐØ—’˜tÑ$Ô$ˆØÐÝœ6ˆF�4‰LøØ	Œ�sÒ	Ð	õ ØŒK˜d¨6¸À4ð
ñ 
ô 
å�6”; T°&¸tÈ$ÐOÑOÔOñPð 	Pð „|Ô˜CÒÐÝ% f¤l°D¸$ÀÀfÄlÑSÔS‰ˆˆqˆqå% f¤l°D¸$ÀÑEÔE‰ˆˆqàð $�$Ð"Ø—’‘”ˆÝ
Œ
�6˜4 Ñ#Ô#Ð#õ ˜&Ÿ*š*¨$µb´j˜*ÑAÔAÑ
BÔ
BÀUÑ
J€CØÐÝŒn˜S $Ñ'Ô'ˆå
˜3 ™<¨AÑ-Ñ
.Ô
.€CØÐÝ
Œ
�3˜˜aÑ Ô Ð Ø�WŠW˜$¥b¤jˆWÑ1Ô1°AÑ5€Fð
 „z�SÒÐØ—’˜u¨5�Ñ1Ô1ˆØ€Mr/   c               óô  — t          | ||||¬¦  «         t          | ||¦  «        }| j        j        dvr|                      d¦  «        } |s"|� |                     ¦   «         rt          j        S t          j        t          j        ¦  «        }| j        j        dk    r| j        }t          | j
        ||||¦  «        \  }}t          | ||||¬¦  «        }t          j        |¦  «        t          j        |¦  «        z  S )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)
    r2  Úfcr†   NrC   )r6  rŸ   r7   rž   r¼   rL   rŠ   rG   r°   r0  rÑ   r5  )	rK   rf   rg   r,  rl   r  r  rì   Úvars	            r-   ÚnansemrD    sç   € õL ˆ6˜ V°$¸TÐBÑBÔBÐBå˜6 6¨4Ñ0Ô0€Dà„|Ô Ð$Ð$Ø—’˜tÑ$Ô$ˆàð �dÐ&¨4¯8ª8©:¬:Ð&ÝŒvˆå”(�2œ:Ñ&Ô&€KØ„|Ô˜CÒÐØ”lˆÝ! &¤,°°d¸DÀ+ÑNÔN�H€Eˆ1Ý
�˜d¨6¸À4Ð
HÑ
HÔ
H€CåŒ7�3‰<Œ<�"œ' %™.œ.Ñ(Ð(r/   c                ón   ‡ ‡— t          d‰ › �¬¦  «        t          d dd dœdˆˆ fd„¦   «         ¦   «         }|S )NrG   )rb   TrÅ   rK   rh   rf   ri   rg   r&   rl   rš   c               óê   •— | j         dk    rt          | |¦  «        S | j        }t          | |‰|¬¦  «        \  } } t	          | ‰¦  «        |¦  «        }t          |||| j        |j        dv ¬¦  «        }|S )Nr   ©r˜   rl   r�   )r©   )ro   rq   r7   rª   rz   r÷   rÑ   rž   )rK   rf   rg   rl   r7   rw   r˜   Úmeths         €€r-   Ú	reductionz_nanminmax.<locals>.reductionK  s”   ø€ ð Œ;˜!ÒÐÝ$ V¨TÑ2Ô2Ð2à”ˆÝ"Ø�F¨>Àð
ñ 
ô 
‰ˆ�ð '•˜ Ñ&Ô& tÑ,Ô,ˆÝ Ø�D˜$ ¤¸5¼:ÈÐ;Mð
ñ 
ô 
ˆð ˆr/   rÊ   )r`   rË   )rH  r˜   rI  s   `` r-   Ú
_nanminmaxrJ  J  sk   øø€ Ý˜L $˜L˜LÐ)Ñ)Ô)Ýð  $ØØ-1ðð ð ð ð ð ð ð ñ Ôñ *Ô)ðð( Ðr/   Úminr“   )r˜   Úmaxú-infúint | np.ndarrayc               ó€   — t          | dd|¬¦  «        \  } }|                      |¦  «        }t          ||||¦  «        }|S )aî  
    Parameters
    ----------
    values : ndarray
    axis : int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

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

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

    >>> arr = np.array(range(12), dtype=np.float64).reshape(4, 3)
    >>> arr[2:, 2] = np.nan
    >>> arr
    array([[ 0.,  1.,  2.],
           [ 3.,  4.,  5.],
           [ 6.,  7., nan],
           [ 9., 10., nan]])
    >>> nanops.nanargmax(arr, axis=1)
    array([2, 2, 1, 1])
    TrM  rG  )rª   ÚargmaxÚ_maybe_arg_null_out©rK   rf   rg   rl   rw   s        r-   Ú	nanargmaxrS  h  óJ   € õL ˜v t¸FÈÐNÑNÔN�L€FˆDØ�]Š]˜4Ñ Ô €Fõ ! ¨¨t°VÑ<Ô<€FØ€Mr/   c               ó€   — t          | dd|¬¦  «        \  } }|                      |¦  «        }t          ||||¦  «        }|S )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“   rG  )rª   ÚargminrQ  rR  s        r-   Ú	nanargminrW  –  rT  r/   c               óò  — t          | ||¦  «        }| j        j        dk    r,|                      d¦  «        } t	          | j        ||¦  «        }nt	          | j        ||| j        ¬¦  «        }|r-|�+|                      ¦   «         } t          j        | |d¦  «         n$|s"|� | 	                    ¦   «         rt          j
        S t          j        dd¬¦  «        5  |                      |t          j        ¬¦  «        |z  }ddd¦  «         n# 1 swxY w Y   |�t          j        ||¦  «        }| |z
  }|r|�t          j        ||d¦  «         |dz  }||z  }|                     |t          j        ¬¦  «        }	|                     |t          j        ¬¦  «        }
t          j        | ¦  «                             |d	¬
¦  «        }t          j        |	j        ¦  «        j        }||z  dz  |z  }||z  dz  |z  }t'          |	|¦  «        }	t'          |
|¦  «        }
t          j        dd¬¦  «        5  ||dz
  dz  z  |dz
  z  |
|	dz  z  z  }ddd¦  «         n# 1 swxY w Y   | j        }|j        dk    r|                     |d¬¦  «        }t)          |t          j        ¦  «        r.t          j        |	dk    d|¦  «        }t          j
        ||dk     <   n/|	dk    r|                     d¦  «        n|}|dk     rt          j
        S |S )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)
    rC   r†   rµ   Nr   r  ©ÚinvalidÚdivider×   ç        ©Úinitialé   rÏ   g      à?g      ø?Fr¹   )rŸ   r7   rž   r¼   r  rÑ   r¦   rŠ   r§   rL   rG   r  rö   r°   r>  ÚabsrL  ÚfinfoÚepsÚ_zero_out_fperrr‰   r‹   r¨   r5   )rK   rf   rg   rl   r  ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3Úmax_absrb  Úconstant_tolerance2Úconstant_tolerance3rw   r7   s                    r-   Únanskewrm  Ä  s{  € õJ ˜6 6¨4Ñ0Ô0€DØ„|Ô˜CÒÐØ—’˜tÑ$Ô$ˆÝ˜FœL¨$°Ñ5Ô5ˆˆå˜FœL¨$°¸F¼LÐIÑIÔIˆàð �$Ð"Ø—’‘”ˆÝ
Œ
�6˜4 Ñ#Ô#Ð#Ð#Øð ˜Ð(¨T¯XªX©Z¬ZÐ(ÝŒvˆå	Œ˜X¨hÐ	7Ñ	7Ô	7ð :ð :Ø�zŠz˜$¥b¤jˆzÑ1Ô1°EÑ9ˆð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :àÐÝŒ~˜d DÑ)Ô)ˆà˜‰}€HØð &�$Ð"Ý
Œ
�8˜T 1Ñ%Ô%Ð%Ø˜!‘€IØ˜HÑ$€IØ	�Š�t¥2¤:ˆÑ	.Ô	.€BØ	�Š�t¥2¤:ˆÑ	.Ô	.€Bõ Œf�V‰nŒn× Ò  ¨sÐ Ñ3Ô3€GÝ
Œ(�2”8Ñ
Ô
Ô
 €CØ '™M¨aÑ/°5Ñ8ÐØ '™M¨aÑ/°5Ñ8ÐÝ	˜Ð0Ñ	1Ô	1€BÝ	˜Ð0Ñ	1Ô	1€Bå	Œ˜X¨hÐ	7Ñ	7Ô	7ð Mð MØ˜5 1™9¨Ñ,Ñ,°¸±	Ñ:¸rÀBÈÁG¹|ÑLˆðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð ŒL€EØ„z�SÒÐØ—’˜u¨5�Ñ1Ô1ˆå�&�"œ*Ñ%Ô%ð Ý”˜" š' 1 fÑ-Ô-ˆÝœFˆˆu�qŠyÑÐà"$¨¢' '�—’˜A‘”�¨vˆØ�1Š9ˆ9Ý”6ˆMà€Ms$   Ã%DÄD	ÄD	È%IÉIÉIc               óÔ  — t          | ||¦  «        }| j        j        dk    r,|                      d¦  «        } t	          | j        ||¦  «        }nt	          | j        ||| j        ¬¦  «        }|r-|�+|                      ¦   «         } t          j        | |d¦  «         n$|s"|� | 	                    ¦   «         rt          j
        S t          j        dd¬¦  «        5  |                      |t          j        ¬¦  «        |z  }ddd¦  «         n# 1 swxY w Y   |�t          j        ||¦  «        }| |z
  }|r|�t          j        ||d¦  «         |dz  }|dz  }|                     |t          j        ¬¦  «        }	|                     |t          j        ¬¦  «        }
t          j        | ¦  «                             |d	¬
¦  «        }t          j        |	j        ¦  «        j        }||z  dz  |z  }||z  dz  |z  }t'          |	|¦  «        }	t'          |
|¦  «        }
t          j        dd¬¦  «        5  d|dz
  dz  z  |dz
  |dz
  z  z  }||dz   z  |dz
  z  |
z  }|dz
  |dz
  z  |	dz  z  }ddd¦  «         n# 1 swxY w Y   t)          |t          j        ¦  «        s2|dk     rt          j
        S |dk    r| j                             d¦  «        S t          j        dd¬¦  «        5  ||z  |z
  }ddd¦  «         n# 1 swxY w Y   | j        }|j        dk    r|                     |d¬¦  «        }t)          |t          j        ¦  «        r-t          j        |dk    d|¦  «        }t          j
        ||dk     <   |S )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)
    np.float64(-1.2892561983471076)
    rC   r†   rµ   Nr   r  rY  r×   r\  r]  é   r_  rÏ   Fr¹   )rŸ   r7   rž   r¼   r  rÑ   r¦   rŠ   r§   rL   rG   r  rö   r°   r>  r`  rL  ra  rb  rc  r‰   r‹   r5   r¨   )rK   rf   rg   rl   r  rd  re  rf  Ú	adjusted4rh  Úm4rj  rb  rk  Úconstant_tolerance4ÚadjÚ	numeratorÚdenominatorrw   r7   s                       r-   Únankurtrv    s1  € õJ ˜6 6¨4Ñ0Ô0€DØ„|Ô˜CÒÐØ—’˜tÑ$Ô$ˆÝ˜FœL¨$°Ñ5Ô5ˆˆå˜FœL¨$°¸F¼LÐIÑIÔIˆàð �$Ð"Ø—’‘”ˆÝ
Œ
�6˜4 Ñ#Ô#Ð#Ð#Øð ˜Ð(¨T¯XªX©Z¬ZÐ(ÝŒvˆå	Œ˜X¨hÐ	7Ñ	7Ô	7ð :ð :Ø�zŠz˜$¥b¤jˆzÑ1Ô1°EÑ9ˆð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :àÐÝŒ~˜d DÑ)Ô)ˆà˜‰}€HØð &�$Ð"Ý
Œ
�8˜T 1Ñ%Ô%Ð%Ø˜!‘€IØ˜1‘€IØ	�Š�t¥2¤:ˆÑ	.Ô	.€BØ	�Š�t¥2¤:ˆÑ	.Ô	.€Bõ0 Œf�V‰nŒn× Ò  ¨sÐ Ñ3Ô3€GÝ
Œ(�2”8Ñ
Ô
Ô
 €CØ '™M¨aÑ/°5Ñ8ÐØ '™M¨aÑ/°5Ñ8ÐÝ	˜Ð0Ñ	1Ô	1€BÝ	˜Ð0Ñ	1Ô	1€Bå	Œ˜X¨hÐ	7Ñ	7Ô	7ð 8ð 8Ø�5˜1‘9 Ñ"Ñ" u¨q¡y°U¸Q±YÑ&?Ñ@ˆØ˜U Q™YÑ'¨5°1©9Ñ5¸Ñ:ˆ	Ø˜q‘y U¨Q¡YÑ/°"°a±%Ñ7ˆð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8õ
 �k¥2¤:Ñ.Ô.ð (ð �1Š9ˆ9Ý”6ˆMØ˜!ÒÐØ”<×$Ò$ QÑ'Ô'Ð'å	Œ˜X¨hÐ	7Ñ	7Ô	7ð /ð /Ø˜[Ñ(¨3Ñ.ˆð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð ŒL€EØ„z�SÒÐØ—’˜u¨5�Ñ1Ô1ˆå�&�"œ*Ñ%Ô%ð #Ý”˜+¨Ò*¨A¨vÑ6Ô6ˆÝœFˆˆu�qŠyÑà€Ms6   Ã%DÄD	ÄD	È%:I+É+I/É2I/Ë	K-Ë-K1Ë4K1c               óº   — t          | ||¦  «        }|r|�|                      ¦   «         } d| |<   |                      |¦  «        }t          |||| j        |¬¦  «        S )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)
    NrÏ   rõ   )rŸ   r¦   Úprodr÷   rÑ   )rK   rf   rg   rk   rl   rw   s         r-   r‚   r‚   ”  sp   € õ@ ˜6 6¨4Ñ0Ô0€Dàð �$Ð"Ø—’‘”ˆØˆˆt‰Ø�[Š[˜ÑÔ€Fõ Ø��d˜FœL°Iðñ ô ð r/   únp.ndarray | intc                óª  — |€| S |�t          | dd¦  «        sK|r#|                     ¦   «         rt          d¦  «        ‚|s#|                     ¦   «         rt          d¦  «        ‚np|r6|                     |¦  «                             ¦   «         rt          d¦  «        ‚|s6|                     |¦  «                             ¦   «         rt          d¦  «        ‚| S )NrÐ   FzEncountered all NA valuesz)Encountered an NA value with skipna=False)rz   rï   rP   rL   )rw   rf   rl   rg   s       r-   rQ  rQ  Á  så   € ð €|Øˆà€|�7 6¨6°5Ñ9Ô9€|Øð 	J�d—h’h‘j”jð 	JÝÐ8Ñ9Ô9Ð9Øð 	J˜DŸHšH™JœJð 	JÝÐHÑIÔIÐIøØ	ð F�D—H’H˜T‘N”N×&Ò&Ñ(Ô(ð FÝÐ4Ñ5Ô5Ð5Øð F˜Ÿš ™œ×*Ò*Ñ,Ô,ð FÝÐDÑEÔEÐEØ€Mr/   únp.dtype[np.floating]ú&np.floating | npt.NDArray[np.floating]c                óh  — |€H|�|j         |                     ¦   «         z
  }nt          j        | ¦  «        }|                     |¦  «        S |�$|j        |         |                     |¦  «        z
  }n| |         }t          |¦  «        r|                     |¦  «        S |                     |d¬¦  «        S )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
    NFr¹   )ro   rö   rŠ   rx  r5   rÑ   r   r¼   )r+  rl   rf   r7   Únr  s         r-   r  r  ×  s©   € ð0 €|ØÐØ”	˜DŸHšH™JœJÑ&ˆAˆAå”˜Ñ%Ô%ˆAØ�zŠz˜!‰}Œ}ÐàÐØ”
˜4Ô  4§8¢8¨D¡>¤>Ñ1ˆˆà˜TÔ"ˆå�%ÑÔð !Ø�zŠz˜%Ñ Ô Ð Ø�<Š<˜ Eˆ<Ñ*Ô*Ð*r/   únp.ndarray | float | NaTTypeútuple[int, ...]r©   c                ó
  — |€|dk    r| S |��t          | t          j        ¦  «        rÿ|�+|j        |         |                     |¦  «        z
  |z
  dk     }n<||         |z
  dk     }|d|…         ||dz   d…         z   }t          j        ||¦  «        }t          j        |¦  «        r�|rt          | |<   nÑt          | ¦  «        r`t          j	        | ¦  «        r|  
                    d¦  «        } n&t          | ¦  «        s|  
                    dd¬¦  «        } t          j        | |<   nbd| |<   n\| t          urSt          |||¦  «        rBt          | dd¦  «        }	t          |	¦  «        r|	                     d	¦  «        } nt          j        } | S )
zu
    Returns
    -------
    Dtype
        The product of all elements on a given axis. ( NaNs are treated as 1)
    Nr   rÏ   Úc16r†   Fr¹   r7   rG   )r‰   rŠ   r‹   rÑ   rö   Úbroadcast_torL   r
   r   Úiscomplexobjr¼   r   rG   r   Úcheck_below_min_countrz   r5   )
rw   rf   rl   rÑ   rk   r©   Ú	null_maskÚbelow_countÚ	new_shapeÚresult_dtypes
             r-   r÷   r÷      s�  € ð €|˜	 Qš˜àˆàÑ�J v­r¬zÑ:Ô:ÐØÐØœ DÔ)¨D¯HªH°T©N¬NÑ:¸YÑFÈ!ÒKˆIˆIð   œ+¨	Ñ1°AÒ5ˆKØ˜e˜t˜eœ u¨T°A©X¨Z¨ZÔ'8Ñ8ˆIÝœ¨°YÑ?Ô?ˆIåŒ6�)ÑÔð 	)Øð )å$(��yÑ!Ð!Ý! &Ñ)Ô)ð )Ý”? 6Ñ*Ô*ð =Ø#Ÿ]š]¨5Ñ1Ô1�F�FÝ'¨Ñ/Ô/ð =Ø#Ÿ]š]¨4°e˜]Ñ<Ô<�FÝ$&¤F��yÑ!Ð!ð %)��yÑ!øØ	•sÐ	Ð	Ý  ¨¨iÑ8Ô8ð 	 Ý" 6¨7°DÑ9Ô9ˆLÝ˜lÑ+Ô+ð  à%×*Ò*¨5Ñ1Ô1��åœ�à€Mr/   c                óˆ   — |dk    r;|€t          j        | ¦  «        }n|j        |                     ¦   «         z
  }||k     rdS dS )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   NTF)rŠ   rx  ro   rö   )rÑ   rl   rk   Ú	non_nullss       r-   r…  r…  4  sJ   € ð( �1‚}€}Øˆ<åœ ™œˆIˆIàœ	 D§H¢H¡J¤JÑ.ˆIØ�yÒ Ð Ø�4Øˆ5r/   Útolc                óö   — t          | t          j        ¦  «        r,t          j        t          j        | ¦  «        |k     d| ¦  «        S t          j        | ¦  «        |k     r| j                             d¦  «        n| S ©Nr   )r‰   rŠ   r‹   r¨   r`  r7   r5   )ÚargrŒ  s     r-   rc  rc  S  sb   € å�#•r”zÑ"Ô"ð ?ÝŒx�œ˜s™œ cÒ)¨1¨cÑ2Ô2Ð2å$&¤F¨3¡K¤K°#Ò$5Ð$5ˆsŒy�~Š~˜aÑ Ô Ð ¸3Ð>r/   Úpearson)ÚmethodÚmin_periodsÚaÚbr‘  r   r’  ú
int | Nonec               óž  — t          | ¦  «        t          |¦  «        k    rt          d¦  «        ‚|€d}t          | ¦  «        t          |¦  «        z  }|                     ¦   «         s| |         } ||         }t          | ¦  «        |k     rt          j        S t          | ¦  «        } t          |¦  «        }t          |¦  «        } || |¦  «        S )z
    a, b: ndarrays
    z'Operands to nancorr must have same sizeNrÏ   )rm   ÚAssertionErrorr    rï   rŠ   rG   r  Úget_corr_func)r“  r”  r‘  r’  ÚvalidrC   s         r-   Únancorrrš  [  s»   € õ ˆ1�v„v•�Q‘”ÒÐÝÐFÑGÔGÐGàÐØˆå�!‰HŒH•u˜Q‘x”xÑ€EØ�9Š9‰;Œ;ð ØˆeŒHˆØˆeŒHˆå
ˆ1�v„v�ÒÐÝŒvˆå˜ÑÔ€AÝ˜ÑÔ€Aå�fÑÔ€AØˆ1ˆQ�‰7Œ7€Nr/   ú)Callable[[np.ndarray, np.ndarray], float]c                ó°   ‡‡— | dk    rddl mŠ ˆfd„}|S | dk    rddl mŠ ˆfd„}|S | dk    rd	„ }|S t          | ¦  «        r| S t	          d
| › d�¦  «        ‚)NÚkendallr   )Ú
kendalltauc                ó(   •—  ‰| |¦  «        d         S rŽ  r~   )r“  r”  rž  s     €r-   rÃ   zget_corr_func.<locals>.func�  s   ø€ Ø�:˜a Ñ#Ô# AÔ&Ð&r/   Úspearman)Ú	spearmanrc                ó(   •—  ‰| |¦  «        d         S rŽ  r~   )r“  r”  r¡  s     €r-   rÃ   zget_corr_func.<locals>.funcˆ  s   ø€ Ø�9˜Q ‘?”? 1Ô%Ð%r/   r�  c                ó8   — t          j        | |¦  «        d         S )N©r   rÏ   )rŠ   Úcorrcoef)r“  r”  s     r-   rÃ   zget_corr_func.<locals>.funcŽ  s   € Ý”;˜q !Ñ$Ô$ TÔ*Ð*r/   zUnknown method 'z@', expected one of 'kendall', 'spearman', 'pearson', or callable)Úscipy.statsrž  r¡  ÚcallablerP   )r‘  rÃ   rž  r¡  s     @@r-   r˜  r˜  {  sÞ   øø€ ð �ÒÐØ*Ð*Ð*Ð*Ð*Ð*ð	'ð 	'ð 	'ð 	'ð 	'ð ˆØ	�:Ò	Ð	Ø)Ð)Ð)Ð)Ð)Ð)ð	&ð 	&ð 	&ð 	&ð 	&ð ˆØ	�9Ò	Ð	ð	+ð 	+ð 	+ð ˆÝ	�&Ñ	Ô	ð Øˆå
ð	8˜6ð 	8ð 	8ð 	8ñô ð r/   )r’  r,  c               ó¢  — t          | ¦  «        t          |¦  «        k    rt          d¦  «        ‚|€d}t          | ¦  «        t          |¦  «        z  }|                     ¦   «         s| |         } ||         }t          | ¦  «        |k     rt          j        S t          | ¦  «        } t          |¦  «        }t	          j        | ||¬¦  «        d         S )Nz&Operands to nancov must have same sizerÏ   r1  r¤  )rm   r—  r    rï   rŠ   rG   r  Úcov)r“  r”  r’  r,  r™  s        r-   Únancovrª  ›  s»   € õ ˆ1�v„v•�Q‘”ÒÐÝÐEÑFÔFÐFàÐØˆå�!‰HŒH•u˜Q‘x”xÑ€EØ�9Š9‰;Œ;ð ØˆeŒHˆØˆeŒHˆå
ˆ1�v„v�ÒÐÝŒvˆå˜ÑÔ€AÝ˜ÑÔ€AåŒ6�!�Q˜TÐ"Ñ"Ô" 4Ô(Ð(r/   c                óÔ  — t          | t          j        ¦  «        �r| j        j        dv r!|                      t          j        ¦  «        } �n�| j        t          k    rØt          j	        | ¦  «        }|dv rt          d| › d�¦  «        ‚	 |                      t          j        ¦  «        } t          j        t          j        | ¦  «        ¦  «        s| j        } �n# t          t          f$ rJ 	 |                      t          j        ¦  «        } n&# t          $ r}t          d| › d�¦  «        |‚d }~ww xY wY n¹w xY wn´t!          | ¦  «        s¥t#          | ¦  «        s–t%          | ¦  «        s‡t          | t&          ¦  «        rt          d| › d�¦  «        ‚	 t)          | ¦  «        } nN# t          t          f$ r: 	 t+          | ¦  «        } n&# t          $ r}t          d| › d�¦  «        |‚d }~ww xY wY nw xY w| S )Nrœ   r  zCould not convert r  zCould not convert string 'z' to numeric)r‰   rŠ   r‹   r7   rž   r¼   r°   r„   r   r  rO   Ú
complex128rL   r=  r<  rP   r   r   r   r   rÿ   Úcomplex)rà   r!  r"  s      r-   r  r  ·  s6  € Ý�!•R”ZÑ Ô ñ NØŒ7Œ<˜5Ð Ð Ø—’�œÑ$Ô$ˆA‰AØŒW�ÒÐÝ” qÑ)Ô)ˆHØÐ.Ð.Ð.åÐ C°QÐ CÐ CÐ CÑDÔDÐDð
Ø—H’H�Rœ]Ñ+Ô+�õ ”v�bœg a™jœjÑ)Ô)ð Øœ�Aùøõ �zÐ*ð Rð Rð RðRØŸš¥¤Ñ,Ô,�A�AøÝ!ð Rð Rð Rå#Ð$G¸Ð$GÐ$GÐ$GÑHÔHÈcÐQøøøøðRøøøð �AðRøøøð õ  �q‰kŒkð N�Z¨™]œ]ð N­j¸©m¬mð NÝ�a�ÑÔð 	JåÐH¸ÐHÐHÐHÑIÔIÐIð	NÝ�a‘”ˆAˆAøÝ�:Ð&ð 	Nð 	Nð 	NðNÝ˜A‘J”J��øÝð Nð Nð NåÐ C°QÐ CÐ CÐ CÑDÔDÈ#ÐMøøøøðNøøøð �ð	Nøøøð €Hsl   ÂC ÃD0Ã'DÄD0Ä
D*ÄD%Ä%D*Ä*D0Ä/D0Æ
F ÆG%Æ,F<Æ;G%Æ<
GÇGÇGÇG%Ç$G%r   c          	     ó.  — t           j        dt           j        ft           j        j        t           j         t           j        ft           j        dt           j        ft           j        j        t           j        t           j        fi|         \  }}| j        j	        dvsJ ‚|rkt          | j        j        t           j        t           j        f¦  «        s;|                      ¦   «         }t          |¦  «        }|||<    ||d¬¦  «        }|||<   n || d¬¦  «        }|S )a  
    Cumulative function with skipna support.

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

    Returns
    -------
    np.ndarray or ExtensionArray
    g      ð?r\  r�   r   rÕ   )rŠ   ÚcumprodrG   ÚmaximumÚ
accumulater•   ÚcumsumÚminimumr7   rž   r@   r5   r´   Úbool_r¦   r   )rK   Ú
accum_funcrg   Úmask_aÚmask_bÚvalsrl   rw   s           r-   Úna_accum_funcr¹  Û  sõ   € õ 	Œ
�S�"œ&�MÝ
Œ
Ô¥¤ ­¬Ð0Ý
Œ	�C�œ�=Ý
Œ
Ô¥¤­¬Ð/ð	ð
 ô�N€FˆFð Œ<Ô DÐ(Ð(Ð(Ð(ð ð ,•j ¤Ô!2µR´ZÅÄÐ4JÑKÔKð ,Ø�{Š{‰}Œ}ˆÝ�D‰zŒzˆØˆˆT‰
Ø�˜D qÐ)Ñ)Ô)ˆØˆˆt‰ˆà�˜F¨Ð+Ñ+Ô+ˆà€Mr/   )T)r%   r&   r'   r(   )r7   r   rb   r   r'   r&   r[   )NN)r7   r   r�   r‘   )rK   rh   rg   r&   rl   rš   r'   rš   )NNN)rK   rh   rg   r&   r�   r   r˜   r    rl   rš   r'   r¡   )r7   r«   r'   r«   )r7   r   r'   r&   r*   )r7   r«   )rÃ   r   r'   r   )rK   rh   rf   ri   r'   rÌ   )
rK   rh   rf   ri   rg   r&   rl   rš   r'   r&   )rK   rh   rf   ri   rg   r&   rk   rò   rl   rš   r'   ró   )
rw   rú   rf   ri   rl   rû   rÈ   rh   r'   rü   )
rK   rh   rf   ri   rg   r&   rl   rš   r'   rÿ   )rK   rh   rf   ri   rg   r&   r'   r
  )rÑ   r   rf   r   r'   rh   )r+  r   rl   rš   rf   ri   r,  rò   r7   r«   r'   r-  )rf   ri   rg   r&   r,  rò   )rK   rh   rf   ri   rg   r&   r,  rò   )rK   rh   rf   ri   rg   r&   r,  rò   rl   rš   r'   rÿ   )
rK   rh   rf   ri   rg   r&   rl   rš   r'   rN  )rK   rh   rf   ri   rg   r&   rk   rò   rl   rš   r'   rÿ   )
rw   rh   rf   ri   rl   rš   rg   r&   r'   ry  )
r+  r   rl   rš   rf   ri   r7   r{  r'   r|  )rÏ   F)rw   r  rf   ri   rl   rš   rÑ   r€  rk   rò   r©   r&   r'   r  )rÑ   r€  rl   rš   rk   rò   r'   r&   )rŒ  r
  )
r“  rh   r”  rh   r‘  r   r’  r•  r'   rÿ   )r‘  r   r'   r›  )
r“  rh   r”  rh   r’  r•  r,  r•  r'   rÿ   )rK   r   rg   r&   r'   r   )]Ú
__future__r   rX   rI   Útypingr   r   r   r  ÚnumpyrŠ   Úpandas._configr   Úpandas._libsr   r	   r
   r   Úpandas._typingr   r   r   r   r   r   r   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   r   Úpandas.core.dtypes.missingr   r   r    Úcollections.abcr!   r{   r+   r,   r.   r1   r`   rr   rt   r™   rŸ   rª   r²   r”   rÂ   rË   rq   rç   rí   rð   r�   rÇ   rƒ   r  r  r7   r°   r0  r8  r6  rD  rJ  ÚnanminÚnanmaxrS  rW  rm  rv  r‚   rQ  r  r÷   r…  rc  rš  r˜  rª  r  r¹  r~   r/   r-   ú<module>rÆ     s
	  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
 €€€à Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ?Ð >Ð >Ð >Ð >Ð >ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð )Ø(Ð(Ð(Ð(Ð(Ð(àÐ °VÐ<Ñ<Ô<€Ø $˜Ð Ø€ðð ð ð ð ð Ð �:�:Ð6Ñ7Ô7Ñ 8Ô 8Ð 8ðð ð ð ð ñ ô ð ð>5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ðpð ð ð ð(
ð 
ð 
ð 
ð GKðð ð ð ð ð.)ð )ð )ð )ð^ Ø!%Ø)-ðDð Dð Dð Dð DðN	ð 	ð 	ð 	ð2ð 2ð 2ð 2ð'ð 'ð 'ð 'ð 'ðTð ð ð ðDEð Eð Eð Eð>ð ð ð ðH  ØØ)-ð5ð 5ð 5ð 5ð 5ð 5ðv  ØØ)-ð5ð 5ð 5ð 5ð 5ð 5ðp 
€ˆ$�„ØØð  ØØØ)-ð*ð *ð *ð *ð *ñ Ôñ Ôñ „ð*ðZð ð ð ð  ÐÑÔØð  ØØ)-ð@ð @ð @ð @ð @ñ Ôñ Ôð@ðF ÐÑÔà26ÀtÐRVðh%ð h%ð h%ð h%ð h%ñ Ôðh%ðVð ð ð ð8 �b”h˜rœzÑ*Ô*ð/ð /ð /ð /ð /ðd Ð˜ÐÑÔð  ØØØ	ð+-ð +-ð +-ð +-ð +-ñ Ôð+-ð\ 
€ˆ$�ÑÔØÐ˜ÐÑÔð  ØØØ	ðNð Nð Nð Nð Nñ Ôñ ÔðNðb 
€ˆ$�ÑÔð  ØØØ)-ð5)ð 5)ð 5)ð 5)ð 5)ñ Ôð5)ðpð ð ð4 
ˆ�E¨&Ð	1Ñ	1Ô	1€Ø	ˆ�E¨&Ð	1Ñ	1Ô	1€ð  ØØ)-ð+ð +ð +ð +ð +ð +ðb  ØØ)-ð+ð +ð +ð +ð +ð +ð\ 
€ˆ$�ÑÔØð  ØØ)-ðTð Tð Tð Tð Tñ Ôñ ÔðTðn 
€ˆ$�ÑÔØð  ØØ)-ðrð rð rð rð rñ Ôñ Ôðrðj 
€ˆ$�ÑÔØð  ØØØ)-ð(ð (ð (ð (ð (ñ Ôñ Ôð(ðVð ð ð ð4 $, 2¤8¨B¬JÑ#7Ô#7ð	&+ð &+ð &+ð &+ð &+ð\ Øð1ð 1ð 1ð 1ð 1ðhð ð ð ð>?ð ?ð ?ð ?ð 
€ˆ$�ÑÔð
 !*Ø"ðð ð ð ð ñ Ôðð>ð ð ð ð@ 
€ˆ$�ÑÔð
 #Øð)ð )ð )ð )ð )ñ Ôð)ð6!ð !ð !ðH"ð "ð "ð "ð "ð "r/   