§
    tŠtj´„  ã                  ó  — U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlZddlmZ ddlmZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z* erddl+m,Z, ddlm-Z- ddl.m/Z/ ed         Z0de1d<   d|d„Z2d}d„Z3e
ddœd~d$„¦   «         Z4e
dd(„¦   «         Z4d)dœd€d+„Z4g d,¢Z5g d-¢Z6d�d1„Z7d‚d5„Z8dƒd8„Z9d„d<„Z:d…d?„Z;d†d@„Z<	 	 	 	 	 	 d‡dˆdK„Z=d‰dL„Z>	 	 	 	 	 	 	 	 dŠd‹dQ„Z?	 	 	 dŒd�dU„Z@	 	 	 dŽd�d[„ZA	 	 d�d‘d\„ZB	 	 	 d’d“da„ZC	 	 	 	 d”d•dd„ZD	 d–d—df„ZEd˜di„ZFeF	 	 	 d™dšdk„¦   «         ZGeF	 	 	 d™dšdl„¦   «         ZHeF	 	 	 d™dšdm„¦   «         ZIeF	 	 	 d™d›dn„¦   «         ZJdœdp„ZKdœdq„ZLeGeHdrœZMd�dždu„ZNdŸdw„ZOd d{„ZPdS )¡z$
Routines for filling missing data.
é    )Úannotations)Úwraps)ÚTYPE_CHECKINGÚAnyÚLiteralÚcastÚoverloadN)Ú	is_nan_na)ÚNaTÚalgosÚlib)Ú	ArrayLikeÚAxisIntÚFÚReindexMethodÚnpt)Úimport_optional_dependency)Úinfer_dtype_from)Úis_array_likeÚis_bool_dtypeÚis_numeric_dtypeÚis_object_dtypeÚneeds_i8_conversion)Ú
ArrowDtypeÚBaseMaskedDtypeÚDatetimeTZDtype)Úis_valid_na_for_dtypeÚisnaÚna_value_for_dtype)ÚCallable)Ú	TypeAlias)ÚIndex)ú
not-a-knotÚclampedÚnaturalÚperiodicr!   Ú_CubicBCÚmaskúnpt.NDArray[np.bool_]ÚlengthÚintc                óž   — t          | ¦  «        r=t          | ¦  «        |k    r"t          dt          | ¦  «        › d|› �¦  «        ‚| |         } | S )zJ
    Validate the size of the values passed to ExtensionArray.fillna.
    z'Length of 'value' does not match. Got (z)  expected )r   ÚlenÚ
ValueError)Úvaluer(   r*   s      úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pandas/core/missing.pyÚcheck_value_sizer1   >   sk   € õ �UÑÔð Ýˆu‰:Œ:˜ÒÐÝð&½#¸e¹*¼*ð &ð &Ø#ð&ð &ñô ð ð �d”ˆà€Ló    Úarrr   Úreturnc                ó  — t          |¦  «        \  }}t          | j        t          t          f¦  «        �rt          j        |¦  «        rôt          j        |¦  «        ràt          ¦   «         sÒ| j        j
        dk    r’t          | j        t          ¦  «        r1t          j        | j        ¦  «        |                      ¦   «          z  }|S ddlm} |                     | j        ¦  «                             d¦  «                             ¦   «         }|S | j        j
        dv r"t          j        | j        t*          ¬¦  «        }|S t          |¦  «        rt          | ¦  «        S t          j        | j        t*          ¬¦  «        }t-          | j        ¦  «        r)t/          | j        ¦  «        st          j        |¦  «        rnÔt/          | j        ¦  «        r$t-          |¦  «        rt          j        |¦  «        snœt-          | j        ¦  «        rt          |t2          ¦  «        rnrt5          | j        ¦  «        r t          | ¦  «         }| |         |k    ||<   n>| |k    }t          |t          j        ¦  «        s|                     t*          d¬¦  «        }|}|S )a?  
    Return a masking array of same size/shape as arr
    with entries equaling value set to True.

    Parameters
    ----------
    arr : ArrayLike
    value : scalar-like
        Caller has ensured `not is_list_like(value)` and that it can be held
        by `arr`.

    Returns
    -------
    np.ndarray[bool]
    Úfr   NFÚiu©Údtype)r9   Úna_value)r   Ú
isinstancer9   r   r   r   Úis_floatÚnpÚisnanr
   ÚkindÚ_datar   Úpyarrow.computeÚcomputeÚis_nanÚ	_pa_arrayÚ	fill_nullÚto_numpyÚzerosÚshapeÚboolr   r   Úis_boolÚstrr   Úndarray)r3   r/   r9   r(   ÚpcÚarr_maskÚnew_masks          r0   Úmask_missingrP   M   s`  € õ  $ EÑ*Ô*�L€Eˆ5õ 	�3”9�µ
Ð;Ñ<Ô<ñåŒL˜ÑÔðõ ŒH�U‰OŒOðõ ‘”ð	ð Œ9Œ>˜SÒ Ð å˜#œ)¥_Ñ5Ô5ð 	å”x ¤	Ñ*Ô*¨c¯hªh©j¬j¨[Ñ8�Ø�ð -Ð,Ð,Ð,Ð,Ð,à—y’y ¤Ñ/Ô/×9Ò9¸%Ñ@Ô@×IÒIÑKÔK�Ø�àŒYŒ^˜tÐ#Ð#å”8˜CœI­TÐ2Ñ2Ô2ˆDØˆKåˆE�{„{ð Ý�C‰yŒyÐõ Œ8�C”I¥TÐ*Ñ*Ô*€Då˜œÑ#Ô#ðå˜cœiÑ(Ô(ðõ ŒK˜ÑÔðð 	å�c”iÑ Ô ðÝ%5°eÑ%<Ô%<ðÝEHÄ[ÐQVÑEWÔEWðð 	Ý	˜#œ)Ñ	$Ô	$ð ­°E½3Ñ)?Ô)?ð àÝ	˜œÑ	#Ô	#ð õ ˜‘I”I�:ˆØ˜Xœ¨%Ò/ˆˆX‰ˆà˜%’<ˆå˜(¥B¤JÑ/Ô/ð 	Eà×(Ò(­t¸eÐ(ÑDÔDˆHØˆà€Kr2   .©Úallow_nearestÚmethodú,Literal['ffill', 'pad', 'bfill', 'backfill']rR   úLiteral[False]úLiteral['pad', 'backfill']c               ó   — d S ©N© ©rS   rR   s     r0   Úclean_fill_methodr[   œ   s	   € ð
 "% r2   ú7Literal['ffill', 'pad', 'bfill', 'backfill', 'nearest']úLiteral[True]ú%Literal['pad', 'backfill', 'nearest']c               ó   — d S rX   rY   rZ   s     r0   r[   r[   ¤   s	   € ð
 -0¨Cr2   FrI   c               óê   — t          | t          ¦  «        r%|                      ¦   «         } | dk    rd} n| dk    rd} ddg}d}|r|                     d¦  «         d}| |vrt	          d|› d	| › �¦  «        ‚| S )
NÚffillÚpadÚbfillÚbackfillzpad (ffill) or backfill (bfill)Únearestz(pad (ffill), backfill (bfill) or nearestzInvalid fill method. Expecting z. Got )r;   rK   ÚlowerÚappendr.   )rS   rR   Úvalid_methodsÚ	expectings       r0   r[   r[   ¬   s¦   € õ
 �&�#ÑÔð  ð —’‘”ˆØ�WÒÐØˆFˆFØ�wÒÐØˆFà˜JÐ'€MØ1€IØð ?Ø×Ò˜YÑ'Ô'Ð'Ø>ˆ	Ø�]Ð"Ð"ÝÐT¸9ÐTÐTÈFÐTÐTÑUÔUÐUØ€Mr2   )ÚlinearÚtimeÚindexÚvalues)re   ÚzeroÚslinearÚ	quadraticÚcubicÚbarycentricÚkroghÚsplineÚ
polynomialÚfrom_derivativesÚpiecewise_polynomialÚpchipÚakimaÚcubicsplinerK   rl   r"   c                óæ   — |                      d¦  «        }| dv r|€t          d¦  «        ‚t          t          z   }| |vrt          d|› d| › d�¦  «        ‚| dv r|j        st          | › d�¦  «        ‚| S )	NÚorder)rt   ru   z7You must specify the order of the spline or polynomial.zmethod must be one of z. Got 'z
' instead.)rs   rw   rx   z4 interpolation requires that the index be monotonic.)Úgetr.   Ú
NP_METHODSÚ
SP_METHODSÚis_monotonic_increasing)rS   rl   Úkwargsr|   Úvalids        r0   Úclean_interp_methodrƒ   Ü   s¥   € Ø�JŠJ�wÑÔ€EàÐ)Ð)Ð)¨e¨mÝÐRÑSÔSÐSå�Ñ#€EØ�UÐÐÝÐR°%ÐRÐRÀÐRÐRÐRÑSÔSÐSàÐ;Ð;Ð;ØÔ,ð 	ÝØÐOÐOÐOñô ð ð €Mr2   ÚhowÚis_validú
int | Nonec                óH  — | dv sJ ‚t          |¦  «        dk    rdS |j        dk    r|                     d¬¦  «        }| dk    r|dd…                              ¦   «         }n6| dk    r0t          |¦  «        dz
  |ddd	…                              ¦   «         z
  }||         }|sdS |S )
a+  
    Retrieves the positional index of the first valid value.

    Parameters
    ----------
    how : {'first', 'last'}
        Use this parameter to change between the first or last valid index.
    is_valid: np.ndarray
        Mask to find na_values.

    Returns
    -------
    int or None
    )ÚfirstÚlastr   Né   é   ©Úaxisrˆ   r‰   éÿÿÿÿ)r-   ÚndimÚanyÚargmax)r„   r…   ÚidxposÚ	chk_notnas       r0   Úfind_valid_indexr”   ï   sÂ   € ð Ð#Ð#Ð#Ð#Ð#å
ˆ8�}„}˜ÒÐØˆtà„}˜ÒÐà—<’< Q�<Ñ'Ô'ˆà
ˆg‚~€~Ø˜"˜"˜"”×$Ò$Ñ&Ô&ˆˆà	�ŠˆÝ�X‘” Ñ" X¨d¨d°¨d¤^×%:Ò%:Ñ%<Ô%<Ñ<ˆà˜Ô €Iàð Øˆtð €Mr2   Úlimit_directionú&Literal['forward', 'backward', 'both']c                ój   — g d¢}|                       ¦   «         } | |vrt          d|› d| › d�¦  «        ‚| S )N)ÚforwardÚbackwardÚbothz*Invalid limit_direction: expecting one of z, got 'z'.©rf   r.   )r•   Úvalid_limit_directionss     r0   Úvalidate_limit_directionr�     sq   € ð =Ð<Ð<ÐØ%×+Ò+Ñ-Ô-€OØÐ4Ð4Ð4ÝðBØ%ðBð BØ.=ðBð Bð Bñ
ô 
ð 	
ð Ðr2   Ú
limit_areaú
str | Noneú#Literal['inside', 'outside'] | Nonec                ón   — | �2ddg}|                       ¦   «         } | |vrt          d|› d| › d�¦  «        ‚| S )NÚinsideÚoutsidez%Invalid limit_area: expecting one of z, got ú.r›   )rž   Úvalid_limit_areass     r0   Úvalidate_limit_arear¦   %  sn   € ØÐØ% yÐ1ÐØ×%Ò%Ñ'Ô'ˆ
ØÐ.Ð.Ð.Ýð!Ð8Ið !ð !Øð!ð !ð !ñô ð ð Ðr2   ú-Literal['backward', 'forward', 'both'] | Noneú&Literal['backward', 'forward', 'both']c                ó’   — | €
|dv rd} n=d} n:|dv r| dk    rt          d|› d�¦  «        ‚|dv r| dk    rt          d|› d�¦  «        ‚| S )N)rd   rc   r™   r˜   )rb   ra   z0`limit_direction` must be 'forward' for method `ú`z1`limit_direction` must be 'backward' for method `)r.   )r•   rS   s     r0   Úinfer_limit_directionr«   3  sš   € ð ÐØÐ*Ð*Ð*Ø(ˆOˆOà'ˆOˆOàÐ%Ð%Ð%¨/¸YÒ*FÐ*FÝØLÀ6ÐLÐLÐLñô ð ð Ð*Ð*Ð*¨À*Ò/LÐ/LÝØMÀFÐMÐMÐMñô ð ð Ðr2   c                óÈ  — | dk    rddl m}  |t          |¦  «        ¦  «        }nŒh d£}t          |j        ¦  «        p3t          |j        t          ¦  «        pt          j        |j        d¦  «        }t          t          z   }| |v r| |vr|st          d| › d�¦  «        ‚nt          d| › d	�¦  «        ‚t          |¦  «                             ¦   «         rt          d
¦  «        ‚|S )Nrj   r   )Ú
RangeIndex>   rk   rl   rm   re   ÚmMz9Index column must be numeric or datetime type when using z_ method other than linear. Try setting a numeric or datetime index column before interpolating.ú Can not interpolate with method=r¤   zkInterpolation with NaNs in the index has not been implemented. Try filling those NaNs before interpolating.)Úpandasr­   r-   r   r9   r;   r   r   Úis_np_dtyper~   r   r.   r   r�   ÚNotImplementedError)rS   rl   r­   ÚmethodsÚis_numeric_or_datetimer‚   s         r0   Úget_interp_indexrµ   H  s  € à�ÒÐà%Ð%Ð%Ð%Ð%Ð%à�
�3˜u™:œ:Ñ&Ô&ˆˆà8Ð8Ð8ˆå˜Uœ[Ñ)Ô)ð 2Ý˜%œ+¥Ñ7Ô7ð2åŒ˜uœ{¨DÑ1Ô1ð 	õ
 �ZÑ'ˆØ�Uˆ?ˆ?Ø˜WÐ$Ð$Ð-CÐ$Ý ð%Ø#ð%ð %ð %ñô ð øõ ÐIÀÐIÐIÐIÑJÔJÐJåˆE�{„{‡‚ÑÔð 
Ý!ð/ñ
ô 
ð 	
ð
 €Lr2   rj   r˜   Údataú
np.ndarrayr�   r   ÚlimitÚ
fill_valueú
Any | NoneÚNonec	           	     ó¬  ‡‡‡‡‡‡	‡‡— t          ‰|fi ‰	¤Ž t          ‰| j        ¦  «        rt          | j        d¬¦  «        Š‰dk    r%t	          |j        ¦  «        st          d¦  «        ‚dŠt          ‰¦  «        Št          |¦  «        Št          j	        d‰¬¦  «        Št          |‰¦  «        Šdˆˆˆ	ˆˆˆˆˆfd„}
t          j        |
|| ¦  «         dS )zÝ
    Column-wise application of _interpolate_1d.

    Notes
    -----
    Alters 'data' in-place.

    The signature does differ from _interpolate_1d because it only
    includes what is needed for Block.interpolate.
    F)Úcompatrk   zStime-weighted interpolation only works on Series or DataFrames with a DatetimeIndexrm   N)Únobsr¸   Úyvaluesr·   r4   r»   c                ó4   •— t          d‰| ‰‰‰‰‰d‰dœ	‰¤Ž d S )NF)	Úindicesr¿   rS   r¸   r•   rž   r¹   Úbounds_errorr(   rY   )Ú_interpolate_1d)	r¿   r¹   rÁ   r�   r¸   Úlimit_area_validatedr•   r(   rS   s	    €€€€€€€€r0   Úfuncz$interpolate_2d_inplace.<locals>.func˜  sP   ø€ õ 	ð 	
ØØØØØ+Ø+Ø!ØØð	
ð 	
ð ð	
ð 	
ð 	
ð 	
ð 	
r2   )r¿   r·   r4   r»   )rƒ   r   r9   r   r   r.   r�   r¦   r   Úvalidate_limitÚ_index_to_interp_indicesr=   Úapply_along_axis)r¶   rl   r�   rS   r¸   r•   rž   r¹   r(   r�   rÅ   rÁ   rÄ   s      ``` ``` @@r0   Úinterpolate_2d_inplacerÉ   k  s'  øøøøøøøø€ õ. ˜ Ð0Ð0¨Ð0Ð0Ð0å˜Z¨¬Ñ4Ô4ð BÝ'¨¬
¸5ÐAÑAÔAˆ
à�ÒÐÝ" 5¤;Ñ/Ô/ð 	Ýð ñô ð ð
 ˆå.¨Ñ?Ô?€OÝ.¨zÑ:Ô:Ðõ Ô  d°%Ð8Ñ8Ô8€Eå& u¨fÑ5Ô5€Gð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ  Ô˜˜d DÑ)Ô)Ð)Ð)Ð)r2   c                ó.  — | j         }t          |j        ¦  «        r|                     d¦  «        }|dk    r|}t	          t
          j        |¦  «        }nAt          j        |¦  «        }|dv r)|j        t
          j        k    rt          j
        |¦  «        }|S )zE
    Convert Index to ndarray of indices to pass to NumPy/SciPy.
    Úi8rj   )rm   rl   )Ú_valuesr   r9   Úviewr   r=   rL   ÚasarrayÚobject_r   Úmaybe_convert_objects)rl   rS   ÚxarrÚindss       r0   rÇ   rÇ   «  sŽ   € ð Œ=€DÝ˜4œ:Ñ&Ô&ð à�yŠy˜‰Œˆà�ÒÐØˆÝ•B”J Ñ%Ô%ˆˆåŒz˜$ÑÔˆàÐ(Ð(Ð(ØŒz�RœZÒ'Ð'ÝÔ0°Ñ6Ô6�à€Kr2   rÁ   r¿   rÂ   r|   c
                ó,  — |	�|	}nt          |¦  «        }| }|                     ¦   «         sdS |                     ¦   «         rdS t          j        |¦  «        }t          d|¬¦  «        }|€d}t          j        |¦  «        }t          d|¬¦  «        }|€t          |¦  «        }t          j        d|z   t          |¦  «        ¦  «        }|dk    r%t          j        |t          ||d¦  «        ¦  «        }nN|dk    r%t          j        |t          |d|¦  «        ¦  «        }n#t          j
        t          |||¦  «        ¦  «        }|d	k    r+t          j        ||¦  «        }t          j        ||¦  «        }nI|d
k    rCt          j        ||d¬¦  «        }t          j        ||d¬¦  «        }t          j        ||¦  «        }|j        j        dv }|r|                     d¦  «        }|t          v rRt          j        | |         ¦  «        }t          j        | |         | |         |         ||         |         ¦  «        ||<   n)t%          | |         ||         | |         f||||dœ|
¤Ž||<   |	�d|	dd…<   d|	|<   n!|rt&          j        ||<   nt          j        ||<   dS )a  
    Logic for the 1-d interpolation.  The input
    indices and yvalues will each be 1-d arrays of the same length.

    Bounds_error is currently hardcoded to False since non-scipy ones don't
    take it as an argument.

    Notes
    -----
    Fills 'yvalues' in-place.
    Nrˆ   )r„   r…   r   r‰   r‹   r˜   r™   r¢   r£   T©Úassume_uniquer®   rË   )rS   r¹   rÂ   r|   F)r   r�   Úallr=   Úflatnonzeror”   Úaranger-   Úunion1dÚ_interp_limitÚuniqueÚ	setdiff1dr9   r?   rÍ   r~   ÚargsortÚinterpÚ_interpolate_scipy_wrapperr   r/   Únan)rÁ   r¿   rS   r¸   r•   rž   r¹   rÂ   r|   r(   r�   Úinvalidr‚   Úall_nansÚfirst_valid_indexÚ
start_nansÚlast_valid_indexÚend_nansÚpreserve_nansÚmid_nansÚis_datetimelikeÚindexers                         r0   rÃ   rÃ   Á  sÒ  € ð0 ÐØˆˆå�w‘-”-ˆØˆH€Eà�9Š9‰;Œ;ð Øˆà‡y‚y�{„{ð Øˆõ Œ~˜gÑ&Ô&€Hå(¨W¸uÐEÑEÔEÐØÐ ØÐÝ”Ð,Ñ-Ô-€Jå'¨F¸UÐCÑCÔCÐØÐÝ˜w™<œ<ÐÝŒy˜Ð-Ñ-­s°5©z¬zÑ:Ô:€Hð ˜)Ò#Ð#Ýœ
 :­}¸WÀeÈQÑ/OÔ/OÑPÔPˆˆØ	˜JÒ	&Ð	&Ýœ
 8­]¸7ÀAÀuÑ-MÔ-MÑNÔNˆˆõ œ	¥-°¸ÀÑ"FÔ"FÑGÔGˆð �XÒÐåœ
 =°*Ñ=Ô=ˆÝœ
 =°(Ñ;Ô;ˆˆØ	�yÒ	 Ð	 å”< ¨*ÀDÐIÑIÔIˆÝ”< ¨(À$ÐGÑGÔGˆÝœ
 =°(Ñ;Ô;ˆà”mÔ(¨DÐ0€Oàð %Ø—,’,˜tÑ$Ô$ˆà•ÐÐõ ”*˜W Uœ^Ñ,Ô,ˆÝœ9Ø�GÔ˜g eœn¨WÔ5°w¸u´~ÀgÔ7Nñ
ô 
ˆ�ÑÐõ 6Ø�EŒNØ�EŒNØ�GÔð	
ð Ø!Ø%Øð	
ð 	
ð ð	
ð 	
ˆ�Ñð ÐØˆˆQˆQˆQ‰Ø"ˆˆ]ÑÐØ	ð (Ý!$¤ˆ�ÑÐå!#¤ˆ�ÑØ
€Fr2   ÚxÚyÚnew_xc                ó  — |› d�}t          d|¬¦  «         ddlm}	 t          j        |¦  «        }|	j        |	j        t          t          t          t          |	j
        dœ}
g d¢}||v r1|dk    r|}n|}|	                     | ||||¬	¦  «        } ||¦  «        }nö|d
k    rDt          |¦  «        s|dk    rt          d|› �¦  «        ‚ |	j        | |fd|i|¤Ž} ||¦  «        }n¬| j        j        s|                      ¦   «         } |j        j        s|                     ¦   «         }|j        j        s|                     ¦   «         }|
                     |d¦  «        }|€t          d|› d�¦  «        ‚|                     dd¦  «          || ||fi |¤Ž}|S )zµ
    Passed off to scipy.interpolate.interp1d. method is scipy's kind.
    Returns an array interpolated at new_x.  Add any new methods to
    the list in _clean_interp_method.
    z interpolation requires SciPy.Úscipy)Úextrar   ©Úinterpolate)rr   rs   rv   rw   rz   ry   rx   )re   rn   ro   rp   rq   ru   ru   )r?   r¹   rÂ   rt   z;order needs to be specified and greater than 0; got order: ÚkNr¯   r¤   Údowncast)r   rï   rò   r=   rÎ   Úbarycentric_interpolateÚkrogh_interpolateÚ_from_derivativesÚ_cubicspline_interpolateÚ_akima_interpolateÚpchip_interpolateÚinterp1dr   r.   ÚUnivariateSplineÚflagsÚ	writeableÚcopyr}   Úpop)rë   rì   rí   rS   r¹   rÂ   r|   r�   rð   rò   Úalt_methodsÚinterp1d_methodsr?   ÚterpÚnew_ys                  r0   rß   rß   1  s  € ð Ð5Ð5Ð5€EÝ˜w¨eÐ4Ñ4Ô4Ð4Ø!Ð!Ð!Ð!Ð!Ð!åŒJ�uÑÔ€Eð #Ô:ØÔ.Ý-Ý 1Ý/Ý#ØÔ.ð9ð 9€Kðð ð Ðð Ð!Ð!Ð!Ø�\Ò!Ð!ØˆDˆDàˆDØ×#Ò#Øˆq�t¨
Àð $ñ 
ô 
ˆð ��U‘”ˆˆØ	�8Ò	Ð	å�‰;Œ;ð 	˜5 Aš:˜:ÝØUÈeÐUÐUñô ð ð ,ˆ{Ô+¨A¨qÐDÐD°EÐD¸VÐDÐDˆØ��U‘”ˆˆð ŒwÔ ð 	Ø—’‘”ˆAØŒwÔ ð 	Ø—’‘”ˆAØŒ{Ô$ð 	!Ø—J’J‘L”LˆEØ�Š˜v tÑ,Ô,ˆØˆ<ÝÐIÀÐIÐIÐIÑJÔJÐJð 	�
Š
�:˜tÑ$Ô$Ð$Ø��Q˜˜5Ð+Ð+ FÐ+Ð+ˆØ€Lr2   ÚxiÚyiÚderúint | list[int] | NoneÚextrapolatec                ó‚   — ddl m} |j        j        } || |                     dd¦  «        ||¬¦  «        } ||¦  «        S )aŸ  
    Convenience function for interpolate.BPoly.from_derivatives.

    Construct a piecewise polynomial in the Bernstein basis, compatible
    with the specified values and derivatives at breakpoints.

    Parameters
    ----------
    xi : array-like
        sorted 1D array of x-coordinates
    yi : array-like or list of array-likes
        yi[i][j] is the j-th derivative known at xi[i]
    order: None or int or array-like of ints. Default: None.
        Specifies the degree of local polynomials. If not None, some
        derivatives are ignored.
    der : int or list
        How many derivatives to extract; None for all potentially nonzero
        derivatives (that is a number equal to the number of points), or a
        list of derivatives to extract. This number includes the function
        value as 0th derivative.
     extrapolate : bool, optional
        Whether to extrapolate to ouf-of-bounds points based on first and last
        intervals, or to return NaNs. Default: True.

    See Also
    --------
    scipy.interpolate.BPoly.from_derivatives

    Returns
    -------
    y : scalar or array-like
        The result, of length R or length M or M by R.
    r   rñ   rŽ   r‹   )Úordersr	  )rï   rò   ÚBPolyrv   Úreshape)	r  r  rë   r|   r  r	  rò   rS   Úms	            r0   r÷   r÷   ~  sW   € ðR "Ð!Ð!Ð!Ð!Ð!ð ÔÔ/€FØˆˆr�2—:’:˜b !Ñ$Ô$¨UÀÐLÑLÔL€Aàˆ1ˆQ‰4Œ4€Kr2   c                óX   — ddl m} |                     | ||¬¦  «        } |||¬¦  «        S )a½  
    Convenience function for akima interpolation.
    xi and yi are arrays of values used to approximate some function f,
    with ``yi = f(xi)``.

    See `Akima1DInterpolator` for details.

    Parameters
    ----------
    xi : np.ndarray
        A sorted list of x-coordinates, of length N.
    yi : np.ndarray
        A 1-D array of real values.  `yi`'s length along the interpolation
        axis must be equal to the length of `xi`. If N-D array, use axis
        parameter to select correct axis.
    x : np.ndarray
        Of length M.
    der : int, optional
        How many derivatives to extract. This number includes the function
        value as 0th derivative.
    axis : int, optional
        Axis in the yi array corresponding to the x-coordinate values.

    See Also
    --------
    scipy.interpolate.Akima1DInterpolator

    Returns
    -------
    y : scalar or array-like
        The result, of length R or length M or M by R,

    r   rñ   rŒ   )Únu)rï   rò   ÚAkima1DInterpolator)r  r  rë   r  r�   rò   ÚPs          r0   rù   rù   °  sC   € ðP "Ð!Ð!Ð!Ð!Ð!à×'Ò'¨¨B°TÐ'Ñ:Ô:€Aàˆ1ˆQ�3ˆ<‰<Œ<Ðr2   r#   Úbc_typeú_CubicBC | tuple[Any, Any]ú!Literal['periodic'] | bool | Nonec                óX   — ddl m} |                     | ||||¬¦  «        } ||¦  «        S )ag  
    Convenience function for cubic spline data interpolator.

    See `scipy.interpolate.CubicSpline` for details.

    Parameters
    ----------
    xi : np.ndarray, shape (n,)
        1-d array containing values of the independent variable.
        Values must be real, finite and in strictly increasing order.
    yi : np.ndarray
        Array containing values of the dependent variable. It can have
        arbitrary number of dimensions, but the length along ``axis``
        (see below) must match the length of ``x``. Values must be finite.
    x : np.ndarray, shape (m,)
    axis : int, optional
        Axis along which `y` is assumed to be varying. Meaning that for
        ``x[i]`` the corresponding values are ``np.take(y, i, axis=axis)``.
        Default is 0.
    bc_type : string or 2-tuple, optional
        Boundary condition type. Two additional equations, given by the
        boundary conditions, are required to determine all coefficients of
        polynomials on each segment [2]_.
        If `bc_type` is a string, then the specified condition will be applied
        at both ends of a spline. Available conditions are:
        * 'not-a-knot' (default): The first and second segment at a curve end
          are the same polynomial. It is a good default when there is no
          information on boundary conditions.
        * 'periodic': The interpolated functions is assumed to be periodic
          of period ``x[-1] - x[0]``. The first and last value of `y` must be
          identical: ``y[0] == y[-1]``. This boundary condition will result in
          ``y'[0] == y'[-1]`` and ``y''[0] == y''[-1]``.
        * 'clamped': The first derivative at curves ends are zero. Assuming
          a 1D `y`, ``bc_type=((1, 0.0), (1, 0.0))`` is the same condition.
        * 'natural': The second derivative at curve ends are zero. Assuming
          a 1D `y`, ``bc_type=((2, 0.0), (2, 0.0))`` is the same condition.
        If `bc_type` is a 2-tuple, the first and the second value will be
        applied at the curve start and end respectively. The tuple values can
        be one of the previously mentioned strings (except 'periodic') or a
        tuple `(order, deriv_values)` allowing to specify arbitrary
        derivatives at curve ends:
        * `order`: the derivative order, 1 or 2.
        * `deriv_value`: array-like containing derivative values, shape must
          be the same as `y`, excluding ``axis`` dimension. For example, if
          `y` is 1D, then `deriv_value` must be a scalar. If `y` is 3D with
          the shape (n0, n1, n2) and axis=2, then `deriv_value` must be 2D
          and have the shape (n0, n1).
    extrapolate : {bool, 'periodic', None}, optional
        If bool, determines whether to extrapolate to out-of-bounds points
        based on first and last intervals, or to return NaNs. If 'periodic',
        periodic extrapolation is used. If None (default), ``extrapolate`` is
        set to 'periodic' for ``bc_type='periodic'`` and to True otherwise.

    See Also
    --------
    scipy.interpolate.CubicHermiteSpline

    Returns
    -------
    y : scalar or array-like
        The result, of shape (m,)

    References
    ----------
    .. [1] `Cubic Spline Interpolation
            <https://en.wikiversity.org/wiki/Cubic_Spline_Interpolation>`_
            on Wikiversity.
    .. [2] Carl de Boor, "A Practical Guide to Splines", Springer-Verlag, 1978.
    r   rñ   )r�   r  r	  )rï   rò   ÚCubicSpline)r  r  rë   r�   r  r	  rò   r  s           r0   rø   rø   ß  sK   € ðZ "Ð!Ð!Ð!Ð!Ð!à×ÒØ
ˆB�T 7¸ð 	 ñ 	ô 	€Að ˆ1ˆQ‰4Œ4€Kr2   rb   rm   c                ó  — |dk    rd„ nd„ }| j         dk    r3|dk    rt          d¦  «        ‚|                      dg| j        ¢R ¦  «        } t	          |¦  «        } || ¦  «        }t          |d¬¦  «        } ||||¬¦  «         d	S )
a  
    Perform an actual interpolation of values, values will be make 2-d if
    needed fills inplace, returns the result.

    Parameters
    ----------
    values: np.ndarray
        Input array.
    method: str, default "pad"
        Interpolation method. Could be "bfill" or "pad"
    axis: 0 or 1
        Interpolation axis
    limit: int, optional
        Index limit on interpolation.
    limit_area: str, optional
        Limit area for interpolation. Can be "inside" or "outside"

    Notes
    -----
    Modifies values in-place.
    r   c                ó   — | S rX   rY   ©rë   s    r0   ú<lambda>z)pad_or_backfill_inplace.<locals>.<lambda>Q  s   € ˜€ r2   c                ó   — | j         S rX   )ÚTr  s    r0   r  z)pad_or_backfill_inplace.<locals>.<lambda>Q  s   € ¸¼€ r2   r‹   z1cannot interpolate on an ndim == 1 with axis != 0rŠ   )r�   )r¸   rž   N)r�   ÚAssertionErrorr  rH   r[   Úget_fill_func)rm   rS   r�   r¸   rž   ÚtransfÚtvaluesrÅ   s           r0   Úpad_or_backfill_inplacer"  5  s§   € ð8 # aši˜iˆkˆkˆk¨m¨m€Fð „{�aÒÐØ�1Š9ˆ9Ý Ð!TÑUÔUÐUØ—’ Ð 2 V¤\Ð 2Ð 2Ñ3Ô3ˆå˜vÑ&Ô&€FØˆf�V‰nŒn€Gå˜ aÐ(Ñ(Ô(€Dà€Dˆ˜¨*Ð5Ñ5Ô5Ð5Ð5Ð5r2   únpt.NDArray[np.bool_] | Nonec                ó(   — |€t          | ¦  «        }|S rX   )r   )rm   r(   s     r0   Ú_fillna_prepr%  a  s   € ð
 €|Ý�F‰|Œ|ˆà€Kr2   rÅ   r   c                ól   ‡ — t          ‰ ¦  «        	 	 	 ddˆ fd„¦   «         }t          t          |¦  «        S )	z>
    Wrapper to handle datetime64 and timedelta64 dtypes.
    Nr¸   r†   rž   r    c                óî   •— t          | j        ¦  «        rR|€t          | ¦  «        } ‰|                      d¦  «        |||¬¦  «        \  }}|                     | j        ¦  «        |fS  ‰| |||¬¦  «        S )NrË   )r¸   rž   r(   )r   r9   r   rÍ   )rm   r¸   rž   r(   ÚresultrÅ   s        €r0   Únew_funcz&_datetimelike_compat.<locals>.new_funcq  sŠ   ø€ õ ˜vœ|Ñ,Ô,ð 	3Øˆ|å˜F‘|”|�à˜4Ø—’˜DÑ!Ô!¨¸:ÈDðñ ô ‰LˆF�Dð —;’;˜vœ|Ñ,Ô,¨dÐ2Ð2àˆt�F %°JÀTÐJÑJÔJÐJr2   ©NNN)r¸   r†   rž   r    )r   r   r   )rÅ   r)  s   ` r0   Ú_datetimelike_compatr+  l  s\   ø€ õ
 ˆ4�[„[ð !Ø:>Øð	Kð Kð Kð Kð Kð Kñ „[ðKõ$ •�8ÑÔÐr2   ú(tuple[np.ndarray, npt.NDArray[np.bool_]]c                ó¤   — t          | |¦  «        }|�$|                     ¦   «         st          ||¦  «         t          j        | ||¬¦  «         | |fS ©N)r¸   )r%  rÖ   Ú_fill_limit_area_1dr   Úpad_inplace©rm   r¸   rž   r(   s       r0   Ú_pad_1dr2  ‡  sX   € õ ˜ Ñ%Ô%€DØÐ d§h¢h¡j¤jÐÝ˜D *Ñ-Ô-Ð-Ý	Ô�f˜d¨%Ð0Ñ0Ô0Ð0Ø�4ˆ<Ðr2   c                ó¤   — t          | |¦  «        }|�$|                     ¦   «         st          ||¦  «         t          j        | ||¬¦  «         | |fS r.  )r%  rÖ   r/  r   Úbackfill_inplacer1  s       r0   Ú_backfill_1dr5  •  sX   € õ ˜ Ñ%Ô%€DØÐ d§h¢h¡j¤jÐÝ˜D *Ñ-Ô-Ð-Ý	Ô˜6 4¨uÐ5Ñ5Ô5Ð5Ø�4ˆ<Ðr2   c                óŠ   — t          | |¦  «        }|�t          ||¦  «         | j        rt          j        | ||¬¦  «         | |fS r.  )r%  Ú_fill_limit_area_2dÚsizer   Úpad_2d_inplacer1  s       r0   Ú_pad_2dr:  £  sU   € õ ˜ Ñ%Ô%€DØÐÝ˜D *Ñ-Ô-Ð-à„{ð 8ÝÔ˜V T°Ð7Ñ7Ô7Ð7Ø�4ˆ<Ðr2   c                óŽ   — t          | |¦  «        }|�t          ||¦  «         | j        rt          j        | ||¬¦  «         n	 | |fS r.  )r%  r7  r8  r   Úbackfill_2d_inplacer1  s       r0   Ú_backfill_2dr=  ³  s]   € õ ˜ Ñ%Ô%€DØÐÝ˜D *Ñ-Ô-Ð-à„{ð ÝÔ! &¨$°eÐ<Ñ<Ô<Ð<Ð<ð 	Ø�4ˆ<Ðr2   úLiteral['outside', 'inside']c                óê   — |  }|                      ¦   «         }t          |¦  «        |ddd…                               ¦   «         z
  dz
  }|dk    rd| d|…<   d| |dz   d…<   dS |dk    rd| |dz   |…<   dS dS )a×  Prepare 1d mask for ffill/bfill with limit_area.

    Caller is responsible for checking at least one value of mask is False.
    When called, mask will no longer faithfully represent when
    the corresponding are NA or not.

    Parameters
    ----------
    mask : np.ndarray[bool, ndim=1]
        Mask representing NA values when filling.
    limit_area : { "outside", "inside" }
        Whether to limit filling to outside or inside the outer most non-NA value.
    NrŽ   r‹   r¢   Fr£   )r‘   r-   )r(   rž   Úneg_maskrˆ   r‰   s        r0   r/  r/  Æ  s¡   € ð  ˆu€HØ�OŠOÑÔ€EÝˆx‰=Œ=˜8 D D b Dœ>×0Ò0Ñ2Ô2Ñ2°QÑ6€DØ�XÒÐØˆˆVˆeˆV‰Ø ˆˆT�A‰XˆZˆZÑÐÐØ	�yÒ	 Ð	 Ø!&ˆˆU�Q‰Y˜ÐÑÐÐð 
!Ð	 r2   c                ó�  — | j          }|dk    rVt          j                             |d¬¦  «        t          j                             |ddd…         d¬¦  «        ddd…         z  }nWt          j                             |d¬¦  «         t          j                             |ddd…         d¬¦  «        ddd…          z  }d| |j         <   dS )a‹  Prepare 2d mask for ffill/bfill with limit_area.

    When called, mask will no longer faithfully represent when
    the corresponding are NA or not.

    Parameters
    ----------
    mask : np.ndarray[bool, ndim=1]
        Mask representing NA values when filling.
    limit_area : { "outside", "inside" }
        Whether to limit filling to outside or inside the outer most non-NA value.
    r£   r   rŒ   NrŽ   F)r  r=   ÚmaximumÚ
accumulate)r(   rž   r@  Úla_masks       r0   r7  r7  à  sÕ   € ð ”ˆw€HØ�YÒÐõ ŒJ×!Ò! (°Ð!Ñ3Ô3ÝŒj×#Ò# H¨T¨T¨r¨T¤N¸Ð#Ñ;Ô;¸D¸D¸b¸DÔAñBð 	ˆõ ŒZ×"Ò" 8°!Ð"Ñ4Ô4Ð4ÝŒz×$Ò$ X¨d¨d°¨d¤^¸!Ð$Ñ<Ô<¸T¸T¸r¸TÔBÐBñCð 	ð €DˆŒ�O€O€Or2   ©rb   rd   r‹   r�   c                óp   — t          | ¦  «        } |dk    rt          |          S t          t          dœ|          S )Nr‹   rE  )r[   Ú_fill_methodsr:  r=  )rS   r�   s     r0   r  r    s6   € Ý˜vÑ&Ô&€FØˆq‚y€yÝ˜VÔ$Ð$Ý­Ð5Ð5°fÔ=Ð=r2   úReindexMethod | Nonec                ó,   — | €d S t          | d¬¦  «        S )NTrQ   )r[   )rS   s    r0   Úclean_reindex_fill_methodrJ  	  s   € Ø€~ØˆtÝ˜V°4Ð8Ñ8Ô8Ð8r2   rá   Úfw_limitÚbw_limitc                óœ  ‡— t          | ¦  «        Št          j        g t          j        ¬¦  «        }t          j        g t          j        ¬¦  «        }d}dˆfd„}|�/|dk    rt          j        | ¦  «        d         }d}n || |¦  «        }|�+|dk    r|S ‰d	z
   || ddd
…         |¦  «        z
  }|dk    r|S t          j        |||¬¦  «        S )am  
    Get indexers of values that won't be filled
    because they exceed the limits.

    Parameters
    ----------
    invalid : np.ndarray[bool]
    fw_limit : int or None
        forward limit to index
    bw_limit : int or None
        backward limit to index

    Returns
    -------
    set of indexers

    Notes
    -----
    This is equivalent to the more readable, but slower

    .. code-block:: python

        def _interp_limit(invalid, fw_limit, bw_limit):
            for x in np.where(invalid)[0]:
                if invalid[max(0, x - fw_limit) : x + bw_limit + 1].all():
                    yield x
    r8   Tr¸   r+   c           	     óx  •— t          |‰dz
  ¦  «        }t          j        j                             | |dz   ¦  «                             d¦  «        }t          j        t          j        |¦  «        d         |z   t          j        | d |dz   …                               ¦   «         dk    ¦  «        d         ¦  «        }|S )Nr‹   r   )	Úminr=   r   Ústride_tricksÚsliding_window_viewrÖ   rÙ   ÚwhereÚcumsum)rá   r¸   ÚwindowedÚidxÚNs       €r0   Úinnerz_interp_limit.<locals>.inner5  s¥   ø€ Ý�E˜1˜q™5Ñ!Ô!ˆÝ”6Ô'×;Ò;¸GÀUÈQÁYÑOÔO×SÒSÐTUÑVÔVˆÝŒjÝŒH�XÑÔ˜qÔ! EÑ)ÝŒH�w˜{ ¨¡˜{Ô+Ð+×3Ò3Ñ5Ô5¸Ò:Ñ;Ô;¸AÔ>ñ
ô 
ˆð ˆ
r2   Nr   Fr‹   rŽ   rÔ   )r¸   r+   )r-   r=   ÚarrayÚint64rR  Úintersect1d)rá   rK  rL  Úf_idxÚb_idxrÕ   rW  rV  s          @r0   rÚ   rÚ     sü   ø€ õB 	ˆG‰Œ€AÝŒH�R�rœxÐ(Ñ(Ô(€EÝŒH�R�rœxÐ(Ñ(Ô(€EØ€Mðð ð ð ð ð ð ÐØ�qŠ=ˆ=Ý”H˜WÑ%Ô% aÔ(ˆEØ!ˆMˆMà�E˜' 8Ñ,Ô,ˆEàÐØ�qŠ=ˆ=ð ˆLà˜‘E˜E˜E '¨$¨$¨B¨$¤-°Ñ:Ô:Ñ:ˆEØ˜1Š}ˆ}Ø�åŒ>˜% °mÐDÑDÔDÐDr2   )r(   r)   r*   r+   )r3   r   r4   r)   )rS   rT   rR   rU   r4   rV   )rS   r\   rR   r]   r4   r^   )rS   r\   rR   rI   r4   r^   )rS   rK   rl   r"   r4   rK   )r„   rK   r…   r)   r4   r†   )r•   rK   r4   r–   )rž   rŸ   r4   r    )r•   r§   rS   rK   r4   r¨   )rl   r"   r4   r"   )rj   Nr˜   NNN)r¶   r·   rl   r"   r�   r   rS   rK   r¸   r†   r•   rK   rž   rŸ   r¹   rº   r4   r»   )rl   r"   rS   rK   r4   r·   )rj   Nr˜   NNFNN)rÁ   r·   r¿   r·   rS   rK   r¸   r†   r•   rK   rž   r    r¹   rº   rÂ   rI   r|   r†   r4   r»   )NFN)
rë   r·   rì   r·   rí   r·   rS   rK   rÂ   rI   )Nr   F)
r  r·   r  r·   rë   r·   r  r  r	  rI   )r   r   )
r  r·   r  r·   rë   r·   r  r+   r�   r   )r   r#   N)r  r·   r  r·   rë   r·   r�   r   r  r  r	  r  r4   r·   )rb   r   NN)rm   r·   rS   rV   r�   r   r¸   r†   rž   r    r4   r»   rX   )r(   r#  r4   r)   )rÅ   r   r4   r   r*  )
rm   r·   r¸   r†   rž   r    r(   r#  r4   r,  )r¸   r†   rž   r    r(   r#  )r(   r)   rž   r>  r4   r»   )r‹   )r�   r+   )r4   rH  )rá   r)   rK  r†   rL  r†   r4   r·   )QÚ__doc__Ú
__future__r   Ú	functoolsr   Útypingr   r   r   r   r	   Únumpyr=   Úpandas._configr
   Úpandas._libsr   r   r   Úpandas._typingr   r   r   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.castr   Úpandas.core.dtypes.commonr   r   r   r   r   Úpandas.core.dtypes.dtypesr   r   r   Úpandas.core.dtypes.missingr   r   r   Úcollections.abcr    r!   r°   r"   r'   Ú__annotations__r1   rP   r[   r~   r   rƒ   r”   r�   r¦   r«   rµ   rÉ   rÇ   rÃ   rß   r÷   rù   rø   r"  r%  r+  r2  r5  r:  r=  r/  r7  rG  r  rJ  rÚ   rY   r2   r0   ú<module>rl     s9  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >à 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð RØ(Ð(Ð(Ð(Ð(Ð(Ø Ð Ð Ð Ð Ð àÐÐÐÐÐà!Ð"PÔQ€HÐQÐQÐQÑQðð ð ð ðLð Lð Lð Lð^ 
ð %(ð%ð %ð %ð %ð %ñ 
„ð%ð 
ð0ð 0ð 0ñ 
„ð0ð  ðð ð ð ð ð ð4 3Ð2Ð2€
ðð ð €
ð$ð ð ð ð&$ð $ð $ð $ðNð ð ð ðð ð ð ðð ð ð ð* ð  ð  ð  ðN ØØ$Ø!Ø!Ø	ð=*ð =*ð =*ð =*ð =*ð@ð ð ð ð2 ØØ$Ø6:Ø!ØØØ	ðmð mð mð mð mðj ØØ
ðJð Jð Jð Jð Jðb Ø"#Øð/ð /ð /ð /ð /ðl Øð,ð ,ð ,ð ,ð ,ðf Ø*6Ø59ðSð Sð Sð Sð Sðp */ØØØ6:ð)6ð )6ð )6ð )6ð )6ðZ 26ðð ð ð ð ðð ð ð ð6 ð Ø6:Ø)-ð	
ð 
ð 
ð 
ñ Ôð
ð ð Ø6:Ø)-ð	
ð 
ð 
ð 
ñ Ôð
ð ð Ø6:Ø)-ð	ð ð ð ñ Ôðð ð Ø6:Ø)-ð	ð ð ð ñ Ôðð$'ð 'ð 'ð 'ð4ð ð ð ð>  ¨\Ð:Ð:€ð>ð >ð >ð >ð >ð9ð 9ð 9ð 9ð@Eð @Eð @Eð @Eð @Eð @Er2   