+
    ÏÜ³j´„  ã                  ó:  a € 0 t $ R t^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
Ht ^ RIt^ RIHt ^ RIHtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ R	IHt ^ R
IHtH t H!t!H"t"H#t# ^ RI$H%t%H&t&H't' ^ RI(H)t)H*t*H+t+ ]'       d!   ^ RI,H-t- ^ RIH.t. ^ RI/H0t0 ]	RS,          t1R]2R&   R R lt3R R lt4]RR/R R ll4       t5]R R l4       t5RR/R R llt5. RTOt6. RUOt7R R  lt8R! R" lt9R# R$ lt:R% R& lt;R' R( lt<R) R* lt=RVR+ R, llt>R- R. lt?RWR/ R0 llt@RXR1 R2 lltARYR3 R4 lltBRZR5 R6 lltCR[R7 R8 lltDR\R: R; lltER]R< R= lltFR> R? ltG]GR^R@ RA ll4       tH]GR^RB RC ll4       tI]GR^RD RE ll4       tJ]GR^RF RG ll4       tKRH RI ltLRJ RK ltMR9]HRL]I/tNR_RM RN lltORO RP ltPRQ RR ltQR# )`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)ÚIndexr    Ú_CubicBCc               ó    € V ^8„  d   QhRRRR/# )é   Úmaskúnpt.NDArray[np.bool_]ÚlengthÚint© )Úformats   "ÚT/home/luca/screen-checking/.venv/lib/python3.14/site-packages/pandas/core/missing.pyÚ__annotate__r,   >   s   € ÷ ñ Ð"7ð Àñ ó    c                óŒ   € \        V 4      '       d3   \        V 4      V8w  d   \        R\        V 4       RV 24      hW,          p V # )zB
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   &&&r+   Úcheck_value_sizer2   >   sQ   € ô �U×ÒÜˆu‹:˜ÔÜØ9¼#¸e»*¸ð FØ#˜Hð&óð ð •ˆà€Lr-   c               ó    € V ^8„  d   QhRRRR/# )r$   Úarrr   Úreturnr&   r)   )r*   s   "r+   r,   r,   M   s   € ÷ Lñ L�ið LÐ+@ñ Lr-   c                ó   € \        V4      w  r!\        V P                  \        \        34      '       EdA   \
        P                  ! V4      '       Ed$   \        P                  ! V4      '       Ed   \        4       '       g÷   V P                  P                  R8X  d™   \        V P                  \        4      '       d9   \        P                  ! V P                  4      V P                  4       ( ,          pV# ^ RIHp VP                  V P                   4      P#                  R4      P%                  4       pV# V P                  P                  R9   d)   \        P&                  ! V P(                  \*        R7      pV# \        V4      '       d   \        V 4      # \        P&                  ! V P(                  \*        R7      p\-        V P                  4      '       d;   \/        V P                  4      '       g    \
        P0                  ! V4      '       d    V# \/        V P                  4      '       d1   \-        V4      '       d    \
        P0                  ! V4      '       g    V# \-        V P                  4      '       d   \        V\2        4      '       d    V# \5        V P                  4      '       d   \        V 4      ( pW,          V8H  W5&   V# W8H  p\        V\        P6                  4      '       g   VP%                  \*        RR7      pTpV# )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]
ÚfNFÚiu©Údtype)r:   Úna_value)r   Ú
isinstancer:   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)r4   r1   r:   r%   ÚpcÚarr_maskÚnew_masks   &&     r+   Úmask_missingrQ   M   s  € ô  $ EÓ*�L€Eô 	�3—9‘9œ´
Ð;×<Ó<Ü�LŠL˜×ÓÜ�HŠH�U�O‹OÜ—’ð �9‰9�>‰>˜SÔ ä˜#Ÿ)™)¤_×5Ò5ä—x’x §	¡	Ó*¨c¯h©h«j¨[Õ8�Ø�õ -à—y‘y §¡Ó/×9Ñ9¸%Ó@×IÑIÓK�Ø�à�Y‰Y�^‰^˜tÔ#ä—8’8˜CŸI™I¬TÔ2ˆDØˆKäˆE‡{‚{Ü�C‹yÐô �8Š8�C—I‘I¤TÔ*€Dä˜Ÿ™×#Ò#Ü˜cŸi™i×(Ò(Ü�KŠK˜×Òð 	ð, €Kô) 	�c—i‘i× Ò Ô%5°e×%<Ò%<ÄSÇ[Â[ÐQV×EWÒEWð 	ð" €Kô! 
˜#Ÿ)™)×	$Ò	$¬°E¼3×)?Ò)?àð €Kô 
˜Ÿ™×	#Ò	#ô ˜“I�:ˆØ�¨%Ñ/ˆ‰ð €Kð ‘<ˆä˜(¤B§J¡J×/Ò/à×(Ñ(¬t¸eÐ(ÓDˆHØˆà€Kr-   Úallow_nearest.c               ó$   € V ^8„  d   QhRRRRRR/# )r$   Úmethodz,Literal['ffill', 'pad', 'bfill', 'backfill']rR   zLiteral[False]r5   úLiteral['pad', 'backfill']r)   )r*   s   "r+   r,   r,   �   s(   € ÷ %ñ %Ø8ð%ð "ð%ð  ñ	%r-   c               ó   € R # ©Nr)   ©rT   rR   s   &$r+   Úclean_fill_methodrY   œ   s   € ñ
 "%r-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   rT   ú7Literal['ffill', 'pad', 'bfill', 'backfill', 'nearest']rR   zLiteral[True]r5   ú%Literal['pad', 'backfill', 'nearest']r)   )r*   s   "r+   r,   r,   ¥   s(   € ÷ 0ñ 0ØCð0ð !ð0ð +ñ	0r-   c               ó   € R # rW   r)   rX   s   &$r+   rY   rY   ¤   s   € ñ
 -0r-   Fc               ó$   € V ^8„  d   QhRRRRRR/# )r$   rT   r[   rR   rJ   r5   r\   r)   )r*   s   "r+   r,   r,   ¬   s(   € ÷ ñ ØCðð ðð +ñ	r-   c               óè   € \        V \        4      '       d$   V P                  4       p V R 8X  d   Rp M	V R8X  d   Rp RR.pRpV'       d   VP                  R4       RpW9  d   \	        RV RV  24      hV # )	ÚffillÚpadÚbfillÚbackfillzpad (ffill) or backfill (bfill)Únearestz(pad (ffill), backfill (bfill) or nearestzInvalid fill method. Expecting z. Got )r<   rL   ÚlowerÚappendr0   )rT   rR   Úvalid_methodsÚ	expectings   &$  r+   rY   rY   ¬   s�   € ô
 �&œ#×Òð —‘“ˆØ�WÔØ‰FØ�wÔØˆFà˜JÐ'€MØ1€IßØ×Ñ˜YÔ'Ø>ˆ	ØÔ"ÜÐ:¸9¸+ÀVÈFÈ8ÐTÓUÐUØ€Mr-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   rT   rL   Úindexr!   r5   r)   )r*   s   "r+   r,   r,   Ü   s!   € ÷ ñ  ð ¨Eð Àñ r-   c                óô   € VP                  R 4      pV R9   d   Vf   \        R4      h\        \        ,           pW9  d   \        RV RV  R24      hV R9   d!   VP                  '       g   \        V  R24      hV # )Úorderz7You must specify the order of the spline or polynomial.zmethod must be one of z. Got 'z
' instead.z4 interpolation requires that the index be monotonic.)ÚsplineÚ
polynomial)ÚkroghÚpiecewise_polynomialÚpchip)Úgetr0   Ú
NP_METHODSÚ
SP_METHODSÚis_monotonic_increasing)rT   rj   Úkwargsrl   Úvalids   &&,  r+   Úclean_interp_methodrx   Ü   sˆ   € Ø�J‰J�wÓ€EàÐ)Ô)¨eªmÜÐRÓSÐSäœÕ#€EØÔÜÐ1°%°¸À¸xÀzÐRÓSÐSàÐ;Ô;Ø×,×,Ð,ÜØ�(ÐNÐOóð ð €Mr-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   ÚhowrL   Úis_validr&   r5   ú
int | Noner)   )r*   s   "r+   r,   r,   ï   s"   € ÷ $ñ $˜#ð $Ð)>ð $À:ñ $r-   c                óV  € V R9   g   Q h\        V4      ^ 8X  d   R# VP                  ^8X  d   VP                  ^R7      pV R8X  d   VR,          P                  4       pM8V R8X  d2   \        V4      ^,
          VRRR1,          P                  4       ,
          pVX,          pV'       g   R# V# )zÿ
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ÚlastN©ÚaxisºNNN)r~   r   éÿÿÿÿ)r/   ÚndimÚanyÚargmax)rz   r{   ÚidxposÚ	chk_notnas   &&  r+   Úfind_valid_indexr‰   ï   s™   € ð Ð#Ô#Ð#Ð#ä
ˆ8ƒ}˜ÔÙà‡}�}˜Ôà—<‘< Q�<Ó'ˆà
ˆg„~Ø˜"•×$Ñ$Ó&‰à	�ŒÜ�X“ Õ" X©d°¨d¥^×%:Ñ%:Ó%<Õ<ˆà˜Õ €IçÙð €Mr-   c               ó    € V ^8„  d   QhRRRR/# )r$   Úlimit_directionrL   r5   z&Literal['forward', 'backward', 'both']r)   )r*   s   "r+   r,   r,     s   € ÷ ñ Øðà+ñr-   c                ó^   € . ROpV P                  4       p W9  d   \        RV RV  R24      hV # )Úforwardz*Invalid limit_direction: expecting one of z, got 'z'.)r�   ÚbackwardÚboth©re   r0   )r‹   Úvalid_limit_directionss   & r+   Úvalidate_limit_directionr’     sK   € ò =ÐØ%×+Ñ+Ó-€OØÔ4ÜØ8Ø%Ð& g¨oÐ->¸bðBó
ð 	
ð Ðr-   c               ó    € V ^8„  d   QhRRRR/# )r$   Ú
limit_areaú
str | Noner5   ú#Literal['inside', 'outside'] | Noner)   )r*   s   "r+   r,   r,   %  s   € ÷ ñ  Jð Ð3Vñ r-   c                óf   € V e-   RR.pV P                  4       p W9  d   \        RV RV  R24      hV # )NÚinsideÚoutsidez%Invalid limit_area: expecting one of z, got Ú.r�   )r”   Úvalid_limit_areass   & r+   Úvalidate_limit_arearœ   %  sS   € ØÒØ% yÐ1ÐØ×%Ñ%Ó'ˆ
ØÔ.ÜØ7Ð8IÐ7JÈ&Ø�,˜að!óð ð Ðr-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   r‹   z-Literal['backward', 'forward', 'both'] | NonerT   rL   r5   z&Literal['backward', 'forward', 'both']r)   )r*   s   "r+   r,   r,   3  s$   € ÷ ñ ØBðØLOðà+ñr-   c                ó¢   € V f   VR9   d   Rp V # Rp  V # VR9   d   V R8w  d   \        RV R24      hVR9   d   V R8w  d   \        RV R24      hV # )NrŽ   r�   z0`limit_direction` must be 'forward' for method `Ú`z1`limit_direction` must be 'backward' for method `)rc   rb   )ra   r`   )r0   )r‹   rT   s   &&r+   Úinfer_limit_directionr    3  s�   € ð ÒØÐ*Ô*Ø(ˆOð Ðð (‰Oð Ðð Ð%Ô%¨/¸YÔ*FÜØBÀ6À(È!ÐLóð ð Ð*Ô*¨À*Ô/LÜØCÀFÀ8È1ÐMóð ð Ðr-   c               ó    € V ^8„  d   QhRRRR/# )r$   rj   r!   r5   r)   )r*   s   "r+   r,   r,   H  s   € ÷  ñ   Eð  ¨eñ  r-   c                óè  € V R 8X  d   ^ RI Hp V! \        V4      4      pM¨0 Rmp\        VP                  4      ;'       gD    \        VP                  \        4      ;'       g"    \        P                  ! VP                  R4      p\        \        ,           pW9   d   W9  d   V'       g   \        RV  R24      hM\        RV  R24      h\        V4      P                  4       '       d   \        R4      hV# )	Úlinear)Ú
RangeIndexÚ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.>   Útimerj   Úvaluesrd   )Úpandasr¤   r/   r   r:   r<   r   r   Úis_np_dtypers   rt   r0   r   r…   ÚNotImplementedError)rT   rj   r¤   ÚmethodsÚis_numeric_or_datetimerw   s   &&    r+   Úget_interp_indexr®   H  sâ   € à�Ôå%áœ3˜u›:Ó&‰â8ˆä˜UŸ[™[Ó)÷ 2ð 2Ü˜%Ÿ+™+¤Ó7÷2ð 2ä�Š˜uŸ{™{¨DÓ1ð 	ô
 œZÕ'ˆØŒ?ØÔ$×-CÜ ðØ#˜Hð %%ð%óð øô Ð?À¸xÀqÐIÓJÐJäˆEƒ{‡�×ÒÜ!ð/ó
ð 	
ð
 €Lr-   c               ó<   € V ^8„  d   QhRRRRRRRRR	R
RRRRRRRR/	# )r$   Údataú
np.ndarrayrj   r!   r�   r   rT   rL   Úlimitr|   r‹   r”   r•   Ú
fill_valueú
Any | Noner5   ÚNoner)   )r*   s   "r+   r,   r,   k  sb   € ÷ =*ñ =*Ø
ð=*àð=*ð ð=*ð ð	=*ð
 ð=*ð ð=*ð ð=*ð ð=*ð 
ñ=*r-   c	           	     ó¶  aaaaaa	aa€ \        SV3/ S	B  \        SV P                  4      '       d   \        V P                  RR7      oSR8X  d)   \	        VP                  4      '       g   \        R4      hRo\        S4      o\        V4      o\        P                  ! RSR7      o\        VS4      oR VVV	VVVVV3R	 llp
\        P                  ! W¢V 4       R# )
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)Úcompatr§   zStime-weighted interpolation only works on Series or DataFrames with a DatetimeIndexr¨   N)Únobsr²   c               ó    € V ^8„  d   QhRRRR/# )r$   Úyvaluesr±   r5   rµ   r)   )r*   s   "r+   r,   Ú,interpolate_2d_inplace.<locals>.__annotate__˜  s   € ÷ 
ñ 
�jð 
 Tñ 
r-   c                óB   <€ \        RR SRV RSRSRSRSRSRRR	S/	SB  R
# )Úindicesrº   rT   r²   r‹   r”   r³   Úbounds_errorFr%   Nr)   )Ú_interpolate_1d)	rº   r³   r½   rv   r²   Úlimit_area_validatedr‹   r%   rT   s	   &€€€€€€€€r+   ÚfuncÚ$interpolate_2d_inplace.<locals>.func˜  sm   ø€ ô 	ñ 	
Øð	
àð	
ð ð	
ð ð		
ð
 ,ð	
ð ,ð	
ð "ð	
ð ð	
ð ð	
ð ô	
r-   )rx   r   r:   r   r   r0   r’   rœ   r   Úvalidate_limitÚ_index_to_interp_indicesr>   Úapply_along_axis)r°   rj   r�   rT   r²   r‹   r”   r³   r%   rv   rÁ   r½   rÀ   s   &&&fff&ffl @@r+   Úinterpolate_2d_inplacerÆ   k  s¶   ÿ€ ô. ˜ Ñ0¨Ò0ä˜Z¨¯©×4Ò4Ü'¨¯
©
¸5ÔAˆ
à�ÔÜ" 5§;¡;×/Ò/Üð óð ð
 ˆä.¨Ó?€OÜ.¨zÓ:Ðô × Ò  d°%Ô8€Eä& u¨fÓ5€G÷
÷ 
ô  ×Ò˜ DÖ)r-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   rj   r!   rT   rL   r5   r±   r)   )r*   s   "r+   r,   r,   «  s!   € ÷ ñ  Eð °3ð ¸:ñ r-   c                ód  € V P                   p\        VP                  4      '       d   VP                  R4      pVR8X  d   Tp\	        \
        P                  V4      pV# \
        P                  ! V4      pVR9   d6   VP                  \
        P                  8X  d   \        P                  ! V4      pV# )z=
Convert Index to ndarray of indices to pass to NumPy/SciPy.
Úi8r£   )r¨   rj   )Ú_valuesr   r:   Úviewr   r>   rM   ÚasarrayÚobject_r   Úmaybe_convert_objects)rj   rT   ÚxarrÚindss   &&  r+   rÄ   rÄ   «  s‹   € ð �=‰=€DÜ˜4Ÿ:™:×&Ò&à�y‰y˜‹ˆà�ÔØˆÜ”B—J‘J Ó%ˆð €Kô �zŠz˜$ÓˆàÐ(Ô(Ø�z‰zœRŸZ™ZÔ'Ü×0Ò0°Ó6�à€Kr-   c               ó@   € V ^8„  d   QhRRRRRRRRRRR	R
RRRRRRRR/
# )r$   r½   r±   rº   rT   rL   r²   r|   r‹   r”   r–   r³   r´   r¾   rJ   rl   r5   rµ   r)   )r*   s   "r+   r,   r,   Á  sx   € ÷ mñ mØðmàðmð ðmð ð	mð
 ðmð 4ðmð ðmð ðmð ðmð 
ñmr-   c
                ó€  € V	e   T	pM\        V4      pV( pVP                  4       '       g   R# VP                  4       '       d   R# \        P                  ! V4      p\        RVR7      pVf   ^ p\        P                  ! V4      p\        RVR7      pVf   \        V4      p\        P                  ! ^V,           \        V4      4      pVR8X  d#   \        P                  ! V\        W³^ 4      4      pMJVR8X  d$   \        P                  ! V\        V^ V4      4      pM \        P                  ! \        W³V4      4      pVR8X  d0   \        P                  ! VV4      p\        P                  ! VV4      pMOVR8X  dI   \        P                  ! WßR	R
7      p\        P                  ! VVR	R
7      p\        P                  ! VV4      pVP                  P                  R9   pV'       d   VP                  R4      pV\        9   dX   \        P                   ! W,          4      p\        P"                  ! W,          W,          V,          W,          V,          4      W&   M*\%        W,          W,          W,          3RVRVRVRV/V
B W&   V	e   RV	R&   R	V	V&   R# V'       d   \&        P(                  VV&   R# \        P*                  VV&   R# )zõ
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~   )rz   r{   r   r�   rŽ   r˜   r™   T©Úassume_uniquer¥   rÉ   rT   r³   r¾   rl   Fr‚   )r   r…   Úallr>   Úflatnonzeror‰   Úaranger/   Úunion1dÚ_interp_limitÚuniqueÚ	setdiff1dr:   r@   rË   rs   ÚargsortÚinterpÚ_interpolate_scipy_wrapperr
   r1   Únan)r½   rº   rT   r²   r‹   r”   r³   r¾   rl   r%   rv   Úinvalidrw   Úall_nansÚfirst_valid_indexÚ
start_nansÚlast_valid_indexÚend_nansÚpreserve_nansÚmid_nansÚis_datetimelikeÚindexers   &&&&&&&&&&,           r+   r¿   r¿   Á  sk  € ð0 ÒØ‰ä�w“-ˆØˆH€Eà�9‰9�;Š;Ùà‡y�y‡{‚{Ùô �~Š~˜gÓ&€Hä(¨W¸uÔEÐØÒ ØÐÜ—’Ð,Ó-€Jä'¨F¸UÔCÐØÒÜ˜w›<ÐÜ�yŠy˜Ð-Õ-¬s°5«zÓ:€Hð ˜)Ô#ÜŸ
š
 :¬}¸WÈQÓ/OÓP‰Ø	˜JÔ	&ÜŸ
š
 8¬]¸7ÀAÀuÓ-MÓN‰ô Ÿ	š	¤-°ÀÓ"FÓGˆð �XÔäŸ
š
 =°*Ó=ˆÜŸ
š
 =°(Ó;‰Ø	�yÔ	 ä—<’< ÀDÔIˆÜ—<’< ¨(À$ÔGˆÜŸ
š
 =°(Ó;ˆà—m‘m×(Ñ(¨DÑ0€OçØ—,‘,˜tÓ$ˆà”Ôô —*’*˜W�^Ó,ˆÜŸ9š9ØÕ˜g�n¨WÕ5°wµ~ÀgÕ7Nó
ˆÒô 6Ø�NØ�NØÕñ	
ð ð		
ð
 "ð	
ð &ð	
ð ð	
ð ñ	
ˆÑð ÒØˆˆQ‰Ø"ˆˆ]Ññ
 ÷	 
Ü!$§¡ˆ�Ññ ô "$§¡ˆ�ÑÙ
r-   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r$   Úxr±   ÚyÚnew_xrT   rL   r¾   rJ   r)   )r*   s   "r+   r,   r,   1  sA   € ÷ Jñ JØðJàðJð ðJð ð	Jð ñJr-   c                óh  € V R2p\        RVR7       ^ RIHp	 \        P                  ! V4      pRV	P
                  RV	P                  R\        R\        R	\        R
\        RV	P                  /p
. ROpW;9   d+   VR8X  d   TpMTpV	P                  WWÄVR7      pV! V4      pV# VR8X  dF   \        V4      '       g   V^ 8:  d   \        RV 24      hV	P                  ! W3RV/VB pV! V4      pV# V P                  P                   '       g   V P#                  4       p VP                  P                   '       g   VP#                  4       pVP                  P                   '       g   VP#                  4       pV
P%                  VR4      pVf   \        RV R24      hVP'                  RR4       V! WV3/ VB pV# )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)Úextra©ÚinterpolateÚbarycentricro   Úfrom_derivativesrp   ÚcubicsplineÚakimarq   rn   )r@   r³   r¾   rm   z;order needs to be specified and greater than 0; got order: ÚkNr¦   rš   Údowncast)rd   ÚzeroÚslinearÚ	quadraticÚcubicrn   )r   rï   rò   r>   rÌ   Úbarycentric_interpolateÚkrogh_interpolateÚ_from_derivativesÚ_cubicspline_interpolateÚ_akima_interpolateÚpchip_interpolateÚinterp1dr   r0   ÚUnivariateSplineÚflagsÚ	writeableÚcopyrr   Úpop)rë   rì   rí   rT   r³   r¾   rl   rv   rð   rò   Úalt_methodsÚinterp1d_methodsr@   ÚterpÚnew_ys   &&&&&&&,       r+   rÞ   rÞ   1  s½  € ð ˆhÐ4Ð5€EÜ˜w¨eÕ4Ý!ä�JŠJ�uÓ€Eð 	�{×:Ñ:Ø�×.Ñ.ØÔ-ØÔ 1ØÔ/ØÔ#Ø�×.Ñ.ð9€KòÐð Ô!Ø�\Ô!Ø‰DàˆDØ×#Ñ#Ø�tÀð $ó 
ˆñ �U“ˆð2 €Lð1 
�8Ô	ä��;Š;˜5 Aœ:ÜØMÈeÈWÐUóð ð ×+Ò+¨AÑD°EÐD¸VÑDˆÙ�U“ˆð" €Lð �w‰w× × Ð Ø—‘“ˆAØ�w‰w× × Ð Ø—‘“ˆAØ�{‰{×$×$Ð$Ø—J‘J“LˆEØ�‰˜v tÓ,ˆØŠ<ÜÐ?À¸xÀqÐIÓJÐJð 	�
‰
�:˜tÔ$Ù�Q˜5Ñ+ FÑ+ˆØ€Lr-   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r$   Úxir±   Úyirë   Úderzint | list[int] | NoneÚextrapolaterJ   r)   )r*   s   "r+   r,   r,   ~  s:   € ÷ /ñ /Øð/àð/ð ð/ð
 
 ð/ð ñ/r-   c                ó~   € ^ RI Hp VP                  P                  pV! WP	                  R^4      W5R7      pV! V4      # )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ñ   )Úordersr  rƒ   )rï   rò   ÚBPolyrô   Úreshape)	r  r  rë   rl   r  r  rò   rT   Úms	   &&&&&&   r+   rÿ   rÿ   ~  s;   € õR "ð ×Ñ×/Ñ/€FÙˆr—:‘:˜b !Ó$¨UÔL€AáˆQ‹4€Kr-   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r$   r  r±   r  rë   r  r(   r�   r   r)   )r*   s   "r+   r,   r,   °  s:   € ÷ ,ñ ,Øð,àð,ð ð,ð 
ð	,ð
 ñ,r-   c                óF   € ^ RI Hp VP                  WVR7      pV! W#R7      # )aQ  
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€   )Únu)rï   rò   ÚAkima1DInterpolator)r  r  rë   r  r�   rò   ÚPs   &&&&&  r+   r  r  °  s'   € õP "à×'Ñ'¨°TÐ'Ó:€AáˆQŒ<Ðr-   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )r$   r  r±   r  rë   r�   r   Úbc_typez_CubicBC | tuple[Any, Any]r  z!Literal['periodic'] | bool | Noner5   r)   )r*   s   "r+   r,   r,   ß  sW   € ÷ Sñ SØðSàðSð ðSð ð	Sð
 (ðSð 3ðSð ñSr-   c                óF   € ^ RI Hp VP                  WW4VR7      pV! V4      # )ak  
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ò   ÚCubicSpline)r  r  rë   r�   r  r  rò   r  s   &&&&&&  r+   r   r   ß  s/   € õZ "à×ÑØ
�T¸ð 	 ó 	€Añ ˆQ‹4€Kr-   ra   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r$   r¨   r±   rT   rU   r�   r   r²   r|   r”   r–   r5   rµ   r)   )r*   s   "r+   r,   r,   5  sD   € ÷ )6ñ )6Øð)6à&ð)6ð ð)6ð ð	)6ð
 4ð)6ð 
ñ)6r-   c                óø   € V^ 8X  d   R MR pV P                   ^8X  d2   V^ 8w  d   \        R4      hV P                  ^.V P                  O54      p \	        V4      pV! V 4      p\        V^R7      pV! WcVR7       R# )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.
c                ó   € V # rW   r)   ©rë   s   &r+   Ú<lambda>Ú)pad_or_backfill_inplace.<locals>.<lambda>Q  s   € ™r-   c                ó   € V P                   # rW   )ÚTr#  s   &r+   r$  r%  Q  s   € ¸¿ºr-   z1cannot interpolate on an ndim == 1 with axis != 0)r„   )r²   r”   N)r„   ÚAssertionErrorr  rI   rY   Úget_fill_func)r¨   rT   r�   r²   r”   ÚtransfÚtvaluesrÁ   s   &&&&&   r+   Úpad_or_backfill_inplacer,  5  su   € ð8 # aœiŠk©m€Fð ‡{�{�aÔØ�1Œ9Ü Ð!TÓUÐUØ—‘ Ð 2 V§\¡\Ñ 2Ó3ˆä˜vÓ&€FÙ�V‹n€Gä˜ aÔ(€Dáˆ¨*×5r-   c               ó    € V ^8„  d   QhRRRR/# )r$   r%   únpt.NDArray[np.bool_] | Noner5   r&   r)   )r*   s   "r+   r,   r,   a  s   € ÷ ñ Ø.ðàñr-   c                ó$   € Vf   \        V 4      pV# rW   )r   )r¨   r%   s   &&r+   Ú_fillna_prepr0  a  s   € ð
 ‚|Ü�F‹|ˆà€Kr-   c               ó    € V ^8„  d   QhRRRR/# )r$   rÁ   r   r5   r)   )r*   s   "r+   r,   r,   l  s   € ÷ ñ ˜qð  Qñ r-   c                óV   a € \        S 4      RR V 3R lll4       p\        \        V4      # )z6
Wrapper to handle datetime64 and timedelta64 dtypes.
c               ó    € V ^8„  d   QhRRRR/# )r$   r²   r|   r”   r–   r)   )r*   s   "r+   r,   Ú*_datetimelike_compat.<locals>.__annotate__r  s"   € ÷ Kñ KàðKð 8ñKr-   c                óÞ   <€ \        V P                  4      '       dI   Vf   \        V 4      pS! V P                  R4      WVR7      w  rCVP                  V P                  4      V3# S! WW#R7      # )NrÉ   )r²   r”   r%   )r   r:   r   rË   )r¨   r²   r”   r%   ÚresultrÁ   s   &&&& €r+   Únew_funcÚ&_datetimelike_compat.<locals>.new_funcq  se   ø€ ô ˜vŸ|™|×,Ò,ØŠ|ä˜F“|�áØ—‘˜DÓ!¨ÈDô‰LˆFð —;‘;˜vŸ|™|Ó,¨dÐ2Ð2á�F°JÔJÐJr-   ©NNN)r   r   r   )rÁ   r7  s   f r+   Ú_datetimelike_compatr:  l  s2   ø€ ô
 ˆ4ƒ[÷Kñ Kó ðKô$ ”�8ÓÐr-   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# ©r$   r¨   r±   r²   r|   r”   r–   r%   r.  r5   z(tuple[np.ndarray, npt.NDArray[np.bool_]]r)   )r*   s   "r+   r,   r,   ˆ  ó:   € ÷ 
ñ 
Øð
àð
ð 4ð
ð 'ð	
ð
 .ñ
r-   c                ó˜   € \        W4      pVe"   VP                  4       '       g   \        W24       \        P                  ! WVR7       W3# ©N)r²   )r0  rÕ   Ú_fill_limit_area_1dr   Úpad_inplace©r¨   r²   r”   r%   s   &&&&r+   Ú_pad_1drC  ‡  s>   € ô ˜Ó%€DØÒ d§h¡h§j¢jÜ˜DÔ-Ü	×Ò�f¨%Õ0Øˆ<Ðr-   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# r<  r)   )r*   s   "r+   r,   r,   –  r=  r-   c                ó˜   € \        W4      pVe"   VP                  4       '       g   \        W24       \        P                  ! WVR7       W3# r?  )r0  rÕ   r@  r   Úbackfill_inplacerB  s   &&&&r+   Ú_backfill_1drG  •  s>   € ô ˜Ó%€DØÒ d§h¡h§j¢jÜ˜DÔ-Ü	×Ò˜6¨uÕ5Øˆ<Ðr-   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# r<  r)   )r*   s   "r+   r,   r,   ¤  s:   € ÷ ñ Øðàðð 4ðð 'ð	ð
 .ñr-   c                ó�   € \        W4      pVe   \        W24       V P                  '       d   \        P                  ! WVR7       W3# r?  )r0  Ú_fill_limit_area_2dÚsizer   Úpad_2d_inplacerB  s   &&&&r+   Ú_pad_2drM  £  s=   € ô ˜Ó%€DØÒÜ˜DÔ-à‡{‡{€{Ü×Ò˜V°Õ7Øˆ<Ðr-   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   r²   r|   r”   r–   r%   r.  r)   )r*   s   "r+   r,   r,   ´  s(   € ÷ ñ àðð 4ðð 'ñ	r-   c                ó˜   € \        W4      pVe   \        W24       V P                  '       d   \        P                  ! WVR7       W3#  W3# r?  )r0  rJ  rK  r   Úbackfill_2d_inplacerB  s   &&&&r+   Ú_backfill_2drQ  ³  sL   € ô ˜Ó%€DØÒÜ˜DÔ-à‡{‡{€{Ü×!Ò! &°eÕ<ð ˆ<Ðð 	Øˆ<Ðr-   c               ó$   € V ^8„  d   QhRRRRRR/# ©r$   r%   r&   r”   zLiteral['outside', 'inside']r5   rµ   r)   )r*   s   "r+   r,   r,   Æ  s$   € ÷ 'ñ 'Ø
ð'Ø-Ið'à	ñ'r-   c                óè   € V ( pVP                  4       p\        V4      VRRR1,          P                  4       ,
          ^,
          pVR8X  d   RV RV% RW^,           R% R# VR8X  d   RW^,           V% R# R# )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˜   Fr™   rƒ   )r†   r/   )r%   r”   Úneg_maskr~   r   s   &&   r+   r@  r@  Æ  sw   € ð  ˆu€HØ�O‰OÓ€EÜˆx‹=˜8¡D b D�>×0Ñ0Ó2Õ2°QÕ6€DØ�XÔØˆˆVˆeˆØ ˆ�A�XˆZÒØ	�yÔ	 Ø!&ˆ�Q�Y˜Òñ 
!r-   c               ó$   € V ^8„  d   QhRRRRRR/# rS  r)   )r*   s   "r+   r,   r,   à  s$   € ÷ ñ Ø
ðØ-Iðà	ñr-   c                ó¼  € V P                   ( pVR8X  d]   \        P                  P                  V^ R7      \        P                  P                  VRRR1,          ^ R7      RRR1,          ,          pM]\        P                  P                  V^ R7      ( \        P                  P                  VRRR1,          ^ R7      RRR1,          ( ,          pRWP                   &   R# )ag  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€   NFrƒ   )r'  r>   ÚmaximumÚ
accumulate)r%   r”   rU  Úla_masks   &&  r+   rJ  rJ  à  sÂ   € ð —‘ˆw€HØ�YÔô �J‰J×!Ñ! (°Ð!Ó3Ü�j‰j×#Ñ# H©T¨r¨T¥N¸Ð#Ó;¹D¸b¸DÕAõBñ 	ô �Z‰Z×"Ñ" 8°!Ð"Ó4Ð4Ü�z‰z×$Ñ$ X©d°¨d¥^¸!Ð$Ó<¹T¸r¸TÕBÐBõCð 	ð €D�‰ƒOr-   rc   c               ó   € V ^8„  d   QhRR/# )r$   r„   r(   r)   )r*   s   "r+   r,   r,     s   € ÷ >ñ > ñ >r-   c                ój   € \        V 4      p V^8X  d   \        V ,          # R\        R\        /V ,          # )é   ra   rc   )rY   Ú_fill_methodsrM  rQ  )rT   r„   s   &&r+   r)  r)    s2   € Ü˜vÓ&€FØˆq„yÜ˜VÕ$Ð$Ø”7˜J¬Ð5°fÕ=Ð=r-   c               ó   € V ^8„  d   QhRR/# )r$   r5   zReindexMethod | Noner)   )r*   s   "r+   r,   r,   	  s   € ÷ 9ñ 9Ð)=ñ 9r-   c                ó(   € V f   R # \        V RR7      # )NT)rR   )rY   )rT   s   &r+   Úclean_reindex_fill_methodra  	  s   € Ø‚~ÙÜ˜V°4Ô8Ð8r-   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r$   rà   r&   Úfw_limitr|   Úbw_limitr5   r±   r)   )r*   s   "r+   r,   r,     s8   € ÷ @Eñ @EØ"ð@EØ.8ð@EØDNð@Eàñ@Er-   c                óÌ  a€ \        V 4      o\        P                  ! . \        P                  R7      p\        P                  ! . \        P                  R7      pRpR V3R llpVe0   V^ 8X  d!   \        P                  ! V 4      ^ ,          pRpMV! W4      pVe4   V^ 8X  d   V# S^,
          V! V RRR1,          V4      ,
          pV^ 8X  d   V# \        P
                  ! W4VR7      # )	a  
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
r9   Tc               ó   € V ^8„  d   QhRR/# )r$   r²   r(   r)   )r*   s   "r+   r,   Ú#_interp_limit.<locals>.__annotate__5  s   € ÷ ñ ˜cñ r-   c           	     óŒ  <€ \        VS^,
          4      p\        P                  P                  P	                  W^,           4      P                  ^4      p\        P                  ! \        P                  ! V4      ^ ,          V,           \        P                  ! V RV^,            ( P                  4       ^ 8H  4      ^ ,          4      pV# )r]  N)	Úminr>   r   Ústride_tricksÚsliding_window_viewrÕ   rØ   ÚwhereÚcumsum)rà   r²   ÚwindowedÚidxÚNs   &&  €r+   ÚinnerÚ_interp_limit.<locals>.inner5  s•   ø€ Ü�E˜1˜q�5Ó!ˆÜ—6‘6×'Ñ'×;Ñ;¸GÈQÅYÓO×SÑSÐTUÓVˆÜ�jŠjÜ�HŠH�XÓ˜qÕ! EÕ)Ü�HŠH�w˜{ ¨¥Ð+Ð+×3Ñ3Ó5¸Ñ:Ó;¸AÕ>ó
ˆð ˆ
r-   NFrÓ   rƒ   )r/   r>   ÚarrayÚint64rl  Úintersect1d)rà   rc  rd  Úf_idxÚb_idxrÔ   rq  rp  s   &&&    @r+   rÙ   rÙ     sÅ   ø€ ôB 	ˆG‹€AÜ�HŠH�RœrŸx™xÔ(€EÜ�HŠH�RœrŸx™xÔ(€EØ€M÷ð ð ÒØ�qŒ=Ü—H’H˜WÓ% aÕ(ˆEØ!‰Má˜'Ó,ˆEàÒØ�qŒ=ð ˆLà˜•E™E '©$¨B¨$¥-°Ó:Õ:ˆEØ˜1Œ}Ø�ä�>Š>˜%°mÔDÐDr-   )ú
not-a-knotÚclampedÚnaturalÚperiodic)r£   r§   rj   r¨   )rd   rù   rú   rû   rü   ró   ro   rm   rn   rô   rp   rq   rö   rõ   )r£   Nr�   NNN)r£   Nr�   NNFNN)NFN)Né    F)r|  r|  )r|  rx  N)ra   r|  NNrW   r9  )r]  )RÚ__conditional_annotations__Ú__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__r2   rQ   rY   rs   rt   rx   r‰   r’   rœ   r    r®   rÆ   rÄ   r¿   rÞ   rÿ   r  r   r,  r0  r:  rC  rG  rM  rQ  r@  rJ  r^  r)  ra  rÙ   )r}  s   @r+   Ú<module>r�     s¯  øðôõ #å ÷õ ó å $÷ñ ÷
õ õ ?å 4÷õ ÷ñ ÷
ñ ÷ Ý(Ý åà!Ð"PÕQ€HˆiÓQõõLð^ 
ð%ð %(ö%ó 
ð%ð 
ô0ó 
ð0ðð  ÷ò4 3€
ò€
õ$õ&$õNõõõ* ÷F=*õ@÷,m÷`J÷Z/÷d,÷^S÷l)6÷Xõð6 ö
ó ð
ð ö
ó ð
ð öó ðð öó ðõ$'õ4ð> ˜ ¨\Ð:€÷>õ9÷@Er-   