Ë
    ª2ÚiXÎ  ã                  óä  — 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    úI/var/www/html/acx/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
                  S t        S )z9return the correct fill value for the dtype of the valuesú+inf)Ú_na_ok_dtyper‰   rC   Úinfr   Úi8maxr
   )r3   Ú
fill_valueÚfill_value_typs      r*   Ú_get_fill_valuer–   ½   sZ   € ð ÐØÐÜ�EÔØÐ!Ü—6‘6ˆMØ˜vÒ%Ü—6‘6ˆMä—F‘F�7ˆNØ	˜6Ò	!ä�y‰yÐäˆ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   Úint64Úuint64Úfloat64)r3   Ú	dtype_maxs     r*   Ú_get_dtype_maxr¬   D  s{   € à€IØ‡z�z�TÑÜ—H‘HœRŸX™XÓ&ˆ	ð
 Ðð	 
�‰�sÒ	Ü—H‘HœRŸY™YÓ'ˆ	ð Ðð 
�‰�sÒ	Ü—H‘HœRŸZ™ZÓ(ˆ	ØÐr,   c                ód   — t        | «      ryt        | j                  t        j                  «       S )NF)r   r=   r1   r‰   Úinteger©r3   s    r*   r‘   r‘   P  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                  | «      r&t	        j                  d«      j                  |«      } | 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    Úmzoverflow in timedelta operationzm8[ns])r   rš   r
   rˆ   r‰   rŠ   r   rC   Ú
datetime64Úastyper¨   rŸ   ÚisnanÚtimedelta64Úfabsr   r“   rL   )rt   r3   r”   s      r*   Ú_wrap_resultsrº   V  s„  € à”�}ØðF €MðC 
�‰�sÒ	ØÐäˆJÜ˜&¤"§*¡*Ô-Ü˜JÔ'ÐGÐ)GÓGÐ'Ø˜Ò#ÜŸ™�ä�FŒ|ÜŸ™ u¨dÓ3×:Ñ:¸5ÓA‘äŸ™ &Ó)×.Ñ.¨uÓ5�à—]‘] 5¨u�]Ó5ˆFð& €Mð! —]‘] 5Ó)ˆFð  €Mð 
�‰�sÒ	Ü˜&¤"§*¡*Ô-Ø˜Ò#¤r§x¡x°Ô'7ÜŸ™¨Ó.×5Ñ5°eÓ<�ð €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€   Q  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  B  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  Y  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‰   Údatetime_datarŸ   r¤   ÚsqrtÚnanvarrº   )rG   re   rf   r  ri   ÚunitÚ
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«      } |�t        j
                  | |<   | j                   j                  dk(  r't        | j                  |||| j                   «      \  }}nt        | j                  |||«      \  }}|r)|�'| j                  «       } t	        j                  | |d«       t        | j                  |t        j                  ¬«      «      |z  }|�t	        j                  ||«      }| j                   j                  dk(  rt        t        || z
  «      dz  «      }	n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…   rR   r   )re   r3   ÚcrÏ   Fr³   )r3   r›   rš   r¶   r‰   rC   r  rÉ   r    r¡   rò   rè   rª   Úexpand_dimsÚabs)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à‡|�|×Ñ˜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 $Ó'ˆØ‡|�|×Ñ˜CÒäœc #¨¡,Ó/°1Ñ4Ó5‰ä˜s V™|°Ñ1Ó2ˆØÐÜ
�
‰
�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k7  r| j	                  d«      } |s"|� |j                  «       rt        j                  S t        | j                  |||| 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  rR   r…   )r$  r›   r3   rš   r¶   rH   r‰   rC   r  rÉ   r#  )rG   re   rf   r  ri   rõ   rà   Úvars           r*   Únansemr1  	  s§   € ôL ˆ6˜ V°$¸TÕBä˜6 6¨4Ó0€DØ‡|�|×Ñ˜CÒØ—‘˜tÓ$ˆá�dÐ&¨4¯8©8¬:Ü�v‰vˆä! &§,¡,°°d¸DÀ&Ç,Á,ÓO�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>.reduction?  s|   ø€ ð �;‰;˜!ÒÜ$ V¨TÓ2Ð2à—‘ˆÜ"Ø�F¨>Àô
‰ˆ�ð '”˜ Ó& tÓ,ˆÜ Ø�D˜$ §¡¸5¿:¹:ÈÐ;Mô
ˆð ˆr,   rÂ   )r`   rÄ   )r5  r•   r6  s   `` r*   Ú
_nanminmaxr7  >  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:  r4  )r¤   ÚargmaxÚ_maybe_arg_null_out©rG   re   rf   ri   rt   s        r*   Ú	nanargmaxr?  \  ó>   € ô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�   r4  )r¤   Úargminr=  r>  s        r*   Ú	nanargminrC  Š  r@  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+  r,  r9  ÚfinfoÚepsÚ_zero_out_fperrrˆ   rŠ   r¢   r1   )rG   re   rf   ri   rõ   ÚmeanÚadjustedÚ	adjusted2Ú	adjusted3Úm2Úm3Úmax_absrM  Úconstant_tolerance2Úconstant_tolerance3rt   r3   s                    r*   ÚnanskewrX  ¸  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ð   rE  rÏ   rH  rI  é   rK  rÇ   Fr³   )r›   r3   rš   r¶   rñ   rÉ   r    r‰   r¡   rH   rC   ró   rè   rª   r+  r,  r9  rL  rM  rN  rˆ   rŠ   r1   r¢   )rG   re   rf   ri   rõ   rO  rP  rQ  Ú	adjusted4rS  Úm4rU  rM  rV  Úconstant_tolerance4ÚadjÚ	numeratorÚdenominatorrt   r3   s                       r*   Únankurtra    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‰   rc  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‰   rc  rl   rè   )rÉ   ri   rh   Ú	non_nullss       r*   rk  rk  (  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¢   r,  r3   r1   )ÚargÚtols     r*   rN  rN  G  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Úbrw  rx  ÚvalidrR   s         r*   Únancorrr  O  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 rs  r~   )r|  r}  r‚  s     €r*   rÀ   zget_corr_func.<locals>.funcu  s   ø€ Ù˜a Ó# AÑ&Ð&r,   Úspearman)Ú	spearmanrc                ó   •—  ‰| |«      d   S rs  r~   )r|  r}  r…  s     €r*   rÀ   zget_corr_func.<locals>.func|  s   ø€ Ù˜Q “? 1Ñ%Ð%r,   rv  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   )rw  rÀ   r‚  r…  s     @@r*   r{  r{  o  sr   ù€ ð �ÒÝ*ô	'ð ˆØ	�:Ò	Ý)ô	&ð ˆØ	�9Ò	ò	+ð ˆÜ	�&Ô	Øˆä
Ø
˜6˜(ð #8ð 	8óð r,   )rx  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   rz  r    rã   r‰   rC   rò   Úcov)r|  r}  rx  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   ÚimagÚrealrL   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      ð?rH  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[   )ru  r£  )
r|  rx   r}  rx   rw  r   rx  ú
int | NonerX   r“  )rw  r   rX   z)Callable[[np.ndarray, np.ndarray], float])
r|  rx   r}  rx   rx  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$  r1  r7  ÚnanminÚnanmaxr?  rC  rX  ra  r�   r=  rñ   ré   rk  rN  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ô&óRó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 ˜Ôð  ØØØ	ñ+-ð ð+-ð ð	+-ð
 ò+-ó ð+-ñ\ 
ˆ$�ÓÙ˜Ôð  ØØØ	ñJØðJð ðJð ð	Jð
 òJó ó ðJñZ 
ˆ$�Óð  ØØØ)-ñ1)Øð1)ð ð1)ð ð	1)ð
 ð1)ð 'ð1)ð ò1)ó ð1)òhñ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,   