Ë
    ž…jÑ  ã                  óä  — 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/dKdLd„Z0 e0 ed«      «        G d„ d«      Z1 G d„ d«      Z2dMd„Z3dNd„Z4	 dO	 	 	 dPd„Z5	 	 	 	 	 	 	 	 dQd„Z6	 	 	 dR	 	 	 	 	 	 	 	 	 	 	 dSd„Z7dTd„Z8dUd„Z9dVdWd„Z:dXd„Z;dYd„Z<dXd „Z=dddd!œ	 	 	 	 	 	 	 	 	 dZd"„Z>dddd!œ	 	 	 	 	 	 	 	 	 dZd#„Z? e1d$«      e;e=ddd dd%œ	 	 	 	 	 	 	 	 	 	 	 d[d&„«       «       «       Z@	 	 	 	 	 	 	 	 	 	 d\d'„ZA e2«       e;dddd!œ	 	 	 	 	 	 	 	 	 d]d(„«       «       ZB e2«       dddd!œ	 	 	 	 	 	 	 d^d)„«       ZC	 	 	 	 	 	 d_d*„ZD e
jŠ                  e
jŒ                  «      f	 	 	 	 	 	 	 	 	 	 	 d`d+„ZG e2d,¬-«      ddd,dd.œ	 	 	 	 	 dad/„«       ZH e1d$d0«       e2d,¬-«      ddd,dd.œ	 	 	 	 	 	 	 dbd1„«       «       ZI e1d$d0«      ddd,dd.œ	 	 	 	 	 	 	 	 	 	 	 dcd2„«       ZJd3„ ZK eKd4d5¬6«      ZL eKd7d8¬6«      ZMdddd!œ	 	 	 	 	 	 	 	 	 ddd9„ZNdddd!œ	 	 	 	 	 	 	 	 	 ddd:„ZO e1d$d0«      e=dddd!œ	 	 	 	 	 	 	 	 	 d]d;„«       «       ZP e1d$d0«      e=dddd!œ	 	 	 	 	 	 	 	 	 d]d<„«       «       ZQ e1d$d0«      e=ddd dd%œ	 	 	 	 	 	 	 	 	 	 	 ded=„«       «       ZR	 	 	 	 	 	 	 	 	 	 dfd>„ZS e
jŠ                  e
jŒ                  «      f	 	 	 	 	 	 	 	 	 dgd?„ZT	 	 dh	 	 	 	 	 	 	 	 	 	 	 	 	 did@„ZU	 	 	 	 	 	 	 	 djdA„ZVdkdB„ZW e1d$d0«      dCddDœ	 	 	 	 	 	 	 	 	 dldE„«       ZX	 	 	 	 dmdF„ZY e1d$d0«      dd,dGœ	 	 	 	 	 	 	 	 	 dndH„«       ZZdI„ Z[dodJ„Z\y)pé    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚcast)Ú
get_option)ÚNaTÚNaTTypeÚiNaTÚlib)	Ú	ArrayLikeÚAxisIntÚCorrelationMethodÚDtypeÚDtypeObjÚFÚScalarÚShapeÚnpt)Úimport_optional_dependency)Ú
is_complexÚis_floatÚis_float_dtypeÚ
is_integerÚis_numeric_dtypeÚis_object_dtypeÚneeds_i8_conversionÚpandas_dtype)ÚisnaÚna_value_for_dtypeÚnotna)ÚCallableÚ
bottleneckÚwarn)ÚerrorsFTc                ó   — t         r| ay y ©N)Ú_BOTTLENECK_INSTALLEDÚ_USE_BOTTLENECK)Úvs    úS/root/aria/tools/markitdown-venv/lib/python3.12/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 )Údisallowc                óP   •— t         ‰| �  «        t        d„ |D «       «      | _        y )Nc              3  óF   K  — | ]  }t        |«      j                  –— Œ y ­wr&   )r   Útype)Ú.0Údtypes     r*   ú	<genexpr>z$disallow.__init__.<locals>.<genexpr>H   s   è ø€ ÒI¸œL¨Ó/×4Õ4ÑIùs   ‚!)ÚsuperÚ__init__ÚtupleÚdtypes)Úselfr8   Ú	__class__s     €r*   r6   zdisallow.__init__F   s    ø€ Ü‰ÑÔÜÑIÀ&ÔIÓIˆ�r,   c                ór   — t        |d«      xr* t        |j                  j                  | j                  «      S )Nr3   )ÚhasattrÚ
issubclassr3   r1   r8   )r9   Úobjs     r*   Úcheckzdisallow.checkJ   s'   € Ü�s˜GÓ$ÒP¬°C·I±I·N±NÀDÇKÁKÓ)PÐPr,   c                ób   ‡ ‡— t        j                  ‰«      ˆˆ fd„«       }t        t        |«      S )Nc                 ó4  •— t        j                  | |j                  «       «      }t        ˆfd„|D «       «      r+‰j                  j                  dd«      }t        d|› d�«      ‚	  ‰| i |¤ŽS # t        $ r }t        | d   «      rt        |«      |‚‚ d }~ww xY w)Nc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr&   )r?   )r2   r>   r9   s     €r*   r4   z0disallow.__call__.<locals>._f.<locals>.<genexpr>Q   s   øè ø€ Ò7 s�4—:‘:˜c—?Ñ7ùs   ƒÚnanÚ zreduction operation 'z' not allowed for this dtyper   )	Ú	itertoolsÚchainÚvaluesÚanyÚ__name__ÚreplaceÚ	TypeErrorÚ
ValueErrorr   )ÚargsÚkwargsÚobj_iterÚf_nameÚeÚfr9   s        €€r*   Ú_fzdisallow.__call__.<locals>._fN   s™   ø€ ä —‘ t¨V¯]©]«_Ó=ˆHÜÓ7¨hÔ7Ô7ØŸ™×+Ñ+¨E°2Ó6�ÜØ+¨F¨8Ð3OÐPóð ð	Ù˜$Ð) &Ñ)Ð)øÜò ô
 # 4¨¡7Ô+Ü# A›,¨AÐ-Øûðús   Á&A. Á.	BÁ7BÂB©Ú	functoolsÚwrapsr   r   )r9   rR   rS   s   `` r*   Ú__call__zdisallow.__call__M   s,   ù€ Ü	�‰˜Ó	ô	ó 
ð	ô$ ”A�r‹{Ðr,   )r8   r   ÚreturnÚNone©rX   Úbool)rR   r   rX   r   )rI   Ú
__module__Ú__qualname__r6   r?   rW   Ú__classcell__)r:   s   @r*   r.   r.   E   s   ø„ õJóQ÷r,   r.   c                  ó   — e Zd Zddd„Zdd„Zy)Úbottleneck_switchNc                ó    — || _         || _        y r&   )ÚnamerN   )r9   rb   rN   s      r*   r6   zbottleneck_switch.__init__e   s   € ØˆŒ	Øˆ�r,   c                ó  ‡ ‡‡‡— ‰ j                   xs ‰j                  Š	 t        t        ‰«      Št        j                  ‰«      d ddœ	 	 	 	 	 dˆˆˆˆ fd„«       }t        t        |«      S # t        t
        f$ r d ŠY ŒMw xY w)NT©ÚaxisÚskipnac               óè  •— t        ‰
j                  «      dkD  r,‰
j                  j                  «       D ]  \  }}||vsŒ|||<   Œ | j                  dk(  r|j	                  d«      €t        | |«      S t        rn|rlt        | j                  ‰	«      rV|j	                  dd «      €6|j                  dd «        ‰| fd|i|¤Ž}t        |«      r ‰| f||dœ|¤Ž}|S  ‰| f||dœ|¤Ž}|S  ‰| f||dœ|¤Ž}|S )Nr   Ú	min_countÚmaskre   rd   )ÚlenrN   ÚitemsÚsizeÚgetÚ_na_for_min_countr(   Ú_bn_ok_dtyper3   ÚpopÚ	_has_infs)rG   re   rf   ÚkwdsÚkr)   ÚresultÚaltÚbn_funcÚbn_namer9   s          €€€€r*   rR   z%bottleneck_switch.__call__.<locals>.fq   s  ø€ ô �4—;‘;Ó !Ò#Ø ŸK™K×-Ñ-Ó/ò $‘D�A�qØ ’}Ø"#˜˜Qšð$ð �{‰{˜aÒ D§H¡H¨[Ó$9Ð$Aô )¨°Ó6Ð6å¡6¬l¸6¿<¹<ÈÔ.QØ—8‘8˜F DÓ)Ð1ð —H‘H˜V TÔ*Ù$ VÑ?°$Ð?¸$Ñ?�Fô ! Ô(Ù!$ VÐ!N°$¸vÑ!NÈÑ!N˜ð ˆMñ	 ! ÐJ¨d¸6ÑJÀTÑJ�Fð ˆMñ ˜VÐF¨$°vÑFÀÑF�àˆMr,   )rG   ú
np.ndarrayre   úAxisInt | Nonerf   r[   )
rb   rI   ÚgetattrÚbnÚAttributeErrorÚ	NameErrorrU   rV   r   r   )r9   ru   rR   rv   rw   s   `` @@r*   rW   zbottleneck_switch.__call__i   s’   û€ Ø—)‘)Ò+˜sŸ|™|ˆð	Üœb 'Ó*ˆGô 
�‰˜Ó	ð $(Øñ	%	Øð%	ð !ð%	ð ÷	%	ó 
ð%	ôN ”A�q‹zÐøôW ¤	Ð*ò 	ØŠGð	ús    A* Á*A>Á=A>r&   )rX   rY   )ru   r   rX   r   )rI   r\   r]   r6   rW   © r,   r*   r`   r`   d   s   „ ôô0r,   r`   c                ó4   — | t         k7  rt        | «      s|dvS y)N)ÚnansumÚnanprodÚnanmeanF)Úobjectr   )r3   rb   s     r*   ro   ro   œ   s"   € à”‚Ô2°5Ô9ð Ð;Ð;Ð;Ør,   c                ó  — t        | t        j                  «      r2| j                  dv r$t	        j
                  | j                  d«      «      S 	 t        j                  | «      j                  «       S # t        t        f$ r Y yw xY w)N)Úf8Úf4ÚKF)Ú
isinstanceÚnpÚndarrayr3   r   Úhas_infsÚravelÚisinfrH   rK   ÚNotImplementedError)rt   s    r*   rq   rq   °   sk   € Ü�&œ"Ÿ*™*Ô%Ø�<‰<˜<Ñ'ô —<‘< §¡¨SÓ 1Ó2Ð2ðÜ�x‰x˜Ó×#Ñ#Ó%Ð%øÜÔ*Ð+ò áðús   Á"A1 Á1BÂBc                ó  — |�|S t        | «      r8|€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 valuesú+inf)Ú_na_ok_dtyper‰   rC   ÚinfÚint64r   Úi8maxr
   )r3   Ú
fill_valueÚfill_value_typs      r*   Ú_get_fill_valuer—   ½   sn   € ð ÐØÐÜ�EÔØÐ!Ü—6‘6ˆMØ˜vÒ%Ü—6‘6ˆMä—F‘F�7ˆNØ	˜6Ò	!ô
 �x‰xœŸ	™	Ó"Ð"ä�x‰xœ‹~Ðr,   c                ó†   — |€>| j                   j                  dv ry|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)r3   Úkindr   )rG   rf   ri   s      r*   Ú_maybe_get_maskrœ   Ô   sA   € ðB €|Ø�<‰<×Ñ Ñ%àá�V—\‘\×&Ñ&¨$Ñ.Ü˜“<ˆDà€Kr,   c                ó¤  — t        | ||«      }| j                  }d}| j                  j                  dv r&t        j                  | j                  d«      «      } d}|rr|�pt        |||¬«      }|�`|j                  «       rP|st        |«      r+| j                  «       } t        j                  | ||«       | |fS 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š   Úi8T)r•   r–   )rœ   r3   r›   r‰   ÚasarrayÚviewr—   rH   r‘   ÚcopyÚputmaskÚwhere)rG   rf   r•   r–   ri   r3   Údatetimelikes          r*   Ú_get_valuesr¥      sÎ   € ôR ˜6 6¨4Ó0€Dà�L‰L€Eà€LØ‡|�|×Ñ˜DÑ ô —‘˜FŸK™K¨Ó-Ó.ˆØˆá�4Ð#ô %Ø˜j¸ô
ˆ
ð Ð!Ø�x‰xŒzÙ¤<°Ô#6Ø#Ÿ[™[›]�FÜ—J‘J˜v t¨ZÔ8ð
 �4ˆ<Ðô  ŸX™X t e¨V°ZÓ@�Fà�4ˆ<Ðr,   c                ó<  — | }| j                   dv r%t        j                  t        j                  «      }|S | j                   dk(  r%t        j                  t        j                  «      }|S | j                   dk(  r#t        j                  t        j
                  «      }|S )NÚbiÚurR   )r›   r‰   r3   r“   Úuint64Úfloat64)r3   Ú	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                ód   — t        | «      ryt        | j                  t        j                  «       S )NF)r   r=   r1   r‰   Úinteger©r3   s    r*   r‘   r‘   S  s%   € Ü˜5Ô!ØÜ˜%Ÿ*™*¤b§j¡jÓ1Ð1Ð1r,   c                óž  — | t         u r	 | S |j                  dk(  rÆ|€t        }t        | t        j
                  «      s‘t        |«      rJ d«       ‚| |k(  rt        j                  } t        | «      r&t	        j                  dd«      j                  |«      } n$t	        j                  | «      j                  |«      } | j                  |d¬«      } | S | j                  |«      } | S |j                  dk(  rÝt        | t        j
                  «      s£| |k(  st	        j                  | «      r0t	        j                  |«      d   }t	        j                  d|«      } | S t	        j                  | «      t         j"                  kD  rt%        d	«      ‚t	        j                  | «      j                  |d¬«      } | S | j                  d
«      j                  |«      } | S )zwrap our results if neededÚMzExpected non-null fill_valuer   ÚnsF©r¡   Úmr   zoverflow in timedelta operationzm8[ns])r   r›   r
   rˆ   r‰   rŠ   r   rC   Ú
datetime64Úastyper“   r    ÚisnanÚdatetime_dataÚtimedelta64Úfabsr   r”   rL   )rt   r3   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Ü×'Ñ'¨Ó.¨qÑ1�ÜŸ™¨¨tÓ4�ð €Mô —‘˜“¤3§9¡9Ò,ä Ð!BÓCÐCô Ÿ™ &Ó)×0Ñ0°¸UÐ0ÓC�ð
 €Mð —]‘] 8Ó,×1Ñ1°%Ó8ˆFà€Mr,   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©re   rf   ri   c               óØ   •— | }| j                   j                  dv }|r|€t        | «      } ‰| f|||dœ|¤Ž}|r0t        ||j                   t        ¬«      }|s|€J ‚t        ||||«      }|S )Nrš   r¾   )r•   )r3   r›   r   r¼   r
   Ú_mask_datetimelike_result)	rG   re   rf   ri   rN   Úorig_valuesr¤   rt   Úfuncs	           €r*   Únew_funcz&_datetimelike_compat.<locals>.new_func‰  s�   ø€ ð ˆà—|‘|×(Ñ(¨DÐ0ˆÙ˜D˜LÜ˜“<ˆDá�fÐL 4°¸TÑLÀVÑLˆáÜ" 6¨;×+<Ñ+<ÌÔNˆFÙØÐ'Ð'Ð'Ü2°6¸4ÀÀ{ÓS�àˆr,   ©rG   rx   re   ry   rf   r[   ri   únpt.NDArray[np.bool_] | NonerT   )rÂ   rÃ   s   ` r*   Ú_datetimelike_compatrÆ   ƒ  s`   ø€ ô ‡_�_�TÓð  $ØØ-1ñØðð ðð ð	ð
 +ôó ðô0 ”�8ÓÐr,   c                ó0  — | j                   j                  dv r| j                  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¯   )r3   r›   r¶   r   ÚndimÚshaper‰   Úfull)rG   re   r•   Úresult_shapes       r*   rn   rn   ¥  sŠ   € ð" ‡|�|×Ñ˜GÑ#Ø—‘˜yÓ)ˆÜ# F§L¡LÓ1€Jà‡{�{�aÒØÐØ	ˆØÐà—|‘| E TÐ*¨V¯\©\¸$À¹(¸*Ð-EÑEˆä�w‰w�| Z°v·|±|ÔDÐDr,   c                óf   ‡ — 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©re   c          	     óú  •— |dk(  rá| j                   dk(  rÒ| j                  d   rÃ| j                  d   dz  | j                  d   kD  r¡| j                  t        t
        fvr‰t        | «      }|j                  d«      �B|j                  d«      }t        t        |«      «      D �cg c]  } ‰||   fd||   i|¤Ž‘Œ }}n|D �cg c]  } ‰|fi |¤Ž‘Œ }}t        j                  |«      S  ‰| fd|i|¤ŽS c c}w c c}w )NrÉ   é   ÚC_CONTIGUOUSéè  r   ri   re   )rÊ   ÚflagsrË   r3   rƒ   r[   Úlistrm   rp   Úrangerj   r‰   Úarray)	rG   re   rN   Úarrsri   ÚiÚresultsÚxrÂ   s	           €r*   Únewfuncz&maybe_operate_rowwise.<locals>.newfuncË  s   ø€ ð �AŠIØ—‘˜qÒ Ø—‘˜^Ò,ð —‘˜a‘ 4Ñ'¨6¯<©<¸©?Ò:Ø—‘¤V¬T NÑ2ä˜“<ˆDØ�z‰z˜&Ó!Ð-Ø—z‘z &Ó)�äCHÌÈTËÓCSöØ>?‘D˜˜a™Ñ9 t¨A¡wÐ9°&Ó9ð�ñ ð 7;Ö;°™4 Ñ, VÓ,Ð;�Ð;Ü—8‘8˜GÓ$Ð$á�FÑ0 Ð0¨Ñ0Ð0ùòùò <s   Â"C3ÃC8)rG   rx   re   ry   rT   )rÂ   rÜ   s   ` r*   Úmaybe_operate_rowwiserÝ   Ä  s2   ø€ ô ‡_�_�TÓØ>Bö 1ó ð1ô, ”�7ÓÐr,   r¾   c               ó6  — | j                   j                  dv r|€| j                  |«      S | j                   j                  dk(  rt        d«      ‚t	        | |d|¬«      \  } }| j                   t
        k(  r| j                  t        «      } | j                  |«      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_
    Úiubr±   z0datetime64 type does not support operation 'any'F©r•   ri   )r3   r›   rH   rK   r¥   rƒ   r¶   r[   ©rG   re   rf   ri   Ú_s        r*   Únananyrã   å  s‹   € ðD ‡|�|×Ñ˜EÑ! d lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÒäÐJÓKÐKä˜F F°uÀ4ÔH�I€FˆAð ‡|�|”vÒØ—‘œtÓ$ˆð �:‰:�dÓÐr,   c               ó6  — | j                   j                  dv r|€| j                  |«      S | j                   j                  dk(  rt        d«      ‚t	        | |d|¬«      \  } }| j                   t
        k(  r| j                  t        «      } | j                  |«      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ß   r±   z0datetime64 type does not support operation 'all'Trà   )r3   r›   ÚallrK   r¥   rƒ   r¶   r[   rá   s        r*   Únanallræ     s‹   € ðD ‡|�|×Ñ˜EÑ! d lð �z‰z˜$ÓÐà‡|�|×Ñ˜CÒäÐJÓKÐKä˜F F°tÀ$ÔG�I€FˆAð ‡|�|”vÒØ—‘œtÓ$ˆð �:‰:�dÓÐr,   ÚM8)re   rf   rh   ri   c               ó:  — | j                   }t        | |d|¬«      \  } }t        |«      }|j                  dk(  r|}n2|j                  dk(  r#t	        j                   t        j
                  «      }| 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à   rR   r´   r¯   ©rh   )	r3   r¥   r¬   r›   r‰   rª   ÚsumÚ_maybe_null_outrË   )rG   re   rf   rh   ri   r3   Ú	dtype_sumÚthe_sums           r*   r€   r€   U  sˆ   € ðD �L‰L€EÜ˜v v¸!À$ÔG�L€FˆDÜ˜uÓ%€IØ‡z�z�SÒØ‰	Ø	�‰�sÒ	Ü—H‘HœRŸZ™ZÓ(ˆ	à�j‰j˜ YˆjÓ/€GÜ˜g t¨T°6·<±<È9ÔU€Gà€Nr,   c                óL  — t        | t        j                  «      rG| j                  d«      j	                  |j
                  «      } |j                  |¬«      }t        | |<   | S |j                  «       r2t        j                  t        «      j	                  |j
                  «      S | S )Nrž   rÏ   )	rˆ   r‰   rŠ   r¶   r    r3   rH   r
   r“   )rt   re   ri   rÁ   Ú	axis_masks        r*   rÀ   rÀ   …  s�   € ô �&œ"Ÿ*™*Ô%à—‘˜tÓ$×)Ñ)¨+×*;Ñ*;Ó<ˆØ—H‘H $�HÓ'ˆ	Ü ˆˆyÑð €Mð 
�‰ŒÜ�x‰xœ‹~×"Ñ" ;×#4Ñ#4Ó5Ð5Ø€Mr,   c               óœ  — | j                   t        k(  r!t        | «      dkD  r|€t        | dd ||¬«       | j                   }t	        | |d|¬«      \  } }t        |«      }t        j                   t        j                  «      }|j                  dv r$t        j                   t        j                  «      }nE|j                  dv r$t        j                   t        j                  «      }n|j                  dk(  r|}|}t        | j                  |||¬	«      }| j                  ||¬	«      }t        |«      }|�ut        |d
d«      rht        t        j                  |«      }t        j                   d¬«      5  ||z  }	ddd«       |dk(  }
|
j#                  «       rt        j$                  	|
<   	S |dkD  r||z  nt        j$                  }	|	S # 1 sw Y   ŒOxY w)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Ó   Nrd   r   rà   rš   ÚiurR   r¯   rÊ   FÚignore)rå   )r3   rƒ   rj   r‚   r¥   r¬   r‰   rª   r›   Ú_get_countsrË   rê   Ú_ensure_numericrz   r   rŠ   ÚerrstaterH   rC   )rG   re   rf   ri   r3   rì   Údtype_countÚcountrí   Úthe_meanÚct_masks              r*   r‚   r‚   •  s  € ðB ‡|�|”vÒ¤# f£+°Ò"5¸$¸,ä��u˜� D°Õ8à�L‰L€EÜ˜v v¸!À$ÔG�L€FˆDÜ˜uÓ%€IÜ—(‘(œ2Ÿ:™:Ó&€Kð ‡z�z�TÑÜ—H‘HœRŸZ™ZÓ(‰	Ø	�‰�tÑ	Ü—H‘HœRŸZ™ZÓ(‰	Ø	�‰�sÒ	Øˆ	Øˆä˜Ÿ™ d¨D¸ÔD€EØ�j‰j˜ YˆjÓ/€GÜ˜gÓ&€GàÐœG G¨V°UÔ;Ü”R—Z‘Z Ó'ˆÜ�[‰[˜XÔ&ñ 	'à ‘ˆH÷	'ð ˜1‘*ˆØ�;‰;Œ=Ü "§¡ˆH�WÑð €Oð ',¨a¢i�7˜U’?´R·V±Vˆà€O÷	'ð 	'ús   Å.GÇGc               óv  ‡— | j                   j                  dk(  xr |du }ddˆfd„}| j                   }t        | ‰|d¬«      \  } }| j                   j                  dk7  rM| j                   t        k(  r(t	        j
                  | «      }|dv rt        d| › d�«      ‚	 | j                  d«      } |s;|�9| j                  j                  s| j                  «       } t        j                  | |<   | j                  }	| j                   d	kD  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(  r0|d	k(  r+t        j.                  t        j0                  | «      d¬«      }
nt        j.                  | |¬«      }
ddd«       n2t3        | j,                  |«      }
n|	r	 || |«      nt        j                  }
t5        
|«      S # t        $ r}t        t        |«      «      |‚d}~ww xY w# 1 sw Y   Œ;xY w)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
    rR   Nc                ó^  •— |€t        | «      }n| }‰s |j                  «       st        j                  S t	        j
                  «       5  t	        j                  ddt        «       t	        j                  ddt        «       t        j                  | |   «      }d d d «       |S # 1 sw Y   S xY w)Nrò   úAll-NaN slice encounteredzMean of empty slice)	r    rå   r‰   rC   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningÚ	nanmedian)rÛ   Ú_maskÚresrf   s      €r*   Ú
get_medianznanmedian.<locals>.get_medianý  s“   ø€ Øˆ=Ü˜!“H‰Eà�FˆEÙ˜eŸi™iœkÜ—6‘6ˆMÜ×$Ñ$Ó&ñ 	)ä×#Ñ#ØÐ5´~ôô ×#Ñ# HÐ.CÄ^ÔTÜ—,‘,˜q ™xÓ(ˆC÷	)ð ˆ
÷	)ð ˆ
ús   Á	AB"Â"B,)ri   r•   ©ÚstringÚmixedzCannot convert ú to numericr…   rÉ   rò   rü   r   T)ÚkeepdimsrÏ   r&   )rÛ   rx   )r3   r›   r¥   rƒ   r   Úinfer_dtyperK   r¶   rL   ÚstrrÔ   Ú	writeabler¡   r‰   rC   rl   rÊ   Úapply_along_axisrý   rþ   rÿ   r   rË   r  ÚsqueezeÚ_get_empty_reduction_resultr¼   )rG   re   rf   ri   Úusing_nan_sentinelr  r3   ÚinferredÚerrÚnotemptyr  s     `        r*   r  r  Ú  sø  ø€ ðB  Ÿ™×*Ñ*¨cÑ1ÒB°d¸d°lÐöð  �L‰L€EÜ˜v v°DÀTÔJ�L€FˆDØ‡|�|×Ñ˜CÒØ�<‰<œ6Ò!ä—‘ vÓ.ˆHØÐ.Ñ.Ü /°&°¸Ð EÓFÐFð	/Ø—]‘] 4Ó(ˆFñ  $Ð"2Ø�|‰|×%Ò%Ø—[‘[“]ˆFÜ—v‘vˆˆt‰à�{‰{€Hð
 ‡{�{�Q‚˜4Ð+áÙÜ×)Ñ)¨*°d¸FÓC‘ô ×,Ñ,Ó.ñ >ä×+Ñ+Ø Ð"=¼~ôð Ÿ™ Q™¨1Ò,°¸²ØŸ™ Q™¨1Ò,°¸²ô !Ÿl™l¬2¯:©:°fÓ+=ÈÔM™ä Ÿl™l¨6¸Ô=˜÷>ð >ô$ .¨f¯l©l¸DÓA‰Cñ +3‰j˜ Ô&¼¿¹ˆÜ˜˜eÓ$Ð$øôY ò 	/äœC ›HÓ%¨3Ð.ûð	/ú÷*>ð >ús%   ÂH	 Ä6BH/È		H,ÈH'È'H,È/H8c                ó   — t        j                  | «      }t        j                  t        | «      «      }t        j                  |||k7     t         j
                  ¬«      }|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×   Úarangerj   Úemptyrª   ÚfillrC   )rË   re   ÚshpÚdimsÚrets        r*   r  r  F  sU   € ô  �(‰(�5‹/€CÜ�9‰9”S˜“ZÓ €DÜ
�(‰(�3�t˜t‘|Ñ$¬B¯J©JÔ
7€CØ‡H�HŒR�V‰VÔØ€Jr,   c                óª  — t        | |||¬«      }||j                  |«      z
  }t        |«      r)||k  r t        j                  }t        j                  }||fS t        t        j                  |«      }||k  }|j                  «       rJt        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ó   r1   r   r‰   rC   r   rŠ   rH   r¢   )Úvalues_shaperi   re   Úddofr3   r÷   Úds          r*   Ú_get_counts_nanvarr  ]  s«   € ô: ˜ d¨D¸Ô>€EØ�—
‘
˜4Ó Ñ €Aô �„Ø�DŠ=ô —F‘FˆEÜ—‘ˆAð �!ˆ8€Oô ”R—Z‘Z Ó'ˆØ˜‰}ˆØ�8‰8Œ:Ü�J‰J�q˜$¤§¡Ô'Ü�J‰J�u˜d¤B§F¡FÔ+Ø�!ˆ8€Or,   rÉ   ©r  ©re   rf   r  ri   c          	     ó:  — | j                   j                  dk(  r7t        j                  | j                   «      d   }| j	                  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[ú])ri   r!  )	r3   r›   r‰   r¸   r    r¥   ÚsqrtÚnanvarr¼   )rG   re   rf   r  ri   r»   Ú
orig_dtypert   s           r*   Únanstdr'  �  s‰   € ðH ‡|�|×Ñ˜CÒÜ×Ñ §¡Ó-¨aÑ0ˆØ—‘˜s 4 &¨˜]Ó+ˆà—‘€JÜ˜v v°DÔ9�L€FˆDä�W‰W”V˜F¨°fÀ4ÈdÔSÓT€FÜ˜ Ó,Ð,r,   Úm8c               ó   — | j                   }t        | ||«      }|j                  dv r'| j                  d«      } |�Xt        j
                  | |<   nD|j                  dk(  r5t        | j                  ||||¬«      t        | j                  ||||¬«      z   S | j                   j                  dk(  r't        | j                  |||| j                   «      \  }}nt        | j                  |||«      \  }}|r)|�'| j                  «       } t	        j                  | |d«       t        | j                  |t        j                  ¬«      «      |z  }|�t	        j                   ||«      }t        || z
  dz  «      }	|�t	        j                  |	|d«       |	j                  |t        j                  ¬«      |z  }
|j                  dk(  r|
j                  |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…   Úcr!  rR   r   )re   r3   rÑ   Fr³   )r3   rœ   r›   r¶   r‰   rC   r%  ÚrealÚimagr  rË   r¡   r¢   rô   rê   rª   Úexpand_dims)rG   re   rf   r  ri   r3   r÷   r  ÚavgÚsqrrt   s              r*   r%  r%  ¾  sœ  € ðJ �L‰L€EÜ˜6 6¨4Ó0€DØ‡z�z�TÑØ—‘˜tÓ$ˆØÐÜŸ6™6ˆF�4ŠLØ	�‰�sÒ	ô Ø�K‰K˜d¨6¸À4ô
ä�6—;‘; T°&¸tÈ$ÔOñPð 	Pð ‡|�|×Ñ˜CÒÜ% f§l¡l°D¸$ÀÀfÇlÁlÓS‰ˆ‰qä% f§l¡l°D¸$ÀÓE‰ˆˆqá�$Ð"Ø—‘“ˆÜ
�
‰
�6˜4 Ô#ô ˜&Ÿ*™*¨$´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               ó  — t        | ||||¬«       t        | ||«      }| j                  j                  dvr| j	                  d«      } |s"|� |j                  «       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)
    r!  Úfcr…   rR   )r%  rœ   r3   r›   r¶   rH   r‰   rC   rª   r  rË   r$  )	rG   re   rf   r  ri   rö   r÷   râ   Úvars	            r*   Únansemr3    sÐ   € ôL ˆ6˜ V°$¸TÕBä˜6 6¨4Ó0€Dà‡|�|×Ñ Ñ$Ø—‘˜tÓ$ˆá�dÐ&¨4¯8©8¬:Ü�v‰vˆä—(‘(œ2Ÿ:™:Ó&€KØ‡|�|×Ñ˜CÒØ—l‘lˆÜ! &§,¡,°°d¸DÀ+ÓN�H€Eˆ1Ü
�˜d¨6¸À4Ô
H€Cä�7‰7�3‹<œ"Ÿ'™' %›.Ñ(Ð(r,   c                óf   ‡ ‡— t        d‰ › �¬«      t        d dd dœ	 	 	 	 	 	 	 dˆˆ fd„«       «       }|S )NrC   )rb   Tr¾   c               óê   •— | j                   dk(  rt        | |«      S | j                  }t        | |‰|¬«      \  } } t	        | ‰«      |«      }t        |||| j                  |j                  dv ¬«      }|S )Nr   ©r–   ri   rš   )r¤   )rl   rn   r3   r¥   rz   rë   rË   r›   )rG   re   rf   ri   r3   rt   r–   Úmeths         €€r*   Ú	reductionz_nanminmax.<locals>.reductionK  s|   ø€ ð �;‰;˜!ÒÜ$ V¨TÓ2Ð2à—‘ˆÜ"Ø�F¨>Àô
‰ˆ�ð '”˜ Ó& tÓ,ˆÜ Ø�D˜$ §¡¸5¿:¹:ÈÐ;Mô
ˆð ˆr,   rÄ   )r`   rÆ   )r7  r–   r8  s   `` r*   Ú
_nanminmaxr9  J  sa   ù€ Ü˜c $ ˜LÔ)Üð  $ØØ-1ñØðð ðð ð	ð
 +õó ó *ðð( Ðr,   Úminr�   )r–   Úmaxú-infc               óh   — t        | dd|¬«      \  } }| j                  |«      }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])
    Tr<  r6  )r¥   ÚargmaxÚ_maybe_arg_null_out©rG   re   rf   ri   rt   s        r*   Ú	nanargmaxrA  h  ó>   € ôL ˜v t¸FÈÔN�L€FˆDØ�]‰]˜4Ó €Fô ! ¨¨t°VÓ<€FØ€Mr,   c               óh   — t        | dd|¬«      \  } }| j                  |«      }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�   r6  )r¥   Úargminr?  r@  s        r*   Ú	nanargminrE  –  rB  r,   c               ó  — t        | ||«      }| j                  j                  dk7  r)| j                  d«      } t	        | j
                  ||«      }n#t	        | j
                  ||| j                  ¬«      }|r*|�(| j                  «       } t        j                  | |d«       n$|s"|� |j                  «       rt        j                  S t        j                  dd¬«      5  | j                  |t        j                  ¬«      |z  }ddd«       |�t        j                  |«      }| z
  }|r|�t        j                  ||d«       |dz  }||z  }|j                  |t        j                  ¬«      }	|j                  |t        j                  ¬«      }
t        j                  | «      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«       | j                  }|j                  dk(  rj                  |d¬«      }t)        t        j*                  «      r2t        j,                  |	dk(  d|«      }t        j                  ||dk  <   |S |	dk(  r|j/                  d«      n|}|dk  rt        j                  S |S # 1 sw Y   �ŒîxY w# 1 sw Y   Œ¿xY w)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)
    rR   r…   r¯   Nr   rò   ©ÚinvalidÚdividerÑ   ç        ©Úinitialé   rÉ   g      à?g      ø?Fr³   )rœ   r3   r›   r¶   ró   rË   r¡   r‰   r¢   rH   rC   rõ   rê   rª   r-  Úabsr;  ÚfinfoÚepsÚ_zero_out_fperrrˆ   rŠ   r£   r1   )rG   re   rf   ri   r÷   ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3Úmax_absrP  Úconstant_tolerance2Úconstant_tolerance3rt   r3   s                    r*   Únanskewr[  Ä  s©  € ôJ ˜6 6¨4Ó0€DØ‡|�|×Ñ˜CÒØ—‘˜tÓ$ˆÜ˜FŸL™L¨$°Ó5‰ä˜FŸL™L¨$°¸F¿L¹LÔIˆá�$Ð"Ø—‘“ˆÜ
�
‰
�6˜4 Õ#Ù˜Ð(¨T¯X©X¬ZÜ�v‰vˆä	�‰˜X¨hÔ	7ñ :Ø�z‰z˜$¤b§j¡jˆzÓ1°EÑ9ˆ÷:àÐÜ�~‰~˜d DÓ)ˆà˜‰}€HÙ�$Ð"Ü
�
‰
�8˜T 1Ô%Ø˜!‘€IØ˜HÑ$€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ÐÜ	˜Ð0Ó	1€BÜ	˜Ð0Ó	1€Bä	�‰˜X¨hÔ	7ñ MØ˜5 1™9¨Ñ,Ñ,°¸±	Ñ:¸rÀBÈÁG¹|ÑLˆ÷Mð �L‰L€EØ‡z�z�SÒØ—‘˜u¨5�Ó1ˆä�&œ"Ÿ*™*Ô%Ü—‘˜" ™' 1 fÓ-ˆÜŸF™Fˆˆu�q‰yÑð €Mð	 #%¨¢'�—‘˜A”¨vˆØ�1Š9Ü—6‘6ˆMà€M÷I:ñ :ú÷*Mð Mús   Ã%K+ÈK8Ë+K5Ë8Lc               óð  — t        | ||«      }| j                  j                  dk7  r)| j                  d«      } t	        | j
                  ||«      }n#t	        | j
                  ||| j                  ¬«      }|r*|�(| j                  «       } t        j                  | |d«       n$|s"|� |j                  «       rt        j                  S t        j                  dd¬«      5  | j                  |t        j                  ¬«      |z  }ddd«       |�t        j                  |«      }| z
  }|r|�t        j                  ||d«       |dz  }|dz  }|j                  |t        j                  ¬«      }	|j                  |t        j                  ¬«      }
t        j                  | «      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«       t)        t        j*                  «      s5|dk  rt        j                  S |dk(  r| j                  j-                  d«      S t        j                  dd¬«      5  |z  z
  }ddd«       | j                  }|j                  dk(  rj                  |d¬«      }t)        t        j*                  «      r0t        j.                  |dk(  d|«      }t        j                  ||dk  <   |S # 1 sw Y   �ŒUxY w# 1 sw Y   �ŒxY w# 1 sw Y   Œ�xY w)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)
    rR   r…   r¯   Nr   rò   rG  rÑ   rJ  rK  é   rM  rÉ   Fr³   )rœ   r3   r›   r¶   ró   rË   r¡   r‰   r¢   rH   rC   rõ   rê   rª   r-  rN  r;  rO  rP  rQ  rˆ   rŠ   r1   r£   )rG   re   rf   ri   r÷   rR  rS  rT  Ú	adjusted4rV  Úm4rX  rP  rY  Úconstant_tolerance4ÚadjÚ	numeratorÚdenominatorrt   r3   s                       r*   Únankurtrd    s  € ôJ ˜6 6¨4Ó0€DØ‡|�|×Ñ˜CÒØ—‘˜tÓ$ˆÜ˜FŸL™L¨$°Ó5‰ä˜FŸL™L¨$°¸F¿L¹LÔIˆá�$Ð"Ø—‘“ˆÜ
�
‰
�6˜4 Õ#Ù˜Ð(¨T¯X©X¬ZÜ�v‰vˆä	�‰˜X¨hÔ	7ñ :Ø�z‰z˜$¤b§j¡jˆzÓ1°EÑ9ˆ÷:àÐÜ�~‰~˜d DÓ)ˆà˜‰}€HÙ�$Ð"Ü
�
‰
�8˜T 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ÐÜ	˜Ð0Ó	1€BÜ	˜Ð0Ó	1€Bä	�‰˜X¨hÔ	7ñ 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ô
 �k¤2§:¡:Ô.ð �1Š9Ü—6‘6ˆMØ˜!ÒØ—<‘<×$Ñ$ QÓ'Ð'ä	�‰˜X¨hÔ	7ñ /Ø˜[Ñ(¨3Ñ.ˆ÷/ð �L‰L€EØ‡z�z�SÒØ—‘˜u¨5�Ó1ˆä�&œ"Ÿ*™*Ô%Ü—‘˜+¨Ñ*¨A¨vÓ6ˆÜŸF™Fˆˆu�q‰yÑà€M÷E:ñ :ú÷T8ñ 8ú÷/ð /ús$   Ã%MÈ:MË	M,ÍMÍM)Í,M5c               ó¤   — t        | ||«      }|r|�| j                  «       } d| |<   | j                  |«      }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)
    rÉ   ré   )rœ   r¡   Úprodrë   rË   )rG   re   rf   rh   ri   rt   s         r*   r�   r�   ”  s[   € ô@ ˜6 6¨4Ó0€Dá�$Ð"Ø—‘“ˆØˆˆt‰Ø�[‰[˜Ó€Fô Ø��d˜FŸL™L°Iôð r,   c                óT  — |€| S |�t        | dd«      s<|r|j                  «       rt        d«      ‚|s|j                  «       rt        d«      ‚| S |r*|j                  |«      j                  «       rt        d«      ‚|s*|j                  |«      j                  «       rt        d«      ‚| S )NrÊ   FzEncountered all NA valuesz)Encountered an NA value with skipna=False)rz   rå   rL   rH   )rt   re   ri   rf   s       r*   r?  r?  Á  sž   € ð €|Øˆà€|œ7 6¨6°5Ô9Ù�d—h‘h”jÜÐ8Ó9Ð9Ù˜DŸH™HœJÜÐHÓIÐIð
 €Mñ	 
�D—H‘H˜T“N×&Ñ&Ô(ÜÐ4Ó5Ð5Ù˜Ÿ™ ›×*Ñ*Ô,ÜÐDÓEÐEØ€Mr,   c                óB  — |€F|�|j                   |j                  «       z
  }nt        j                  | «      }|j	                  |«      S |�"|j
                  |   |j                  |«      z
  }n| |   }t        |«      r|j	                  |«      S |j                  |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
    Fr³   )rl   rê   r‰   rf  r1   rË   r   r¶   )r  ri   re   r3   Únr÷   s         r*   ró   ró   ×  s”   € ð0 €|ØÐØ—	‘	˜DŸH™H›JÑ&‰Aä—‘˜Ó%ˆAØ�z‰z˜!‹}ÐàÐØ—
‘
˜4Ñ  4§8¡8¨D£>Ñ1‰à˜TÑ"ˆä�%ÔØ�z‰z˜%Ó Ð Ø�<‰<˜ Eˆ<Ó*Ð*r,   c                óÀ  — |€|dk(  r| S |��t        | t        j                  «      rç|�(|j                  |   |j	                  |«      z
  |z
  dk  }n/||   |z
  dk  }|d| ||dz   d z   }t        j
                  ||«      }t        j                  |«      rw|rt        | |<   | S t        | «      rZt        j                  | «      r| j                  d«      } nt        | «      s| j                  dd¬«      } t        j                  | |<   | S d| |<   | S | t        urHt        |||«      r;t        | dd«      }	t        |	«      r|	j!                  d	«      } | S t        j                  } | S )
zu
    Returns
    -------
    Dtype
        The product of all elements on a given axis. ( NaNs are treated as 1)
    Nr   rÉ   Úc16r…   Fr³   r3   rC   )rˆ   r‰   rŠ   rË   rê   Úbroadcast_torH   r
   r   Úiscomplexobjr¶   r   rC   r   Úcheck_below_min_countrz   r1   )
rt   re   ri   rË   rh   r¤   Ú	null_maskÚbelow_countÚ	new_shapeÚresult_dtypes
             r*   rë   rë      sk  € ð €|˜	 QšàˆàÑœJ v¬r¯z©zÔ:ØÐØŸ™ DÑ)¨D¯H©H°T«NÑ:¸YÑFÈ!ÑK‰Ið   ™+¨	Ñ1°AÑ5ˆKØ˜e˜t˜ u¨T°A©X¨ZÐ'8Ñ8ˆIÜŸ™¨°YÓ?ˆIä�6‰6�)ÔÙä$(��yÑ!ð& €Mô% " &Ô)Ü—?‘? 6Ô*Ø#Ÿ]™]¨5Ó1‘FÜ'¨Ô/Ø#Ÿ]™]¨4°e˜]Ó<�FÜ$&§F¡F��yÑ!ð €Mð %)��yÑ!ð €Mð 
”sÑ	Ü  ¨¨iÔ8Ü" 6¨7°DÓ9ˆLÜ˜lÔ+à%×*Ñ*¨5Ó1�ð €Mô Ÿ™�à€Mr,   c                ó„   — |dkD  r;|€t        j                  | «      }n|j                  |j                  «       z
  }||k  ryy)aÅ  
    Check for the `min_count` keyword. Returns True if below `min_count` (when
    missing value should be returned from the reduction).

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

    Returns
    -------
    bool
    r   TF)r‰   rf  rl   rê   )rË   ri   rh   Ú	non_nullss       r*   rn  rn  4  s?   € ð( �1‚}Øˆ<äŸ™ ›‰IàŸ	™	 D§H¡H£JÑ.ˆIØ�yÒ ØØr,   c                óú   — t        | t        j                  «      r-t        j                  t        j                  | «      |k  d| «      S t        j                  | «      |k  r| j
                  j                  d«      S | S ©Nr   )rˆ   r‰   rŠ   r£   rN  r3   r1   )ÚargÚtols     r*   rQ  rQ  S  sW   € ä�#”r—z‘zÔ"Ü�x‰xœŸ™˜s› cÑ)¨1¨cÓ2Ð2ä$&§F¡F¨3£K°#Ò$5ˆs�y‰y�~‰~˜aÓ Ð>¸3Ð>r,   Úpearson)ÚmethodÚmin_periodsc               ó@  — t        | «      t        |«      k7  rt        d«      ‚|€d}t        | «      t        |«      z  }|j                  «       s
| |   } ||   }t        | «      |k  rt        j
                  S t        | «      } t        |«      }t        |«      } || |«      S )z
    a, b: ndarrays
    z'Operands to nancorr must have same sizerÉ   )rj   ÚAssertionErrorr    rå   r‰   rC   rô   Úget_corr_func)ÚaÚbrz  r{  ÚvalidrR   s         r*   Únancorrr‚  [  s–   € ô ˆ1ƒv”�Q“ÒÜÐFÓGÐGàÐØˆä�!‹H”u˜Q“xÑ€EØ�9‰9Œ;Øˆe‰HˆØˆe‰Hˆä
ˆ1ƒv�ÒÜ�v‰vˆä˜Ó€AÜ˜Ó€Aä�fÓ€AÙˆQ�‹7€Nr,   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 rv  r~   )r  r€  r…  s     €r*   rÂ   zget_corr_func.<locals>.func�  s   ø€ Ù˜a Ó# AÑ&Ð&r,   Úspearman)Ú	spearmanrc                ó   •—  ‰| |«      d   S rv  r~   )r  r€  rˆ  s     €r*   rÂ   zget_corr_func.<locals>.funcˆ  s   ø€ Ù˜Q “? 1Ñ%Ð%r,   ry  c                ó4   — 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ˆ  ÚcallablerL   )rz  rÂ   r…  rˆ  s     @@r*   r~  r~  {  sr   ù€ ð �ÒÝ*ô	'ð ˆØ	�:Ò	Ý)ô	&ð ˆØ	�9Ò	ò	+ð ˆÜ	�&Ô	Øˆä
Ø
˜6˜(ð #8ð 	8óð r,   )r{  r  c               óN  — t        | «      t        |«      k7  rt        d«      ‚|€d}t        | «      t        |«      z  }|j                  «       s
| |   } ||   }t        | «      |k  rt        j
                  S t        | «      } t        |«      }t	        j                  | ||¬«      d   S )Nz&Operands to nancov must have same sizerÉ   r   r‹  )rj   r}  r    rå   r‰   rC   rô   Úcov)r  r€  r{  r  r�  s        r*   Únancovr‘  ›  s™   € ô ˆ1ƒv”�Q“ÒÜÐEÓFÐFàÐØˆä�!‹H”u˜Q“xÑ€EØ�9‰9Œ;Øˆe‰HˆØˆe‰Hˆä
ˆ1ƒv�ÒÜ�v‰vˆä˜Ó€AÜ˜Ó€Aä�6‰6�!�Q˜TÔ" 4Ñ(Ð(r,   c                ó¤  — t        | t        j                  «      rÌ| j                  j                  dv r!| j                  t        j                  «      } | S | j                  t        k(  r~t        j                  | «      }|dv rt        d| › d�«      ‚	 | j                  t        j                  «      } t        j                  t        j                  | «      «      s| j                  } | S | S t!        | «      sCt#        | «      s8t%        | «      s-t        | t&        «      rt        d| › d�«      ‚	 t)        | «      } | S | S # t        t        f$ rF 	 | j                  t        j                  «      } n!# t        $ r}t        d| › d�«      |‚d }~ww xY wY | S w xY w# t        t        f$ r1 	 t+        | «      } Y | S # t        $ r}t        d| › d�«      |‚d }~ww xY ww xY w)Nr™   r  zCould not convert r  zCould not convert string 'z' to numeric)rˆ   r‰   rŠ   r3   r›   r¶   rª   rƒ   r   r
  rK   Ú
complex128rH   r,  r+  rL   r   r   r   r  ÚfloatÚcomplex)rÛ   r  r  s      r*   rô   rô   ·  s¿  € Ü�!”R—Z‘ZÔ Ø�7‰7�<‰<˜5Ñ Ø—‘œŸ™Ó$ˆAð< €Hð; �W‰WœÒÜ—‘ qÓ)ˆHØÐ.Ñ.äÐ"4°Q°C°{Ð CÓDÐDð
Ø—H‘HœRŸ]™]Ó+�ô —v‘vœbŸg™g a›jÔ)ØŸ™�Að €Hˆ1€Hô �qŒkœZ¨œ]¬j¸¬mÜ�aœÔäÐ8¸¸¸<ÐHÓIÐIð	NÜ�a“ˆAð €Hˆ1€Høô- œzÐ*ò RðRØŸ™¤§¡Ó,‘AøÜ!ò Rä#Ð&8¸¸¸;Ð$GÓHÈcÐQûðRúð ð( €Hð-Rûô œ:Ð&ò 	NðNÜ˜A“J‘ð €Høô ò NäÐ"4°Q°C°{Ð CÓDÈ#ÐMûðNúð		Nús`   ÂD7 Ä(F Ä7FÅE'Å&FÅ'	FÅ0F Æ FÆFÆFÆGÆF-Æ-	GÆ6GÇGÇG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 ‚|rot        | j                  j                  t         j                  t         j                  f«      s1| j                  «       }t        |«      }|||<    ||d¬«      }|||<   |S  || 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      ð?rJ  rš   r   rÏ   )r‰   ÚcumprodrC   ÚmaximumÚ
accumulater’   ÚcumsumÚminimumr3   r›   r=   r1   r®   Úbool_r¡   r   )rG   Ú
accum_funcrf   Úmask_aÚmask_bÚvalsri   rt   s           r*   Úna_accum_funcr¡  Û  s   € ô 	�
‰
�Sœ"Ÿ&™&�MÜ
�
‰
×Ñ¤§¡ ¬¯©Ð0Ü
�	‰	�CœŸ™�=Ü
�
‰
×Ñ¤§¡¬¯©Ð/ð	ð
 ñ�N€FˆFð �<‰<×Ñ DÑ(Ð(Ð(ñ ”j §¡×!2Ñ!2´R·Z±ZÄÇÁÐ4JÔKØ�{‰{‹}ˆÜ�D‹zˆØˆˆT‰
Ù˜D qÔ)ˆØˆˆt‰ð €Mñ ˜F¨Ô+ˆà€Mr,   )T)r)   r[   rX   rY   )r3   r   rb   r  rX   r[   rZ   )NN)r3   r   r•   zScalar | None)rG   rx   rf   r[   ri   rÅ   rX   rÅ   )NNN)rG   rx   rf   r[   r•   r   r–   z
str | Noneri   rÅ   rX   z/tuple[np.ndarray, npt.NDArray[np.bool_] | None])r3   únp.dtyperX   r¢  )r3   r   rX   r[   r&   )r3   r¢  )rÂ   r   rX   r   )rG   rx   re   ry   rX   zScalar | np.ndarray)
rG   rx   re   ry   rf   r[   ri   rÅ   rX   r[   )rG   rx   re   ry   rf   r[   rh   Úintri   rÅ   rX   z*npt.NDArray[np.floating] | float | NaTType)
rt   z+np.ndarray | np.datetime64 | np.timedelta64re   ry   ri   znpt.NDArray[np.bool_]rÁ   rx   rX   z5np.ndarray | np.datetime64 | np.timedelta64 | NaTType)
rG   rx   re   ry   rf   r[   ri   rÅ   rX   r”  )rG   rx   re   ry   rf   r[   rX   úfloat | np.ndarray)rË   r   re   r   rX   rx   )r  r   ri   rÅ   re   ry   r  r£  r3   r¢  rX   z-tuple[float | np.ndarray, float | np.ndarray])re   ry   rf   r[   r  r£  )rG   rx   re   ry   rf   r[   r  r£  )rG   rx   re   ry   rf   r[   r  r£  ri   rÅ   rX   r”  )
rG   rx   re   ry   rf   r[   ri   rÅ   rX   zint | np.ndarray)rG   rx   re   ry   rf   r[   rh   r£  ri   rÅ   rX   r”  )
rt   rx   re   ry   ri   rÅ   rf   r[   rX   znp.ndarray | int)
r  r   ri   rÅ   re   ry   r3   znp.dtype[np.floating]rX   z&np.floating | npt.NDArray[np.floating])rÉ   F)rt   únp.ndarray | float | NaTTypere   ry   ri   rÅ   rË   útuple[int, ...]rh   r£  r¤   r[   rX   r¥  )rË   r¦  ri   rÅ   rh   r£  rX   r[   )rx  r¤  )
r  rx   r€  rx   rz  r   r{  ú
int | NonerX   r”  )rz  r   rX   z)Callable[[np.ndarray, np.ndarray], float])
r  rx   r€  rx   r{  r§  r  r§  rX   r”  )rG   r   rf   r[   rX   r   )]Ú
__future__r   rU   rE   Útypingr   r   r   rý   Únumpyr‰   Úpandas._configr   Úpandas._libsr   r	   r
   r   Úpandas._typingr   r   r   r   r   r   r   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   r   Úpandas.core.dtypes.missingr   r   r    Úcollections.abcr!   r{   r'   r(   r+   r.   r`   ro   rq   r—   rœ   r¥   r¬   r‘   r¼   rÆ   rn   rÝ   rã   ræ   r€   rÀ   r‚   r  r  r3   rª   r  r'  r%  r3  r9  ÚnanminÚnanmaxrA  rE  r[  rd  r�   r?  ró   rë   rn  rQ  r‚  r~  r‘  rô   r¡  r~   r,   r*   ú<module>r´     sB  ðÝ "ã Û ÷ñ ó
 ã å %÷ó ÷
÷ 
õ 
õ ?÷	÷ 	ó 	÷ñ ñ Ý(á °VÔ<€Ø $˜Ð Ø€ôñ ‘:Ð6Ó7Ô 8÷ñ ÷>5ñ 5ópó(
ð GKðØðØ!.óð.)Øð)Ø $ð)Ø,Hð)à!ó)ð^ Ø!%Ø)-ðDØðDàðDð ðDð ð	Dð
 'ðDð 5óDóN	ó2ô'óTóDEó>ðH  ØØ)-ñ5Øð5ð ð5ð ð	5ð
 'ð5ð 
ó5ðv  ØØ)-ñ5Øð5ð ð5ð ð	5ð
 'ð5ð 
ó5ñp 
ˆ$ƒØØð  ØØØ)-ñ*Øð*ð ð*ð ð	*ð
 ð*ð 'ð*ð 0ò*ó ó ó ð*ðZØ7ðà
ðð  ðð ð	ð
 ;óñ  ÓØð  ØØ)-ñ@Øð@ð ð@ð ð	@ð
 'ð@ð ò@ó ó ð@ñF Óà26ÀtÐRVñh%Øðh%Ø!/ðh%Ø@Dðh%àòh%ó ðh%ðVØðà
ðð óð8 �b—h‘h˜rŸz™zÓ*ð/Øð/à
&ð/ð ð/ð ð	/ð
 ð/ð 3ó/ñd ˜Ôð  ØØØ	ñ+-ð ð+-ð ð	+-ð
 ò+-ó ð+-ñ\ 
ˆ$�ÓÙ˜Ôð  ØØØ	ñNØðNð ðNð ð	Nð
 òNó ó ðNñb 
ˆ$�Óð  ØØØ)-ñ5)Øð5)ð ð5)ð ð	5)ð
 ð5)ð 'ð5)ð ò5)ó ð5)òpñ4 
�E¨&Ô	1€Ù	�E¨&Ô	1€ð  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð ó+ðb  ØØ)-ñ+Øð+ð ð+ð ð	+ð
 'ð+ð ó+ñ\ 
ˆ$�ÓØð  ØØ)-ñTØðTð ðTð ð	Tð
 'ðTð òTó ó ðTñn 
ˆ$�ÓØð  ØØ)-ñrØðrð ðrð ð	rð
 'ðrð òró ó ðrñj 
ˆ$�ÓØð  ØØØ)-ñ(Øð(ð ð(ð ð	(ð
 ð(ð 'ð(ð ò(ó ó ð(ðVØðà
ðð 'ðð ð	ð
 óð4 $, 2§8¡8¨B¯J©JÓ#7ð	&+Øð&+à
&ð&+ð ð&+ð !ð	&+ð
 ,ó&+ð\ Øð1Ø(ð1à
ð1ð 'ð1ð ð	1ð
 ð1ð ð1ð "ó1ðhØðØ">ðØKNðà	óó>?ñ 
ˆ$�Óð
 !*Ø"ñØðàðð ð	ð
 ðð òó ðð>Øðà.óñ@ 
ˆ$�Óð
 #Øñ)Øð)àð)ð ð	)ð
 ð)ð ò)ó ð)ò6!ôH"r,   